import { BasicConstant,ExpertData, authStore,perfactAuth } from '@itcast/basic' import { promptAction, router } from '@kit.ArkUI' import { EditUserDataItem } from 'mypage/src/main/ets/view/EditUserDataItem' import { PerfactInputSheet } from '@itcast/basic/src/main/ets/Views/PerfactInputSheet' import { PhotoActionSheet } from '@itcast/basic/src/main/ets/Views/PhotoActionSheet' import { SexSelectedSheet } from '@itcast/basic/src/main/ets/Views/SexSelectedSheet' import { OfficeSelectedSheet } from '@itcast/basic/src/main/ets/Views/OfficeSelectedSheet' import { PositionSelectedSheet } from '@itcast/basic/src/main/ets/Views/PositionSelectedSheet' import { SpecialitySelectedSheet } from '@itcast/basic/src/main/ets/Views/SpecialitySelectedSheet' import { emitter } from '@kit.BasicServicesKit' interface extraData { uuid: string } interface updateExtraData { uuid: string, userName: string, birthDate: string, type: string, photo: string, certificateImg: string, positionUuid: string, officeUuid: string, officeName: string, diseaseUuids: string } interface callBackData { expert:ExpertData, code:number, message:string, specialy:[], data:ExpertData, special:[] } @Component export struct PerfectUserDataComp { scroller: Scroller = new Scroller(); @Prop loginPhone:string = '13419527489'; @State photoPath:string = BasicConstant.urlImage+authStore.getUser().photo; @State name:string = perfactAuth.getUser('13419527489').realName?perfactAuth.getUser('13419527489').realName:'请输入姓名'; @State sex:string = perfactAuth.getUser('13419527489').sex?perfactAuth.getUser('13419527489').sex == 0 ? '男' : '女':'请选择性别'; @State sexnum:number = perfactAuth.getUser('13419527489').sex; @State hospatilName:string = perfactAuth.getUser('13419527489').hospitalName?'':'请选择所在医院'; @State officeName:string = perfactAuth.getUser('13419527489').officeName?perfactAuth.getUser('13419527489').officeName.length>0?perfactAuth.getUser('13419527489').officeName:'请选择科室':'请选择科室'; @State officeUuid:string = perfactAuth.getUser('13419527489').officeUuid; @State officePhone:string = authStore.getUser().officePhone?perfactAuth.getUser('13419527489').officePhone.length?perfactAuth.getUser('13419527489').officePhone:'请输入所在科室的电话':'请输入所在科室的电话'; @State positionName:string = authStore.getUser().positionName?perfactAuth.getUser('13419527489').positionName.length>0?perfactAuth.getUser('13419527489').positionName:'请选择职称':'请选择职称'; @State positionUuid:string = authStore.getUser().positionUuid; @State certificate:string = authStore.getUser().certificate?perfactAuth.getUser('13419527489').certificate.length>0?perfactAuth.getUser('13419527489').certificate:'请输入执业医师证号码':'请输入执业医师证号码'; @State certificatePhoto:string = BasicConstant.urlImage+perfactAuth.getUser('13419527489').certificateImg; // @State diseaseName:string = authStore.getUser().diseaseName?authStore.getUser().diseaseName.length>0?authStore.getUser().diseaseName:'请选择专长':'请选择专长'; // @State diswaseUuid:string = authStore.getUser().diseaseName; @State diseaseName:string = '请选择专长'; @State diswaseUuid:string = ''; @State inputTitle:string = ''; @State inputPlaceholder:string = ''; private photoSheetDialog!: CustomDialogController; private officePickerDialog!: CustomDialogController; private positionPickerDialog!: CustomDialogController; private certificatePhotoSheetDialog!: CustomDialogController; private diseaseSheetDialog!:CustomDialogController; private sexSheetDilog!:CustomDialogController; private perfactInputSheet!:CustomDialogController; aboutToAppear() { this.initSexDialog(); this.initPhotoDialog(); this.initPerfactInputDialog(); this.initOfficePickerDialog(); this.initPositionPickerDialog(); this.initCerficatePhotoDialog(); this.initDiseaseSheetDIalog(); authStore.initUser() emitter.on({ eventId: 250516 }, () => { this.handleSave() }) } aboutToDisappear() { emitter.off(250516) } private handleSave() { promptAction.showToast({ message: '您输入的个人资料已经保存,请完善所有信息后提交审核', duration: 1000 }) const userData:ExpertData = { positionName: this.positionName='请选择职称'?'':this.positionName, userName: this.loginPhone, createDate: '', password: '', officeName: this.officeName='请选择科室'?'':this.officeName, certificateImg: this.certificatePhoto, birthDate: '', isStar: 0, countyId: 0, cityId: 0, email: '', photo: this.photoPath, qrcode: '', mobile: this.loginPhone, hospitalName: '', officeUuid: this.officeUuid, checkInfo: '', hospitalUuid: '', officePhone: this.officePhone='请输入所在科室的电话'?'':this.officePhone, positionUuid: this.positionUuid, sex: this.sexnum, provId: 0, certificate: this.certificate='请输入执业医师证号码'?'':this.certificate, realName: this.name, isEnable: 0, isVisit: 0, modifyDate: '', currentSpec: '', deviceType: 0, currentType: 0, deviceSpec: '', nation: 0, wechat_qrcode: '', uuid: '', intro: '', state: 0, specialy: [], diseaseName:this.diseaseName='请选择专长'?'':this.diseaseName, diseaseUuid:this.diswaseUuid }; perfactAuth.setUser('13419527489',userData); console.info('个人资料=name:',perfactAuth.getUser('13419527489').realName,'\n科室:',perfactAuth.getUser('13419527489').positionName); } initSexDialog(){ this.sexSheetDilog = new CustomDialogController({ builder:SexSelectedSheet({ controller:this.sexSheetDilog, sexSelected:(index: number)=>{ this.sex = index == 0 ? '男' : '女'; this.sexnum = index; } }), alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }) } initPerfactInputDialog() { this.perfactInputSheet = new CustomDialogController({ builder:PerfactInputSheet({ controller:this.perfactInputSheet, inputTitle:this.inputTitle, inputPlaceholder:this.inputPlaceholder, inputCallBack:(input: string,title:string)=>{ if (title == '请输入姓名') { this.name = input; } else if (title == '请输入所在科室电话') { this.officePhone = input; } else if (title == '请输入执业医师资格证号码') { this.certificate = input; } } }), keyboardAvoidDistance: {value:-2000} as LengthMetrics, // 设置弹窗底部与键盘顶部间距(单位:vp) alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }) } private initPhotoDialog() { this.photoSheetDialog = new CustomDialogController({ builder: PhotoActionSheet({ controller: this.photoSheetDialog, onPhotoSelected: async (uri: string) => { this.photoPath = uri; } }), alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }); } private initOfficePickerDialog() { this.officePickerDialog = new CustomDialogController({ builder:OfficeSelectedSheet({ controller:this.officePickerDialog, officeSelected: (name:string , uuid:string) => { this.officeName = name; this.officeUuid = uuid; } }), alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }) } private initPositionPickerDialog() { this.positionPickerDialog = new CustomDialogController({ builder:PositionSelectedSheet({ controller:this.officePickerDialog, officeSelected: (name:string , uuid:string) => { this.positionName = name; this.positionUuid = uuid; } }), alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }) } private initCerficatePhotoDialog() { this.certificatePhotoSheetDialog = new CustomDialogController({ builder: PhotoActionSheet({ controller: this.certificatePhotoSheetDialog, onPhotoSelected: (url: string) => { this.certificatePhoto = url; console.log('Selected image URI:', url); } }), alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }); } private initDiseaseSheetDIalog() { this.diseaseSheetDialog = new CustomDialogController({ builder: SpecialitySelectedSheet({ controller:this.diseaseSheetDialog, specialitySelected: (diseaseUuids:string,diseaseName:string)=>{ this.diseaseName = diseaseName; this.diswaseUuid = diseaseUuids; } }), alignment: DialogAlignment.Bottom, customStyle: true, autoCancel: false, backgroundColor: ('rgba(0,0,0,0.5)'), height: '100%' }) } build() { Scroll(this.scroller) { Column() { // 基本信息字段 EditUserDataItem({ label: '头像', required: false, content: this.photoPath, hasArrow: true, isLine:false }) .backgroundColor(Color.White) .onClick(()=>this.photoSheetDialog.open()) EditUserDataItem({ label: '姓名', required: false, content: this.name, hasArrow:true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>{ this.inputTitle = '请输入姓名'; this.inputPlaceholder = this.name; this.perfactInputSheet.open() }) EditUserDataItem({ label: '性别', required: false, content: this.sex, hasArrow:true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>this.sexSheetDilog.open()) EditUserDataItem({ label: '医院', required: false, content: this.hospatilName, hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=> { router.pushUrl({ url: 'pages/LoginPage/SelectedHospitalPage' }) }) EditUserDataItem({ label: '科室', required: false, content: this.officeName, hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>this.officePickerDialog.open()) EditUserDataItem({ label: '科室电话', required: false, content: this.officePhone, hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>{ this.inputTitle = '请输入所在科室电话'; this.inputPlaceholder = this.officePhone; this.perfactInputSheet.open() }) EditUserDataItem({ label: '职称', required: false, content: this.positionName, hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>this.positionPickerDialog.open()) EditUserDataItem({ label: '执业医师证编号', required: false, content: this.certificate ,hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>{ this.inputTitle = '请输入执业医师资格证号码'; this.inputPlaceholder = this.certificate; this.perfactInputSheet.open()} ) EditUserDataItem({ label: '执业医师证图片或胸牌', required: false, content: this.certificatePhoto, hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>this.certificatePhotoSheetDialog.open()) EditUserDataItem({ label: '专长(可选一到十项)', required: false, content: this.diseaseName , hasArrow: true, isLine:false }) .backgroundColor(Color.White) .margin({top:8}) .onClick(()=>this.diseaseSheetDialog.open()) Column() { // 登录按钮 Button({type:ButtonType.Normal}){ Text('提交') } .width('95%') .height(48) .borderRadius(8) .backgroundColor($r('app.color.main_color')) .fontColor('#FFFFFF') .fontSize(18) .position({x:'2.5%'}) .onClick(() => { // 提交逻辑 router.pushUrl({ url: 'pages/LoginPage/SelectedHospitalPage' }) }) } .width('100%') .height(48) .margin({top:50}) } .width('100%') .height('100%') .padding(8) .backgroundImage($r('app.media.bg_reg')) .backgroundImageSize(ImageSize.FILL) } .height('auto') .scrollable(ScrollDirection.Vertical) .scrollBar(BarState.Off) .backgroundColor('#ffffff') } } function handleSave() { }