MinePageComponent.ets 4.84 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 { SPHelper, StringUtils } from 'wdKit'
import { SpConstants } from 'wdConstant'
import dataPreferences from '@ohos.data.preferences';
import { MergeRecordDialog } from '../../dialog/MergeRecordDialog'

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

  aboutToAppear(){
    this.getUserLogin()
    this.getFunctionData()
    this.addLoginStatusObserver()
    this.getMessageData()
  }

  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
          })
        }
      }
    }).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 {
    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('657lpx')
          .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})
      //Grid 区域
      MinePagePersonFunctionUI({personalData:$personalData,isLogin:this.isLogin})
      //Card
      //MinePageCardUI()
      //创作者区域

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