Parcourir la source

Merge branch 'master' into basicV2-j

# Conflicts:
#	commons/basic/src/main/ets/utils/arkts/utils/YTRouter.ets
YuJing il y a 2 semaines
Parent
commit
61d873a819
89 fichiers modifiés avec 1378 ajouts et 346 suppressions
  1. 40 23
      commons/basic/Index.ets
  2. 10 0
      commons/basic/build-profile.json5
  3. 9 1
      commons/basic/oh-package.json5
  4. 0 0
      commons/basic/src/main/ets/ads/jhAd/BannerAd.ets
  5. 2 2
      commons/basic/src/main/ets/ads/jhAd/RewardAd.ets
  6. 2 2
      commons/basic/src/main/ets/ads/jhAd/StartAd.ets
  7. 47 0
      commons/basic/src/main/ets/ads/tkAd/components/TkBannerAdComp.ets
  8. 20 0
      commons/basic/src/main/ets/ads/tkAd/components/TkNativeAdComp.ets
  9. 45 0
      commons/basic/src/main/ets/ads/tkAd/components/TkStartAdComp.ets
  10. 56 0
      commons/basic/src/main/ets/ads/tkAd/utils/TkAdHelper.ets
  11. 41 0
      commons/basic/src/main/ets/ads/tkAd/utils/TkBannerAd.ets
  12. 54 0
      commons/basic/src/main/ets/ads/tkAd/utils/TkInterstitialAd.ets
  13. 67 0
      commons/basic/src/main/ets/ads/tkAd/utils/TkNativeAd.ets
  14. 90 0
      commons/basic/src/main/ets/ads/tkAd/utils/TkRewardAd.ets
  15. 76 0
      commons/basic/src/main/ets/ads/tkAd/utils/TkStartAd.ets
  16. 1 1
      commons/basic/src/main/ets/apis/YTRequest.ets
  17. 3 3
      commons/basic/src/main/ets/apis/YTUserRequest.ets
  18. 1 1
      commons/basic/src/main/ets/components/adComp/ShowBannerAd.ets
  19. 1 1
      commons/basic/src/main/ets/components/adComp/ShowJHRewardAd.ets
  20. 1 1
      commons/basic/src/main/ets/components/generalComp/AgreePrivacy.ets
  21. 1 1
      commons/basic/src/main/ets/components/generalComp/ChatList.ets
  22. 4 4
      commons/basic/src/main/ets/components/generalComp/TextSelect.ets
  23. 2 2
      commons/basic/src/main/ets/components/generalComp/YTHeader.ets
  24. 263 0
      commons/basic/src/main/ets/components/generalComp/YtProgressComp.ets
  25. 2 2
      commons/basic/src/main/ets/components/toastBuilders/AgreePrivacy.ets
  26. 5 2
      commons/basic/src/main/ets/components/toastBuilders/AlertToastComp.ets
  27. 2 1
      commons/basic/src/main/ets/components/toastBuilders/LoginToUse.ets
  28. 0 0
      commons/basic/src/main/ets/components/toastBuilders/YtDoubleConfirm.ets
  29. 30 31
      commons/basic/src/main/ets/datepicker/WheelPicker.ets
  30. 155 157
      commons/basic/src/main/ets/datepicker/YTDataPickerSelector.ets
  31. 1 1
      commons/basic/src/main/ets/models/LoginCollect.ets
  32. 2 0
      commons/basic/src/main/ets/models/UserInfo.ets
  33. 1 2
      commons/basic/src/main/ets/rdb/utils/RelationalStoreUtis.ts
  34. 3 3
      commons/basic/src/main/ets/styles/AttributeModifier.ets
  35. 23 7
      commons/basic/src/main/ets/utils/arkts/utils/ContextHelper.ets
  36. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/CopyText.ets
  37. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/DebounceLoad.ets
  38. 1 1
      commons/basic/src/main/ets/utils/arkts/utils/DownLoadFileHelper.ets
  39. 1 1
      commons/basic/src/main/ets/utils/arkts/utils/HuaWeiAuthPlugin.ets
  40. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/LazyForeachDeal.ets
  41. 2 2
      commons/basic/src/main/ets/utils/arkts/utils/NoticeUtil.ets
  42. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/PermissionControl.ets
  43. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/RegisterFontUtil.ets
  44. 1 1
      commons/basic/src/main/ets/utils/arkts/utils/ScanCodeUtil.ets
  45. 51 0
      commons/basic/src/main/ets/utils/arkts/utils/WindowHelper.ets
  46. 2 2
      commons/basic/src/main/ets/utils/arkts/utils/YTAvoid.ets
  47. 1 1
      commons/basic/src/main/ets/utils/arkts/utils/YTBindSheet.ets
  48. 1 1
      commons/basic/src/main/ets/utils/arkts/utils/YTBreakPoint.ets
  49. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/YTDate.ets
  50. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/YTDateUtil.ets
  51. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/YTLog.ets
  52. 1 1
      commons/basic/src/main/ets/utils/arkts/utils/YTPhotoHelper.ets
  53. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/YTPreferencesUtil.ets
  54. 2 1
      commons/basic/src/main/ets/utils/arkts/utils/YTRouter.ets
  55. 7 6
      commons/basic/src/main/ets/utils/arkts/utils/YTToast.ets
  56. 0 0
      commons/basic/src/main/ets/utils/arkts/utils/YtOaidUtils.ets
  57. 1 1
      commons/basic/src/main/ets/utils/arkts/wechat/WXApiWrap.ets
  58. 0 0
      commons/basic/src/main/ets/utils/ts/decorators/RouterPage.ts
  59. 26 0
      commons/basic/src/main/ets/utils/ts/utils/SingleTon.ts
  60. 63 0
      commons/basic/src/main/ets/utils/ts/utils/YTObjectUtils.ts
  61. BIN
      commons/basic/src/main/resources/base/media/bg_cat_v1.png
  62. BIN
      commons/basic/src/main/resources/base/media/bg_cat_v2.png
  63. BIN
      commons/basic/src/main/resources/base/media/bg_cat_v3.png
  64. BIN
      commons/basic/src/main/resources/base/media/bg_progress.png
  65. BIN
      commons/basic/src/main/resources/base/media/bg_toast.png
  66. BIN
      commons/basic/src/main/resources/base/media/icon_crown_blue.png
  67. BIN
      commons/basic/src/main/resources/base/media/icon_crown_gold.png
  68. BIN
      commons/basic/src/main/resources/base/media/icon_crown_red.png
  69. BIN
      commons/basic/src/main/resources/base/media/icon_crown_yellow.png
  70. BIN
      commons/basic/src/main/resources/base/media/icon_grow_no.png
  71. BIN
      commons/basic/src/main/resources/base/media/icon_grow_yes.png
  72. BIN
      commons/basic/src/main/resources/base/media/icon_right.png
  73. 49 8
      features/feature/src/main/ets/view/MainView.ets
  74. 9 7
      features/feature/src/main/ets/view/ThirdView.ets
  75. 1 0
      features/user/src/main/ets/views/RegisterOrResetPassView.ets
  76. 23 23
      hvigorfile.ts
  77. BIN
      libs/GDTUnionSDK-default-release.har
  78. BIN
      libs/KSAdSDK-3.0.5.har
  79. BIN
      libs/anythink_network_csj.har
  80. BIN
      libs/anythink_network_gdt.har
  81. BIN
      libs/anythink_network_huawei.har
  82. BIN
      libs/anythink_network_ks.har
  83. BIN
      libs/anythink_sdk.har
  84. BIN
      libs/openadsdk.har
  85. 9 1
      oh-package.json5
  86. 11 1
      products/entry/src/main/ets/entryability/EntryAbility.ets
  87. 53 40
      products/entry/src/main/ets/pages/Index.ets
  88. 3 0
      products/entry/src/main/module.json5
  89. BIN
      sign/聊天恋爱宝调试证书.p7b

+ 40 - 23
commons/basic/Index.ets

@@ -1,3 +1,21 @@
+export { RouterPage } from './src/main/ets/utils/ts/decorators/RouterPage'
+
+export { YtProgressComp } from './src/main/ets/components/generalComp/YtProgressComp'
+
+
+export { TkBannerAdComp } from './src/main/ets/ads/tkAd/components/TkBannerAdComp'
+
+export { TkStartAdComp } from './src/main/ets/ads/tkAd/components/TkStartAdComp'
+
+export { ATSplashAd } from 'anythink_sdk'
+
+export { tkStartAd, TkStartAd } from './src/main/ets/ads/tkAd/utils/TkStartAd'
+
+export { BuildATSplashAdView } from 'anythink_sdk'
+
+
+export { windowHelper } from './src/main/ets/utils/arkts/utils/WindowHelper'
+
 export { Pet } from './src/main/ets/rdb/tables/Pet'
 
 export { RDBMapper } from './src/main/ets/rdb/utils/RDBMapper'
@@ -6,13 +24,12 @@ export { RelationalStoreUtils } from './src/main/ets/rdb/utils/RelationalStoreUt
 
 export { Test } from './src/main/ets/rdb/tables/Test'
 
-export { registerFontUtil } from './src/main/ets/utils/RegisterFontUtil'
+export { registerFontUtil } from './src/main/ets/utils/arkts/utils/RegisterFontUtil'
 
-export { RouterPage } from './src/main/ets/ts'
 
-export { YTToast } from './src/main/ets/utils/YTToast'
+export { YTToast } from './src/main/ets/utils/arkts/utils/YTToast'
 
-export { ContextHelper } from './src/main/ets/utils/ContextHelper'
+export { ContextHelper } from './src/main/ets/utils/arkts/utils/ContextHelper'
 
 export { YTSwiper } from './src/main/ets/components/generalComp/YTSwiper'
 
@@ -22,23 +39,23 @@ export { TextSelect } from './src/main/ets/components/generalComp/TextSelect'
 
 export { DropDownImageInfo, DropDownInfo, TextInfo, TextInputInfo } from './src/main/ets/models/TextSelectModel'
 
-export { pushMessageUtil } from './src/main/ets/utils/NoticeUtil'
+export { pushMessageUtil } from './src/main/ets/utils/arkts/utils/NoticeUtil'
 
-export { yTPreferences } from './src/main/ets/utils/YTPreferencesUtil'
+export { yTPreferences } from './src/main/ets/utils/arkts/utils/YTPreferencesUtil'
 
-export { yTToast } from './src/main/ets/utils/YTToast'
+export { yTToast } from './src/main/ets/utils/arkts/utils/YTToast'
 
 export { PanGrid } from './src/main/ets/components/generalComp/PanGrid'
 
-export { YTPhotoHelper } from './src/main/ets/utils/YTPhotoHelper'
+export { YTPhotoHelper } from './src/main/ets/utils/arkts/utils/YTPhotoHelper'
 
 export { YTUserRequest } from './src/main/ets/apis/YTUserRequest'
 
-export { ScanCodeUtil } from './src/main/ets/utils/ScanCodeUtil'
+export { ScanCodeUtil } from './src/main/ets/utils/arkts/utils/ScanCodeUtil'
 
-export { yTBindSheet } from './src/main/ets/utils/YTBindSheet'
+export { yTBindSheet } from './src/main/ets/utils/arkts/utils/YTBindSheet'
 
-export { YTDate } from './src/main/ets/utils/YTDate'
+export { YTDate } from './src/main/ets/utils/arkts/utils/YTDate'
 
 export * from './src/main/ets/constants'
 
@@ -46,29 +63,29 @@ export * from '@ibestservices/ibest-ui'
 
 export { reviseImgHeaderBuilder } from './src/main/ets/components/generalComp/ReviseImgHeaderBuilder'
 
-export { copyText } from './src/main/ets/utils/CopyText'
+export { copyText } from './src/main/ets/utils/arkts/utils/CopyText'
 
 export { Log as YTLog } from '@abner/log'
 
-export { YtDebounce } from "./src/main/ets/utils/DebounceLoad"
+export { YtDebounce } from "./src/main/ets/utils/arkts/utils/DebounceLoad"
 
 export { ShowBannerAd } from "./src/main/ets/components/adComp/ShowBannerAd"
 
-export { BannerAd } from "./src/main/ets/ads/BannerAd"
+export { BannerAd } from "./src/main/ets/ads/jhAd/BannerAd"
 
 
 export { ShowJHRewardAd } from "./src/main/ets/components/adComp/ShowJHRewardAd"
 
-export { jHStartAd } from "./src/main/ets/ads/StartAd"
+export { jHStartAd } from "./src/main/ets/ads/jhAd/StartAd"
 
 export { AdStatus } from "./src/main/ets/constants"
 
-export { permissionController } from "./src/main/ets/utils/PermissionControl"
+export { permissionController } from "./src/main/ets/utils/arkts/utils/PermissionControl"
 
 export { YTRequest } from "./src/main/ets/apis/YTRequest"
 
 
-export { HuaweiAuthPlugin } from "./src/main/ets/utils/HuaWeiAuthPlugin"
+export { HuaweiAuthPlugin } from "./src/main/ets/utils/arkts/utils/HuaWeiAuthPlugin"
 
 export { userInfo, UserInfo } from "./src/main/ets/models/UserInfo"
 
@@ -77,26 +94,26 @@ export { YTButton } from "./src/main/ets/components/generalComp/YTButton"
 
 export { YTHeader } from "./src/main/ets/components/generalComp/YTHeader"
 
-export { YTAvoid } from "./src/main/ets/utils/YTAvoid"
+export { YTAvoid } from "./src/main/ets/utils/arkts/utils/YTAvoid"
 
-export { yTRouter } from "./src/main/ets/utils/YTRouter"
+export { yTRouter } from "./src/main/ets/utils/arkts/utils/YTRouter"
 
