EditInfoViewModel.ets 8.74 KB

import {
  editItem,
  EditListInfo, editModel, editModelParams,
  peopleItem,
  peopleItemModel,
  WDEditDataModelType } from '../model/EditInfoModel';
import { HttpUrlUtils, ResponseDTO, WDHttp } from 'wdNetwork';
import { Logger, ResourcesUtils } from 'wdKit';
import { AreaListManageModel, AreaListModel,AreaListData } from '../model/AreaListModel';
import promptAction from '@ohos.promptAction';

const TAG = "EditInfoViewModel"

class EditInfoViewModel {
  private static instance: EditInfoViewModel;
  editListData:EditListInfo[] = []
  params: editModelParams = {}
  /**
   * 单例模式
   * @returns
   */
  public static getInstance(): EditInfoViewModel {
    if (!EditInfoViewModel.instance) {
      EditInfoViewModel.instance = new EditInfoViewModel();
    }
    return EditInfoViewModel.instance;
  }

  BaseGetRequest(requestUrl:string){
    requestUrl = HttpUrlUtils.getHost() + requestUrl
    return WDHttp.get<editItem>(requestUrl)
  }

  BasePostRequest(requestUrl:string,params: object){
    requestUrl = HttpUrlUtils.getHost() + requestUrl
    return WDHttp.post<ResponseDTO>(requestUrl,params)
  }


  getEditListInfo(item?:editModel):EditListInfo[]{
    if (item?.userType === 1) {
      this.editListData = [
        new EditListInfo('昵称',item&&item.userName.length > 0?item.userName:'待完善'),
        new EditListInfo('简介',item&&item.userExtend.introduction?item.userExtend.introduction:'待完善'),
        new EditListInfo('地区',item&&item.userExtend.address?item.userExtend.address:'待完善'),
        new EditListInfo('生日',item&&item.userExtend.birthday?item.userExtend.birthday:'待完善'),
        new EditListInfo('性别',item?(item.userExtend.sex === 0?'待完善':(item.userExtend.sex === 1?'男':'女')):'待完善'),]
    }else {
      this.editListData = [
        new EditListInfo('昵称',item&&item.userName.length > 0?item.userName:'待完善'),
        new EditListInfo('简介',item&&item.userExtend.introduction?item.userExtend.introduction:'待完善'),
        new EditListInfo('地区',item&&item.userExtend.address?item.userExtend.address:'待完善')]
    }
    return this.editListData
  }

  ///1普通用户
  queryAccountOwnerInfo(context: Context):PromiseLike<editModel>{
    return new Promise(((success, error) => {
      this.BaseGetRequest(HttpUrlUtils.APPOINTMENT_QueryUserDetail_PATH).then((editDTO:editItem) =>{
        if (editDTO.code == 0) {
          success(editDTO.data)
        }else {
          // success(this.GetqueryAccountOwnerLocal(context))
        }
      }).catch((error: Error) => {
        Logger.info(TAG,'queryAccountOwnerInfo','EditInfoViewModel')
        // success(this.GetqueryAccountOwnerLocal(context))
      })
    }))
  }

  BasePeopleGetRequest(requestUrl:string){
    requestUrl = HttpUrlUtils.getHost() + requestUrl
    return WDHttp.get<peopleItem>(requestUrl)
  }

  queryPeopleAccountOwnerInfo(context: Context):PromiseLike<peopleItemModel>{
    return new Promise(((success, error) => {
      this.BasePeopleGetRequest(HttpUrlUtils.APPOINTMENT_AccountOwner_PATH).then((editDTO:peopleItem) =>{
        if (editDTO.code == 0) {
          success(editDTO.data)
        }else {
          // success(this.GetqueryAccountOwnerLocal(context))
        }
      }).catch((error: Error) => {
        Logger.info(TAG,'queryAccountOwnerInfo','EditInfoViewModel')
        // success(this.GetqueryAccountOwnerLocal(context))
      })
    }))
  }

  async GetqueryAccountOwnerLocal(context: Context): Promise<editModel> {
    Logger.info(TAG, `getBottomNavDataMock start`);
    let compRes: ResponseDTO<editModel> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<editModel>>(context,'userInfo.json');
    if (!compRes || !compRes.data) {
      Logger.info(TAG, `getAppointmentListDataLocal compRes  is empty`);
      return new editModel()
    }
    Logger.info(TAG, `getAppointmentListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`);
    return compRes.data
  }

