MinePageComponent.ets 6.93 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 } 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'

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;
  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

  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()
    }
  }
  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))
    }
  }

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

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

  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() {
    Scroll(this.scroller){
      Stack(){
        Image($r('app.media.mine_head_bg'))
          .width('100%')
          .height(`${657 * this.percent}lpx`)
          .objectFit(ImageFit.Auto)
        this.MinePageUI()
      }
      .alignContent(Alignment.Top)
    }
    .setFullWidthAndHeight()
    .backgroundColor($r('app.color.color_F9F9F9'))
    .scrollable(ScrollDirection.Vertical)
    .scrollBar(BarState.Off)
  }


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

      //MinePageCreatorFunctionUI({creatorData:$creatorData})
      //更多功能
      MinePageMoreFunctionUI({moreData:$moreData,percent:$percent})
    }.width('100%')
    .height('100%')
    .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, "")
  }
}