You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

161 lines
4.0 KiB

const app = getApp<IAppOption>()
interface OptionItem {
value: number
label: string
}
Page({
data: {
menuTop: 0,
step: 1,
// 基础数据列表 (from API 1.7)
ageRangeList: [] as OptionItem[],
genderList: [] as OptionItem[],
diagnosisStatusList: [] as OptionItem[],
surgeryStatusList: [] as OptionItem[],
// Step 1: 基础信息
ageRange: 0 as number,
gender: 0 as number,
provinceId: '',
provinceName: '',
cityId: '',
cityName: '',
regionText: '',
// Step 2: PSVT情况
diagnosisStatus: 0 as number,
diagnosisTime: '',
surgeryStatus: 0 as number,
currentMonth: '',
},
onLoad() {
const menuRes = wx.getMenuButtonBoundingClientRect()
const now = new Date()
const currentMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`
this.setData({
menuTop: menuRes.top,
currentMonth,
})
this.getBaseData()
},
getBaseData() {
wx.ajax({
method: 'GET',
url: '?r=psvt/patient/base-data',
}).then((res) => {
const parseList = (list: any): OptionItem[] => {
if (Array.isArray(list)) {
return list.map((item) => {
const key = Object.keys(item)[0]
return { value: Number(key), label: item[key] }
})
}
if (list && typeof list === 'object') {
return Object.keys(list).map((key) => ({
value: Number(key),
label: list[key],
}))
}
return []
}
this.setData({
ageRangeList: parseList(res.ageRangeList),
genderList: parseList(res.genderList),
diagnosisStatusList: parseList(res.diagnosisStatusList),
surgeryStatusList: parseList(res.surgeryStatusList),
})
})
},
handleSelect(e: WechatMiniprogram.TouchEvent) {
const { key, value } = e.currentTarget.dataset
this.setData({
[key]: Number(value),
})
},
handleAreaChange(e: any) {
const [province, city] = e.detail
this.setData({
provinceId: province.value,
provinceName: province.label,
cityId: city.value,
cityName: city.label,
regionText: [province.label, city.label].filter(Boolean).join(' '),
})
},
handleDiagnosisTimeChange(e: WechatMiniprogram.PickerChange) {
this.setData({
diagnosisTime: e.detail.value as string,
})
},
handleNext() {
const { ageRange, gender } = this.data
if (!ageRange) {
wx.showToast({ title: '请选择年龄段', icon: 'none' })
return
}
if (!gender) {
wx.showToast({ title: '请选择性别', icon: 'none' })
return
}
this.setData({ step: 2 })
},
handlePrev() {
this.setData({ step: 1 })
},
handleSubmit() {
const { diagnosisStatus, surgeryStatus } = this.data
if (!diagnosisStatus) {
wx.showToast({ title: '请选择确诊状态', icon: 'none' })
return
}
if (!surgeryStatus) {
wx.showToast({ title: '请选择手术状态', icon: 'none' })
return
}
const {
ageRange,
gender,
provinceId,
provinceName,
cityId,
cityName,
diagnosisStatus: ds,
diagnosisTime,
surgeryStatus: ss,
} = this.data
const channelId = app.globalData.scene?.channelId || ''
const data: Record<string, any> = {
ageRange,
gender,
diagnosisStatus: ds,
surgeryStatus: ss,
channelId,
}
if (provinceName) data.provinceName = provinceName
if (provinceId) data.provinceId = provinceId
if (cityName) data.cityName = cityName
if (cityId) data.cityId = cityId
if (diagnosisTime) data.diagnosisTime = diagnosisTime
wx.ajax({
method: 'POST',
url: '?r=psvt/patient/register',
data,
loading: true,
loadingText: '提交中...',
}).then(() => {
app.globalData.initLoginInfo.isReg = 1
app.globalData.initLoginInfo.isLogin = 1
wx.reLaunch({
url: '/pages/index/index',
})
})
},
})
export {}