  getAreaList(context: Context):PromiseLike<AreaListModel[]>{
    return new Promise((success, error) => {
      WDHttp.get<AreaListData>(HttpUrlUtils.getHost() + HttpUrlUtils.APPOINTMENT_userArea_PATH).then((navResDTO: AreaListData) => {
        if (navResDTO.code == 0) {
          success(navResDTO.data)
        }else {
          success(this.getAreaListLocal(context))
        }
      }).catch((error: Error) => {
          Logger.info(TAG,'executeCollcet','ResponseDTO')
            success(this.getAreaListLocal(context))
        })
    })
  }

  getLocalAreaList(context: Context):PromiseLike<AreaListModel[]>{
    return new Promise((success, error) => {
      success(this.getAreaListLocal(context))
    })
  }

  async getAreaListLocal(context: Context): Promise<AreaListModel[]> {
    Logger.info(TAG, `getBottomNavDataMock start`);
    let compRes: ResponseDTO<AreaListModel[]> | null = await ResourcesUtils.getResourcesJson<ResponseDTO<AreaListModel[]>>(context,'areaList_data.json');
    if (!compRes || !compRes.data) {
      Logger.info(TAG, `getAppointmentListDataLocal compRes  is empty`);
      return [] as AreaListModel[]
    }
    Logger.info(TAG, `getAppointmentListDataLocal getResourcesJsonSync compRes : ${JSON.stringify(compRes)}`);
    return compRes.data
  }

  getAreaListManageModel(item:AreaListModel):AreaListManageModel{
    return new AreaListManageModel(item.code,item.id,item.label,item.children)
  }

  updateUserInfo(item:editModel):Promise<ResponseDTO> {

  if (item.userType === 1){
    if (item.editDataType == WDEditDataModelType.WDEditDataModelType_head) {
      this.params = { headPhotoUrl: item.headPhotoUrl }
    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_nickname) {
      this.params = { userName: item.userName }
    }
    else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_intro) {
      this.params = { introduction: item.userExtend.introduction }

    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_sex) {
      this.params = { sex: item.userExtend.sex.toString() }

    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_birthday) {
      this.params = { birthday: item.userExtend.birthday }

    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_region) {
      this.params = {province:item.userExtend.province,city:item.userExtend.city, county: item.userExtend.county ,address:item.userExtend.address}
    }

    return new Promise((success, error) => {
      this.BasePostRequest(item.editDataType == WDEditDataModelType.WDEditDataModelType_nickname?HttpUrlUtils.APPOINTMENT_editUserDetail1_PATH:HttpUrlUtils.APPOINTMENT_editUserDetail_PATH,this.params)
        .then((navResDTO: ResponseDTO) => {
          if (navResDTO.code == 0) {
            promptAction.showToast({ message: '您的资料已提交' })
            success(navResDTO)
          }else {
            promptAction.showToast({ message: navResDTO.message })
          }
        })
        .catch((error: Error) => {
          Logger.info(TAG,'updateUserInfo','EditInfoViewModel')
          promptAction.showToast({ message: error.message })
        })
    })
  }else {
    let url = ''
    if (item.editDataType == WDEditDataModelType.WDEditDataModelType_head) {
      this.params = { headPhotoUrl: item.headPhotoUrl}
      url = '/api/rmrb-creator-user/c/rmrb-creator-user/creator/updateIcon'
    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_nickname) {
      this.params = { name: item.userName}
      url = '/api/rmrb-creator-user/c/rmrb-creator-user/creator/updateName'
    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_intro) {
      this.params = { introduction: item.userExtend.introduction }
      url = '/api/rmrb-creator-user/c/rmrb-creator-user/creator/updateIntroduction'
    } else if (item.editDataType == WDEditDataModelType.WDEditDataModelType_region) {
      this.params = {provinceCode:item.userExtend.provinceCode,cityCode:item.userExtend.cityCode, districtCode: item.userExtend.districtCode ,countryCode:'86'}
      url = '/api/rmrb-creator-user/c/rmrb-creator-user/creator/updateArea'
    }

    this.params.creatorId = item.userExtend.creatorId

    return new Promise((success, error) => {
      this.BasePostRequest(url,this.params)
        .then((navResDTO: ResponseDTO) => {
          if (navResDTO.code == 0) {
            promptAction.showToast({ message: '您的资料已提交' })
            success(navResDTO)
          }else {
            promptAction.showToast({ message: navResDTO.message })
          }
        })
        .catch((error: Error) => {
          Logger.info(TAG,'updateUserInfo','EditInfoViewModel')
          promptAction.showToast({ message: error.message })
        })
    })
  }


  }
}

const editInfoViewModel = EditInfoViewModel.getInstance();

export default editInfoViewModel as EditInfoViewModel