From 9fb236cee320ccff2ee170c66652464284d894e9 Mon Sep 17 00:00:00 2001 From: Lowry <2370644795@qq.com> Date: Wed, 22 Jan 2025 18:12:59 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AB=98=E8=A1=80=E5=8E=8B=E4=B8=93=E7=97=85?= =?UTF-8?q?=E9=9A=8F=E8=AE=BF=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/doctor/Doctor.vue | 3 +- .../followUp/separateFU/form/FormCont.vue | 7 +- src/doctor/followUp/separateFU/form/Index.vue | 7 +- .../form/components/HypertensionForm.vue | 745 ++++++++++++++---- vue.config.js | 8 +- 5 files changed, 617 insertions(+), 153 deletions(-) diff --git a/src/doctor/Doctor.vue b/src/doctor/Doctor.vue index 84d7db6..c4de760 100644 --- a/src/doctor/Doctor.vue +++ b/src/doctor/Doctor.vue @@ -66,7 +66,7 @@ export default { if (!token) { token = sessionStorage.getItem('token') if (process.env.NODE_ENV !== 'production') { - token = 'f1f98c99-ac8d-47db-8066-fe24a548c784' + token = 'ca3a2820-1553-4131-b04f-61d9312205b3' } } if (token) { @@ -254,6 +254,7 @@ export default { // 单选 .doc-radio-group { column-gap: 10px; + row-gap: 8px; .van-radio { background-color: #FAFAFA; padding: 8px 12px; diff --git a/src/doctor/followUp/separateFU/form/FormCont.vue b/src/doctor/followUp/separateFU/form/FormCont.vue index 74dabfc..80ac476 100644 --- a/src/doctor/followUp/separateFU/form/FormCont.vue +++ b/src/doctor/followUp/separateFU/form/FormCont.vue @@ -1,6 +1,6 @@ <template> <div> - <HypertensionForm v-if="diseaseType === 1"></HypertensionForm> + <HypertensionForm v-if="diseaseType === 1" ref="hypertensionForm"></HypertensionForm> </div> </template> <script> @@ -11,6 +11,11 @@ export default { return { diseaseType: 1 } + }, + methods: { + submit() { + this.$refs.hypertensionForm.submit() + } } } </script> \ No newline at end of file diff --git a/src/doctor/followUp/separateFU/form/Index.vue b/src/doctor/followUp/separateFU/form/Index.vue index ccfc5ae..82968b1 100644 --- a/src/doctor/followUp/separateFU/form/Index.vue +++ b/src/doctor/followUp/separateFU/form/Index.vue @@ -8,12 +8,12 @@ <div class="p-4 h-overflow"> <BaseInfo v-if="step === 1" ref="baseInfo"></BaseInfo> - <FormCont v-if="step === 2"></FormCont> + <FormCont v-if="step === 2" ref="formCont"></FormCont> </div> <div class="bottom-small-line"></div> <div class="p-4"> <van-button v-if="step === 1" type="primary" block round @click="toNext">下一步</van-button> - <van-button v-if="step === 2" type="primary" block round>提交</van-button> + <van-button v-if="step === 2" type="primary" block round @click="onSubmit">提交</van-button> </div> </div> @@ -44,6 +44,9 @@ export default { // this.$refs.baseInfo.onSubmit() // console.log(666, obj) this.step = 2 + }, + onSubmit() { + this.$refs.formCont.submit() } } } diff --git a/src/doctor/followUp/separateFU/form/components/HypertensionForm.vue b/src/doctor/followUp/separateFU/form/components/HypertensionForm.vue index 9acc139..0efe61d 100644 --- a/src/doctor/followUp/separateFU/form/components/HypertensionForm.vue +++ b/src/doctor/followUp/separateFU/form/components/HypertensionForm.vue @@ -1,9 +1,10 @@ <template> - <van-form> + <van-form ref="form"> <div class="first-title"> <span class="font-semibold">随访信息</span> <div class="btn-title">引入数据</div> </div> + <!-- 随访方式 --> <div class="label-title mt-2" required>随访方式</div> <van-field v-model="form.visitWayName" @@ -33,37 +34,38 @@ </div> </div> </van-popup> - - <div class="label-title mt-2" required>采用纸质表格原因</div> - <van-field - v-model="form.paperReasonsName" - isLink - readonly - placeholder="请选择" - :rules="rules.paperReasonsName" - @click="showPaperReasons = true" - class="form-input" - /> - <van-popup v-model:show="showPaperReasons" position="bottom"> - <div class="p-4" style="height: 100%"> - <div class="flex justify-between items-center mb-4 pop-title"> - <div class="greyColor" @click="showPaperReasons = false">取消</div> - <div>采用纸质表格原因(单选)</div> - <div></div> - </div> - <div style="height: 80%; overflow: auto"> - <CheckBtn - clearable - column-1 - :options="store.getDict('CP00055')" - v-model:value="form.paperReasons" - :fieldNames="{ text: 'name', value: 'value' }" - @change="paperReasonsChange" - /> + <template v-if="form.visitWay === 5 || form.visitWay === 6"> + <div class="label-title mt-2">采用纸质表格原因</div> + <van-field + v-model="form.paperReasonsName" + isLink + readonly + placeholder="请选择" + :rules="rules.paperReasonsName" + @click="showPaperReasons = true" + class="form-input" + /> + <van-popup v-model:show="showPaperReasons" position="bottom"> + <div class="p-4" style="height: 100%"> + <div class="flex justify-between items-center mb-4 pop-title"> + <div class="greyColor" @click="showPaperReasons = false">取消</div> + <div>采用纸质表格原因(单选)</div> + <div></div> + </div> + <div style="height: 80%; overflow: auto"> + <CheckBtn + clearable + column-1 + :options="store.getDict('CP00055')" + v-model:value="form.paperReasons" + :fieldNames="{ text: 'name', value: 'value' }" + @change="paperReasonsChange" + /> + </div> </div> - </div> - </van-popup> - + </van-popup> + </template> + <!-- 症状 --> <div class="label-title mt-2" required>症状</div> <van-field v-model="form.symptomName" @@ -93,17 +95,15 @@ </div> </div> </van-popup> - <template v-if="(form.symptom || []).includes(99)"> <div class="label-title mt-2">其他症状</div> <van-field v-model="form.symptomOther" placeholder="请填写其他症状" - :rules="rules.symptomOther" class="form-input" /> </template> - + <!-- 血压 --> <div class="flex items-center justify-between tip-box mt-2 mb-2"> <div class="label-title" required>血压</div> <BloodPressurePanel :pressureObj="pressureObj" /> @@ -133,7 +133,7 @@ <td class="flex items-center"> <van-field v-model="form.signDiastolicPressure" - placeholder="60~300,整数" + placeholder="30~300,整数" :rules="rules.signDiastolicPressure" class="form-input" > @@ -144,9 +144,9 @@ </td> </tr> </table> - <BloodPressureBt :pressureObj="pressureObj" @getValue="setPressureOne">开始测量</BloodPressureBt> + <BloodPressureBt :pressureObj="pressureObj" @getValue="setPressure">开始测量</BloodPressureBt> <div class="tip">提示:点击“开始测量”按钮后将自动启动血压计设备,请勿再重复点击设备“开始/停止”按钮。</div> - + <!-- 身高 --> <div class="label-title mt-2" required>身高</div> <van-field v-model="form.signHeight" @@ -158,7 +158,7 @@ <span>cm</span> </template> </van-field> - + <!-- 体重 --> <div class="label-title mt-2" required>体重</div> <van-field v-model="form.signWeight" @@ -170,7 +170,8 @@ <span>kg</span> </template> </van-field> - <div class="label-title mt-2" required>BMI(体质指数)</div> + <!-- BMI --> + <div class="label-title mt-2">BMI(体质指数)</div> <van-field readonly v-model="form.signBmi" @@ -181,6 +182,7 @@ <span>kg/m²</span> </template> </van-field> + <!-- 腰围 --> <div class="label-title mt-2" required>腰围</div> <van-field v-model="form.signWaistline" @@ -192,6 +194,7 @@ <span>cm</span> </template> </van-field> + <!-- 心率 --> <div class="label-title mt-2" required>心率</div> <van-field v-model="form.signHeartRate" @@ -203,19 +206,20 @@ <span>次/分</span> </template> </van-field> + <!-- 其他体征 --> <div class="label-title mt-2">其他</div> <van-field type="textarea" v-model="form.signOther" + :maxlength="120" placeholder="如有其他体征情况请填写在此处,限120个字" - :rules="rules.signOther" class="form-input" /> - + <!-- 吸烟 --> <div class="label-title mt-2" required>吸烟</div> <div class="bg-fa"> <div class="label-title" required style="color: #262626; font-size: 14px">是否正在吸烟</div> - <van-field style="padding: 0"> + <van-field :rules="rules.isSmoking" style="padding: 0"> <template #input> <van-radio-group v-model="form.isSmoking" @@ -236,11 +240,12 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> + <div v-if="form.isSmoking === 1" class="bg-fa mt-2"> <div class="label-title" style="color: #262626; font-size: 14px">您大约从几岁起开始养成每天或基本每天都吸烟的习惯</div> <van-field v-model="form.startSmokeAge" placeholder="2~100,整数" + :rules="rules.startSmokeAge" class="card-input" > <template #extra> @@ -248,9 +253,9 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> - <div class="label-title" required style="color: #262626; font-size: 14px">您最近7天是否吸烟</div> - <van-field style="padding: 0; width: 100%"> + <div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2"> + <div class="label-title" style="color: #262626; font-size: 14px">您最近7天是否吸烟</div> + <van-field style="padding: 0"> <template #input> <van-radio-group v-model="form.lastSevenSmoke" @@ -271,11 +276,12 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> + <div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2"> <div class="label-title" style="color: #262626; font-size: 14px">日吸烟量</div> <van-field v-model="form.daySmoking" placeholder="0~100,整数" + :rules="rules.daySmoking" class="card-input" > <template #extra> @@ -283,11 +289,12 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> + <div v-if="form.isSmoking === 1 || form.isSmoking === 2" class="bg-fa mt-2"> <div class="label-title" style="color: #262626; font-size: 14px">目标日吸烟量</div> <van-field v-model="form.goalDaySmoking" placeholder="0~100,整数" + :rules="rules.goalDaySmoking" class="card-input" > <template #extra> @@ -295,11 +302,11 @@ </template> </van-field> </div> - + <!-- 饮酒 --> <div class="label-title mt-2" required>饮酒</div> <div class="bg-fa"> <div class="label-title" required style="color: #262626; font-size: 14px">是否正在饮酒</div> - <van-field style="padding: 0"> + <van-field :rules="rules.isDrink" style="padding: 0"> <template #input> <van-radio-group v-model="form.isDrink" @@ -320,8 +327,8 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> - <div class="label-title" required style="color: #262626; font-size: 14px">饮酒频率</div> + <div v-if="form.isDrink === 1" class="bg-fa mt-2"> + <div class="label-title" style="color: #262626; font-size: 14px">饮酒频率</div> <van-field style="padding: 0"> <template #input> <van-radio-group @@ -343,12 +350,13 @@ </template> </van-field> </div> - <div class="flex mt-2"> + <div v-if="form.isDrink === 1 || form.isDrink === 2" class="flex mt-2"> <div class="bg-fa"> <div class="label-title" style="color: #262626; font-size: 14px">日饮酒量</div> <van-field v-model="form.dayDrink" placeholder="0~3000,整数" + :rules="rules.dayDrink" class="card-input" > <template #extra> @@ -361,6 +369,7 @@ <van-field v-model="form.goalDayDrink" placeholder="0~3000,整数" + :rules="rules.goalDayDrink" class="card-input" > <template #extra> @@ -369,80 +378,79 @@ </van-field> </div> </div> - <div class="bg-fa mt-2"> + <div v-if="form.isDrink === 1 || form.isDrink === 2" class="bg-fa mt-2"> <div class="label-title" style="color: #262626; font-size: 14px">饮酒种类</div> - <div class="flex"> - <van-field - label="白酒" - v-model="form.drinkLiquor" - placeholder="0~3000,整数" - class="card-input" - label-width="33px" - label-class="label-mr" - > - <template #extra> - <span>ml/日</span> - </template> - </van-field> - <van-field - label="啤酒" - v-model="form.drinkBeer" - placeholder="0~3000,整数" - class="card-input ml-2" - label-width="33px" - label-class="label-mr" - > - <template #extra> - <span>ml/日</span> - </template> - </van-field> - </div> - <div class="flex mt-2"> - <van-field - label="红酒" - v-model="form.drinkRed" - placeholder="0~3000,整数" - class="card-input" - label-width="33px" - label-class="label-mr" - > - <template #extra> - <span>ml/日</span> - </template> - </van-field> - <van-field - label="黄酒" - v-model="form.drinkYellow" - placeholder="0~3000,整数" - class="card-input ml-2" - label-width="33px" - label-class="label-mr" - > - <template #extra> - <span>ml/日</span> - </template> - </van-field> - </div> - <div class="flex mt-2"> - <van-field - label="其他" - v-model="form.drinkOther" - placeholder="0~3000,整数" - class="card-input" - label-width="33px" - label-class="label-mr" - > - <template #extra> - <span>ml/日</span> - </template> - </van-field> - </div> + <van-field + label="白酒" + v-model="form.drinkLiquor" + placeholder="0~3000,整数" + :rules="rules.drinkLiquor" + class="card-input" + label-width="32px" + label-class="label-mr" + > + <template #extra> + <span>ml/日</span> + </template> + </van-field> + <van-field + label="啤酒" + v-model="form.drinkBeer" + placeholder="0~3000,整数" + :rules="rules.drinkBeer" + class="card-input mt-2" + label-width="32px" + label-class="label-mr" + > + <template #extra> + <span>ml/日</span> + </template> + </van-field> + <van-field + label="红酒" + v-model="form.drinkRed" + placeholder="0~3000,整数" + :rules="rules.drinkRed" + class="card-input mt-2" + label-width="32px" + label-class="label-mr" + > + <template #extra> + <span>ml/日</span> + </template> + </van-field> + <van-field + label="黄酒" + v-model="form.drinkYellow" + placeholder="0~3000,整数" + :rules="rules.drinkYellow" + class="card-input mt-2" + label-width="32px" + label-class="label-mr" + > + <template #extra> + <span>ml/日</span> + </template> + </van-field> + <van-field + label="其他" + v-model="form.drinkOther" + placeholder="0~3000,整数" + :rules="rules.drinkOther" + class="card-input mt-2" + label-width="32px" + label-class="label-mr" + > + <template #extra> + <span>ml/日</span> + </template> + </van-field> </div> - + <!-- 运动 --> <div class="label-title mt-2" required>运动</div> <div class="bg-fa"> <div class="label-title" required style="color: #262626; font-size: 14px">有无规律活动</div> - <van-field style="padding: 0"> + <van-field :rules="rules.regularExercise" style="padding: 0"> <template #input> <van-radio-group v-model="form.regularExercise" @@ -463,9 +471,9 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> + <div v-if="form.regularExercise === 1" class="bg-fa mt-2"> <div class="label-title" required style="color: #262626; font-size: 14px">运动强度</div> - <van-field style="padding: 0"> + <van-field :rules="rules.exerciseStrength" style="padding: 0"> <template #input> <van-radio-group v-model="form.exerciseStrength" @@ -492,6 +500,7 @@ <van-field v-model="form.nowExerciseWeek" placeholder="0~50,整数" + :rules="rules.nowExerciseWeek" class="card-input" > <template #extra> @@ -501,6 +510,7 @@ <van-field v-model="form.nowExerciseMinute" placeholder="0~500,整数" + :rules="rules.nowExerciseMinute" class="card-input ml-2" > <template #extra> @@ -515,6 +525,7 @@ <van-field v-model="form.targetExerciseWeek" placeholder="0~50,整数" + :rules="rules.targetExerciseWeek" class="card-input" > <template #extra> @@ -524,6 +535,7 @@ <van-field v-model="form.targetExerciseMinute" placeholder="0~500,整数" + :rules="rules.targetExerciseMinute" class="card-input ml-2" > <template #extra> @@ -532,9 +544,9 @@ </van-field> </div> </div> - + <!-- 摄盐情况 --> <div class="label-title mt-2" required>摄盐情况(咸淡)</div> - <van-field style="padding: 0"> + <van-field :rules="rules.saltIntake" style="padding: 0"> <template #input> <van-radio-group v-model="form.saltIntake" @@ -553,8 +565,9 @@ </van-radio-group> </template> </van-field> + <!-- 心理调整 --> <div class="label-title mt-2" required>心理调整</div> - <van-field style="padding: 0"> + <van-field :rules="rules.psychologicalRecovery" style="padding: 0"> <template #input> <van-radio-group v-model="form.psychologicalRecovery" @@ -573,8 +586,9 @@ </van-radio-group> </template> </van-field> + <!-- 遵医行为 --> <div class="label-title mt-2" required>遵医行为</div> - <van-field style="padding: 0"> + <van-field :rules="rules.doctorAdvice" style="padding: 0"> <template #input> <van-radio-group v-model="form.doctorAdvice" @@ -623,10 +637,11 @@ </div> </van-popup> --> + <!-- 目前高血压用药及依从性 --> <div class="label-title mt-2" required>目前高血压用药及依从性</div> <div class="bg-fa"> <div class="label-title" required style="color: #262626; font-size: 14px; line-height: 24px">您目前是否在服用降压药、降脂(如他汀类)或抗血小板(如阿司匹林)等心血管病相关药物</div> - <van-field style="padding: 0"> + <van-field :rules="rules.medicationCompliance" style="padding: 0"> <template #input> <van-radio-group v-model="form.medicationCompliance" @@ -647,7 +662,8 @@ </template> </van-field> </div> - <div class="bg-fa mt-2"> + + <!-- <div class="bg-fa mt-2"> <div class="label-title" required style="color: #262626; font-size: 14px; line-height: 24px">请您确认患者目前服用的降压药、降脂或抗血小板药,在下表中修改或增加,并记录上次随访以来服用的降压药物的依从性</div> <div style="background-color: #FFF; padding: 8px; border-radius: 10px"> <van-field @@ -711,10 +727,10 @@ </van-field> </div> - </div> - + </div> --> + <!-- 药物不良反应 --> <div class="label-title mt-2" required>药物不良反应</div> - <van-field style="padding: 0"> + <van-field :rules="rules.drugsAdverse" style="padding: 0"> <template #input> <van-radio-group v-model="form.drugsAdverse" @@ -733,17 +749,19 @@ </van-radio-group> </template> </van-field> - <div class="bg-fa mt-2"> + <div v-if="form.drugsAdverse === 1" class="bg-fa mt-2"> <div class="label-title" style="color: #262626; font-size: 14px">不良反应</div> <van-field + type="textarea" v-model="form.drugsAdverseOther" - placeholder="填写具体描述哪种药物,何种不良反应,限120字" + :maxlength="120" + placeholder="请填写具体描述哪种药物,何种不良反应,限120字" class="card-input" /> </div> - + <!-- 此次随访分类 --> <div class="label-title mt-2" required>此次随访分类</div> - <van-field style="padding: 0"> + <van-field :rules="rules.visitType" style="padding: 0"> <template #input> <van-radio-group v-model="form.visitType" @@ -763,7 +781,7 @@ </van-radio-group> </template> </van-field> - + <!-- 目前诊断 --> <div class="label-title mt-2" required>目前诊断</div> <van-field v-model="form.currentDiagnosisName" @@ -778,7 +796,7 @@ <div class="p-4" style="height: 100%"> <div class="flex justify-between items-center mb-4 pop-title"> <div class="greyColor" @click="showCurrentDiagnosis = false">取消</div> - <div>症状(可多选)</div> + <div>目前诊断(可多选)</div> <div class="blueColor" @click="currentDiagnosisConfirm">确定</div> </div> <div style="height: 80%; overflow: auto"> @@ -792,22 +810,415 @@ </div> </div> </van-popup> + <!-- 转诊 --> + <div class="label-title mt-2" required>转诊</div> + <van-field :rules="rules.isReferral" style="padding: 0"> + <template #input> + <van-radio-group + v-model="form.isReferral" + shape="dot" + direction="horizontal" + class="w-full doc-radio-group" + > + <van-radio + v-for="item in store.getDict('DC00069')" + :key="item.value" + :name="item.value" + label-position="left" + > + {{ item.name }} + </van-radio> + </van-radio-group> + </template> + </van-field> + <div v-if="form.isReferral === 1" class="bg-fa mt-2"> + <div style="background-color: #fff; padding: 8px; border-radius: 8px"> + <div style="color: #262626; font-size: 14px">转诊原因</div> + <van-field + type="textarea" + v-model="form.referralReason" + :maxlength="120" + placeholder="请填写具体描述转诊原因,限120字" + class="form-input mt-2" + /> + </div> + <div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2"> + <div style="color: #262626; font-size: 14px">转诊机构</div> + <van-field + v-model="form.referralUnitName" + is-link + readonly + placeholder="请选择" + @click="showReferralUnit = true" + class="form-input mt-2" + /> + <DocUnit + v-model:show="showReferralUnit" + v-model:value="form.referralUnitId" + :valueName="form?.referralUnitName" + @change="referralUnitChange" + /> + </div> + <div style="background-color: #fff; padding: 8px; border-radius: 8px" class="mt-2"> + <div style="color: #262626; font-size: 14px">转诊科室</div> + <van-field + v-model="form.referralOfficeName" + is-link + readonly + placeholder="请选择" + @click="showReferralOffice = true" + class="form-input mt-2" + /> + <DocOffice + v-model:show="showReferralOffice" + v-model:value="form.referralOfficeId" + :unitId="form.referralUnitId" + @change="referralOfficeChange" + /> + </div> + </div> + <!-- 现场随访照片 --> + <div class="label-title mt-2">现场随访照片</div> + <DocImageUpload + description="最多支持上传8个文件,支持上传图片或PDF文件,图片支持上传jpg、png、jpeg格式,文件大小请勿超过10M。" + lengthMessage="抱歉,最多可上传8个文件。" + :imageData="[]" + @change="(ids, option) => form.visitImage = ids" + :maxLength="8" + /> + <!-- 下次随访日期 --> + <div class="label-title" required>下次随访日期</div> + <van-field + v-model="form.nextVisitDate" + isLink + readonly + placeholder="请选择" + :rules="rules.nextVisitDate" + @click="showNextVisitDate = true" + class="form-input" + /> + <van-popup v-model:show="showNextVisitDate" position="bottom"> + <van-date-picker + v-model="form._nextVisitDate" + :min-date="nextVisitDateRange.min" + :max-date="nextVisitDateRange.max" + @confirm="nextVisitDateConfirm" + @cancel="showNextVisitDate = false" + /> + </van-popup> </van-form> </template> <script> import { useStore } from '@/doctor/store' import CheckBtn from '@/doctor/components/checkBtn/CheckBtn.vue' -import { checkboxReject } from '@/utils/common' +import { checkboxReject, calculateBMI } from '@/utils/common' import BloodPressurePanel from '@/doctor/components/bloodPressure/BloodPressurePanel.vue' import BloodPressureBt from '@/doctor/components/bloodPressure/BloodPressureBt.vue' +import DocImageUpload from '@/doctor/components/docImageUpload/DocImageUpload.vue' +import DocUnit from '@/doctor/components/docUnit/DocUnit.vue' +import DocOffice from '@/doctor/components/docOffice/DocOffice.vue' export default { - components: { CheckBtn, BloodPressurePanel, BloodPressureBt }, + components: { CheckBtn, BloodPressurePanel, BloodPressureBt, DocImageUpload, DocUnit, DocOffice }, inject: ['pressureObj'], data() { return { store: useStore(), form: {}, - rules: {}, + rules: { + visitWayName: [ + { required: true, message: '请选择随访方式' } + ], + symptomName: [ + { required: true, message: '请选择症状' } + ], + signSystolicPressure: [ + { required: true, message: '请填写收缩压' } + ], + signDiastolicPressure: [ + { required: true, message: '请填写舒张压' } + ], + signHeight: [ + { required: true, message: '请填写身高' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+(\.\d{1})?$/ + if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 300)) { + res = false + } + return res + }, + message: `请输入10到300之间的数字,允许一位小数` + } + ], + signWeight: [ + { required: true, message: '请填写体重' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+(\.\d{1,2})?$/ + if (value && !(regex.test(value) && Number(value) >= 20 && Number(value) <= 500)) { + res = false + } + return res + }, + message: `请输入20到500之间的数字,允许两位小数` + } + ], + signWaistline: [ + { required: true, message: '请填写腰围' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+(\.\d{1})?$/ + if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 150)) { + res = false + } + return res + }, + message: `请输入10到150之间的数字,允许一位小数` + } + ], + signHeartRate: [ + { required: true, message: '请填写心率' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 10 && Number(value) <= 200)) { + res = false + } + return res + }, + message: `请输入10到200之间的整数` + } + ], + isSmoking: [ + { required: true, message: '请选择' } + ], + startSmokeAge: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 2 && Number(value) <= 100)) { + res = false + } + return res + }, + message: `请输入2到100之间的整数` + } + ], + daySmoking: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) { + res = false + } + return res + }, + message: `请输入0到100之间的整数` + } + ], + goalDaySmoking: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 100)) { + res = false + } + return res + }, + message: `请输入0到100之间的整数` + } + ], + isDrink: [ + { required: true, message: '请选择' } + ], + dayDrink: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + goalDayDrink: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + drinkLiquor: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + drinkBeer: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + drinkRed: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + drinkYellow: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + drinkOther: [ + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 3000)) { + res = false + } + return res + }, + message: `请输入0到3000之间的整数` + } + ], + regularExercise: [ + { required: true, message: '请选择' } + ], + exerciseStrength: [ + { required: true, message: '请选择' } + ], + nowExerciseWeek: [ + { required: true, message: '请输入' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) { + res = false + } + return res + }, + message: `请输入0到50之间的整数` + } + ], + nowExerciseMinute: [ + { required: true, message: '请输入' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) { + res = false + } + return res + }, + message: `请输入0到500之间的整数` + } + ], + targetExerciseWeek: [ + { required: true, message: '请输入' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 50)) { + res = false + } + return res + }, + message: `请输入0到50之间的整数` + } + ], + targetExerciseMinute: [ + { required: true, message: '请输入' }, + { + validator: (value, rule) => { + let res = true + const regex = /^\d+$/ + if (value && !(regex.test(value) && Number(value) >= 0 && Number(value) <= 500)) { + res = false + } + return res + }, + message: `请输入0到500之间的整数` + } + ], + saltIntake: [ + { required: true, message: '请选择' } + ], + psychologicalRecovery: [ + { required: true, message: '请选择' } + ], + doctorAdvice: [ + { required: true, message: '请选择' } + ], + medicationCompliance: [ + { required: true, message: '请选择' } + ], + drugsAdverse: [ + { required: true, message: '请选择' } + ], + visitType: [ + { required: true, message: '请选择' } + ], + currentDiagnosisName: [ + { required: true, message: '请选择' } + ], + isReferral: [ + { required: true, message: '请选择' } + ], + nextVisitDate: [ + { required: true, message: '请选择' } + ] + }, showVisitWay: false, list: [ { @@ -838,11 +1249,19 @@ export default { showPaperReasons: false, showSymptom: false, // showAuxiliaryExamination: false - showCurrentDiagnosis: false + showCurrentDiagnosis: false, + showReferralUnit: false, + showReferralOffice: false, + showNextVisitDate: false, + nextVisitDateRange: { + min: undefined, + max: undefined + } } }, methods: { checkboxReject, + calculateBMI, visitWayChange() { this.list.forEach(item => { if (item.value === this.form.visitWay) { @@ -880,7 +1299,7 @@ export default { }) this.form.currentDiagnosisName = list.join() this.showCurrentDiagnosis = false - } + }, // auxiliaryConfirm() { // let list = [] // this.store.getDict('CP00073').forEach(item => { @@ -892,6 +1311,41 @@ export default { // this.form.auxiliaryExaminationName = list.join() // this.showAuxiliaryExamination = false // } + setPressure(val) { + if (!val) return + this.form.signSystolicPressure = val.systolicPressure + this.form.signDiastolicPressure = val.diastolicPressure + }, + referralUnitChange(option = {}) { + this.form.referralUnitName = option.unitName + }, + referralOfficeChange(option = {}) { + this.form.referralOfficeName = option.officeName + }, + nextVisitDateConfirm({ selectedValues }) { + this.form.nextVisitDate = selectedValues.join('-') + this.showNextVisitDate = false + }, + + submit() { + this.$refs.form.validate().then(() => { + console.log(this.form) + }).catch(e => { + + }) + } + }, + watch: { + 'form.signHeight': { + handler() { + this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight) + } + }, + 'form.signWeight': { + handler() { + this.form.signBmi = this.calculateBMI(this.form.signHeight, this.form.signWeight) + } + }, } } </script> @@ -955,6 +1409,7 @@ export default { color: #FA8C16; font-size: 12px; margin-top: 8px; + line-height: 16px; } .bg-fa { background-color: #FAFAFA; @@ -980,6 +1435,6 @@ export default { border-radius: 8px; } :deep(.label-mr) { - margin-right: 4px; + margin-right: 8px; } </style> \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index 978ffdd..77bc1ec 100644 --- a/vue.config.js +++ b/vue.config.js @@ -30,12 +30,12 @@ module.exports = defineConfig({ } }, '/chronic-admin': { - // target: 'https://beta-tumour.zmnyjk.com', - target: 'http://192.168.1.126:8900', + target: 'https://beta-tumour.zmnyjk.com', + // target: 'http://192.168.1.126:8900', changOrigin: true, pathRewrite: { - '^/chronic-admin': '/' - // '^/chronic-admin': '/chronic-admin' + // '^/chronic-admin': '/' + '^/chronic-admin': '/chronic-admin' } }, '/chronic-resident': { -- 2.18.0