222 lines
4.7 KiB
JavaScript
222 lines
4.7 KiB
JavaScript
const API = require('../../utils/api.js')
|
|
|
|
// 性别选项,与后端 schema 的 male / female 对应
|
|
const SEX_OPTIONS = [{
|
|
value: 'male',
|
|
label: '男'
|
|
},
|
|
{
|
|
value: 'female',
|
|
label: '女'
|
|
}
|
|
]
|
|
|
|
const MOBILE_REGEX = /^1[3-9]\d{9}$/
|
|
|
|
Page({
|
|
data: {
|
|
id: '',
|
|
isEdit: false,
|
|
saving: false,
|
|
today: '',
|
|
sexOptions: SEX_OPTIONS,
|
|
form: {
|
|
name: '',
|
|
sex: '',
|
|
birth: '',
|
|
mobile: '',
|
|
idnumber: '',
|
|
remark: ''
|
|
}
|
|
},
|
|
|
|
onLoad(options) {
|
|
const id = options.id || ''
|
|
|
|
this.setData({
|
|
id,
|
|
isEdit: !!id,
|
|
today: this.formatDate(new Date())
|
|
})
|
|
|
|
wx.setNavigationBarTitle({
|
|
title: id ? '编辑就诊人' : '新增就诊人'
|
|
})
|
|
|
|
if (id) {
|
|
this.loadProfile(id)
|
|
}
|
|
},
|
|
|
|
formatDate(date) {
|
|
const year = date.getFullYear()
|
|
const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
const day = String(date.getDate()).padStart(2, '0')
|
|
return `${year}-${month}-${day}`
|
|
},
|
|
|
|
// 编辑模式:读取档案详情回填表单
|
|
loadProfile(id) {
|
|
API.healthProfile.getMyProfileById(id)
|
|
.then((res) => {
|
|
if (res.code !== 0) {
|
|
wx.showToast({
|
|
title: res.msg || '加载失败',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
const detail = (res.data && res.data.profile) || {}
|
|
const profile = detail.profile || {}
|
|
const health = detail.health || {}
|
|
|
|
this.setData({
|
|
form: {
|
|
name: profile.name || '',
|
|
sex: profile.sex || '',
|
|
birth: profile.birth || '',
|
|
mobile: profile.mobile || '',
|
|
idnumber: profile.idnumber || '',
|
|
remark: health.remark || ''
|
|
}
|
|
})
|
|
})
|
|
.catch((err) => {
|
|
console.log('获取就诊人信息失败', err)
|
|
wx.showToast({
|
|
title: '网络请求失败',
|
|
icon: 'none'
|
|
})
|
|
})
|
|
},
|
|
|
|
onFieldInput(e) {
|
|
const field = e.currentTarget.dataset.field
|
|
this.setData({
|
|
[`form.${field}`]: e.detail.value
|
|
})
|
|
},
|
|
|
|
onSexSelect(e) {
|
|
const sex = e.currentTarget.dataset.sex
|
|
// 再次点击已选中的性别则取消选择
|
|
this.setData({
|
|
'form.sex': this.data.form.sex === sex ? '' : sex
|
|
})
|
|
},
|
|
|
|
onBirthChange(e) {
|
|
this.setData({
|
|
'form.birth': e.detail.value
|
|
})
|
|
},
|
|
|
|
// 表单校验,返回错误提示文案;通过校验返回空字符串
|
|
validate() {
|
|
const {
|
|
name,
|
|
mobile
|
|
} = this.data.form
|
|
|
|
if (!name.trim()) {
|
|
return '请输入就诊人姓名'
|
|
}
|
|
if (!mobile.trim()) {
|
|
return '请输入联系电话'
|
|
}
|
|
if (!MOBILE_REGEX.test(mobile.trim())) {
|
|
return '请输入正确的手机号'
|
|
}
|
|
return ''
|
|
},
|
|
|
|
onSave() {
|
|
if (this.data.saving) {
|
|
return
|
|
}
|
|
|
|
const errorMessage = this.validate()
|
|
if (errorMessage) {
|
|
wx.showToast({
|
|
title: errorMessage,
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
|
|
const {
|
|
name,
|
|
sex,
|
|
birth,
|
|
mobile,
|
|
idnumber,
|
|
remark
|
|
} = this.data.form
|
|
|
|
// 新增用嵌套对象(schema 的 new Model 需要嵌套结构);
|
|
// 更新用点号路径(schema 更新姓名时会额外写 profile.pinyin,整体替换 profile 会冲突)
|
|
const payload = this.data.isEdit ? {
|
|
'profile.name': name.trim(),
|
|
'profile.sex': sex,
|
|
'profile.birth': birth,
|
|
'profile.mobile': mobile.trim(),
|
|
'profile.idnumber': idnumber.trim(),
|
|
'health.remark': remark.trim()
|
|
} : {
|
|
profile: {
|
|
name: name.trim(),
|
|
sex: sex,
|
|
birth: birth,
|
|
mobile: mobile.trim(),
|
|
idnumber: idnumber.trim()
|
|
},
|
|
health: {
|
|
remark: remark.trim()
|
|
}
|
|
}
|
|
|
|
this.setData({
|
|
saving: true
|
|
})
|
|
wx.showLoading({
|
|
title: '保存中...'
|
|
})
|
|
|
|
const request = this.data.isEdit ?
|
|
API.healthProfile.updateMyProfile(this.data.id, payload) :
|
|
API.healthProfile.createMyProfile(payload)
|
|
|
|
request
|
|
.then((res) => {
|
|
wx.hideLoading()
|
|
if (res.code !== 0) {
|
|
wx.showToast({
|
|
title: res.msg || '保存失败',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
wx.showToast({
|
|
title: '保存成功',
|
|
icon: 'success'
|
|
})
|
|
setTimeout(() => {
|
|
wx.navigateBack()
|
|
}, 800)
|
|
})
|
|
.catch((err) => {
|
|
wx.hideLoading()
|
|
console.log('保存就诊人失败', err)
|
|
wx.showToast({
|
|
title: '网络请求失败',
|
|
icon: 'none'
|
|
})
|
|
})
|
|
.finally(() => {
|
|
this.setData({
|
|
saving: false
|
|
})
|
|
})
|
|
}
|
|
})
|