const app = getApp() Page({ data: { id: 0, visitDate: '', nextVisitDate: '', displayIgG4Value: '' as string | number | null, medicationsLabel: '', oralHormoneDosageMg: '' as string | number | null, immunosuppressantLabel: '', reminderEnabled: 2, imageGroups: [] as { type: string; label: string; list: string[] }[], change: 0, // 枚举 medicationsMap: {} as Record, immunosuppressantMap: {} as Record, imageTypeLabels: {} as Record, }, onLoad(options: any) { app.waitLogin().then(() => { app.mpBehavior({ PageName: 'PG_PatientRecordDetail', detailId: String(options.id) }) this.getEnums().then(() => { if (options.id) { this.setData({ id: Number(options.id) }) this.getDetail() this.getReminderConfig() } }) }) }, onShow() { if (typeof this.__loaded === 'undefined') { this.__loaded = true return } this.getDetail() this.getReminderConfig() }, // ========== API ========== getEnums(): Promise { return wx .ajax({ method: 'GET', url: '?r=igg4/medical-visit/get-enums', }) .then((res: any) => { if (!res) return const medicationsMap: Record = {} for (const item of res.medicationsUsed || []) { medicationsMap[item.value] = item.label } const immunosuppressantMap: Record = {} for (const item of res.immunosuppressantName || []) { immunosuppressantMap[item.value] = item.label } const imageTypeLabels: Record = {} for (const item of res.imageType || []) { imageTypeLabels[item.value] = item.label } this.setData({ medicationsMap, immunosuppressantMap, imageTypeLabels }) }) }, getDetail() { wx.ajax({ method: 'GET', url: '?r=igg4/medical-visit/detail', data: { id: this.data.id }, }).then((res: any) => { if (!res) return const { medicationsMap, immunosuppressantMap, imageTypeLabels } = this.data const medicationsLabel = (res.medicationsUsed || []) .map((id: number) => { if (id === 99 && res.medicationsUsedOtherText) return `其他:${res.medicationsUsedOtherText}` if (id === 99) return '' return medicationsMap[id] }) .filter(Boolean) .join('、') const immunosuppressantLabel = (res.immunosuppressantName || []) .map((id: number) => { if (id === 99 && res.immunosuppressantNameOtherText) return `其他:${res.immunosuppressantNameOtherText}` if (id === 99) return '' return immunosuppressantMap[id] }) .filter(Boolean) .join('、') const imageGroups: { type: string; label: string; list: string[] }[] = [] const images = res.images || {} for (const type of Object.keys(imageTypeLabels)) { const list = (images[type] || []).map((img: any) => img.maskedImageUrl || img.imageUrl) if (list.length) { imageGroups.push({ type, label: imageTypeLabels[type], list }) } } this.setData({ visitDate: res.visitDate || '', nextVisitDate: res.nextVisitDate || '', displayIgG4Value: res.displayIgG4Value, medicationsLabel, oralHormoneDosageMg: res.oralHormoneDosageMg, immunosuppressantLabel, imageGroups, change: res.change, }) }) }, getReminderConfig() { wx.ajax({ method: 'GET', url: '?r=igg4/medical-visit/get-reminder-config', }).then((res: any) => { if (!res) return this.setData({ reminderEnabled: res.reminderEnabled || 2 }) }) }, saveReminderConfig(e: any) { const val = e.detail.value ? 1 : 2 this.setData({ reminderEnabled: val }) wx.ajax({ method: 'POST', url: '?r=igg4/medical-visit/save-reminder-config', data: { reminderEnabled: val }, }) }, // ========== 操作 ========== handleDelete() { wx.showModal({ title: `删除${this.data.visitDate || ''}记录`, content: `删除后将无法恢复`, confirmText: '确认删除', confirmColor: '#ee0a24', success: (res) => { if (!res.confirm) return wx.ajax({ method: 'POST', url: '?r=igg4/medical-visit/delete', data: { id: this.data.id }, }).then((res: any) => { if (!res) return wx.navigateBack() }) }, }) }, handleEdit() { wx.navigateTo({ url: `/gift/pages/record/index?id=${this.data.id}` }) }, handlePreviewImage(e: any) { const { url, type } = e.currentTarget.dataset const group = this.data.imageGroups.find((g) => g.type === type) if (!group) return wx.previewImage({ current: url, urls: group.list, }) }, }) export {}