// pages/memberDetail/memberDetail.js const app = getApp() const dayjs=require("../../utils/dayjs.min.js"); import {sickInfo} from "../../api/consultOrder" import {sickList,nation,job} from "../../api/common" import {getProvince,getCity,getCountry} from "../../api/consultExpert" import {familyDetail,editfamilyDetail,addfamily,getpersonal,addPersonal,editPersonal,getHealthy,addHealthy,editHealthy} from "../../api/familyDoc" import {throttle} from "../../utils/util" let provinceArr = []; let cityArr = []; Page({ /** * 页面的初始数据 */ data: { img_host:'https://oss.prod.applets.igandanyiyuan.com/applet/patient/static', isloading:false, show: false, showPicker: false, showNation:false, showJob:false, showSick:false, showCity: false, tab:1, date: '', sex:'', order: null, showMarital: false, pickercolumns: [{ text: "本人", value: 1 }, { text: "父母", value: 2 }, { text: "爱人", value: 3 }, { text: "子女", value: 4 }, { text: "亲戚", value: 5 }, { text: "其他 ", value: 6 } ], province_id: '', city_id: '', county_id: '', family_id:'', columns: [{ values: [], className: 'column1', }, { values: [], className: 'column2', defaultIndex: 1, }, { values: [], className: 'column3', defaultIndex: 1, } ], sickcolumns:[], nationcolumns:[], jobcolumns:[], maritalColumn: [{ text: '未婚', value: 0 }, { text: '已婚 ', value: 1 }, { text: '离异 ', value: 2 }], hasPersonal:false, //判断个人情况有无数据; hasHealthy:false, //判断健康情况有无数据 relation_name: '', marital_name: '', user_info: { name: '', id_number: '', province_id: '', city_id: '', county_id: '', province:'', county:'', city: '', relation: '', mobile: '', height: '', weight: '', marital_status:null, nation_name: '', nation_id:'', job_name: '', job_id: '', is_default: 0 }, startIndex:3, personInfo: { family_id:'', family_personal_id:'', is_allergy_history:null, allergy_history:'', is_family_history:null, family_history:'', is_pregnant:null, pregnant:'', is_operation:null, operation:'', drink_wine_status:null, smoke_status:null, chemical_compound_status:null, chemical_compound_describe:'' }, healthyInfo:{ family_health_id:'', disease_class_id:'', disease_class_name:'', diagnosis_date:'', diagnosis_hospital:'', drugs_name:'', is_take_medicine:null }, notallowEdit: false, currentDate: new Date().getTime(), minDate: new Date('1900/01/01 00:00:00').getTime(), maxDate: new Date().getTime(), hideGuomin: false, hideFamilysick: false, hideChemical: false, hideOperation:false, hidePregnant:false, hideDrug:false, formatter(type, value) { if (type === 'year') { return `${value}年`; } if (type === 'month') { return `${value}月`; } if (type === 'day') { return `${value}日`; } return value; } }, onConfirmPicker(event) { const { value } = event.detail; this.setData({ relation_name: `${value.text}`, 'user_info.relation': `${value.value}`, showPicker: false }); }, openPicker() { if(!this.data.notallowEdit){ this.setData({ showPicker: true }) } }, getSick() { sickList({ disease_class_name: '' }).then((data) => { this.setData({ sickcolumns: data }) }) }, goBack(){ wx.navigateBack({ delta: 1, }) }, onConfirmSick(event) { const { value } = event.detail; this.setData({ "healthyInfo.disease_class_name": `${value.disease_class_name}`, "healthyInfo.disease_class_id": `${value.disease_class_id}`, showSick: false }) }, showSick() { this.setData({ showSick: true }) }, onCancelSick() { this.setData({ showSick: false }) }, onConfirmNation(event) { const { value } = event.detail; this.setData({ "user_info.nation_name": `${value.nation_name}`, "user_info.nation_id": `${value.nation_id}`, showNation: false }) }, showNation() { if (!this.data.notallowEdit) { this.setData({ showNation: true }) } }, onCancelNation() { this.setData({ showNation: false }) }, onConfirmJob(event) { const { value } = event.detail; this.setData({ "user_info.job_name": `${value.job_name}`, "user_info.job_id": `${value.job_id}`, showJob: false }) }, showJob() { if (!this.data.notallowEdit) { this.setData({ showJob: true }) } }, onCancelJob() { this.setData({ showJob: false }) }, handelFocus(e) { let key = e.target.dataset.id; let value = e.target.dataset.value; let obj="personInfo."+value; if (!e.detail.value) { this.setData({ [key]: false, [obj]: e.detail.value }) } else { this.setData({ [key]: true, [obj]: e.detail.value }) } }, handleIpt(e){ let key = e.target.dataset.id; let obj="user_info."+key; if(key=='height' || key=="weight"){ this.setData({ [obj]:e.detail.value }) }else{ this.setData({ [obj]: e.detail.value }) } }, handelHealthyIpt(e){ let key = e.target.dataset.id; let value=e.target.dataset.value; let obj="healthyInfo."+value; if (!e.detail.value) { this.setData({ [key]: false, [obj]: e.detail.value }) } else { this.setData({ [key]: true, [obj]: e.detail.value }) } }, onChangeRadio(event) { let key = event.target.dataset.id; let obj= "personInfo."+key; this.setData({ [obj]:Number(event.detail) }); if(key=="chemical_compound_status" && event.detail==1){ this.setData({ "personInfo.chemical_compound_describe":'' }) }else if(event.detail==0){ if(key=="is_allergy_history"){ this.setData({ "personInfo.allergy_history":'', hideGuomin:false }) }; if(key=="is_pregnant"){ this.setData({ "personInfo.pregnant":'', hidePregnant:false }) } if(key=="is_family_history"){ this.setData({ "personInfo.family_history":'', hideFamilysick:false }) } } }, onChangeHealthyRadio(event) { let key = event.target.dataset.id; let obj= "healthyInfo."+key; this.setData({ [obj]:Number(event.detail) }); if(event.detail==0){ this.setData({ "healthyInfo.drugs_name":'', hideDrug:false }) } }, closePicker() { this.setData({ showPicker: false }) }, openMaritalPicker() { if(!this.data.notallowEdit){ this.setData({ showMarital: true }) } }, closeMaritalPicker() { this.setData({ showMarital: false }) }, onConfirmMaritalPicker(event) { const { value } = event.detail; this.setData({ showMarital: false, marital_name:value.text, 'user_info.marital_status':value.value }) }, onConfirm(event) { const { picker, value, index } = event.detail; for (let index = 0; index < value.length; index++) { if (index === 0) { this.setData({ "user_info.province_id": value[index].area_id, "user_info.province":value[index].area_name }) } else if (index == 1) { this.setData({ "user_info.city_id": value[index].area_id, "user_info.city":value[index].area_name }) } else { this.setData({ "user_info.county_id": value[index].area_id, "user_info.county":value[index].area_name }) } } this.setData({ showCity: false }) }, onChangePicker(event) { const { picker, index } = event.detail; if (index === 0) { let currentIndex = picker.getIndexes()[0] this.cityList(provinceArr[currentIndex].area_id); } else if (index === 1) { let currentIndex = picker.getIndexes()[1] this.countryList(cityArr[currentIndex].area_id); } }, onCancel() { this.setData({ showCity: false }) }, onOpenCity() { if (!this.data.notallowEdit) { this.setData({ showCity: true }) } }, provinceList() { getProvince().then((res) => { provinceArr = res; let province = []; for (let i = 0; i < res.length; i++) { province.push(res[i]); }; this.setData({ 'columns[0].values': province, }) this.cityList(res[0].area_id); }) }, cityList(area_id) { getCity({ area_id: area_id }).then((res) => { this.isLoding = true; cityArr = res; let city = []; for (let i = 0; i < res.length; i++) { city.push(res[i]); }; this.setData({ 'columns[1].values': city }) this.countryList(res[0].area_id); }) }, countryList(area_id) { getCountry({ area_id: area_id }).then((res) => { let area = []; for (let i = 0; i < res.length; i++) { area.push(res[i]); }; this.setData({ 'columns[2].values': area }) }) }, validateHealthyInfo(){ let {is_take_medicine,drugs_name}=this.data.healthyInfo; if(is_take_medicine==1){ if(!drugs_name){ wx.showToast({ title: `服药内容不能为空`, icon: 'none', }); return false; }else if(drugs_name.length>50){ wx.showToast({ title: `服药内容不能超过50个字`, icon: 'none', }); return false; } } return true }, validatePersonInfo(){ let {is_allergy_history,allergy_history,is_family_history,family_history,is_operation,operation,chemical_compound_status,chemical_compound_describe,is_pregnant,pregnant}=this.data.personInfo; if(is_allergy_history==1){ if(!allergy_history){ wx.showToast({ title: `过敏史内容不能为空`, icon: 'none', }); return false; }else if(allergy_history.length>50){ wx.showToast({ title: `过敏史内容不能超过50个字`, icon: 'none', }); return false; } } if(is_family_history==1){ if(!family_history){ wx.showToast({ title: `家族史内容不能为空`, icon: 'none', }); return false; }else if(family_history.length>50){ wx.showToast({ title: `家族史内容不能超过50个字`, icon: 'none', }); return false; } }; if(is_pregnant==1){ if(!pregnant){ wx.showToast({ title: `备孕、妊娠、哺乳期描述不能为空`, icon: 'none', }); return false; }else if(pregnant.length>50){ wx.showToast({ title: `备孕、妊娠、哺乳期描述不能超过50个字`, icon: 'none', }); return false; } } if(is_operation==1){ if(!operation){ wx.showToast({ title: `手术史内容不能为空`, icon: 'none', }); return false; }else if(operation.length>50){ wx.showToast({ title: `手术史内容不能超过50个字`, icon: 'none', }); return false; } } if(chemical_compound_status!=1 && chemical_compound_status){ if(!chemical_compound_describe){ wx.showToast({ title: `化合物内容不能为空`, icon: 'none', }); return false; }else if(chemical_compound_describe.length>50){ wx.showToast({ title: `化合物内容不能超过50个字`, icon: 'none', }); return false; } } return true; }, validateBasicInfo() { let { name, id_number, mobile, height, weight } = this.data.user_info; // /^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$/ if (!/^([\u4e00-\u9fa5\·]{2,10})$/.test(name)) { wx.showToast({ title: `姓名要求在2-10个汉字`, icon: 'none', }); return false; }; if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(id_number)) { wx.showToast({ title: `请输入有效的身份证号`, icon: 'none', }); return false; }; if (mobile) { if (!/^1[3456789]\d{9}$/.test(mobile)) { wx.showToast({ title: `请输入有效的手机号码!`, icon: 'none', }); return false; } } if (height) { if (!/^3[5-9](\.\d+)?$|^[4-9][0-9](\.\d+)?$|^1[0-9][0-9](\.\d+)?$|^2[1-4][0-9](\.\d+)?$|250/.test(height)) { wx.showToast({ title: `请输入范围内身高!`, icon: 'none', }); return false; } }; if (weight) { if (!/^[2-9](\.\d+)?$|^[1-9][0-9](\.\d+)?$|^1[0-9]{1,2}(\.\d+)?$|200/.test(weight)) { wx.showToast({ title: `请输入范围内体重!`, icon: 'none', }); return false; } } return true }, getNation(){ nation().then(data=>{ this.setData({ nationcolumns:data }) }) }, getJob(){ job().then(data=>{ this.setData({ jobcolumns:data }) }) }, //提交基本信息 handleBasicInfo:throttle(function() { let id = this.data.family_id; id ? this.handleEditfamilyDetail(id) : this.handleAddfamily(); }), //提交个人信息 handlePersonInfo:throttle(function() { let id = this.data.personInfo.family_personal_id; this.data.hasPersonal ? this.handleEditPerson(id) : this.handleAddPerson() }), //提交健康情况 handleHealthyInfo:throttle(function() { let id = this.data.healthyInfo.family_health_id; this.data.hasHealthy? this.handleEditHealthy(id) : this.handleAddHealthy() }), handleAddfamily() { let { name, id_number, province_id, city_id, county_id, relation, mobile, is_default, height, weight, marital_status, nation_id, job_id } = this.data.user_info; if (this.validateBasicInfo()) { addfamily({ card_name: name, id_number, type: 1, province_id, city_id, county_id, mobile, relation, height:Number(height).toFixed(1), weight:Number(weight).toFixed(1), is_default, marital_status, nation_id, job_id }).then(data => { let sex=this.getIdInfo(id_number).sex; this.setData({ tab: 2, family_id:data.family_id, sex:sex }) // wx.showToast({ // title: '添加成功', // }) }) } }, handleGetHealthy(id){ getHealthy(id).then(data=>{ for (const key in data) { if (data[key] || data[key]==0) { this.setData({ hasHealthy:true, ['healthyInfo.'+key]:data[key] }) } } if(data.drugs_name){ this.setData({ hideDrug:true }) } }) }, hnadleGetpersonal(id) { getpersonal(id).then(data => { for (const key in data) { if (data[key] || data[key]==0) { this.setData({ hasPersonal:true, ['personInfo.'+key]:data[key] }) } }; if(data.allergy_history){ this.setData({ hideGuomin:true }) }; if(data.family_history){ this.setData({ hideFamilysick:true }) }; if(data.operation){ this.setData({ hideOperation:true }) }; if(data.pregnant){ this.setData({ hidePregnant:true }) } if(data.chemical_compound_status && data.chemical_compound_status!=1){ if(data.chemical_compound_describe){ this.setData({ hideChemical:true }) } } }) }, handleAddPerson() { this.setData({ 'personInfo.family_id':this.data.family_id }) if(this.validatePersonInfo()){ // this.setData({ // isloading:true // }) addPersonal(this.data.personInfo).then(data=>{ this.setData({ tab:3 }) }) } }, handleAddHealthy(){ this.setData({ 'healthyInfo.family_id':this.data.family_id }); if(this.validateHealthyInfo()){ // this.setData({ // isloading:true // }) addHealthy(this.data.healthyInfo).then(data=>{ wx.showToast({ title: '添加成功', icon:"none" }) // this.setData({ // isloading:false // }) wx.navigateBack({ delta: 1, }) }) } }, handleEditHealthy(id) { this.setData({ 'healthyInfo.family_id':this.data.family_id }); if(this.validateHealthyInfo()){ // this.setData({ // isloading:true // }) editHealthy(id,this.data.healthyInfo).then(data=>{ wx.showToast({ title: '修改成功', icon:"none" }) // this.setData({ // isloading:false // }) wx.navigateBack({ delta: 1, }) }) } }, handleEditPerson(id) { this.setData({ 'personInfo.family_id':this.data.family_id }); if(this.validatePersonInfo()){ // this.setData({ // isloading:true // }) editPersonal(id,this.data.personInfo).then(data=>{ this.setData({ tab:3 }) }) } }, handleEditfamilyDetail(id) { let { name, id_number, province_id, city_id, county_id, mobile, height, weight, marital_status, nation_id, is_default, job_id, relation } = this.data.user_info; if (this.validateBasicInfo()) { // this.setData({ // isloading:true // }) editfamilyDetail(id, { card_name: name, id_number, type: 1, is_default, relation, province_id, city_id, county_id, mobile, height:height?Number(height).toFixed(1):'', weight:weight?Number(weight).toFixed(1):'', marital_status, nation_id, job_id }).then(data => { let sex=this.getIdInfo(id_number).sex; this.setData({ tab:2, sex:sex }) }) } }, handelFamilyDetail(id) { familyDetail(id).then(data => { let obj = {}; for (const key in data) { if (data[key]) { obj[key] = data[key] } } let json = { 1: '本人', 2: '父母', 3: '爱人', 4: '子女', 5: '亲戚', 6: '其他' }; // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 ) let marryjson = { 0: '未婚', 1: '已婚', 2: '离异' }; //婚姻状况(0:未婚 1:已婚 2:离异) let relation_name = json[data.relation]; let marital_name = marryjson[data.marital_status] this.setData({ user_info: obj, relation_name: relation_name, marital_name: marital_name, "user_info.name": data.card_name }); if(data.sex!=2){ this.setData({ startIndex:2 }) } }) }, //获取身份证号信息 getIdInfo(IdCard){ var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if(reg.test(IdCard)){ let sex if (parseInt(IdCard.substr(16, 1)) % 2 === 1) { sex = '1' } else { sex = '2' } var ageDate = new Date() var month = ageDate.getMonth() + 1 var day = ageDate.getDate() var age = ageDate.getFullYear() - IdCard.substring(6, 10) - 1 if (IdCard.substring(10, 12) < month || (IdCard.substring(10, 12) === month && IdCard.substring(12, 14) <= day)) { age++ } if (age <= 0) { age = 1 } return { sex, age} }else{ return false; } }, getsickInfo(id) { sickInfo({ order_inquiry_id: id }).then(data => { let currentInfo = this.data.user_info; let obj = {}; for (const key in currentInfo) { if (data[key]) { obj[key] = data[key] } } let json = { 1: '本人', 2: '父母', 3: '爱人', 4: '子女', 5: '亲戚', 6: '其他' }; // 与患者关系(1:本人 2:父母 3:爱人 4:子女 5:亲戚 6:其他 ) let realtion = data.relation; let relation_name = json[realtion]; this.setData({ user_info: obj, relation_name: relation_name }); }) }, openPop() { this.setData({ show: true }) }, handleClose() { this.setData({ show: false }) }, handleConfirm(event) { this.setData({ show: false, "healthyInfo.diagnosis_date": dayjs(event.detail).format('YYYY-MM-DD') }); }, onChange({detail}) { // 需要手动对 checked 状态进行更新 this.setData({ "user_info.is_default": detail?1:0 }); }, openTips(){ if(this.data.family_id){ wx.showToast({ title: '该项不能修改', icon:'none' }) } }, /** * 生命周期函数--监听页面加载 */ onLoad(options) { if (options.order_inquiry_id) { this.getsickInfo(options.order_inquiry_id); this.setData({ notallowEdit: true }) }; let family_id = options.family_id; if (family_id) { this.setData({ family_id: family_id }) this.handelFamilyDetail(family_id); this.hnadleGetpersonal(family_id); this.handleGetHealthy(family_id) } this.provinceList(); this.getSick(); this.getNation(); this.getJob(); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { this.setData({ img_host:app.hostConfig().imghost }) }, /** * 生命周期函数--监听页面隐藏 */ onHide() { }, /** * 生命周期函数--监听页面卸载 */ onUnload() { }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh() { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom() { }, /** * 用户点击右上角分享 */ })