MinePageComponent.ets 8.24 KB
import MinePagePersonalFunctionsItem from '../../viewmodel/MinePagePersonalFunctionsItem'
import MinePageCreatorFunctionsItem from '../../viewmodel/MinePageCreatorFunctionsItem'
import MinePageMoreFunctionModel from '../../viewmodel/MinePageMoreFunctionModel'
import MinePageDatasModel from '../../model/MinePageDatasModel'
import MinePageUserSimpleInfoUI from '../mine/MinePageUserSimpleInfoUI'
import MinePagePersonFunctionUI from '../mine/MinePagePersonFunctionUI'
import MinePageMoreFunctionUI from '../mine/MinePageMoreFunctionUI'
import { BreakpointSystem, DateTimeUtils, SPHelper, StringUtils, WindowModel } from 'wdKit'
import { SpConstants } from 'wdConstant'
import dataPreferences from '@ohos.data.preferences';
import { MergeRecordDialog } from '../../dialog/MergeRecordDialog'
import { TrackingPageBrowse } from 'wdTracking/src/main/ets/tracking/TrackingPageBrowse'
import { TrackConstants } from 'wdTracking/src/main/ets/common/TrackConstants'
import { BottomNavDTO } from 'wdBean/Index'

const TAG = 'MinePageComponent';

/**
 * 我的页面
 */
@Component
export struct MinePageComponent {
  //是否是创作者
  @State isCreator:boolean = false
  @State isLogin:boolean = false   //默认  false  测试放开
  @State personalData:MinePagePersonalFunctionsItem[] = []
  @State creatorData:MinePageCreatorFunctionsItem[] = []
  @State moreData:MinePageMoreFunctionModel[] = []
  scroller: Scroller = new Scroller()
  preferences: dataPreferences.Preferences | null = null;
  /**
   *  我的 底导 某个tab 对象
   */
  navItem: BottomNavDTO = {} as BottomNavDTO

  observer = (key: string) => {
    if(key == SpConstants.USER_ID){
      if(StringUtils.isEmpty(SPHelper.default.getSync(SpConstants.USER_ID,""))){
        this.isLogin = false
      }else {
        this.isLogin = true
        this.addRecordDialog()
        if(this.personalData.length > 0){
          this.getMessageData()
        }
      }
    }
  }
  mergeDialogController: CustomDialogController = new CustomDialogController({
    builder: MergeRecordDialog({
      cancel: () => {
        this.clearMergeRecord()
      },
      confirm: () => {
        this.dealMergeRecordData()
      }
    }),
    customStyle: true,
    alignment: DialogAlignment.Center,
    autoCancel: false
  })
  @Consume @Watch('pageShowForUpdateData') pageShow :number
  @Consume @Watch('pageHideForUpdateData') pageHide :number
  pageShowTime:number = 0;
  pageHideTime:number = 0;
  pageFirstCreateTime:number = 0;
  @Prop isMinePage:boolean = false;
  @StorageProp('currentBreakpoint') @Watch("currentChanged")currentBreakpoint: string = 'sm';
  private breakpointSystem = new BreakpointSystem();
  @State percent:number = 1
  @State topSafeHeight: number = AppStorage.get<number>('topSafeHeight') || 0
  @State bottomSafeHeight: number = AppStorage.get<number>('bottomSafeHeight') || 0

  currentChanged(){
    if(this.currentBreakpoint == "md" || this.currentBreakpoint == "lg"){
      //大屏幕  折叠屏 或者ipad
      this.percent = 0.7
    }else {
      this.percent = 1
    }
    console.log(TAG,"currentBreakpoint==>"+this.percent)
  }


  //第一次还没创建时候 pageShow 接收不到监听
  async pageShowForUpdateData() {
    if(this.isMinePage){
      let userid = await SPHelper.default.get(SpConstants.USER_ID,"")
      if(StringUtils.isNotEmpty(userid)){
        this.getMessageData()
      }

      this.pageShowTime = DateTimeUtils.getTimeStamp()
    }

    this.changeTopStatusBarColor(this.navItem.statusBarColor)
  }

  /**
   * 修改手机顶部状态栏颜色
   * @param statusValue
   */
  changeTopStatusBarColor(statusValue: number) {
    if (statusValue === 0) {//白色状态栏
      WindowModel.shared.setWindowSystemBarProperties({
        statusBarContentColor: '#ffffff',
      })
    } else if (statusValue === 1)  { // 黑色状态栏
      WindowModel.shared.setWindowSystemBarProperties({
        statusBarContentColor: '#000000',
      })
    }else {
      WindowModel.shared.setWindowSystemBarProperties({
        statusBarContentColor: '#000000',
      })
    }
  }

