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