-export * from "./src/main/ets/utils/YTBreakPoint"
+export * from "./src/main/ets/utils/arkts/utils/YTBreakPoint"
 
 export { BasicType } from './src/main/ets/models/index'
 
 export { YTAddressSelectorDialog, DateOption } from './src/main/ets//datepicker/YTDataPickerSelector'
 
 
-export { YTDateUtil, DateFormat } from './src/main/ets/utils/YTDateUtil'
+export { YTDateUtil, DateFormat } from './src/main/ets/utils/arkts/utils/YTDateUtil'
 
-export { ytOaidUtils } from './src/main/ets/utils/YtOaidUtils'
+export { ytOaidUtils } from './src/main/ets/utils/arkts/utils/YtOaidUtils'
 
 export * from '@mumu/crop'
 
 export * from './src/main/ets/models'
 
-export { YTCalendarPicker } from './src/main/ets/components/generalComp/YTCalendarPicker.ets'
+
 
 
 

+ 10 - 0
commons/basic/build-profile.json5

@@ -1,6 +1,16 @@
 {
   "apiType": "stageMode",
   "buildOption": {
+    "arkOptions": {
+      "runtimeOnly": {
+        "packages": [
+          "anythink_network_ks",
+          "anythink_network_csj",
+          "anythink_network_gdt",
+          "anythink_network_huawei"
+        ]
+      }
+    }
   },
   "buildOptionSet": [
     {

+ 9 - 1
commons/basic/oh-package.json5

@@ -12,7 +12,15 @@
     "@ibestservices/ibest-ui": "2.0.6",
     "@tencent/wechat_open_sdk": "^1.0.0",
     "lunar": "^1.0.0",
-    "@mumu/crop": "^1.0.3"
+    "@mumu/crop": "^1.0.3",
+    "ksadsdk": "file:../../libs/KSAdSDK-3.0.5.har",
+    '@csj/openadsdk': "file:../../libs/openadsdk.har",
+    '@gdt/gdt-union-sdk': "file:../../libs/GDTUnionSDK-default-release.har",
+    'anythink_sdk': "file:../../libs/anythink_sdk.har",
+    'anythink_network_ks': "file:../../libs/anythink_network_ks.har",
+    'anythink_network_csj': "file:../../libs/anythink_network_csj.har",
+    'anythink_network_gdt': "file:../../libs/anythink_network_gdt.har",
+    'anythink_network_huawei': "file:../../libs/anythink_network_huawei.har"
   },
   "devDependencies": {},
   "dynamicDependencies": {},

+ 0 - 0
commons/basic/src/main/ets/ads/BannerAd.ets → commons/basic/src/main/ets/ads/jhAd/BannerAd.ets


+ 2 - 2
commons/basic/src/main/ets/ads/RewardAd.ets → commons/basic/src/main/ets/ads/jhAd/RewardAd.ets

@@ -2,8 +2,8 @@ import { advertising } from '@kit.AdsKit';
 import { common } from '@kit.AbilityKit';
 import { hilog } from '@kit.PerformanceAnalysisKit';
 import { BusinessError, commonEventManager, emitter } from '@kit.BasicServicesKit';
-import { AdStatus } from '../constants';
-import { YTLog, yTToast } from '../../../../Index';
+import { AdStatus } from '../../constants';
+import { YTLog, yTToast } from '../../../../../Index';
 import { IBestToast } from '@ibestservices/ibest-ui';
 
 const KEY_REWARD_DATA = "reward_ad_data";

+ 2 - 2
commons/basic/src/main/ets/ads/StartAd.ets → commons/basic/src/main/ets/ads/jhAd/StartAd.ets

@@ -3,8 +3,8 @@ import { advertising } from '@kit.AdsKit';
 import { router } from '@kit.ArkUI';
 import { hilog } from '@kit.PerformanceAnalysisKit';
 import { emitter } from '@kit.BasicServicesKit';
-import { YTLog } from '../../../../Index';
-import { AppStorageKeyCollect } from '../constants';
+import { YTLog } from '../../../../../Index';
+import { AppStorageKeyCollect } from '../../constants';
 
 export enum AdType {
   // 开屏广告的类型

+ 47 - 0
commons/basic/src/main/ets/ads/tkAd/components/TkBannerAdComp.ets

@@ -0,0 +1,47 @@
+import { ATAdError, ATAdInfo, BuildATBannerAdView } from 'anythink_sdk';
+import { TkBannerAd, tkBannerAd } from '../utils/TkBannerAd';
+
+@Component
+export struct TkBannerAdComp {
+  @State private tkBannerAd: TkBannerAd = tkBannerAd
+
+  aboutToAppear(): void {
+    // this.tkBannerAd.loadBannerAd()
+    this.tkBannerAd.atBannerAd?.loadAd({
+      context: getContext(),
+      uiContext: this.getUIContext()
+    })
+    this.tkBannerAd.onAdLoaded = () => {
+      this.tkBannerAd.isLoaded = true
+      this.tkBannerAd.bannerAd = this.tkBannerAd.atBannerAd?.getBannerAd()
+    }
+
+  }
+
+
+
+  build() {
+    if (this.tkBannerAd.isLoaded && this.tkBannerAd.bannerAd) {
+      Column() {
+        BuildATBannerAdView(this.tkBannerAd.atBannerAd!.getBannerAd()!, {
+          onAdShow: (adInfo: ATAdInfo): void => {
+            // console.log('aaa', JSON.stringify(adInfo))
+          },
+          onAdClick: (adInfo: ATAdInfo): void => {
+          },
+          onAdClose: (adInfo: ATAdInfo): void => {
+            this.tkBannerAd.isLoaded = false
+          },
+          onAdAutoRefreshed: (adInfo: ATAdInfo): void => {
+          },
+          onAdAutoRefreshFailed: (adError: ATAdError): void => {
+          }
+        })
+      }
+      .width('100%')
+      .height(50)
+      .backgroundColor(Color.Yellow)
+
+    }
+  }
+}

+ 20 - 0
commons/basic/src/main/ets/ads/tkAd/components/TkNativeAdComp.ets

@@ -0,0 +1,20 @@
+import { BuildATNativeAdExpressView } from 'anythink_sdk';
+import { tkNativeAd, TkNativeAd } from '../utils/TkNativeAd';
+
+@Component
+export struct TkNativeAdComp {
+  @State private tkNativeAd: TkNativeAd = tkNativeAd
+
+  aboutToAppear() {
+    this.tkNativeAd.showNativeAd()
+    tkNativeAd.onCloseClick = () => {
+      this.tkNativeAd.isLoaded = false
+    }
+  }
+
+  build() {
+    if (this.tkNativeAd.nativeAd && this.tkNativeAd.isLoaded) {
+      BuildATNativeAdExpressView(this.tkNativeAd.nativeAd);
+    }
+  }
+}

+ 45 - 0
commons/basic/src/main/ets/ads/tkAd/components/TkStartAdComp.ets

@@ -0,0 +1,45 @@
+import { BuildATSplashAdView } from 'anythink_sdk'
+import { windowHelper } from '../../../utils/arkts/utils/WindowHelper'
+import { tkStartAd, TkStartAd } from '../utils/TkStartAd'
+
+@Component
+export struct TkStartAdComp {
+  @BuilderParam @Require placeholderComponent: () => void
+  @State private tkStartAd: TkStartAd = tkStartAd
+  @State private isLoaded: boolean = false
+
+  aboutToAppear(): void {
+    const id = setTimeout(() => {
+      this.tkStartAd.showAd = false
+    }, 5000)
+    this.tkStartAd.loadedCallBack = () => {
+      if (this.tkStartAd.splashAd.isAdReady()) {
+        this.isLoaded = true
+      }
+      clearTimeout(id)
+    }
+    this.tkStartAd.onAdClosed = () => {
+      this.tkStartAd.showAd = false
+    }
+
+  }
+
+  build() {
+    if (this.tkStartAd.showAd) {
+      Stack() {
+        Column() {
+          this.placeholderComponent()
+        }
+        .width('100%')
+        .height('100%')
+        .backgroundColor(Color.White)
+        .justifyContent(FlexAlign.Center)
+
+        if (this.isLoaded) {
+          BuildATSplashAdView(this.tkStartAd.splashAd, { windowStage: windowHelper.windowStage })
+        }
+      }
+
+    }
+  }
+}

+ 56 - 0
commons/basic/src/main/ets/ads/tkAd/utils/TkAdHelper.ets

@@ -0,0 +1,56 @@
+import { ATInitConfiguration, ATSDK } from 'anythink_sdk';
+import { ContextHelper, IBestToast } from '../../../../../../Index';
+import { Singleton } from '../../../utils/ts/utils/SingleTon';
+import { tkBannerAd } from './TkBannerAd';
+import { tkInterstitialAd } from './TkInterstitialAd';
+import { tkRewardAd } from './TkRewardAd';
+import { tkStartAd } from './TkStartAd';
+
+
+class TkAdHelper extends Singleton {
+  private readonly configuration: ATInitConfiguration = {
+    appId: "a68e72d516d235",
+    appKey: "ac0ed243c65ffeb1e16d7766bbee902dc",
+    networkLogDebug: true
+  }
+  // demo
+  // private readonly configuration: ATInitConfiguration = {
+  //   appId: "a6704d2dda04f7",
+  //   appKey: "4f7b9ac17decb9babec83aac078742c7",
+  //   networkLogDebug: true
+  // }
+  private readonly bannerPlacementId: string = 'b68e72d9373572'
+  // private readonly bannerPlacementId: string = 'b6772057a769c3' //demo
+  private readonly interstitialPlacementId: string = 'b68e72d9426e70'
+  private readonly rewardPlacementId: string = 'b68e72d92c2b91'
+  private readonly startPlacementId: string = 'b68e72d94e2001'
+  private readonly nativePlacementId: string = 'b68e72d9214faf'
+
+  init() {
+    ATSDK.init(ContextHelper.oldContext.getApplicationContext(), this.configuration)
+    ATSDK.start()
+      .then((flag) => {
+        if (flag) {
+          tkRewardAd.init(this.rewardPlacementId)
+          tkStartAd.init(this.startPlacementId)
+          tkInterstitialAd.init(this.interstitialPlacementId)
+          tkBannerAd.init(this.bannerPlacementId)
+
+        } else {
+          IBestToast.show("广告初始化失败")
+        }
+
+      })
+
+  }
+
+  showRewardAd() {
+    tkRewardAd.showRewardAd()
+  }
+
+  showInterstitialAd() {
+    tkInterstitialAd.showInterstitialAd()
+  }
+}
+
+export const tkAdHelper = TkAdHelper.getInstance()

+ 41 - 0
commons/basic/src/main/ets/ads/tkAd/utils/TkBannerAd.ets

@@ -0,0 +1,41 @@
+import { ATAdError, ATBannerAd, BannerAd } from 'anythink_sdk';
+import { YTLog } from '../../../../../../Index';
+import { ContextHelper } from '../../../utils/arkts/utils/ContextHelper';
+import { Singleton } from '../../../utils/ts/utils/SingleTon';
+
+
+export class TkBannerAd extends Singleton {
+  declare onAdLoaded: () => void
+  bannerAd?: BannerAd;
+  isLoaded: boolean = false
+  atBannerAd?: ATBannerAd;
+  private declare placementId: string;
+
+  init(placementId: string) {
+    this.placementId = placementId
+    this.atBannerAd = new ATBannerAd(this.placementId);
+
+    this.atBannerAd.setAdListener({
+      onAdLoaded: () => {
+        this.onAdLoaded?.()
+        // this.isLoaded = true
+        // this.bannerAd = this.atBannerAd?.getBannerAd()
+      },
+      onAdLoadFailed: (adError: ATAdError): void => {
+        YTLog.error(adError, 'bannerAd')
+      }
+    });
+
+  }
+
+  loadBannerAd() {
+    this.atBannerAd?.loadAd({
+      context: ContextHelper.context,
+      uiContext: ContextHelper.UIContext
+    })
+
+
+  }
+}
+
+export const tkBannerAd = TkBannerAd.getInstance();

+ 54 - 0
commons/basic/src/main/ets/ads/tkAd/utils/TkInterstitialAd.ets

@@ -0,0 +1,54 @@
+import { ATKSConfig } from 'anythink_network_ks';
+import { ATAdError, ATAdInfo, ATInterstitialAd } from 'anythink_sdk';
+import { ContextHelper } from '../../../../../../Index';
+import { windowHelper } from '../../../utils/arkts/utils/WindowHelper';
+import { Singleton } from '../../../utils/ts/utils/SingleTon';
+
+
+class TkInterstitialAd extends Singleton {
+  private declare interstitialAd: ATInterstitialAd
+  private declare placementId: string
+
+  init(placementId: string) {
+    this.placementId = placementId
+    this.interstitialAd = new ATInterstitialAd(this.placementId)
+    this.interstitialAd.setAdListener({
+      onAdLoaded: (): void => {
+
+      },
+      onAdShow: (adInfo: ATAdInfo): void => {
+        // this.interstitialAd.loadAd({ context: ContextHelper.oldContext, localExtraMap: localExtraMap });
+      },
+      onAdClick: (adInfo: ATAdInfo): void => {
+      },
+      onAdClose: (adInfo: ATAdInfo): void => {
+        this.interstitialAd.loadAd({ context: ContextHelper.oldContext, localExtraMap: localExtraMap });
+      },
+      onAdLoadFailed: (adError: ATAdError): void => {
+      },
+      onAdVideoPlayStart: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoPlayEnd: (adInfo: ATAdInfo): void => {
+        // this.interstitialAd.loadAd({ context: ContextHelper.context, localExtraMap: localExtraMap });
+      },
+      onAdVideoPlayFailed: (adError: ATAdError, adInfo?: ATAdInfo): void => {
+      }
+    })
+
+    const localExtraMap: Record<string, Object> = {};
+    // 仅针对快手平台的广告配置
+    localExtraMap[ATKSConfig.VIDEO_AUTO_PLAY_TYPE_KEY] = 3; //设置不自动播放
+
+    this.interstitialAd.loadAd({ context: ContextHelper.oldContext, localExtraMap: localExtraMap });
+  }
+
+  showInterstitialAd() {
+    if (this.interstitialAd.isAdReady()) {
+      this.interstitialAd.showAd(ContextHelper.context, {
+        windowStage: windowHelper.windowStage
+      });
+    }
+  }
+}
+
+export const tkInterstitialAd: TkInterstitialAd = TkInterstitialAd.getInstance()

+ 67 - 0
commons/basic/src/main/ets/ads/tkAd/utils/TkNativeAd.ets

@@ -0,0 +1,67 @@
+import { ATAdError, ATAdInfo, ATNativeAd, NativeAd } from 'anythink_sdk';
+import { ContextHelper, YTLog } from '../../../../../../Index';
+import { Singleton } from '../../../utils/ts/utils/SingleTon';
+
+
+export class TkNativeAd extends Singleton {
+  declare atNativeAd: ATNativeAd
+  declare nativeAd?: NativeAd
+  isLoaded: boolean = false
+  declare onCloseClick: () => void
+  private declare placementId: string;
+
+  init(placementId: string) {
+    this.placementId = placementId;
+    this.atNativeAd = new ATNativeAd(this.placementId);
+    this.atNativeAd.setAdListener({
+      onAdLoaded: (): void => {
+        this.isLoaded = true
+
+        // this.showAd();
+      },
+      onAdLoadFailed: (adError: ATAdError): void => {
+        YTLog.error(adError)
+      },
+      onAdOtherStatus: (adInfo?: ATAdInfo | undefined): void => {
+
+      }
+    });
+    this.loadAd()
+
+  }
+
+  loadAd() {
+    this.atNativeAd.loadAd({
+      context: ContextHelper.oldContext,
+      uiContext: ContextHelper.UIContext
+    });
+  }
+
+  showNativeAd() {
+    this.nativeAd = this.atNativeAd.getNativeAd();
+    if (!this.nativeAd) {
+      return;
+    }
+    this.nativeAd.setNativeAdEventListener({
+      onAdShow: (adInfo: ATAdInfo): void => {
+      },
+      onAdClose: (adInfo: ATAdInfo): void => {
+        this.onCloseClick()
+      },
+      onAdClick: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoResume: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoPause: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoPlayStart: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoPlayEnd: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoPlayFailed: (adError: ATAdError, adInfo?: ATAdInfo | undefined): void => {
+      }
+    })
+  }
+}
+
+export const tkNativeAd = TkNativeAd.getInstance()

+ 90 - 0
commons/basic/src/main/ets/ads/tkAd/utils/TkRewardAd.ets

@@ -0,0 +1,90 @@
+import { ATKSConfig } from 'anythink_network_ks';
+import { AT_LOCAL_EXTRA_KEY, ATAdError, ATAdInfo, ATRewardVideoAd } from 'anythink_sdk';
+import { YTLog } from '../../../../../../Index';
+import { ContextHelper } from '../../../utils/arkts/utils/ContextHelper';
+import { windowHelper } from '../../../utils/arkts/utils/WindowHelper';
+import { Singleton } from '../../../utils/ts/utils/SingleTon';
+
+
+export class TkRewardAd extends Singleton {
+  private declare rewardAd: ATRewardVideoAd
+  private isLoading: boolean = false
+  private declare placementId: string
+
+  init(placementId: string) {
+    this.placementId = placementId
+    this.rewardAd = new ATRewardVideoAd(this.placementId);
+    this.rewardAd.setAdListener({
+      onAdLoaded: (): void => {
+        this.isLoading = false
+
+      },
+      onAdShow: (adInfo: ATAdInfo): void => {
+        // this.rewardAd.loadAd({
+        //   context: ContextHelper.context,
+        //   localExtraMap: localExtraMap
+        // });
+      },
+      onAdClick: (adInfo: ATAdInfo): void => {
+      },
+      onAdClose: (adInfo: ATAdInfo): void => {
+        this.rewardAd.loadAd({
+          context: ContextHelper.context,
+          localExtraMap: localExtraMap
+        });
+      },
+      onAdReward: (adInfo: ATAdInfo): void => {
+        // this.rewardAd.loadAd({
+        //   context: ContextHelper.context,
+        //   localExtraMap: localExtraMap
+        // });
+      },
+      onAdLoadFailed: (adError: ATAdError): void => {
+        YTLog.error(adError)
+        // IBestToast.show("广告加载失败")
+        this.isLoading = false
+      },
+      onAdVideoPlayStart: (adInfo: ATAdInfo): void => {
+      },
+      onAdVideoPlayEnd: (adInfo: ATAdInfo): void => {
+        this.rewardAd.loadAd({
+          context: ContextHelper.context,
+          localExtraMap: localExtraMap
+        });
+      },
+      onAdVideoPlayFailed: (adError: ATAdError, adInfo?: ATAdInfo | undefined): void => {
+      },
+      onAdOtherStatus: (adInfo?: ATAdInfo): void => {
+      }
+    });
+
+    const localExtraMap: Record<string, Object> = {};
+    //支持透传以下参数给广告平台:比如userId,详见AT_LOCAL_EXTRA_KEY
+    localExtraMap[AT_LOCAL_EXTRA_KEY.USER_ID] = "your user id";
+    // 仅针对快手平台的广告配置
+    localExtraMap[ATKSConfig.VIDEO_AUTO_PLAY_TYPE_KEY] = 3; //设置不自动播放
+
+
+    this.rewardAd.loadAd({
+      context: ContextHelper.context,
+      localExtraMap: localExtraMap
+    });
+
+    this.isLoading = true
+
+    return this.rewardAd
+  }
+
+
+  showRewardAd() {
+    if (!this.isLoading) {
+      if (this.rewardAd.isAdReady()) {
+        this.rewardAd.showAd(ContextHelper.context, {
+          windowStage: windowHelper.windowStage    //在UIAbility的onWindowStageCreate(windowStage: window.WindowStage)中获取
+        });
+      }
+    }
+  }
+}
+
+export const tkRewardAd = TkRewardAd.getInstance();

+ 76 - 0
commons/basic/src/main/ets/ads/tkAd/utils/TkStartAd.ets

@@ -0,0 +1,76 @@
+import { AT_LOCAL_EXTRA_KEY, ATAdError, ATAdInfo, ATSplashAd } from 'anythink_sdk';
+import { display } from '@kit.ArkUI';
+import { ATKSConfig } from 'anythink_network_ks';
+import { ContextHelper, YTLog } from '../../../../../../Index';
+import { Singleton } from '../../../utils/ts/utils/SingleTon';
+
+
+export class TkStartAd extends Singleton {
+  isLoaded: boolean = false
+  showAd: boolean = true
+  declare splashAd: ATSplashAd
+  declare loadedCallBack: () => void
+  declare onAdClosed: () => void
+  private declare loadAd: () => void
+  private declare placementId: string
+
+  init(placementId: string) {
+    this.placementId = placementId
+    this.splashAd = new ATSplashAd(this.placementId);
+    this.splashAd.setAdListener({
+      onAdLoaded: (isTimeout: boolean): void => {
+        if (!isTimeout) {
+          this.isLoaded = true
+          this.loadedCallBack()
+        }
+      },
+
+      onAdShow: (adInfo: ATAdInfo): void => {
+      },
+      onAdClick: (adInfo: ATAdInfo): void => {
+      },
+      onAdClose: (adInfo: ATAdInfo): void => {
+        this.onAdClosed()
+      },
+      onAdOtherStatus: ((status) => {
+        YTLog.info(status, 'StartAdStatus')
+      }),
+      onAdLoadTimeout: (): void => {
+      },
+      onAdLoadFailed: (adError: ATAdError): void => {
+        YTLog.error(adError)
+      }
+    });
+
+    const localExtraMap: Record<string, Object> = {};
+    // 仅针对快手平台的广告配置
+    localExtraMap[ATKSConfig.VIDEO_AUTO_PLAY_TYPE_KEY] = 1; //设置自动播放
+    //设置宽高,单位/vp
+    localExtraMap[AT_LOCAL_EXTRA_KEY.AD_WIDTH] = ContextHelper.UIContext.px2vp(display.getDefaultDisplaySync().width);
+    localExtraMap[AT_LOCAL_EXTRA_KEY.AD_HEIGHT] = ContextHelper.UIContext.px2vp(display.getDefaultDisplaySync().height);
+
+    this.loadAd = () => {
+      if (this.isLoaded) {
+        return
+      }
+
+
+      this.splashAd.loadAd({
+        context: ContextHelper.oldContext,
+        fetchAdTimeout: 5000,
+        localExtraMap: localExtraMap,
+      })
+
+    }
+
+    this.loadAd()
+  }
+
+  // showStartAd() {
+  //   BuildATSplashAdView(this.splashAd, {
+  //     windowStage: windowHelper.windowStage //在UIAbility的onWindowStageCreate(windowStage: window.WindowStage)中获取
+  //   })
+  // }
+}
+
+export const tkStartAd = TkStartAd.getInstance();

+ 1 - 1
commons/basic/src/main/ets/apis/YTRequest.ets

@@ -10,7 +10,7 @@ import axios, {
 import { ContextHelper, IBestToast, ReqString, YTLog } from '../../../../Index';
 import { AppStorageKeyCollect } from '../constants';
 import { userInfo } from '../models/UserInfo';
-import { yTRouter } from '../utils/YTRouter';
+import { yTRouter } from '../utils/arkts/utils/YTRouter';
 
 
 export const baseURL: string = 'https://hm.ytpm.net/prod-activity'

+ 3 - 3
commons/basic/src/main/ets/apis/YTUserRequest.ets

@@ -3,12 +3,12 @@ import { AppStorageKeyCollect } from '../constants'
 import { ReqString, ResultCallBack } from '../models'
 import { LoginCollect } from '../models/LoginCollect'
 import { UserInfo, userInfo } from '../models/UserInfo'
-import { yTRouter } from '../utils/YTRouter'
+import { yTRouter } from '../utils/arkts/utils/YTRouter'
 import { YTRequest } from './YTRequest'
 import { ContextHelper, YTLog } from '../../../../Index'
 import { AxiosProgressEvent, FormData } from '@ohos/axios'
-import { YTDate } from '../utils/YTDate'
-import { HuaweiAuthPlugin } from '../utils/HuaWeiAuthPlugin'
+import { YTDate } from '../utils/arkts/utils/YTDate'
+import { HuaweiAuthPlugin } from '../utils/arkts/utils/HuaWeiAuthPlugin'
 
 //用户相关api
 export class YTUserRequest extends YTRequest {

+ 1 - 1
commons/basic/src/main/ets/components/adComp/ShowBannerAd.ets

@@ -1,5 +1,5 @@
 import { advertising, AutoAdComponent } from '@kit.AdsKit';
-import { BannerAd } from '../../ads/BannerAd';
+import { BannerAd } from '../../ads/jhAd/BannerAd';
 import { hilog } from '@kit.PerformanceAnalysisKit';
 import { AdStatus } from '../../constants';
 

+ 1 - 1
commons/basic/src/main/ets/components/adComp/ShowJHRewardAd.ets

@@ -1,5 +1,5 @@
 import { common } from '@kit.AbilityKit';
-import { RewardAd } from '../../ads/RewardAd';
+import { RewardAd } from '../../ads/jhAd/RewardAd';
 import { emitter } from '@kit.BasicServicesKit';
 
 

+ 1 - 1
commons/basic/src/main/ets/components/generalComp/AgreePrivacy.ets

@@ -1,5 +1,5 @@
 import { BasicType } from '../../models';
-import { YTToast } from '../../utils/YTToast';
+import { YTToast } from '../../utils/arkts/utils/YTToast';
 import { YTButton } from './YTButton';
 
 @Builder

+ 1 - 1
commons/basic/src/main/ets/components/generalComp/ChatList.ets

@@ -1,5 +1,5 @@
 import { BasicType, BreakPointString, MessageType, Role } from '../../models'
-import { BreakPointType, YTBreakPoint } from '../../utils/YTBreakPoint'
+import { BreakPointType, YTBreakPoint } from '../../utils/arkts/utils/YTBreakPoint'
 
 @Component
 export struct ChatList {

+ 4 - 4
commons/basic/src/main/ets/components/generalComp/TextSelect.ets

@@ -1,5 +1,5 @@
 import { DropDownImageInfo, DropDownInfo, TextInfo, TextInputInfo } from '../../models/TextSelectModel'
-import { BreakPointSize, YTBreakPoint } from '../../utils/YTBreakPoint'
+import { BreakPointSize, YTBreakPoint } from '../../utils/arkts/utils/YTBreakPoint'
 
 
 @Component
@@ -26,6 +26,9 @@ export struct TextSelect {
   @Prop showImageName: string = '' //要展示的图片字段名
   defaultOption: ESObject //默认选中项
   public moduleHeight?: Length = 40 //组件高度
+  textInputInfo: TextInputInfo | null = null //自定义输入框配置,不传则不显示
+  @StorageProp(YTBreakPoint.BreakPointVp) breakPointSize: BreakPointSize = { width: 0, height: 0 }
+  @State selectPosition: Position = { x: 0, y: 0 }
   @State private selectHeight: Length = 0
   @State private isShowSelect: boolean = false
   @State private selectText: ResourceStr = ''
@@ -34,9 +37,6 @@ export struct TextSelect {
   }
   public textInputSubmit = (text: string) => {
   }
-  textInputInfo: TextInputInfo | null = null //自定义输入框配置,不传则不显示
-  @StorageProp(YTBreakPoint.BreakPointVp) breakPointSize: BreakPointSize = { width: 0, height: 0 }
-  @State selectPosition: Position = { x: 0, y: 0 }
 
   init() {
     if (this.selectOptions[0]) {

+ 2 - 2
commons/basic/src/main/ets/components/generalComp/YTHeader.ets

@@ -1,5 +1,5 @@
-import { YTAvoid } from '../../utils/YTAvoid'
-import { yTRouter } from '../../utils/YTRouter'
+import { YTAvoid } from '../../utils/arkts/utils/YTAvoid'
+import { yTRouter } from '../../utils/arkts/utils/YTRouter'
 
 interface Font {
   fontWeight?: string | number | FontWeight,

+ 263 - 0
commons/basic/src/main/ets/components/generalComp/YtProgressComp.ets

@@ -0,0 +1,263 @@
+import { YTAvoid } from '../../utils/arkts/utils/YTAvoid';
+
+//等级参数接口
+export interface GradeParam {
+  point: number;
+  position: number; //1-10等份的位置
+  topImage?: ResourceStr
+  selectImage?: ResourceStr
+  unSelectImage?: ResourceStr
+}
+
+@Component
+export struct YtProgressComp {
+  @Link growPoint: number
+  @State lastClickTime: number = 0;
+  @State coolDown: boolean = false;
+  @State isShowToast: boolean = false;
+  v0Point: GradeParam = {
+    point: 0,
+    position: 0,
+    topImage: $r('app.media.icon_crown_gold'),
+    selectImage: $r('app.media.icon_grow_yes'),
+    unSelectImage: $r('app.media.icon_grow_no')
+  };
+  v1Point: GradeParam = { point: 70, position: 3 };
+  v2Point: GradeParam = { point: 300, position: 10 };
+  currentPointImage: ResourceStr = $r('app.media.icon_crown_red');
+  @State private v1Area: Position = { x: 0, y: 0 }
+  @State private v2Area: Position = { x: 0, y: 0 }
+
+  getProgressWidth() {
+    // 总长度定义为299
+    const totalLength = 299;
+
+    // 各关键点的位置
+    const firstPointRight = 23; // 第一个点右侧位置
+    const secondPointLeft = Number(this.v1Area.x); // 第二个点左侧位置
+    const secondPointRight = Number(this.v1Area.x) + 23; // 第二个点右侧位置
+    const thirdPointLeft = Number(this.v2Area.x); // 第三个点左侧位置
+    let width = 0;
+
+    if (this.growPoint >= this.v2Point.point) {
+      // 成长值达到300及以上,进度条满格
+      width = totalLength;
+    } else if (this.growPoint >= this.v1Point.point) {
+      // 成长值在v1Point及以上,在第二点右侧至第三点左侧之间线性增长
+      const progressRatio =
+        Math.min((this.growPoint - this.v1Point.point) / (this.v2Point.point - this.v1Point.point), 1);
+      width = secondPointRight + (thirdPointLeft - secondPointRight) * progressRatio;
+    } else {
+      // 成长值在(this.v1Point - 10)以下,在第一点右侧至第二点左侧之间线性增长
+      if (this.growPoint <= (this.v1Point.point - 10)) {
+        const progressRatio = Math.min(this.growPoint / (this.v1Point.point - 10), 1);
+        width = firstPointRight + (secondPointLeft - firstPointRight) * progressRatio;
+      } else {
+        // 特殊处理:当成长值在60-70之间时,保持在第二点左侧
+        width = secondPointLeft;
+      }
+    }
+
+    console.log(`进度值:${this.growPoint}, 进度宽度:${width}`);
+    return Math.min(width, totalLength);
+  }
+
+  getNeedGrow() {
+    let neededPoints = 0;
+    if (this.growPoint < this.v1Point.point) {
+      neededPoints = this.v1Point.point - this.growPoint;
+    } else if (this.growPoint < this.v2Point.point) {
+      neededPoints = this.v2Point.point - this.growPoint;
+    } else {
+      return 0;
+    }
+    return neededPoints;
+  }
+
+  build() {
+    Column() {
+      RelativeContainer() {
+        Image($r('app.media.bg_progress'))
+          .width(338)
+          .height(119)
+          .alignRules({
+            top: { anchor: '__container__', align: VerticalAlign.Top },
+            middle: { anchor: '__container__', align: HorizontalAlign.Center }
+          })
+
+
+        RelativeContainer() {
+          Row()
+            .width(253 + 46)
+            .height(16)
+            .borderRadius(8)
+            .border({
+              width: 1,
+              color: '#000'
+            })
+            .zIndex(2)
+            .alignRules({
+              center: { anchor: '__container__', align: VerticalAlign.Center },
+              left: { anchor: '__container__', align: HorizontalAlign.Start }
+            })
+          Row()
+            .width(this.getProgressWidth())//根据成长值改变
+            .height(16)
+            .borderRadius(8)
+            .border({
+              width: { right: 1 },
+              color: '#000'
+            })
+            .id('progress_width')
+            .zIndex(1)
+            .backgroundColor('#5491D5')
+            .alignRules({
+              center: { anchor: '__container__', align: VerticalAlign.Center },
+              left: { anchor: '__container__', align: HorizontalAlign.Start }
+            })
+
+          Image(this.growPoint > 0 ?
+            this.v0Point.selectImage ? this.v0Point.selectImage : $r('app.media.icon_grow_yes') :
+            this.v0Point.selectImage ? this.v0Point.selectImage : $r('app.media.icon_grow_no'))
+            .width(23)
+            .aspectRatio(1)
+            .id('first_progress')
+            .alignRules({
+              center: { anchor: '__container__', align: VerticalAlign.Center },
+              left: { anchor: '__container__', align: HorizontalAlign.Start },
+              right: { anchor: '__container__', align: HorizontalAlign.End },
+              bias: { horizontal: 0 / 10 }
+            })
+            .zIndex(3)
+
+          Image(this.v0Point.topImage ? this.v0Point.topImage : $r('app.media.icon_crown_gold'))
+            .width(23)
+            .alignRules({
+              bottom: { anchor: 'first_progress', align: VerticalAlign.Top },
+              middle: { anchor: 'first_progress', align: HorizontalAlign.Center },
+            })
+            .id('icon_crown_gold')
+            .margin({ bottom: 3 })
+            .zIndex(3)
+
+          if (this.growPoint != this.v1Point.point && this.growPoint < this.v2Point.point) {
+            Image(this.currentPointImage)
+              .width(23)
+              .alignRules({
+                bottom: { anchor: 'progress_width', align: VerticalAlign.Top },
+                middle: { anchor: 'progress_width', align: HorizontalAlign.End },
+              })
+              .id('icon_crown_red')
+              .margin({ bottom: 2, right: 4 })
+              .zIndex(3)
+          }
+
+          Image(this.v1Point.topImage ? this.v1Point.topImage : $r('app.media.icon_crown_blue'))
+            .width(23)
+            .alignRules({
+              bottom: { anchor: 'second_progress', align: VerticalAlign.Top },
+              middle: { anchor: 'second_progress', align: HorizontalAlign.Center },
+            })
+            .id('icon_crown_blue')
+            .margin({ bottom: 3 })
+            .zIndex(3)
+
+          Image(this.v2Point.topImage ? this.v2Point.topImage : $r('app.media.icon_crown_yellow'))
+            .width(23)
+            .alignRules({
+              bottom: { anchor: 'third_progress', align: VerticalAlign.Top },
+              middle: { anchor: 'third_progress', align: HorizontalAlign.Center },
+            })
+            .id('icon_crown_yellow')
+            .margin({ bottom: 3 })
+            .zIndex(3)
+
+          Image(this.growPoint >= this.v1Point.point ?
+            this.v1Point.selectImage ? this.v1Point.selectImage : $r('app.media.icon_grow_yes') :
+            this.v1Point.selectImage ? this.v1Point.selectImage : $r('app.media.icon_grow_no'))
+            .width(23)
+            .aspectRatio(1)
+            .id('second_progress')
+            .alignRules({
+              center: { anchor: '__container__', align: VerticalAlign.Center },
+              left: { anchor: '__container__', align: HorizontalAlign.Start },
+              right: { anchor: '__container__', align: HorizontalAlign.End },
+              bias: { horizontal: this.v1Point.position / 10 }
+            })
+            .zIndex(3)
+            .onAreaChange((_, newArea) => {
+              console.log(`进度区域:${JSON.stringify(newArea)}`);
+              this.v1Area = newArea.position
+            })
+
+          Image(this.growPoint >= this.v2Point.point ?
+            this.v2Point.selectImage ? this.v2Point.selectImage : $r('app.media.icon_grow_yes') :
+            this.v2Point.selectImage ? this.v2Point.selectImage : $r('app.media.icon_grow_no'))
+            .width(23)
+            .aspectRatio(1)
+            .id('third_progress')
+            .alignRules({
+              center: { anchor: '__container__', align: VerticalAlign.Center },
+              left: { anchor: '__container__', align: HorizontalAlign.Start },
+              right: { anchor: '__container__', align: HorizontalAlign.End },
+              bias: { horizontal: this.v2Point.position / 10 }
+            })
+            .zIndex(3)
+            .onAreaChange((_, newArea) => {
+              console.log(`进度区域:${JSON.stringify(newArea)}`);
+              this.v2Area = newArea.position
+            })
+
+
+        }
+        .height(23)
+        .width(253 + 46)
+        .alignRules({
+          top: { anchor: '__container__', align: VerticalAlign.Top },
+          left: { anchor: '__container__', align: HorizontalAlign.Start }
+        })
+        .margin({
+          top: 23,
+          left: 19
+        })
+
+        Row({ space: 8 }) {
+          Column() {
+            Text('我的成长点')
+              .font({ size: 12, weight: FontWeight.Normal })
+              .fontColor('#000')
+            Text(this.growPoint.toString())
+              .font({ size: 24, weight: FontWeight.Bold })
+              .fontColor('#000')
+              .maxLines(1)
+              .textOverflow({ overflow: TextOverflow.MARQUEE })
+          }
+
+          Image($r('app.media.icon_right'))
+            .width(8)
+        }
+        .alignRules({
+          bottom: { anchor: '__container__', align: VerticalAlign.Bottom },
+          left: { anchor: '__container__', align: HorizontalAlign.Start }
+        })
+        .margin({
+          left: 7, bottom: 6
+        })
+        .onClick(() => {
+          //todo 点击成长
+        })
+      }
+      .height(119)
+      .width(338)
+      .margin({
+        top: YTAvoid.getTop()
+      })
+      .onClick(() => {
+
+      })
+
+    }
+    .width('100%')
+    .id('bg_cat')
+  }
+}

+ 2 - 2
commons/basic/src/main/ets/components/ToastBuilders/AgreePrivacy.ets → commons/basic/src/main/ets/components/toastBuilders/AgreePrivacy.ets

@@ -1,5 +1,5 @@
 import { BasicType } from '../../models';
-import { yTToast } from '../../utils/YTToast';
+import { yTToast } from '../../utils/arkts/utils/YTToast';
 import { YTButton } from '../generalComp/YTButton';
 
 @Builder
@@ -21,7 +21,7 @@ export function agreePrivacy(item: BasicType<undefined>) {
         btHeight: 37,
         click: () => {
           yTToast.hide()
-          
+
           item.loginType!.isAgreePrivacy = true
 
           item.loginType?.executeLogin()

+ 5 - 2
commons/basic/src/main/ets/components/ToastBuilders/AlertToastComp.ets → commons/basic/src/main/ets/components/toastBuilders/AlertToastComp.ets

@@ -1,5 +1,6 @@
 import { BasicType } from '../../models'
-import { yTToast } from '../../utils/YTToast'
+import { yTToast } from '../../utils/arkts/utils/YTToast'
+
 import { YTButton } from '../generalComp/YTButton'
 
 
@@ -22,11 +23,13 @@ struct AlertToastComp {
   confirmMessage: string = '保存并退出'
   cancelMessage: string = '取消并退出'
   isShowClose: boolean = true
+  messageAlignSelf: ItemAlign = ItemAlign.Center
+
   onConfirm: (index: string) => void = (index: string) => {
   }
+
   onCancel: () => void = () => {
   }
-  messageAlignSelf: ItemAlign = ItemAlign.Center
 
   build() {
 

+ 2 - 1
commons/basic/src/main/ets/components/ToastBuilders/LoginToUse.ets → commons/basic/src/main/ets/components/toastBuilders/LoginToUse.ets

@@ -1,5 +1,6 @@
 import { BasicType } from '../../models';
-import { yTRouter } from '../../utils/YTRouter';
+import { yTRouter } from '../../utils/arkts/utils/YTRouter';
+
 import { YTButton } from '../generalComp/YTButton';
 
 @Builder

+ 0 - 0
commons/basic/src/main/ets/components/ToastBuilders/YtDoubleConfirm.ets → commons/basic/src/main/ets/components/toastBuilders/YtDoubleConfirm.ets


+ 30 - 31
commons/basic/src/main/ets/datepicker/WheelPicker.ets

@@ -2,14 +2,13 @@
  * 滚轮式日期选择器组件
  */
 
-import { YTDateUtil } from '../utils/YTDateUtil';
+import { YTDateUtil } from '../utils/arkts/utils/YTDateUtil';
 import { UnitType } from './DatePickerEnums';
 
 @Component
 export struct WheelPicker {
   @Prop @Require date: Date;
   @State dateLocal: Date = new Date();
-  upDate: (date: Date) => void = (date: Date) => {};
   @Prop @Require minDate: Date;
   @Prop @Require maxDate: Date;
   @Prop @Require unitType: UnitType;
@@ -27,14 +26,12 @@ export struct WheelPicker {
   @State selectedDayString: string = '';
   @State debounceYear: number = -1;
   @State debounceMonth: number = -1;
-
-  @Prop highlightBackgroundColor:ResourceColor
-  @Prop highlightBorderColor:ResourceColor
-  @Prop selectedTextStyle:PickerTextStyle
-  @Prop textStyle:PickerTextStyle
-
-
-
+  @Prop highlightBackgroundColor: ResourceColor
+  @Prop highlightBorderColor: ResourceColor
+  @Prop selectedTextStyle: PickerTextStyle
+  @Prop textStyle: PickerTextStyle
+  upDate: (date: Date) => void = (date: Date) => {
+  };
 
   aboutToAppear() {
     // 设置初始选中值
@@ -94,18 +91,18 @@ export struct WheelPicker {
 
     for (let month = minMonth; month <= maxMonth; month++) {
       //补零
-      this.monthsString.push(YTDateUtil.padNumber(month)+'月')
+      this.monthsString.push(YTDateUtil.padNumber(month) + '月')
       this.months.push(month);
     }
 
     // 确保选中的月份在可选范围内
-    console.log('选择的月份是',this.selectedMonth)
+    console.log('选择的月份是', this.selectedMonth)
     if (this.selectedMonth < minMonth) {
       this.selectedMonth = minMonth;
-      this.selectedMonthString = YTDateUtil.padNumber(minMonth)+'月';
+      this.selectedMonthString = YTDateUtil.padNumber(minMonth) + '月';
     } else if (this.selectedMonth > maxMonth) {
       this.selectedMonth = maxMonth;
-      this.selectedMonthString = YTDateUtil.padNumber(minMonth)+'月';
+      this.selectedMonthString = YTDateUtil.padNumber(minMonth) + '月';
     }
   }
 
@@ -128,16 +125,16 @@ export struct WheelPicker {
 
     for (let day = minDay; day <= maxDay; day++) {
       this.days.push(day);
-      this.daysString.push(day.toString()+'日');
+      this.daysString.push(day.toString() + '日');
     }
 
     // 确保选中的日期在可选范围内
     if (this.selectedDay < minDay) {
       this.selectedDay = minDay;
-      this.selectedDayString = this.selectedDay+'日';
+      this.selectedDayString = this.selectedDay + '日';
     } else if (this.selectedDay > maxDay) {
       this.selectedDay = maxDay;
-      this.selectedDayString = this.selectedDay+'日';
+      this.selectedDayString = this.selectedDay + '日';
     }
   }
 
@@ -158,7 +155,8 @@ export struct WheelPicker {
       .height(44)
       .backgroundColor(this.highlightBackgroundColor)
       .borderRadius(44)
-      .border({width: 1, color: this.highlightBorderColor})
+      .border({ width: 1, color: this.highlightBorderColor })
+
       Row() {
         // 根据单位类型显示不同的选择器
         if (this.unitType === UnitType.YEAR || this.unitType === UnitType.YEAR_MONTH ||
@@ -180,7 +178,7 @@ export struct WheelPicker {
 
               this.debounceYear = setTimeout(() => {
 
-                this.selectedYear = Number((val as string).replace('年',''));
+                this.selectedYear = Number((val as string).replace('年', ''));
                 this.selectedYearString = val as string;
                 this.initMonths();
                 this.initDays();
@@ -188,10 +186,10 @@ export struct WheelPicker {
                 this.debounceYear = -1;
               }, 300); // 300ms 的防抖延迟
             })
- /*         Text('年')
-            .fontSize(16)
-            .fontColor(Color.Black)
-            .margin({ left: 10, right: 16 })*/
+          /*         Text('年')
+                     .fontSize(16)
+                     .fontColor(Color.Black)
+                     .margin({ left: 10, right: 16 })*/
         }
 
         if (this.unitType === UnitType.MONTH || this.unitType === UnitType.YEAR_MONTH ||
@@ -222,10 +220,10 @@ export struct WheelPicker {
 
             })
 
-   /*       Text('月')
-            .fontSize(16)
-            .margin({ left: 3, right: 16 })
-            .fontColor(Color.Black)*/
+          /*       Text('月')
+                   .fontSize(16)
+                   .margin({ left: 3, right: 16 })
+                   .fontColor(Color.Black)*/
         }
 
         if (this.unitType === UnitType.DAY || this.unitType === UnitType.MONTH_DAY ||
@@ -249,12 +247,13 @@ export struct WheelPicker {
               this.updateDate();
             })
 
-/*          Text('日')
-            .fontSize(16)
-            .fontColor(Color.Black)*/
+          /*          Text('日')
+                      .fontSize(16)
+                      .fontColor(Color.Black)*/
         }
       }
-      .justifyContent((this.unitType==UnitType.YEAR||this.unitType==UnitType.MONTH||this.unitType==UnitType.DAY)?FlexAlign.Center:FlexAlign.SpaceBetween)
+      .justifyContent((this.unitType == UnitType.YEAR || this.unitType == UnitType.MONTH ||
+        this.unitType == UnitType.DAY) ? FlexAlign.Center : FlexAlign.SpaceBetween)
       .width('100%')
       .padding({ left: 25, right: 25 })
 

+ 155 - 157
commons/basic/src/main/ets/datepicker/YTDataPickerSelector.ets

@@ -1,5 +1,5 @@
 import { YTHeader } from "../components/generalComp/YTHeader";
-import { YTDateUtil } from "../utils/YTDateUtil";
+import { YTDateUtil } from "../utils/arkts/utils/YTDateUtil";
 import { ResultType, UnitType } from "./DatePickerEnums";
 import { QNUIFloatingContainer } from "./YTUIFloatingContainer"
 import { WheelPicker } from "./WheelPicker";
@@ -14,113 +14,115 @@ export struct YTUIDatePickerComponent {
   @Prop @Require maxDate: Date; // 最大可选日期,默认10年后
   @Prop @Require unitType: UnitType; // 单位类型,默认为年月日
   @State isVisible: string = '100%'; // 是否显示选择器
+  title: string = '选择日期'
+  @Prop headerBuilder: DatePickerHeaderGlobalBuilder
+  @Prop highlightBackgroundColor: ResourceColor
+  @Prop highlightBorderColor: ResourceColor
+  @Prop selectedTextStyle: PickerTextStyle
+  @Prop textStyle: PickerTextStyle
   // 回调函数
   confirm: (date: Date) => void = () => {
   };
   close: () => void = () => {
   };
-  title:string = '选择日期'
-  @Prop headerBuilder:DatePickerHeaderGlobalBuilder
-  @Prop highlightBackgroundColor:ResourceColor
-  @Prop highlightBorderColor:ResourceColor
-  @Prop selectedTextStyle:PickerTextStyle
-  @Prop textStyle:PickerTextStyle
 
   aboutToAppear(): void {
     this.dateLocal = this.date;
-    console.log('aboutToAppear',YTDateUtil.formatDate(this.dateLocal))
-  }
-
-  // 确认选择
-  private onConfirm(): void {
-    this.confirm?.( this.dateLocal);
-    this.isVisible = '100%'
-    this.close?.()
-
-  }
-
-  // 取消选择
-  private onCancel(): void {
-    // this.confirm(ResultType.CANCEL, this.dateLocal);
-    this.isVisible = '100%'
-    this.close?.()
+    console.log('aboutToAppear', YTDateUtil.formatDate(this.dateLocal))
   }
 
   build() {
     Column() {
-        Column() {
-          //标题
-          Column({space:12}){
-            YTHeader({
-              defaultStyle:{
-                backArrow:true,
-                title:this.title,
-              },
-              headerHeight: 44,
-              headerPadding:0,
-              rightComp:()=>{
-                this.headerRightBuilder()
-              },
-              leftComp:()=>{
-                this.headerLeftBuilder()
-              }
-            })
-            Divider()
-              .strokeWidth(1)
-              .color('#DFDFDF')
-          }
-          .width('100%')
-          .padding({top:10,bottom:10})
-
-          WheelPicker({
-            date: this.date,
-            minDate: this.minDate,
-            maxDate: this.maxDate,
-            unitType: this.unitType,
-            highlightBackgroundColor:this.highlightBackgroundColor,
-            highlightBorderColor:this.highlightBorderColor,
-            textStyle:this.textStyle,
-            selectedTextStyle:this.selectedTextStyle,
-            upDate: (date: Date) => {
-              this.dateLocal = date
+      Column() {
+        //标题
+        Column({ space: 12 }) {
+          YTHeader({
+            defaultStyle: {
+              backArrow: true,
+              title: this.title,
+            },
+            headerHeight: 44,
+            headerPadding: 0,
+            rightComp: () => {
+              this.headerRightBuilder()
+            },
+            leftComp: () => {
+              this.headerLeftBuilder()
             }
           })
+          Divider()
+            .strokeWidth(1)
+            .color('#DFDFDF')
         }
-        .backgroundColor(Color.White)
         .width('100%')
-        .borderRadius({ topLeft: 14, topRight: 14 })
-        .constraintSize({minHeight:300,maxHeight:320})
-        .padding({left:20,right:20})
+        .padding({ top: 10, bottom: 10 })
+
+        WheelPicker({
+          date: this.date,
+          minDate: this.minDate,
+          maxDate: this.maxDate,
+          unitType: this.unitType,
+          highlightBackgroundColor: this.highlightBackgroundColor,
+          highlightBorderColor: this.highlightBorderColor,
+          textStyle: this.textStyle,
+          selectedTextStyle: this.selectedTextStyle,
+          upDate: (date: Date) => {
+            this.dateLocal = date
+          }
+        })
+      }
+      .backgroundColor(Color.White)
+      .width('100%')
+      .borderRadius({ topLeft: 14, topRight: 14 })
+      .constraintSize({ minHeight: 300, maxHeight: 320 })
+      .padding({ left: 20, right: 20 })
     }
     .width('100%')
     .backgroundColor(Color.White)
     // .onAppear(() => {
     //   this.isVisible = '0'
     // })
-    .borderRadius({topLeft:24,topRight:24})
+    .borderRadius({ topLeft: 24, topRight: 24 })
+
     // .translate({ y: this.isVisible })
     // .animation({ duration: 200 })
 
   }
+
   @Builder
-  headerRightBuilder(){
-    Column(){
+  headerRightBuilder() {
+    Column() {
       this.headerBuilder.headerRightBuilder.builder()
     }
-    .onClick(()=>{
+    .onClick(() => {
       this.onConfirm()
     })
   }
 
   @Builder
-  headerLeftBuilder(){
-    Column(){
+  headerLeftBuilder() {
+    Column() {
       this.headerBuilder.headerLeftBuilder.builder()
     }
-    .onClick(()=>{
+    .onClick(() => {
       this.onCancel()
     })
   }
+
+  // 确认选择
+  private onConfirm(): void {
+    this.confirm?.( this.dateLocal);
+    this.isVisible = '100%'
+    this.close?.()
+
+  }
+
+  // 取消选择
+  private onCancel(): void {
+    // this.confirm(ResultType.CANCEL, this.dateLocal);
+    this.isVisible = '100%'
+    this.close?.()
+  }
 }
 
 export class DateOption {
@@ -148,50 +150,45 @@ export class DateOption {
    * 确认选择回调
    */
   confirm?: (date: Date) => void;
-
   /**
    * 头部左侧按钮
    */
-  headerLeftBuilder?:WrappedBuilder<[]>
+  headerLeftBuilder?: WrappedBuilder<[]>
   /**
    * 头部右侧按钮
    */
-  headerRightBuilder?:WrappedBuilder<[]>
+  headerRightBuilder?: WrappedBuilder<[]>
   /**
    * 标题
    */
-  title?:string
+  title?: string
   /**
    * 高亮背景色
    */
-  highlightBackgroundColor?:ResourceColor
-
+  highlightBackgroundColor?: ResourceColor
   /**
    * 高亮边框颜色
    */
-  highlightBorderColor?:ResourceColor
-
+  highlightBorderColor?: ResourceColor
   /**
    * 选中的字体样式
    */
-  selectedTextStyle?:PickerTextStyle
-
-
+  selectedTextStyle?: PickerTextStyle
   /**
    * 非选中的字体样式
    */
-  textStyle?:PickerTextStyle
+  textStyle?: PickerTextStyle
 }
 
 @Builder
-function headerLeftBuilder(){
+function headerLeftBuilder() {
   Image($r('app.media.ic_back'))
     .width(24)
     .margin({ left: 16 })
 }
 
 @Builder
-function headerRightBuilder(){
+function headerRightBuilder() {
   Image($r("app.media.slice_sure"))
     .width(24)
 }
@@ -201,28 +198,28 @@ function headerRightBuilder(){
 export class YTDatePickerOptions extends DateOption {
   @Trace
   isEnd?: boolean = false
+  headerBuilder?: DatePickerHeaderGlobalBuilder
   cancel?: () => void = () => {
   }
-  headerBuilder?:DatePickerHeaderGlobalBuilder
 }
 
 // 组件包装器
 @Builder
 export function YTDatePickerViewBuilder(param: YTDatePickerOptions) {
-  Column(){
+  Column() {
     YTUIDatePickerComponent({
-      date: param.date|| new Date(),
-      minDate: param.minDate|| YTDateUtil.getYearToday(-10),
-      maxDate: param.maxDate||YTDateUtil.getYearToday(10),
-      unitType: param.unitType||UnitType.YEAR_MONTH_DAY,
+      date: param.date || new Date(),
+      minDate: param.minDate || YTDateUtil.getYearToday(-10),
+      maxDate: param.maxDate || YTDateUtil.getYearToday(10),
+      unitType: param.unitType || UnitType.YEAR_MONTH_DAY,
       confirm: param.confirm,
       close: param.cancel,
-      title:param.title,
-      headerBuilder:param.headerBuilder,
-      highlightBackgroundColor:param.highlightBackgroundColor,
-      highlightBorderColor:param.highlightBorderColor,
-      selectedTextStyle:param.selectedTextStyle,
-      textStyle:param.textStyle,
+      title: param.title,
+      headerBuilder: param.headerBuilder,
+      highlightBackgroundColor: param.highlightBackgroundColor,
+      highlightBorderColor: param.highlightBorderColor,
+      selectedTextStyle: param.selectedTextStyle,
+      textStyle: param.textStyle,
     });
   }
   .width('100%')
@@ -246,72 +243,13 @@ export class YTAddressSelectorDialog {
     this.uiContext = uiContext;
 
   }
-  // 拷贝传入的配置到携带picker的配置中(Builder仅支持传递一个参数)
-  private optionToPickerOption(option: DateOption): YTDatePickerOptions {
-    const dateOptionAndPicker = new YTDatePickerOptions();
-
-    // 显式复制每个属性(仅复制用户传入的值,保留未传参数的默认值)
-    if (option.date !== undefined) {
-      dateOptionAndPicker.date = option.date
-    }
-    if (option.minDate !== undefined) {
-      dateOptionAndPicker.minDate = option.minDate;
-    }
-    if (option.maxDate !== undefined) {
-      dateOptionAndPicker.maxDate = option.maxDate;
-    }
-    if (option.unitType !== undefined) {
-      dateOptionAndPicker.unitType = option.unitType;
-    }
-    if (option.headerLeftBuilder !== undefined) {
-      dateOptionAndPicker.headerLeftBuilder = option.headerLeftBuilder
-    }
-    if (option.title !== undefined) {
-      dateOptionAndPicker.title = option.title
-    }else {
-      dateOptionAndPicker.title = '选择日期'
-    }
-
-    dateOptionAndPicker.headerBuilder = new DatePickerHeaderGlobalBuilder()
-    if (option.headerLeftBuilder !== undefined) {
-      dateOptionAndPicker.headerBuilder.headerLeftBuilder = option.headerLeftBuilder
-    }else {
-      dateOptionAndPicker.headerBuilder.headerLeftBuilder = wrapBuilder(headerLeftBuilder)
-    }
-    if (option.headerRightBuilder !== undefined) {
-      dateOptionAndPicker.headerBuilder.headerRightBuilder = option.headerRightBuilder
-    }else {
-      dateOptionAndPicker.headerBuilder.headerRightBuilder = wrapBuilder(headerRightBuilder)
-    }
-    if (option.highlightBackgroundColor!==undefined) {
-      dateOptionAndPicker.highlightBackgroundColor = option.highlightBackgroundColor
-    }else {
-      dateOptionAndPicker.highlightBackgroundColor ='#FFFFF6D1'
-    }
-    if (option.highlightBorderColor!==undefined) {
-      dateOptionAndPicker.highlightBorderColor = option.highlightBorderColor
-    }else {
-      dateOptionAndPicker.highlightBorderColor =Color.Transparent
-    }
-    if (option.selectedTextStyle!==undefined) {
-      dateOptionAndPicker.selectedTextStyle = option.selectedTextStyle
-    }else {
-      dateOptionAndPicker.selectedTextStyle = { font: { size: 16,weight:500 }, color: '#CC353C46' }
-    }
-    if (option.textStyle!==undefined) {
-      dateOptionAndPicker.textStyle = option.textStyle
-    }else {
-      dateOptionAndPicker.textStyle = { font: { size: 16,weight:500 }, color: '#CC353C46' }
-    }
-    return dateOptionAndPicker;
-  }
 
   // 显示地址选择器对话框
-  public show(dateOption?:DateOption) {
-    let option:DateOption = {}
+  public show(dateOption?: DateOption) {
+    let option: DateOption = {}
     if (dateOption) {
       option = dateOption
-    }else {
+    } else {
       option = new DateOption()
     }
     const pickerOption = this.optionToPickerOption(option)
@@ -366,6 +304,66 @@ export class YTAddressSelectorDialog {
   public hide() {
     this.dialog?.dismissDialog();
   }
+
+  // 拷贝传入的配置到携带picker的配置中(Builder仅支持传递一个参数)
+  private optionToPickerOption(option: DateOption): YTDatePickerOptions {
+    const dateOptionAndPicker = new YTDatePickerOptions();
+
+    // 显式复制每个属性(仅复制用户传入的值,保留未传参数的默认值)
+    if (option.date !== undefined) {
+      dateOptionAndPicker.date = option.date
+    }
+    if (option.minDate !== undefined) {
+      dateOptionAndPicker.minDate = option.minDate;
+    }
+    if (option.maxDate !== undefined) {
+      dateOptionAndPicker.maxDate = option.maxDate;
+    }
+    if (option.unitType !== undefined) {
+      dateOptionAndPicker.unitType = option.unitType;
+    }
+    if (option.headerLeftBuilder !== undefined) {
+      dateOptionAndPicker.headerLeftBuilder = option.headerLeftBuilder
+    }
+    if (option.title !== undefined) {
+      dateOptionAndPicker.title = option.title
+    } else {
+      dateOptionAndPicker.title = '选择日期'
+    }
+
+    dateOptionAndPicker.headerBuilder = new DatePickerHeaderGlobalBuilder()
+    if (option.headerLeftBuilder !== undefined) {
+      dateOptionAndPicker.headerBuilder.headerLeftBuilder = option.headerLeftBuilder
+    } else {
+      dateOptionAndPicker.headerBuilder.headerLeftBuilder = wrapBuilder(headerLeftBuilder)
+    }
+    if (option.headerRightBuilder !== undefined) {
+      dateOptionAndPicker.headerBuilder.headerRightBuilder = option.headerRightBuilder
+    } else {
+      dateOptionAndPicker.headerBuilder.headerRightBuilder = wrapBuilder(headerRightBuilder)
+    }
+    if (option.highlightBackgroundColor !== undefined) {
+      dateOptionAndPicker.highlightBackgroundColor = option.highlightBackgroundColor
+    } else {
+      dateOptionAndPicker.highlightBackgroundColor = '#FFFFF6D1'
+    }
+    if (option.highlightBorderColor !== undefined) {
+      dateOptionAndPicker.highlightBorderColor = option.highlightBorderColor
+    } else {
+      dateOptionAndPicker.highlightBorderColor = Color.Transparent
+    }
+    if (option.selectedTextStyle !== undefined) {
+      dateOptionAndPicker.selectedTextStyle = option.selectedTextStyle
+    } else {
+      dateOptionAndPicker.selectedTextStyle = { font: { size: 16, weight: 500 }, color: '#CC353C46' }
+    }
+    if (option.textStyle !== undefined) {
+      dateOptionAndPicker.textStyle = option.textStyle
+    } else {
+      dateOptionAndPicker.textStyle = { font: { size: 16, weight: 500 }, color: '#CC353C46' }
+    }
+    return dateOptionAndPicker;
+  }
 }
 
 

+ 1 - 1
commons/basic/src/main/ets/models/LoginCollect.ets

@@ -1,6 +1,6 @@
 import { YTLog } from '../../../../Index';
 import { IBestToast } from '@ibestservices/ibest-ui';
-import { YTToast } from '../utils/YTToast';
+import { YTToast } from '../utils/arkts/utils/YTToast';
 import { AppStorageKeyCollect } from '../constants';
 import { YTUserRequest } from '../apis/YTUserRequest';
 

+ 2 - 0
commons/basic/src/main/ets/models/UserInfo.ets

@@ -206,3 +206,5 @@ export const userInfo = UserInfo.getInstance()
 
 
 
+
+

+ 1 - 2
commons/basic/src/main/ets/rdb/utils/RelationalStoreUtis.ts

@@ -118,7 +118,7 @@ export class RelationalStoreUtils {
     }
 
     if (RelationalStoreUtils.cloudLoadStore !== undefined) {
-    id =   (RelationalStoreUtils.cloudLoadStore as relationalStore.RdbStore).insertSync(table.name, insertParam)
+      id = (RelationalStoreUtils.cloudLoadStore as relationalStore.RdbStore).insertSync(table.name, insertParam)
     }
     return id
   }
@@ -203,7 +203,6 @@ export class RelationalStoreUtils {
         );
       }
       const resultSet = (RelationalStoreUtils.cloudLoadStore as relationalStore.RdbStore).querySync(predicates)
-
       // 获取列名信息
       const columnNames = resultSet.columnNames
 

+ 3 - 3
commons/basic/src/main/ets/styles/AttributeModifier.ets

@@ -1,5 +1,5 @@
 import StyleConstants from '../constants/StyleConstants'
-import { YTAvoid } from '../utils/YTAvoid'
+import { YTAvoid } from '../utils/arkts/utils/YTAvoid'
 
 export class BackgroundPageModifier implements AttributeModifier<CommonAttribute> {
   isNeedImage: boolean
@@ -23,7 +23,7 @@ export class BackgroundPageModifier implements AttributeModifier<CommonAttribute
         .backgroundImagePosition(Alignment.Center)
         .padding({
           top: this.isNeedPaddingTop ? YTAvoid.getTop() : 0,
-          bottom: this.isNeedPaddingBottom ? YTAvoid.getBottom(): 0,
+          bottom: this.isNeedPaddingBottom ? YTAvoid.getBottom() : 0,
           left: 10,
           right: 10
         })
@@ -34,7 +34,7 @@ export class BackgroundPageModifier implements AttributeModifier<CommonAttribute
         .backgroundColor($r("app.color.theme_bg_color"))
         .padding({
           top: this.isNeedPaddingTop ? YTAvoid.getTop() : 0,
-          bottom: this.isNeedPaddingBottom ? YTAvoid.getBottom(): 0,
+          bottom: this.isNeedPaddingBottom ? YTAvoid.getBottom() : 0,
           left: 10,
           right: 10
         })

+ 23 - 7
commons/basic/src/main/ets/utils/ContextHelper.ets → commons/basic/src/main/ets/utils/arkts/utils/ContextHelper.ets

@@ -13,11 +13,25 @@ import {
   yTRouter,
   YTToast,
   YTUserRequest
-} from '../../../../Index'
+} from '../../../../../../Index'
 import { identifier } from '@kit.AdsKit'
 import { BusinessError } from '@kit.BasicServicesKit'
+import { tkAdHelper } from '../../../ads/tkAd/utils/TkAdHelper'
 
 export class ContextHelper {
+  private static _oldContext: Context
+
+  static get oldContext() {
+    if (!ContextHelper._oldContext) {
+      throw new Error('oldContext is not set')
+    }
+    return ContextHelper._oldContext
+  }
+
+  private static set oldContext(value: Context) {
+    ContextHelper._oldContext = value
+  }
+
   private static declare _UIContext: UIContext
 
   static get UIContext() {
@@ -27,7 +41,7 @@ export class ContextHelper {
     return ContextHelper._UIContext
   }
 
-  static set UIContext(value: UIContext) {
+  private static set UIContext(value: UIContext) {
     ContextHelper._UIContext = value
     const context = value.getHostContext()
     if (context && !ContextHelper._context) {
@@ -45,7 +59,7 @@ export class ContextHelper {
     return ContextHelper._UIAbilityContext
   }
 
-  static set UIAbilityContext(value: common.UIAbilityContext) {
+  private static set UIAbilityContext(value: common.UIAbilityContext) {
     ContextHelper._UIAbilityContext = value
     if (!ContextHelper._context) {
       ContextHelper.context = value
@@ -62,7 +76,7 @@ export class ContextHelper {
     return ContextHelper._context
   }
 
-  static set context(value: Context) {
+  private static set context(value: Context) {
     ContextHelper._context = value
   }
 
@@ -72,16 +86,18 @@ export class ContextHelper {
    * @param context 上下文对象
    * @param isOnline 是否为在线app
    */
-  static init(context: UIContext, isOnline: boolean = true) {
+  static init(context: UIContext, oldContext: Context, isOnline: boolean = true) {
     ContextHelper.UIContext = context
+    ContextHelper._oldContext = oldContext
     PersistentStorage.persistProp(AppStorageKeyCollect.IS_STAND_ALONE_APP, isOnline)
-    if(isOnline) {
+    if (isOnline) {
       PersistentStorage.persistProp(AppStorageKeyCollect.TOKEN, '')
       YTUserRequest.refreshUserInfo()
+      tkAdHelper.init()
     } else {
       PersistentStorage.persistProp(AppStorageKeyCollect.FIRST_ENTER_APP, false)
       let isFirst = AppStorage.get(AppStorageKeyCollect.FIRST_ENTER_APP)! as boolean
-      if(!isFirst) {
+      if (!isFirst) {
         yTRouter.pushPathByName('EntryPage', null)
       }
     }

+ 0 - 0
commons/basic/src/main/ets/utils/CopyText.ets → commons/basic/src/main/ets/utils/arkts/utils/CopyText.ets


+ 0 - 0
commons/basic/src/main/ets/utils/DebounceLoad.ets → commons/basic/src/main/ets/utils/arkts/utils/DebounceLoad.ets


+ 1 - 1
commons/basic/src/main/ets/utils/DownLoadFileHelper.ets → commons/basic/src/main/ets/utils/arkts/utils/DownLoadFileHelper.ets

@@ -5,7 +5,7 @@ import { fileUri } from '@kit.CoreFileKit';
 import { photoAccessHelper } from '@kit.MediaLibraryKit';
 import { image } from '@kit.ImageKit';
 import { BusinessError, emitter } from '@kit.BasicServicesKit';
-import { YTLog } from '../../../../Index';
+import { YTLog } from '../../../../../../Index';
 
 export class DownLoadFileHelper {
   private cashPaths: string[] = []

+ 1 - 1
commons/basic/src/main/ets/utils/HuaWeiAuthPlugin.ets → commons/basic/src/main/ets/utils/arkts/utils/HuaWeiAuthPlugin.ets

@@ -2,7 +2,7 @@ import { authentication } from '@kit.AccountKit'
 import { util } from '@kit.ArkTS'
 import { hilog } from '@kit.PerformanceAnalysisKit'
 import { BusinessError } from '@kit.BasicServicesKit'
-import { YTLog } from '../../../../Index'
+import { YTLog } from '../../../../../../Index'
 
 export class HuaweiAuthPlugin {
   // 代替了用户输入用户名密码

+ 0 - 0
commons/basic/src/main/ets/utils/LazyForeachDeal.ets → commons/basic/src/main/ets/utils/arkts/utils/LazyForeachDeal.ets


+ 2 - 2
commons/basic/src/main/ets/utils/NoticeUtil.ets → commons/basic/src/main/ets/utils/arkts/utils/NoticeUtil.ets

@@ -1,9 +1,9 @@
 import { common } from '@kit.AbilityKit';
 import { notificationManager } from '@kit.NotificationKit';
 import { BusinessError } from '@kit.BasicServicesKit';
-import { YTLog } from '../../../../Index';
+import { YTLog } from '../../../../../../Index';
 import { pushService } from '@kit.PushKit';
-import { userInfo } from '../models/UserInfo';
+import { userInfo } from '../../../models/UserInfo';
 
 class PushMessageUtil {
   private static instance: PushMessageUtil

+ 0 - 0
commons/basic/src/main/ets/utils/PermissionControl.ets → commons/basic/src/main/ets/utils/arkts/utils/PermissionControl.ets


+ 0 - 0
commons/basic/src/main/ets/utils/RegisterFontUtil.ets → commons/basic/src/main/ets/utils/arkts/utils/RegisterFontUtil.ets


+ 1 - 1
commons/basic/src/main/ets/utils/ScanCodeUtil.ets → commons/basic/src/main/ets/utils/arkts/utils/ScanCodeUtil.ets

@@ -1,7 +1,7 @@
 import { BusinessError } from '@kit.BasicServicesKit';
 import { customScan, scanBarcode, scanCore } from '@kit.ScanKit';
 import { permissionController } from './PermissionControl';
-import { YTLog } from '../../../../Index';
+import { YTLog } from '../../../../../../Index';
 
 interface ScanCodeUtilInterface {
   viewControl: customScan.ViewControl

+ 51 - 0
commons/basic/src/main/ets/utils/arkts/utils/WindowHelper.ets

@@ -0,0 +1,51 @@
+import { window } from '@kit.ArkUI';
+import { AppStorageKeyCollect } from '../../../constants';
+import { Singleton } from '../../ts/utils/SingleTon';
+
+import { YTAvoid } from './YTAvoid';
+import { YTBreakPoint } from './YTBreakPoint';
+
+
+class WindowHelper extends Singleton {
+  private declare _windowStage: window.WindowStage
+
+  get windowStage() {
+    if (!this._windowStage) {
+      throw new Error("windowStage尚未赋值")
+    }
+    return this._windowStage
+  }
+
+  init(windowStage: window.WindowStage) {
+    this._windowStage = windowStage;
+    const windowClass = windowStage.getMainWindowSync()
+    windowClass.setWindowLayoutFullScreen(true)
+    const top = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height
+    const bottom = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR).bottomRect.height
+    YTAvoid.setAvoid({
+      top, bottom
+    })
+    windowClass.on('avoidAreaChange', avoidOption => {
+      if (avoidOption.type == window.AvoidAreaType.TYPE_SYSTEM) {
+        YTAvoid.setAvoid({
+          top: avoidOption.area.topRect.height
+        })
+      }
+      if (avoidOption.type == window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR) {
+        YTAvoid.setAvoid({
+          bottom: avoidOption.area.bottomRect.height
+        })
+      }
+    })
+    const windowWidth = windowClass.getWindowProperties().windowRect.width
+    const windowHeight = windowClass.getWindowProperties().windowRect.height
+    YTBreakPoint.setBreakPoint(windowWidth, windowHeight)
+    windowClass.on('windowSizeChange', size => {
+      YTBreakPoint.setBreakPoint(size.width, size.height)
+      AppStorage.setOrCreate(AppStorageKeyCollect.SCREEN_WIDTH, px2vp(size.width))
+      AppStorage.setOrCreate(AppStorageKeyCollect.SCREEN_HEIGHT, px2vp(size.height))
+    })
+  }
+}
+
+export const windowHelper: WindowHelper = WindowHelper.getInstance();

+ 2 - 2
commons/basic/src/main/ets/utils/YTAvoid.ets → commons/basic/src/main/ets/utils/arkts/utils/YTAvoid.ets

@@ -1,6 +1,6 @@
 import { window } from '@kit.ArkUI'
-import { AvoidType } from '../models'
-import { YTLog } from '../../../../Index'
+import { AvoidType } from '../../../models'
+import { YTLog } from '../../../../../../Index'
 
 export class YTAvoid {
   /**

+ 1 - 1
commons/basic/src/main/ets/utils/YTBindSheet.ets → commons/basic/src/main/ets/utils/arkts/utils/YTBindSheet.ets

@@ -1,4 +1,4 @@
-import { BasicType } from '../models';
+import { BasicType } from '../../../models';
 import { ComponentContent } from '@kit.ArkUI';
 import { Params } from './YTToast';
 import { BusinessError } from '@ohos.base';

+ 1 - 1
commons/basic/src/main/ets/utils/YTBreakPoint.ets → commons/basic/src/main/ets/utils/arkts/utils/YTBreakPoint.ets

@@ -1,4 +1,4 @@
-import { BreakPointString } from '../models'
+import { BreakPointString } from '../../../models'
 
 interface BreakPointTypeOption<T> {
   xs?: T

+ 0 - 0
commons/basic/src/main/ets/utils/YTDate.ets → commons/basic/src/main/ets/utils/arkts/utils/YTDate.ets


+ 0 - 0
commons/basic/src/main/ets/utils/YTDateUtil.ets → commons/basic/src/main/ets/utils/arkts/utils/YTDateUtil.ets


+ 0 - 0
commons/basic/src/main/ets/utils/YTLog.ets → commons/basic/src/main/ets/utils/arkts/utils/YTLog.ets


+ 1 - 1
commons/basic/src/main/ets/utils/YTPhotoHelper.ets → commons/basic/src/main/ets/utils/arkts/utils/YTPhotoHelper.ets

@@ -5,7 +5,7 @@ import { util } from '@kit.ArkTS';
 import { photoAccessHelper } from '@kit.MediaLibraryKit';
 import { image } from '@kit.ImageKit';
 import { BusinessError } from '@kit.BasicServicesKit';
-import { ContextHelper, ResultCallBack, YTLog } from '../../../../Index';
+import { ContextHelper, ResultCallBack, YTLog } from '../../../../../../Index';
 import { componentSnapshot } from '@kit.ArkUI';
 import fs from '@ohos.file.fs';
 

+ 0 - 0
commons/basic/src/main/ets/utils/YTPreferencesUtil.ets → commons/basic/src/main/ets/utils/arkts/utils/YTPreferencesUtil.ets


+ 2 - 1
commons/basic/src/main/ets/utils/YTRouter.ets → commons/basic/src/main/ets/utils/arkts/utils/YTRouter.ets

@@ -1,6 +1,7 @@
 import { IBestToast } from '@ibestservices/ibest-ui'
-import { DelPhotoParam } from '../models'
+
 import { DiaLogPageEnum, DiaLogParam, YTDiaLogModel } from '../models/YTDiaLogModel'
+import { DelPhotoParam } from '../../../models'
 
 class YTRouter extends NavPathStack {
   private static declare instance: YTRouter

+ 7 - 6
commons/basic/src/main/ets/utils/YTToast.ets → commons/basic/src/main/ets/utils/arkts/utils/YTToast.ets

@@ -1,12 +1,12 @@
 import { BusinessError } from '@kit.BasicServicesKit';
 import { ComponentContent, promptAction } from '@kit.ArkUI';
 import { UIContext } from '@ohos.arkui.UIContext';
-import { BasicType, ContextHelper, YTLog } from '../../../../Index';
-import { yTDoubleConfirm } from '../components/ToastBuilders/YtDoubleConfirm';
-import { agreePrivacy } from '../components/ToastBuilders/AgreePrivacy';
-import { LoginCollect } from '../models/LoginCollect';
-import { loginToUse } from '../components/ToastBuilders/LoginToUse';
-import { AlertToastBuilder } from '../components/ToastBuilders/AlertToastComp';
+import { BasicType, ContextHelper, YTLog } from '../../../../../../Index';
+import { yTDoubleConfirm } from '../../../components/toastBuilders/YtDoubleConfirm';
+import { agreePrivacy } from '../../../components/toastBuilders/AgreePrivacy';
+import { LoginCollect } from '../../../models/LoginCollect';
+import { loginToUse } from '../../../components/toastBuilders/LoginToUse';
+import { AlertToastBuilder } from '../../../components/toastBuilders/AlertToastComp';
 
 interface InitOption {
   context?: UIContext;
@@ -114,6 +114,7 @@ export class YTToast {
   loginToUse(item: BasicType = {}) {
     this.openToast(wrapBuilder(loginToUse), item)
   }
+
   alertToast(item: BasicType<undefined>) {
     this.openToast(wrapBuilder(AlertToastBuilder), item)
   }

+ 0 - 0
commons/basic/src/main/ets/utils/YtOaidUtils.ets → commons/basic/src/main/ets/utils/arkts/utils/YtOaidUtils.ets


+ 1 - 1
commons/basic/src/main/ets/utils/wechat/WXApiWrap.ets → commons/basic/src/main/ets/utils/arkts/wechat/WXApiWrap.ets

@@ -1,5 +1,5 @@
 import * as wxopensdk from '@tencent/wechat_open_sdk';
-import { APP_ID } from '../../constants';
+import { APP_ID } from '../../../constants';
 
 
 export type OnWXReq = (req: wxopensdk.BaseReq) => void

+ 0 - 0
commons/basic/src/main/ets/ts/index.ts → commons/basic/src/main/ets/utils/ts/decorators/RouterPage.ts


+ 26 - 0
commons/basic/src/main/ets/utils/ts/utils/SingleTon.ts

@@ -0,0 +1,26 @@
+//单例基类 所有这个类的子类均为单例且获取实例有且只能通过getInstance方法
+export abstract class Singleton {
+  private static instances: Map<Function, any> = new Map();
+  private static creatingInstance: boolean = false;
+
+  constructor() {
+    if (new.target == Singleton) {
+      throw new Error('SingletonBase cannot be instantiated directly');
+    }
+    if (!Singleton.creatingInstance) {
+      throw new Error('This class is a singleton and can only be instantiated through getInstance()');
+    }
+  }
+
+  static getInstance<T>(this: new (...args: any[]) => T): T {
+    if (!Singleton.instances.has(this)) {
+      Singleton.creatingInstance = true;
+      try {
+        Singleton.instances.set(this, new this());
+      } finally {
+        Singleton.creatingInstance = false;
+      }
+    }
+    return Singleton.instances.get(this);
+  }
+}

+ 63 - 0
commons/basic/src/main/ets/utils/ts/utils/YTObjectUtils.ts

@@ -0,0 +1,63 @@
+//试用版 有问题再改(●'◡'●)
+export class YTObjectUtils {
+  //对Object.keys的再封装 使其可以在ets中使用
+  static getObjectKeys(instance: object) {
+    return Object.keys(instance)
+  }
+
+  //对Object.values的再封装 使其可以在ets中使用
+  static getObjectValues(instance: object) {
+    return Object.values(instance)
+  }
+
+  //适用于ets类型对中括号语法被限制时使用,获取到KEY对应的value值
+  static getKeyMapValue<T>(target: object, key: string): T {
+    return target[key]
+  }
+
+  //批量赋值 在赋值被装饰器修饰的对象时需要使用返回值对其进行重新赋值
+  static mapPropertyIfExist<T extends object>(target: T, value: T) {
+    Object.keys(value).forEach(key => {
+      if (value[key] !== undefined) {
+        target[key] = value[key]
+      }
+    })
+
+    return YTObjectUtils.deepClone(target)
+  }
+
+  //不丢失方法的深拷贝 类型过于庞大复杂或批量调用此方法会存在性能问题
+  static deepClone<T extends object>(instance: T): T {
+    if (instance === null || typeof instance !== 'object') {
+      return instance;
+    }
+
+    if (instance instanceof Date) {
+      return new Date(instance.getTime()) as any;
+    }
+
+    if (instance instanceof Array) {
+      const clonedArray = [] as any[];
+      instance.forEach((item, index) => {
+        clonedArray[index] = YTObjectUtils.deepClone(item);
+      });
+      return clonedArray as T;
+    }
+
+    if (typeof instance === 'object') {
+      const clonedObj = {} as T;
+      Object.keys(instance).forEach(key => {
+        clonedObj[key] = YTObjectUtils.deepClone(instance[key]);
+      });
+      return clonedObj;
+    }
+
+    return instance;
+  }
+
+  //通过构造函数从外部直接实例化类 与ArkTs装饰器混用时可能会出现问题 建议避免
+  static newInstance<T extends object>(constructor: new (...args: any[]) => T, ...args: any[]): T {
+    return new constructor(...args);
+  }
+}
+

BIN
commons/basic/src/main/resources/base/media/bg_cat_v1.png


BIN
commons/basic/src/main/resources/base/media/bg_cat_v2.png


BIN
commons/basic/src/main/resources/base/media/bg_cat_v3.png


BIN
commons/basic/src/main/resources/base/media/bg_progress.png


BIN
commons/basic/src/main/resources/base/media/bg_toast.png


BIN
commons/basic/src/main/resources/base/media/icon_crown_blue.png


BIN
commons/basic/src/main/resources/base/media/icon_crown_gold.png


BIN
commons/basic/src/main/resources/base/media/icon_crown_red.png


BIN
commons/basic/src/main/resources/base/media/icon_crown_yellow.png


BIN
commons/basic/src/main/resources/base/media/icon_grow_no.png


BIN
commons/basic/src/main/resources/base/media/icon_grow_yes.png


BIN
commons/basic/src/main/resources/base/media/icon_right.png


+ 49 - 8
features/feature/src/main/ets/view/MainView.ets

@@ -1,11 +1,12 @@
-import { BackgroundPageModifier, DateOption, YTAddressSelectorDialog,
-  YTCalendarPicker,
-  YTDateUtil, yTRouter } from 'basic'
 import { UnitType } from 'basic/src/main/ets/datepicker/DatePickerEnums'
 import { promptAction } from '@kit.ArkUI'
+import { tkAdHelper } from 'basic/src/main/ets/ads/tkAd/utils/TkAdHelper'
+import { DateOption, TkBannerAdComp, YTAddressSelectorDialog, YTDateUtil, YtProgressComp, yTRouter } from 'basic'
 
 @Component
 export struct MainView {
+  @State point: number = 40
+
   build() {
     Column() {
       Text('打开日历')
@@ -38,17 +39,57 @@ export struct MainView {
           }
           yTDateDialog.show(dateOption) //设置好配置之后打开日历的函数
         })
-
       Button('跳转页面测试')
-        .onClick(()=>{
-          yTRouter.pushPathByName('TestRouterPage',null)
+        .onClick(() => {
+          yTRouter.pushPathByName('TestRouterPage', null)
+        })
+
+      Button('播放激励广告')
+        .onClick(() => {
+          tkAdHelper.showRewardAd()
         })
 
-      YTCalendarPicker()
+
+      Button('播放插屏广告')
+        .onClick(() => {
+          tkAdHelper.showInterstitialAd()
+        })
+
+      TkBannerAdComp()
+
+      CalendarPicker()
+
+      YtProgressComp({
+        growPoint: this.point,
+        v1Point: {
+          point: 100,
+          position: 4
+        },
+        v2Point: {
+          point: 200,
+          position: 10,
+          topImage: $r('app.media.app_icon'),
+        }
+      })
+      Row() {
+        Button('+10')
+          .onClick(() => {
+            this.point += 10
+          })
+        Button('-10')
+          .onClick(() => {
+            this.point -= 10
+          })
+      }
     }
-    .attributeModifier(new BackgroundPageModifier(true))
+    .width('100%')
+    .height('100%')
 
   }
+
+  // .attributeModifier(new BackgroundPageModifier(true))
+
+
 }
 
 @Builder

+ 9 - 7
features/feature/src/main/ets/view/ThirdView.ets

@@ -1,12 +1,14 @@
-import { Pet, RDBMapper, RelationalStoreUtils, Test } from "basic";
+import { Pet, RDBMapper, RelationalStoreUtils, Test } from 'basic';
 
 @Component
 export struct ThirdView {
   @State list: Test[] = []
   @State list2: Pet[] = []
-  id1:number = 0
-  id2:number = 0
-  petMapper:RDBMapper<Pet> = new RDBMapper(Pet)
+  id1: number = 0
+  id2: number = 0
+  petMapper: RDBMapper<Pet> = new RDBMapper(Pet)
+  petMapper2: RDBMapper<Test> = new RDBMapper(Test)
+
   build() {
     Column() {
       Row() {
@@ -50,7 +52,7 @@ export struct ThirdView {
       Row() {
         Button('测试新增2')
           .onClick(() => {
-            this.petMapper.insert( { name: 'test1', tag: '标签' }, (id:number) => {
+            this.petMapper.insert({ name: 'test1', tag: '标签' }, (id: number) => {
               console.log('insert success');
               this.id2 = id
               let list = this.petMapper.getListSync()
@@ -61,10 +63,10 @@ export struct ThirdView {
 
         Button('测试修改2')
           .onClick(() => {
-            this.petMapper.updateItemById({ id: this.id2, name: '测试1修改',tag: '标签2' }, () => {
+            this.petMapper.updateItemById({ id: this.id2, name: '测试1修改', tag: '标签2' }, () => {
               console.log('insert success');
               let list = this.petMapper.getListSync()
-              this.list2= list
+              this.list2 = list
               console.log('list:', JSON.stringify(list))
             })
           })

+ 1 - 0
features/user/src/main/ets/views/RegisterOrResetPassView.ets

@@ -70,6 +70,7 @@ export struct RegisterOrResetPassComp {
         .fontColor('#FFEA4A18')
 
 
+
       YTButton({
         //: '立即重置'
         btContent: this.calcButtonContent(),

+ 23 - 23
hvigorfile.ts

@@ -479,34 +479,34 @@ function rDBPlugin(): HvigorPlugin {
     }
 }
 
-function forwardingPort(){
-    return {
-        pluginId: 'customPlugin',
-        apply(node: HvigorNode) {
-            try {
-                var connectKeys = execSync('hdc list targets', { encoding: 'utf-8' }).split('\n');
-
-                var targetKey = connectKeys[0].trim();
-
-                var operation = `hdc -t ${targetKey} fport rm tcp:8080 tcp:8080`
-                var result = execSync(operation, { encoding: 'utf-8' })
-                console.log(`执行命令 ${operation}, 删除端口结果:${result.trim()}`);
-
-                operation = `hdc -t ${targetKey} fport tcp:8080 tcp:8080`
-                result = execSync(operation, { encoding: 'utf-8' })
-                console.log(`执行命令 ${operation}, 转发端口结果:${result.trim()}`);
-            } catch (error) {
-                console.error(`执行失败: ${error.message}`);
-            }
-        }
-    }
-}
+// function forwardingPort(){
+//     return {
+//         pluginId: 'customPlugin',
+//         apply(node: HvigorNode) {
+//             try {
+//                 var connectKeys = execSync('hdc list targets', { encoding: 'utf-8' }).split('\n');
+//
+//                 var targetKey = connectKeys[0].trim();
+//
+//                 var operation = `hdc -t ${targetKey} fport rm tcp:8080 tcp:8080`
+//                 var result = execSync(operation, { encoding: 'utf-8' })
+//                 console.log(`执行命令 ${operation}, 删除端口结果:${result.trim()}`);
+//
+//                 operation = `hdc -t ${targetKey} fport tcp:8080 tcp:8080`
+//                 result = execSync(operation, { encoding: 'utf-8' })
+//                 console.log(`执行命令 ${operation}, 转发端口结果:${result.trim()}`);
+//             } catch (error) {
+//                 console.error(`执行失败: ${error.message}`);
+//             }
+//         }
+//     }
+// }
 
 export default {
     system: appTasks,  /* Built-in plugin of Hvigor. It cannot be modified. */
     plugins: [
         customPlugin(),  // 应用自定义Plugin
         rDBPlugin(),
-        forwardingPort()
+        // forwardingPort()
     ]         /* Custom plugin to extend the functionality of Hvigor. */
 }

BIN
libs/GDTUnionSDK-default-release.har


BIN
libs/KSAdSDK-3.0.5.har


BIN
libs/anythink_network_csj.har


BIN
libs/anythink_network_gdt.har


BIN
libs/anythink_network_huawei.har


BIN
libs/anythink_network_ks.har


BIN
libs/anythink_sdk.har


BIN
libs/openadsdk.har


+ 9 - 1
oh-package.json5

@@ -1,11 +1,19 @@
 {
   "modelVersion": "5.0.2",
   "description": "Please describe the basic information.",
+  "buildOption": {
+  },
   "dependencies": {
     "@hadss/debug-db": "^1.0.0-rc.10"
   },
   "devDependencies": {
     "@ohos/hypium": "1.0.21",
-    "@ohos/hamock": "1.0.0"
+    "@ohos/hamock": "1.0.0",
+  },
+  "overrides": {
+    'ksadsdk': "file:./libs/KSAdSDK-3.0.5.har",
+    '@csj/openadsdk': "file:./libs/openadsdk.har",
+    '@gdt/gdt-union-sdk': "file:./libs/GDTUnionSDK-default-release.har",
+    'anythink_sdk': "file:./libs/anythink_sdk.har"
   }
 }

+ 11 - 1
products/entry/src/main/ets/entryability/EntryAbility.ets

@@ -2,7 +2,13 @@ import { AbilityConstant, bundleManager, ConfigurationConstant, UIAbility, Want
 import { hilog } from '@kit.PerformanceAnalysisKit';
 import { window } from '@kit.ArkUI';
 import {
-  AppStorageKeyCollect, IBestInit, RelationalStoreUtils, YTAvoid, YTBreakPoint, YTLog
+  AppStorageKeyCollect,
+  IBestInit,
+  RelationalStoreUtils,
+  windowHelper,
+  YTAvoid,
+  YTBreakPoint,
+  YTLog
 } from 'basic';
 import BuildProfile from 'BuildProfile';
 
@@ -23,6 +29,8 @@ export default class EntryAbility extends UIAbility {
         hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
         return;
       }
+      windowHelper.init(windowStage)
+
 
       // 动态引入: 仅在 DEBUG 模式下引入该模块
       if (BuildProfile.DEBUG) {
@@ -51,6 +59,8 @@ export default class EntryAbility extends UIAbility {
         .catch((err: Error) => {
           YTLog.error(err)
         })
+
+      RelationalStoreUtils.initReplayCloudStore(this.context)
       const windowClass = windowStage.getMainWindowSync()
       windowClass.setWindowLayoutFullScreen(true)
       const top = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM).topRect.height

+ 53 - 40
products/entry/src/main/ets/pages/Index.ets

@@ -1,4 +1,6 @@
-import { BasicType, ContextHelper, YTAvoid, yTRouter } from 'basic';
+import {
+  BasicType, ContextHelper, TkBannerAdComp, TkStartAdComp, YTAvoid, yTRouter
+} from 'basic';
 import { Mine } from 'user/src/main/ets/views/Mine';
 import { MainView, SecondView, ThirdView } from 'feature';
 
@@ -33,56 +35,67 @@ struct Index {
   tabsController: TabsController = new TabsController()
 
   aboutToAppear(): void {
-    // 设置为 false 表示为单机 app
-    ContextHelper.init(this.getUIContext(), false)
+    ContextHelper.init(this.getUIContext(), getContext())
+
+
   }
 
   build() {
-    Navigation(yTRouter) {
-      Column() {
-        Tabs({ controller: this.tabsController }) {
-          ForEach(this.contentList, (_: BasicType<undefined>, index) => {
-            TabContent() {
-              if (index == 0) {
-                //放对应组件
-                MainView()
-              } else if (index == 1) {
-                SecondView()
-              } else if (index == 2) {
-                ThirdView()
-              } else {
-                Mine()
+
+    Stack() {
+      Navigation(yTRouter) {
+        Column() {
+          Tabs({ controller: this.tabsController }) {
+            ForEach(this.contentList, (_: BasicType<undefined>, index) => {
+              TabContent() {
+                if (index == 0) {
+                  //放对应组件
+                  MainView()
+                } else if (index == 1) {
+                  SecondView()
+                } else if (index == 2) {
+                  ThirdView()
+                } else {
+                  Mine()
+                }
               }
-            }
+            })
+          }
+          .onChange((index) => {
+            this.currentIndex = index
           })
-        }
-        .onChange((index) => {
-          this.currentIndex = index
-        })
-        .barHeight(0)
-        .layoutWeight(1)
-        .scrollable(false)
+          .barHeight(0)
+          .layoutWeight(1)
+          .scrollable(false)
 
-        Row() {
-          ForEach(this.contentList, (item: BasicType<undefined>, index) => {
-            this.barBuilder((() => {
-              item.index = index
-              return item
-            })())
-          })
+          Row() {
+            ForEach(this.contentList, (item: BasicType<undefined>, index) => {
+              this.barBuilder((() => {
+                item.index = index
+                return item
+              })())
+            })
+          }
+          .justifyContent(FlexAlign.SpaceAround)
+          .width('100%')
+          .padding({ bottom: this.bottom })
+          .shadow({ offsetY: -13, radius: 16, color: '#0A000000' })
         }
-        .justifyContent(FlexAlign.SpaceAround)
         .width('100%')
-        .padding({ bottom: this.bottom })
-        .shadow({ offsetY: -13, radius: 16, color: '#0A000000' })
+        .height('100%')
+        .backgroundColor(Color.White)
+
+      }
+      .mode(NavigationMode.Stack)
+      .hideToolBar(true)
+
+      TkStartAdComp() {
+        Text('占位组件')
       }
-      .width('100%')
-      .height('100%')
-      .backgroundColor(Color.White)
+
 
     }
-    .mode(NavigationMode.Stack)
-    .hideToolBar(true)
+
   }
 
   @Builder

+ 3 - 0
products/entry/src/main/module.json5

@@ -15,6 +15,9 @@
       {
         "name": "ohos.permission.INTERNET"
       },
+      {
+        "name": "ohos.permission.GET_NETWORK_INFO"   //访问⽹络信息  可选,影响转化
+      },
       {
         "name": "ohos.permission.APP_TRACKING_CONSENT",
         "reason": "$string:reason",

BIN
sign/聊天恋爱宝调试证书.p7b