  pageHideForUpdateData(){
    if(this.isMinePage){
      this.pageHideTime = DateTimeUtils.getTimeStamp()
      let duration = 0
      if(this.pageShowTime != 0){
        duration = (this.pageHideTime - this.pageShowTime)/1000
      }else{
        duration = (this.pageHideTime - this.pageFirstCreateTime)/1000
      }
      TrackingPageBrowse.trackCommonPageExposureEnd(TrackConstants.PageName.My,TrackConstants.PageName.My,Math.floor(duration))
    }

    WindowModel.shared.setWindowSystemBarProperties({
      statusBarContentColor: '#000000',
    })
  }

  aboutToAppear(){
    this.breakpointSystem.register();
    this.pageFirstCreateTime = DateTimeUtils.getTimeStamp()

    this.getFunctionData()
    this.getUserLogin()
    this.addLoginStatusObserver()
    console.log(TAG,"currentBreakpoint==>"+this.currentBreakpoint)
    this.currentChanged()

    this.changeTopStatusBarColor(this.navItem.statusBarColor)
  }

  getMessageData(){
    MinePageDatasModel.getMessageUnReadData().then((value) => {
      if(value !=null) {
        if(value.activeCount >0 ||value.subscribeCount > 0 /*|| value.systemCount > 0*/){
          this.personalData.forEach((value) => {
            if(value.msg == "消息")
              value.isShowRedPoint = true
          })
        }else {
          this.personalData.forEach((value) => {
            if(value.msg == "消息")
              value.isShowRedPoint = false
          })
        }
      }
    }).catch((err: Error) => {
      console.log(TAG, JSON.stringify(err))
    })
  }


  async addLoginStatusObserver(){
    this.preferences = await SPHelper.default.getPreferences();
    this.preferences.on('change', this.observer);
  }

  aboutToDisappear(): void {
    this.breakpointSystem.unregister();
    if(this.preferences){
      this.preferences.off('change', this.observer);
    }
  }


  getFunctionData(){
    //个人功能数据
    this.personalData = MinePageDatasModel.getPersonalFunctionsData()
    //创作者功能数据
    // this.creatorData = MinePageDatasModel.getCreatorFunctionsData()
    //更多功能数据
    this.moreData = MinePageDatasModel.getMoreFunctionsData()
  }

  build() {
    Column(){
      Scroll(this.scroller){
        Stack(){
          Image(this.navItem?.backgroundUrl??'')
            .width('100%')
            .height(`${657 * this.percent}lpx`)
            .objectFit(ImageFit.Cover)
          this.MinePageUI()
        }.height('100%')
        .alignContent(Alignment.Top)
      }
      .setFullWidthAndHeight()
      .backgroundColor($r('app.color.color_F9F9F9'))
      .scrollable(ScrollDirection.Vertical)
      .scrollBar(BarState.Off)

    }.width("100%")
    .height("100%")

  }

  @Builder MinePageUI(){
    Column(){
      //头像层
      MinePageUserSimpleInfoUI({isLogin:this.isLogin,percent:$percent,navItem:this.navItem})
      //Grid 区域
      MinePagePersonFunctionUI({personalData:$personalData,isLogin:this.isLogin,percent:$percent,navItem:this.navItem})
      //Card
      //MinePageCardUI()
      //创作者区域

      //MinePageCreatorFunctionUI({creatorData:$creatorData})
      //更多功能
      MinePageMoreFunctionUI({moreData:$moreData,percent:$percent})
    }.width('100%')
    .height('100%')
    .padding({top:px2vp(this.topSafeHeight),bottom:px2vp(this.bottomSafeHeight)})
    .justifyContent(FlexAlign.Start)
  }

  @Styles setFullWidthAndHeight(){
    .width('100%')
    .height('100%')
  }

 async getUserLogin() {
    // let userid = SPHelper.default.getSync(SpConstants.USER_ID,"") as string
    let userid = await SPHelper.default.get(SpConstants.USER_ID,"")
    if(StringUtils.isNotEmpty(userid)){
      this.isLogin = true
      this.getMessageData()
    }else{
      this.isLogin = false
    }
  }

  addRecordDialog() {
    setTimeout(() => {
      this.dealMergeRecordDialog()
    }, 300)
  }

  dealMergeRecordDialog() {
    let commentTime = SPHelper.default.getSync(SpConstants.FIRSTCOMMENTTIME, "")
    if (StringUtils.isNotEmpty(commentTime)) {
      this.mergeDialogController.open()
    }
  }

  dealMergeRecordData() {
    MinePageDatasModel.visitorMergeComment().then(() => {
      this.mergeDialogController.close()
    }).catch(() => {
      this.mergeDialogController.close()
    })
  }

  clearMergeRecord(){
    SPHelper.default.saveSync(SpConstants.FIRSTCOMMENTTIME, "")
  }
}