From 70e4d2c33cc2e3af590d1816c0c703da341538cf Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期五, 04 九月 2026 14:13:32 +0800
Subject: [PATCH] 测试完成

---
 src/views/followvisit/outpatient/index.vue                            |    7 
 src/views/followvisit/zbAgain/index.vue                               |    4 
 src/views/patient/subsequent/index.vue                                |    5 
 src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue |   15 
 src/views/followvisit/zysatisfaction/index.vue                        |  183 ++-
 src/views/patient/propaganda/QuestionnaireTask.vue                    |   44 
 src/views/followvisit/mzsatisfaction/index.vue                        |  183 ++-
 src/views/patient/propaganda/index.vue                                |  143 ++
 src/views/followvisit/record/detailpage/index.vue                     |    1 
 src/store/getters.js                                                  |    8 
 src/views/followvisit/discharge/outpatientService.vue                 |   85 +
 src/views/knowledge/education/compilequer/index.vue                   |    2 
 src/views/patient/propaganda/Missioncreation.vue                      |   57 
 src/components/StatisticsCards/index.vue                              |   10 
 src/views/followvisit/discharge/index copy.vue                        |    2 
 src/views/patient/ycquestionnaire/index.vue                           | 1298 ++++++++++++++++++++++++
 src/views/followvisit/complaint/index.vue                             |    4 
 src/views/followvisit/discharge/index.vue.bak                         |    2 
 src/views/followvisit/technology/index.vue                            |    4 
 src/views/patient/physical/index.vue                                  |    5 
 src/store/modules/user.js                                             |    6 
 src/views/followvisit/SpecificDisease/index.vue                       |    2 
 src/views/followvisit/again/index.vue                                 |    3 
 src/views/followvisit/operation/index.vue                             |    6 
 src/views/followvisit/Tracking/index.vue                              |    2 
 src/views/followvisit/beHospitalized/followUp.vue                     |    4 
 src/views/patient/questionnaire/index.vue                             |  160 ++
 src/views/Satisfaction/configurationmyd/batch.vue                     |  616 +++++++++-
 src/views/followvisit/record/index.vue                                |    4 
 src/views/followvisit/Continue/index.vue                              |   79 +
 src/views/followvisit/OutpatientAgain/index.vue                       |    3 
 /dev/null                                                             |    0 
 src/views/followvisit/HistoricalFollow/index.vue                      |    2 
 src/views/sfstatistics/percentage/index.vue                           |    3 
 src/views/patient/shadow/index.vue                                    |    2 
 src/views/patient/propaganda/particty.vue                             |   78 
 src/views/followvisit/discharge/index.vue                             |  161 ++
 37 files changed, 2,782 insertions(+), 411 deletions(-)

diff --git a/dist.zip b/dist.zip
deleted file mode 100644
index ce833b6..0000000
--- a/dist.zip
+++ /dev/null
Binary files differ
diff --git a/src/components/StatisticsCards/index.vue b/src/components/StatisticsCards/index.vue
index 3f44f00..1b45c11 100644
--- a/src/components/StatisticsCards/index.vue
+++ b/src/components/StatisticsCards/index.vue
@@ -106,6 +106,11 @@
         闇�闅忚: "need-follow-card",
         寰呴殢璁�: "pending-card",
         宸插畬鎴�: "completed-card",
+        浣忛櫌鎬婚噺: "total-card",
+        闂ㄨ瘖鎬婚噺: "total-card",
+        鍙戦�佷换鍔¢噺: "need-follow-card",
+        寰呭畬鎴�: "pending-card",
+        瀹屾垚鐜�: "completed-card",
         寮傚父: "error-card",
         璀﹀憡: "warning-card",
       };
@@ -119,6 +124,11 @@
         闇�闅忚: "闇�闅忚 = 寰呴殢璁� + 宸插畬鎴�",
         寰呴殢璁�: "寰呴殢璁匡細绛夊緟杩涜闅忚鐨勬偅鑰呮暟閲�",
         宸插畬鎴�: "宸插畬鎴愶細宸插畬鎴愰殢璁跨殑鎮h�呮暟閲�",
+        浣忛櫌鎬婚噺: "浣忛櫌婊℃剰搴︽偅鑰呮�婚噺",
+        闂ㄨ瘖鎬婚噺: "闂ㄨ瘖婊℃剰搴︽偅鑰呮�婚噺",
+        鍙戦�佷换鍔¢噺: "鍙戦�佷换鍔¢噺 = 鎮h�呮湇鍔℃�婚噺",
+        寰呭畬鎴�: "寰呭畬鎴愶細寰呴殢璁跨殑鎮h�呮暟閲�",
+        瀹屾垚鐜�: "瀹屾垚鐜� = 宸插畬鎴� 梅 (寰呭畬鎴� + 宸插畬鎴�)",
         寮傚父: "寮傚父鏁版嵁缁熻",
         璀﹀憡: "璀﹀憡鏁版嵁缁熻",
       };
diff --git a/src/store/getters.js b/src/store/getters.js
index a65dc24..d24914b 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -787,6 +787,14 @@
         listClass: "",
       },
     },
+    {
+      value: 20,
+      label: "鎮h�呭紓甯告姤鍛�",
+      raw: {
+        cssClass: "",
+        listClass: "",
+      },
+    },
   ],
 };
 
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index c42f8f7..d98a63f 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -257,6 +257,12 @@
               localStorage.setItem("deptCode", "");
               localStorage.setItem("YongHuID", "1540295571200282624");
               localStorage.setItem("YongHuXM", "LSDERMYY");
+            }else if (orgid == "1") {
+              localStorage.setItem("orgname", "娴欐睙鐪佹柊鍗庡尰闄�");
+              localStorage.setItem("ZuHuID", "");
+              localStorage.setItem("deptCode", "");
+              localStorage.setItem("YongHuID", "");
+              localStorage.setItem("YongHuXM", "");
             }
             resolve();
           })
diff --git a/src/views/Satisfaction/configurationmyd/batch.vue b/src/views/Satisfaction/configurationmyd/batch.vue
index 750c893..59ada45 100644
--- a/src/views/Satisfaction/configurationmyd/batch.vue
+++ b/src/views/Satisfaction/configurationmyd/batch.vue
@@ -211,7 +211,7 @@
                 </div>
                 <div class="info-item">
                   <span class="label">澶勭悊璇存槑锛�</span>
-                  <span class="value">{{ row.handledesc }}</span>
+                  <span class="value">{{ formatHandledesc(row.handledesc) }}</span>
                 </div>
               </div>
               <span v-else class="no-data">鏈鐞�</span>
@@ -238,7 +238,7 @@
                 size="small"
                 icon="el-icon-edit"
                 @click="handleProcess(row)"
-                :disabled="row.handleFlag === '1'"
+                :disabled="row.handleresult === 'resolved'"
               >
                 澶勭悊
               </el-button>
@@ -266,88 +266,258 @@
     <el-dialog
       title="澶勭悊寮傚父鍙嶉"
       :visible.sync="processDialogVisible"
-      width="600px"
+      width="60%"
+      top="6vh"
       center
     >
-      <el-form
-        :model="processForm"
-        :rules="processRules"
-        ref="processForm"
-        label-width="100px"
-        size="medium"
-      >
-        <el-form-item label="澶勭悊鐘舵��" prop="handleFlag">
-          <el-select
-            v-model="processForm.handleFlag"
-            placeholder="璇烽�夋嫨澶勭悊鐘舵��"
-            style="width: 100%"
+      <div class="flow-dialog-body">
+        <!-- 宸﹀崐閮ㄥ垎锛氬鐞嗕俊鎭� -->
+        <div class="flow-left">
+          <el-form
+            :model="processForm"
+            :rules="processRules"
+            ref="processForm"
+            label-width="100px"
+            size="medium"
           >
-            <el-option label="宸插鐞�" :value="'1'" />
-            <el-option label="鍙栨秷澶勭悊" :value="'0'" />
-          </el-select>
-        </el-form-item>
+            <el-form-item label="鏄惁娴佽浆" prop="isFlow">
+              <el-switch
+                v-model="processForm.isFlow"
+                active-value="1"
+                inactive-value="0"
+                active-text="娴佽浆"
+                inactive-text="涓嶆祦杞�"
+              />
+            </el-form-item>
 
-        <el-form-item label="鎶ュ绉戝" prop="ccdepts">
-          <el-select
-            v-model="processForm.ccdepts"
-            placeholder="璇烽�夋嫨鎶ュ绉戝"
-            multiple
-            filterable
-            collapse-tags
-            style="width: 100%"
-            :disabled="processForm.handleFlag !== '1'"
-          >
-            <el-option
-              v-for="dept in deptList"
-              :key="dept.deptCode"
-              :label="dept.label"
-              :value="dept.deptCode"
-            />
-          </el-select>
-        </el-form-item>
+            <el-form-item label="澶勭悊鐘舵��" prop="handleFlag">
+              <el-select
+                v-model="processForm.handleFlag"
+                placeholder="璇烽�夋嫨澶勭悊鐘舵��"
+                style="width: 100%"
+              >
+                <el-option label="宸插鐞�" :value="'1'" />
+                <el-option label="鍙栨秷澶勭悊" :value="'0'" />
+              </el-select>
+            </el-form-item>
 
-        <el-form-item label="澶勭悊缁撴灉" prop="handleresult">
-          <el-select
-            v-model="processForm.handleresult"
-            placeholder="璇烽�夋嫨澶勭悊缁撴灉"
-            style="width: 100%"
-            :disabled="processForm.handleFlag !== '1'"
-          >
-            <el-option label="宸茶В鍐�" value="resolved" />
-            <el-option label="宸茶В閲�" value="explained" />
-            <el-option label="宸茶浆浜�" value="transferred" />
-            <el-option label="闇�鏀硅繘" value="improvement" />
-            <el-option label="宸查┏鍥�" value="rejected" />
-          </el-select>
-        </el-form-item>
+            <el-form-item label="鎶ュ绉戝" prop="ccdepts">
+              <el-select
+                v-model="processForm.ccdepts"
+                placeholder="璇烽�夋嫨鎶ュ绉戝"
+                multiple
+                filterable
+                collapse-tags
+                style="width: 100%"
+                :disabled="processForm.handleFlag !== '1'"
+              >
+                <el-option
+                  v-for="dept in deptList"
+                  :key="dept.deptCode"
+                  :label="dept.label"
+                  :value="dept.deptCode"
+                />
+              </el-select>
+            </el-form-item>
 
-        <el-form-item label="澶勭悊璇存槑" prop="handledesc">
-          <el-input
-            v-model="processForm.handledesc"
-            type="textarea"
-            :rows="4"
-            placeholder="璇疯緭鍏ュ鐞嗚鏄庯紙鏈�澶�500瀛楋級"
-            maxlength="500"
-            show-word-limit
-            :disabled="processForm.handleFlag !== '1'"
-          />
-        </el-form-item>
+            <el-form-item label="澶勭悊缁撴灉" prop="handleresult">
+              <el-select
+                v-model="processForm.handleresult"
+                placeholder="璇烽�夋嫨澶勭悊缁撴灉"
+                style="width: 100%"
+                :disabled="processForm.handleFlag !== '1'"
+              >
+                <el-option label="宸茶В鍐�" value="resolved" />
+                <el-option label="宸茶В閲�" value="explained" />
+                <el-option label="宸茶浆浜�" value="transferred" />
+                <el-option label="闇�鏀硅繘" value="improvement" />
+                <el-option label="宸查┏鍥�" value="rejected" />
+              </el-select>
+            </el-form-item>
 
-        <el-form-item
-          label="鏈�缁堟剰瑙�"
-          prop="finaloption"
-          v-if="hasQualityPermission"
-        >
-          <el-input
-            v-model="processForm.finaloption"
-            type="textarea"
-            :rows="3"
-            placeholder="璇疯緭鍏ユ渶缁堝鐞嗘剰瑙侊紙鏈�澶�300瀛楋級"
-            maxlength="300"
-            show-word-limit
-          />
-        </el-form-item>
-      </el-form>
+            <el-form-item label="澶勭悊璇存槑" prop="handledesc">
+              <el-input
+                v-model="processForm.handledesc"
+                type="textarea"
+                :rows="4"
+                placeholder="璇疯緭鍏ュ鐞嗚鏄庯紙鏈�澶�500瀛楋級"
+                maxlength="500"
+                show-word-limit
+                :disabled="processForm.handleFlag !== '1'"
+              />
+            </el-form-item>
+
+            <el-form-item
+              label="鏈�缁堟剰瑙�"
+              prop="finaloption"
+              v-if="hasQualityPermission"
+            >
+              <el-input
+                v-model="processForm.finaloption"
+                type="textarea"
+                :rows="3"
+                placeholder="璇疯緭鍏ユ渶缁堝鐞嗘剰瑙侊紙鏈�澶�300瀛楋級"
+                maxlength="300"
+                show-word-limit
+              />
+            </el-form-item>
+          </el-form>
+        </div>
+
+        <!-- 鍙冲崐閮ㄥ垎锛氭祦杞椂闂寸嚎锛堥�変腑娴佽浆鍚庡睍寮�锛� -->
+        <div class="flow-right" v-if="processForm.isFlow === '1'">
+          <el-timeline>
+            <el-timeline-item type="primary" placement="top" color="#5788fe">
+              <div class="flow-step-title">绗竴姝� 路 娴佽浆鍙戣捣</div>
+              <el-form label-width="90px" size="small" class="flow-step-form">
+                <el-form-item label="娴佽浆浜�">
+                  <el-input
+                    v-model="processForm.flowPerson"
+                    placeholder="娴佽浆浜猴紙榛樿褰撳墠鐢ㄦ埛锛�"
+                  />
+                </el-form-item>
+                <el-form-item label="娴佽浆浜虹紪鍙�">
+                  <el-input
+                    v-model="processForm.flowPersonCode"
+                    placeholder="娴佽浆浜虹紪鍙凤紙榛樿褰撳墠鐢ㄦ埛宸ュ彿锛�"
+                  />
+                </el-form-item>
+                <el-form-item label="娴佽浆鏃堕棿">
+                  <el-date-picker
+                    v-model="processForm.flowTime"
+                    type="datetime"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                    placeholder="娴佽浆鏃堕棿"
+                    style="width: 100%"
+                  />
+                </el-form-item>
+                <el-form-item label="娴佽浆璇存槑">
+                  <el-input
+                    v-model="processForm.flowDesc"
+                    type="textarea"
+                    :rows="2"
+                    placeholder="璇疯緭鍏ユ祦杞鏄�"
+                  />
+                </el-form-item>
+                <el-form-item label="娴佽浆绉戝">
+                  <el-select
+                    v-model="processForm.flowDepts"
+                    multiple
+                    filterable
+                    collapse-tags
+                    placeholder="璇烽�夋嫨娴佽浆绉戝"
+                    style="width: 100%"
+                    @change="onFlowDeptChange"
+                  >
+                    <el-option
+                      v-for="dept in deptList"
+                      :key="dept.deptCode"
+                      :label="dept.label"
+                      :value="dept.deptCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="娴佽浆绉戝code">
+                  <el-select
+                    v-model="processForm.flowDeptCodes"
+                    multiple
+                    disabled
+                    placeholder="閫夋嫨绉戝鍚庤嚜鍔ㄧ敓鎴�"
+                    style="width: 100%"
+                  >
+                    <el-option
+                      v-for="code in processForm.flowDeptCodes"
+                      :key="code"
+                      :label="code"
+                      :value="code"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="鎺ㄩ�佽礋璐d汉">
+                  <el-select
+                    v-model="processForm.pushUsers"
+                    multiple
+                    filterable
+                    collapse-tags
+                    placeholder="璇烽�夋嫨鎺ㄩ�佽礋璐d汉"
+                    style="width: 100%"
+                    @change="onPushUserChange"
+                  >
+                    <el-option
+                      v-for="u in userList"
+                      :key="u.userId"
+                      :label="u.nickName || u.userName"
+                      :value="u.userId"
+                    />
+                  </el-select>
+                </el-form-item>
+              </el-form>
+            </el-timeline-item>
+
+            <el-timeline-item type="primary" placement="top" color="#e6a23c">
+              <div class="flow-step-title">绗簩姝� 路 绉戝鍙嶉</div>
+              <el-table
+                :data="processForm.flowFeedbacks"
+                border
+                size="mini"
+                v-if="processForm.flowFeedbacks.length > 0"
+              >
+                <el-table-column
+                  label="绉戝"
+                  prop="deptName"
+                  width="120"
+                  align="center"
+                />
+                <el-table-column label="鏄惁鍚屾剰" width="130" align="center">
+                  <template slot-scope="scope">
+                    <el-select
+                      v-model="scope.row.agree"
+                      placeholder="璇烽�夋嫨"
+                      size="mini"
+                    >
+                      <el-option label="鍚屾剰" value="1" />
+                      <el-option label="涓嶅悓鎰�" value="0" />
+                    </el-select>
+                  </template>
+                </el-table-column>
+                <el-table-column label="鍏蜂綋璇存槑" min-width="200" align="center">
+                  <template slot-scope="scope">
+                    <el-input
+                      v-model="scope.row.desc"
+                      placeholder="璇疯緭鍏ュ叿浣撹鏄�"
+                      size="mini"
+                    />
+                  </template>
+                </el-table-column>
+              </el-table>
+              <div v-else class="flow-empty-tip">
+                璇峰厛鍦ㄧ涓�姝ラ�夋嫨娴佽浆绉戝
+              </div>
+            </el-timeline-item>
+
+            <el-timeline-item type="primary" placement="top" color="#67c23a">
+              <div class="flow-step-title">绗笁姝� 路 澶勭悊缁撴灉</div>
+              <el-form label-width="90px" size="small" class="flow-step-form">
+                <el-form-item label="澶勭悊浜�">
+                  <el-input
+                    v-model="processForm.handleBy"
+                    placeholder="澶勭悊浜�"
+                  />
+                </el-form-item>
+                <el-form-item label="澶勭悊鏃堕棿">
+                  <el-date-picker
+                    v-model="processForm.handleTime"
+                    type="datetime"
+                    value-format="yyyy-MM-dd HH:mm:ss"
+                    placeholder="澶勭悊鏃堕棿"
+                    style="width: 100%"
+                  />
+                </el-form-item>
+              </el-form>
+            </el-timeline-item>
+          </el-timeline>
+        </div>
+      </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="processDialogVisible = false">鍙栨秷</el-button>
         <el-button type="primary" @click="submitProcess" :loading="processing">
@@ -483,7 +653,7 @@
 import DetailsAnomaly from "./components/DetailsAnomaly.vue";
 import { tracelist, traceedit } from "@/api/AiCentre/index";
 import dayjs from "dayjs";
-import { deptTreeSelect } from "@/api/system/user";
+import { deptTreeSelect, listUser } from "@/api/system/user";
 
 export default {
   name: "BatchProcess",
@@ -527,6 +697,8 @@
 
       // 绉戝鍒楄〃
       deptList: [],
+      // 鐢ㄦ埛鍒楄〃锛堟祦杞礋璐d汉鍊欓�夛級
+      userList: [],
 
       // 寮傚父鍒楄〃鏁版嵁
       exceptionList: [],
@@ -540,6 +712,21 @@
         handleresult: "",
         handledesc: "",
         finaloption: "",
+        // 娴佽浆鐩稿叧
+        isFlow: "0",
+        flowPerson: "",
+        flowPersonCode: "",
+        flowTime: "",
+        flowDesc: "",
+        flowDepts: [],
+        flowDeptNames: [],
+        flowDeptCodes: [],
+        pushUsers: [],
+        pushUserNames: [],
+        pushUserNos: [],
+        flowFeedbacks: [],
+        handleBy: "",
+        handleTime: "",
       },
       batchProgress: {
         visible: false,
@@ -616,6 +803,7 @@
   mounted() {
     this.loadExceptionList();
     this.getDeptOptions();
+    this.getUserOptions();
   },
 
   methods: {
@@ -648,6 +836,19 @@
         .catch((error) => {
           console.error("鑾峰彇绉戝鍒楄〃澶辫触:", error);
           this.$message.error("鑾峰彇绉戝鍒楄〃澶辫触");
+        });
+    },
+    /** 鏌ヨ鐢ㄦ埛鍒楄〃锛堟祦杞礋璐d汉鍊欓�夛級 */
+    getUserOptions() {
+      listUser({ pageNum: 1, pageSize: 999 })
+        .then((res) => {
+          if (res.code == 200) {
+            this.userList = res.rows || [];
+          }
+        })
+        .catch((error) => {
+          console.error("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触:", error);
+          this.$message.error("鑾峰彇鐢ㄦ埛鍒楄〃澶辫触");
         });
     },
     flattenArray(multiArray) {
@@ -870,22 +1071,212 @@
     handleProcess(row) {
       this.currentExceptionId = row.id;
 
+      const nickName = this.$store.state.user.nickName || "";
+      const now = dayjs().format("YYYY-MM-DD HH:mm:ss");
+
+      // 鏄惁娴佽浆锛堝悗绔� circulationStatus锛�0 涓嶆祦杞� / 1 娴佽浆锛�
+      const isFlow = String(row.circulationStatus) === "1" ? "1" : "0";
+
+      // 鎶ュ绉戝锛堝吋瀹规暟缁勬垨閫楀彿鍒嗛殧瀛楃涓诧級
+      const ccdepts = Array.isArray(row.ccdepts)
+        ? row.ccdepts
+        : row.ccdepts
+        ? row.ccdepts.split(",")
+        : [];
+
+      // 娴佽浆绉戝 code / 鍚嶇О
+      const flowDeptCodes = row.circulationDeptCode
+        ? row.circulationDeptCode.split(",")
+        : [];
+      const flowDeptNames = row.circulationDeptName
+        ? row.circulationDeptName.split(",")
+        : [];
+
+      // 鎺ㄩ�佽礋璐d汉锛氬悗绔瓨宸ュ彿(userName)锛屼笅鎷� value 鐢� userId锛岄渶鍥炴槧
+      const pushUserNos = row.circulationDeptPersonCode
+        ? row.circulationDeptPersonCode.split(",")
+        : [];
+      const pushUserNames = row.circulationDeptPersonName
+        ? row.circulationDeptPersonName.split(",")
+        : [];
+      const pushUsers = pushUserNos.map((no) => {
+        const u = this.userList.find((item) => item.userName === no);
+        return u ? u.userId : no;
+      });
+
+      // 绉戝鍙嶉锛氫粠 handledesc JSON 涓繕鍘�
+      let flowFeedbacks = [];
+      try {
+        const parsed =
+          typeof row.handledesc === "string" &&
+          row.handledesc.trim().startsWith("{")
+            ? JSON.parse(row.handledesc)
+            : null;
+        if (parsed && parsed.flow && Array.isArray(parsed.flow.feedbacks)) {
+          flowFeedbacks = parsed.flow.feedbacks;
+        }
+      } catch (e) {
+        // handledesc 闈� JSON锛屽拷鐣�
+      }
+
+      // 娴佽浆鏃堕棿锛氬悗绔� Date 瀛楁锛岀粺涓�杞垚 yyyy-MM-dd HH:mm:ss 渚涙棩鏈熼�夋嫨鍣ㄥ洖鏄�
+      let flowTime = now;
+      if (row.circulationTime) {
+        const d = new Date(
+          typeof row.circulationTime === "number"
+            ? row.circulationTime
+            : String(row.circulationTime).replace(" ", "T")
+        );
+        if (!isNaN(d.getTime())) {
+          const pad = (n) => String(n).padStart(2, "0");
+          flowTime =
+            d.getFullYear() +
+            "-" +
+            pad(d.getMonth() + 1) +
+            "-" +
+            pad(d.getDate()) +
+            " " +
+            pad(d.getHours()) +
+            ":" +
+            pad(d.getMinutes()) +
+            ":" +
+            pad(d.getSeconds());
+        }
+      }
+
       // 鍒濆鍖栬〃鍗曟暟鎹�
       this.processForm = {
-        handleFlag: row.handleFlag === "0" ? "1" : "0",
-        ccdepts: row.ccdepts ? row.ccdepts.split(",") : [],
+        handleFlag: "1",
+        ccdepts,
         handleresult: row.handleresult || "",
-        handledesc: row.handledesc || "",
+        handledesc: this.formatHandledesc(row.handledesc),
         finaloption: row.finaloption || "",
+        // 娴佽浆鐩稿叧
+        isFlow,
+        flowPerson: row.circulationPersonName || nickName,
+        flowPersonCode:
+          row.circulationPersonCode || this.$store.state.user.userName || "",
+        flowTime,
+        flowDesc: row.circulationExplain || "",
+        flowDepts: [...flowDeptCodes],
+        flowDeptNames: [...flowDeptNames],
+        flowDeptCodes: [...flowDeptCodes],
+        pushUsers,
+        pushUserNames: [...pushUserNames],
+        pushUserNos: [...pushUserNos],
+        flowFeedbacks,
+        handleBy: nickName,
+        handleTime: now,
       };
 
       this.processDialogVisible = true;
+    },
+
+    // 娴佽浆绉戝鍙樺寲锛氬悓姝ョ瀹ゅ悕绉般�佺瀹ode锛屽苟鐢熸垚鍙嶉琛ㄦ牸
+    onFlowDeptChange(codes) {
+      this.processForm.flowDeptCodes = [...codes];
+      this.processForm.flowDeptNames = codes.map((code) => {
+        const dept = this.deptList.find((item) => item.deptCode === code);
+        return dept ? dept.label : code;
+      });
+      // 鐢熸垚/缁存姢绗簩姝ュ弽棣堣〃鏍硷紙淇濈暀宸插~鍐欑殑鍙嶉锛�
+      this.processForm.flowFeedbacks = codes.map((code) => {
+        const existing = this.processForm.flowFeedbacks.find(
+          (item) => item.deptCode === code
+        );
+        if (existing) return existing;
+        const dept = this.deptList.find((item) => item.deptCode === code);
+        return {
+          deptCode: code,
+          deptName: dept ? dept.label : code,
+          agree: "",
+          desc: "",
+        };
+      });
+    },
+
+    // 鎺ㄩ�佽礋璐d汉鍙樺寲锛氬悓姝ヨ礋璐d汉鏄电О銆佸伐鍙�
+    onPushUserChange(ids) {
+      this.processForm.pushUserNames = ids.map((id) => {
+        const user = this.userList.find((u) => String(u.userId) === String(id));
+        return user ? user.nickName || user.userName : "";
+      });
+      this.processForm.pushUserNos = ids.map((id) => {
+        const user = this.userList.find((u) => String(u.userId) === String(id));
+        return user ? user.userName || "" : "";
+      });
+    },
+
+    // 缁勮 handledesc锛氭祦杞椂浠� JSON 褰㈠紡淇濆瓨鍘熷鐞嗚鏄庝笌娴佽浆璇存槑銆佺瀹ゅ弽棣�
+    buildHandledesc() {
+      if (this.processForm.isFlow !== "1") {
+        return this.processForm.handledesc;
+      }
+      const flow = {
+        feedbacks: this.processForm.flowFeedbacks.map((f) => ({
+          deptCode: f.deptCode,
+          deptName: f.deptName,
+          agree: f.agree,
+          desc: f.desc,
+        })),
+      };
+      return JSON.stringify({
+        desc: this.processForm.handledesc,
+        flow,
+      });
+    },
+
+    // 瑙f瀽 handledesc锛氳嫢鏄祦杞� JSON 鍒欏彇鍏朵腑鐨勫鐞嗚鏄庯紝鍚﹀垯鍘熸牱杩斿洖
+    formatHandledesc(val) {
+      if (!val) return "";
+      if (typeof val !== "string") return val;
+      const trimmed = val.trim();
+      if (trimmed.startsWith("{")) {
+        try {
+          const obj = JSON.parse(trimmed);
+          if (obj && obj.desc != null) return obj.desc;
+        } catch (e) {
+          // 涓嶆槸鍚堟硶 JSON锛屾寜鍘熸枃鏈繑鍥�
+        }
+      }
+      return val;
+    },
+
+    // 娴佽浆鏃堕棿杞负甯︽椂鍖虹殑 ISO 鏍煎紡锛屼緵鍚庣 Date 绫诲瀷瀛楁鍙嶅簭鍒楀寲
+    toISODateTime(str) {
+      if (!str) return null;
+      const d = new Date(String(str).replace(" ", "T"));
+      if (isNaN(d.getTime())) return null;
+      const pad = (n) => String(n).padStart(2, "0");
+      const offset = -d.getTimezoneOffset();
+      const sign = offset >= 0 ? "+" : "-";
+      const abs = Math.abs(offset);
+      const tz = sign + pad(Math.floor(abs / 60)) + ":" + pad(abs % 60);
+      return (
+        d.getFullYear() +
+        "-" + pad(d.getMonth() + 1) +
+        "-" + pad(d.getDate()) +
+        "T" + pad(d.getHours()) +
+        ":" + pad(d.getMinutes()) +
+        ":" + pad(d.getSeconds()) +
+        "." + String(d.getMilliseconds()).padStart(3, "0") +
+        tz
+      );
     },
 
     // 鎻愪氦澶勭悊
     async submitProcess() {
       this.$refs.processForm.validate(async (valid) => {
         if (!valid) {
+          return;
+        }
+
+        // 娴佽浆鏃舵牎楠屽繀椤婚�夋嫨娴佽浆绉戝
+        if (
+          this.processForm.isFlow === "1" &&
+          (!this.processForm.flowDepts || this.processForm.flowDepts.length === 0)
+        ) {
+          this.$message.warning("璇峰厛閫夋嫨娴佽浆绉戝");
           return;
         }
 
@@ -897,14 +1288,30 @@
             id: this.currentExceptionId,
             handleFlag: this.processForm.handleFlag,
             handleresult: this.processForm.handleresult,
-            handledesc: this.processForm.handledesc,
+            handledesc: this.buildHandledesc(),
             finaloption: this.processForm.finaloption,
-            handleBy: this.$store.state.user.nickName,
-            handleTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
+            handleBy:
+              this.processForm.handleBy || this.$store.state.user.nickName,
+            handleTime:
+              this.processForm.handleTime ||
+              dayjs().format("YYYY-MM-DD HH:mm:ss"),
             // 灏嗘暟缁勮浆鎹负閫楀彿鍒嗛殧鐨勫瓧绗︿覆
             ccdepts: Array.isArray(this.processForm.ccdepts)
               ? this.processForm.ccdepts.join(",")
               : this.processForm.ccdepts,
+            // 娴佽浆鐩稿叧涓昏〃瀛楁锛堝悗绔凡瀹氱锛�
+            circulationPersonName: this.processForm.flowPerson,
+            circulationPersonCode:
+              this.processForm.flowPersonCode ||
+              this.$store.state.user.userName ||
+              "",
+            circulationStatus: this.processForm.isFlow,
+            circulationDeptName: this.processForm.flowDeptNames.join(","),
+            circulationDeptCode: this.processForm.flowDeptCodes.join(","),
+            circulationDeptPersonName: this.processForm.pushUserNames.join(","),
+            circulationDeptPersonCode: this.processForm.pushUserNos.join(","),
+            circulationExplain: this.processForm.flowDesc,
+            circulationTime: this.toISODateTime(this.processForm.flowTime),
           };
           // TODO: 杩欓噷闇�瑕佽皟鐢ㄥ疄闄呯殑澶勭悊鎺ュ彛
           await traceedit(submitData);
@@ -1227,6 +1634,47 @@
   }
 }
 
+// 澶勭悊寮规宸﹀彸甯冨眬
+.flow-dialog-body {
+  display: flex;
+  align-items: stretch;
+
+  .flow-left {
+    flex: 1;
+    min-width: 320px;
+    padding-right: 24px;
+    border-right: 1px solid #ebeef5;
+  }
+
+  .flow-right {
+    flex: 1;
+    min-width: 320px;
+    padding-left: 24px;
+    max-height: 60vh;
+    overflow-y: auto;
+
+    .flow-step-title {
+      font-weight: 600;
+      color: #303133;
+      margin-bottom: 12px;
+      font-size: 14px;
+    }
+
+    .flow-step-form {
+      ::v-deep .el-form-item {
+        margin-bottom: 12px;
+      }
+    }
+
+    .flow-empty-tip {
+      padding: 20px;
+      text-align: center;
+      color: #909399;
+      font-size: 13px;
+    }
+  }
+}
+
 @media (max-width: 768px) {
   .batch-process {
     padding: 10px;
diff --git a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
index 42ee116..57dbaae 100644
--- a/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
+++ b/src/views/Satisfaction/configurationmyd/components/DetailsAnomaly.vue
@@ -114,7 +114,12 @@
     </div>
 
     <!-- 闂嵎/璇煶璇︽儏 -->
-    <div class="content-container" v-if="templateData.length > 0">
+    <div
+      class="content-container"
+      v-if="currentRecord.templateType"
+      v-loading="contentLoading"
+      element-loading-text="璇︽儏鍔犺浇涓�..."
+    >
       <el-tabs v-model="activeName" type="border-card">
         <!-- 闂嵎闅忚璇︽儏 -->
         <el-tab-pane name="wj" v-if="currentRecord.templateType === 2">
@@ -529,6 +534,8 @@
 
       // 鍔犺浇鐘舵��
       loading: false,
+      // 闂嵎/璇煶璇︽儏鍔犺浇鐘舵��
+      contentLoading: false,
 
       // 鏉冮檺鎺у埗
       hasQualityPermission: false
@@ -737,6 +744,7 @@
 
     // 鍔犺浇闂嵎鏁版嵁
     async loadQuestionnaireData() {
+      this.contentLoading = true;
       try {
         // 杩欓噷闇�瑕佹牴鎹疄闄呮儏鍐佃皟鐢ㄦ帴鍙h幏鍙栭棶鍗锋暟鎹�
         // 濡傛灉recordData涓凡缁忓寘鍚簡闂嵎鏁版嵁锛屽彲浠ョ洿鎺ヤ娇鐢�
@@ -770,6 +778,8 @@
         }
       } catch (error) {
         console.error('鍔犺浇闂嵎鏁版嵁澶辫触:', error);
+      } finally {
+        this.contentLoading = false;
       }
     },
 
@@ -788,6 +798,7 @@
 
     // 鍔犺浇璇煶鏁版嵁
     async loadVoiceData() {
+      this.contentLoading = true;
       try {
         if (this.currentRecord.taskid && this.currentRecord.patid) {
           const params = {
@@ -814,6 +825,8 @@
         }
       } catch (error) {
         console.error('鍔犺浇璇煶鏁版嵁澶辫触:', error);
+      } finally {
+        this.contentLoading = false;
       }
     },
 
diff --git a/src/views/followvisit/Continue/index.vue b/src/views/followvisit/Continue/index.vue
index 3abc5f4..a60bab8 100644
--- a/src/views/followvisit/Continue/index.vue
+++ b/src/views/followvisit/Continue/index.vue
@@ -1073,8 +1073,8 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
-      jgvalue: "",
+      ycvalue: 0,
+      jgvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -2031,8 +2031,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -2234,4 +2234,75 @@
   flex-shrink: 0;
   margin-top: 2px;
 }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>
diff --git a/src/views/followvisit/HistoricalFollow/index.vue b/src/views/followvisit/HistoricalFollow/index.vue
index ae8f453..eb2660f 100644
--- a/src/views/followvisit/HistoricalFollow/index.vue
+++ b/src/views/followvisit/HistoricalFollow/index.vue
@@ -605,7 +605,7 @@
       zcform: {},
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/OutpatientAgain/index.vue b/src/views/followvisit/OutpatientAgain/index.vue
index 3c4337c..d8082bf 100644
--- a/src/views/followvisit/OutpatientAgain/index.vue
+++ b/src/views/followvisit/OutpatientAgain/index.vue
@@ -876,7 +876,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -891,6 +891,7 @@
       },
       value: [],
       list: [],
+      jgvalue: 0,
 
       sourcetype: [
         {
diff --git a/src/views/followvisit/SpecificDisease/index.vue b/src/views/followvisit/SpecificDisease/index.vue
index 57d20e8..8fc578a 100644
--- a/src/views/followvisit/SpecificDisease/index.vue
+++ b/src/views/followvisit/SpecificDisease/index.vue
@@ -785,7 +785,7 @@
       zcform: {},
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/Tracking/index.vue b/src/views/followvisit/Tracking/index.vue
index f1e4d91..fd1c987 100644
--- a/src/views/followvisit/Tracking/index.vue
+++ b/src/views/followvisit/Tracking/index.vue
@@ -870,7 +870,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/again/index.vue b/src/views/followvisit/again/index.vue
index 4bd6a8b..bdd1f0b 100644
--- a/src/views/followvisit/again/index.vue
+++ b/src/views/followvisit/again/index.vue
@@ -880,7 +880,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -1113,6 +1113,7 @@
       },
       amendtag: false,
       errtype: "",
+      jgvalue: 0,
       leavehospitaldistrictcode: "",
       serviceState: [],
       checkboxlist: [],
diff --git a/src/views/followvisit/beHospitalized/followUp.vue b/src/views/followvisit/beHospitalized/followUp.vue
index 3a4d733..d0c137d 100644
--- a/src/views/followvisit/beHospitalized/followUp.vue
+++ b/src/views/followvisit/beHospitalized/followUp.vue
@@ -1229,8 +1229,8 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
-      jgvalue: "",
+      ycvalue: 0,
+      jgvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/complaint/index.vue b/src/views/followvisit/complaint/index.vue
index 188d7e8..195ef8c 100644
--- a/src/views/followvisit/complaint/index.vue
+++ b/src/views/followvisit/complaint/index.vue
@@ -950,6 +950,8 @@
       ids: [],
       // 闈炲崟涓鐢�
       single: true,
+      jgvalue: 0,
+
       // 闈炲涓鐢�
       multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
@@ -1015,7 +1017,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/discharge/index copy.vue b/src/views/followvisit/discharge/index copy.vue
index 4e30b82..b79aacb 100644
--- a/src/views/followvisit/discharge/index copy.vue
+++ b/src/views/followvisit/discharge/index copy.vue
@@ -799,7 +799,7 @@
       inputVisible: false,
       Labelchange: false,
       ycvalue: 0,
-      jgvalue: "",
+      jgvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue
index 6c3e9bf..8af1406 100644
--- a/src/views/followvisit/discharge/index.vue
+++ b/src/views/followvisit/discharge/index.vue
@@ -311,7 +311,55 @@
           :show-overflow-tooltip="true"
         >
         </el-table-column>
-
+        <el-table-column
+          v-if="orgname == '娴欐睙鐪佹柊鍗庡尰闄�'"
+          label="浠诲姟鐘舵��"
+          align="center"
+          key="sendstate"
+          prop="sendstate"
+          width="120"
+        >
+          <template slot-scope="scope">
+            <el-tooltip
+              class="item"
+              effect="dark"
+              :content="scope.row.remark"
+              placement="top-start"
+            >
+              <div v-if="scope.row.sendstate == 1">
+                <el-tag type="primary" :disable-transitions="false"
+                  >琛ㄥ崟宸查鍙�</el-tag
+                >
+              </div>
+              <div v-if="scope.row.sendstate == 2">
+                <el-tag type="primary" :disable-transitions="false"
+                  >寰呴殢璁�</el-tag
+                >
+              </div>
+              <div v-if="scope.row.sendstate == 3">
+                <el-tag type="success" :disable-transitions="false"
+                  >琛ㄥ崟宸插彂閫�</el-tag
+                >
+              </div>
+              <div v-if="scope.row.sendstate == 4">
+                <el-tag type="info" :disable-transitions="false">涓嶆墽琛�</el-tag>
+              </div>
+              <div v-if="scope.row.sendstate == 5">
+                <el-tag type="danger" :disable-transitions="false"
+                  >鍙戦�佸け璐�</el-tag
+                >
+              </div>
+              <div v-if="scope.row.sendstate == 6">
+                <el-tag type="success" :disable-transitions="false"
+                  >宸插畬鎴�</el-tag
+                >
+              </div>
+              <div v-if="scope.row.sendstate == 7">
+                <el-tag type="danger" :disable-transitions="false">瓒呮椂</el-tag>
+              </div>
+            </el-tooltip>
+          </template>
+        </el-table-column>
         <el-table-column
           label="闅忚鐘舵��"
           align="center"
@@ -460,6 +508,7 @@
           width="120"
         />
         <el-table-column
+          v-if="orgname != '娴欐睙鐪佹柊鍗庡尰闄�'"
           label="浠诲姟鐘舵��"
           align="center"
           key="sendstate"
@@ -1124,7 +1173,7 @@
       inputVisible: false,
       Labelchange: false,
       ycvalue: 0,
-      jgvalue: "",
+      jgvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -1295,7 +1344,8 @@
         visitCount: 1,
         scopetype: [],
         managementDoctor:
-          localStorage.getItem("orgname") == "缂欎簯鍘夸汉姘戝尰闄�"||localStorage.getItem("orgname") == "涓芥按甯備腑鍖婚櫌"
+          localStorage.getItem("orgname") == "缂欎簯鍘夸汉姘戝尰闄�" ||
+          localStorage.getItem("orgname") == "涓芥按甯備腑鍖婚櫌"
             ? store.getters.nickName
             : "",
         leaveldeptcodes: [],
@@ -1836,16 +1886,12 @@
       if (hasDept && hasWard) {
         if (this.lastScopeType == 1) {
           // 涓婃閫変簡绉戝锛岃繖娆℃柊澧炵梾鍖� 鈫� 淇濈暀鐥呭尯
-          this.topqueryParams.scopetype = value.filter(
-            (item) => item[0] === 2
-          );
+          this.topqueryParams.scopetype = value.filter((item) => item[0] === 2);
           this.lastScopeType = 2;
           this.$message.warning("绉戝鍜岀梾鍖轰笉鑳藉悓鏃堕�夋嫨锛屽凡鍒囨崲涓虹梾鍖�");
         } else {
           // 涓婃閫変簡鐥呭尯锛岃繖娆℃柊澧炵瀹� 鈫� 淇濈暀绉戝
-          this.topqueryParams.scopetype = value.filter(
-            (item) => item[0] === 1
-          );
+          this.topqueryParams.scopetype = value.filter((item) => item[0] === 1);
           this.lastScopeType = 1;
           this.$message.warning("绉戝鍜岀梾鍖轰笉鑳藉悓鏃堕�夋嫨锛屽凡鍒囨崲涓虹瀹�");
         }
@@ -2413,21 +2459,27 @@
       if (val && val.length) {
         this.transferForm.leavelDeptCode = val[val.length - 1];
         // 浠庨�夐」鏍戜腑鏌ユ壘瀵瑰簲鍚嶇О
-        const node = this.findCascaderNode(this.deptOptionsks, this.transferForm.leavelDeptCode);
-        this.transferForm.leavelDeptName = node ? node.label : '';
+        const node = this.findCascaderNode(
+          this.deptOptionsks,
+          this.transferForm.leavelDeptCode
+        );
+        this.transferForm.leavelDeptName = node ? node.label : "";
       } else {
-        this.transferForm.leavelDeptCode = '';
-        this.transferForm.leavelDeptName = '';
+        this.transferForm.leavelDeptCode = "";
+        this.transferForm.leavelDeptName = "";
       }
     },
     handleWardCascaderChange(val) {
       if (val && val.length) {
         this.transferForm.leavehospitaldistrictcode = val[val.length - 1];
-        const node = this.findCascaderNode(this.deptOptionsbq, this.transferForm.leavehospitaldistrictcode);
-        this.transferForm.leavehospitaldistrictname = node ? node.label : '';
+        const node = this.findCascaderNode(
+          this.deptOptionsbq,
+          this.transferForm.leavehospitaldistrictcode
+        );
+        this.transferForm.leavehospitaldistrictname = node ? node.label : "";
       } else {
-        this.transferForm.leavehospitaldistrictcode = '';
-        this.transferForm.leavehospitaldistrictname = '';
+        this.transferForm.leavehospitaldistrictcode = "";
+        this.transferForm.leavehospitaldistrictname = "";
       }
     },
     findCascaderNode(options, code) {
@@ -2483,8 +2535,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -2717,4 +2769,75 @@
   font-size: 14px;
   color: #666;
 }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>
diff --git a/src/views/followvisit/discharge/index.vue.bak b/src/views/followvisit/discharge/index.vue.bak
index d67cbf0..cb32b05 100644
--- a/src/views/followvisit/discharge/index.vue.bak
+++ b/src/views/followvisit/discharge/index.vue.bak
@@ -1190,7 +1190,7 @@
       inputVisible: false,
       Labelchange: false,
       ycvalue: 0,
-      jgvalue: "",
+      jgvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/discharge/outpatientService.vue b/src/views/followvisit/discharge/outpatientService.vue
index a31c4ee..5910c74 100644
--- a/src/views/followvisit/discharge/outpatientService.vue
+++ b/src/views/followvisit/discharge/outpatientService.vue
@@ -64,6 +64,12 @@
             placeholder="璇疯緭鍏ラ殢璁夸汉鍛�"
           ></el-input>
         </el-form-item>
+        <el-form-item label="涓绘不鍖荤敓" prop="drname">
+          <el-input
+            v-model="topqueryParams.drname"
+            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
+          ></el-input>
+        </el-form-item>
 
         <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-cascader
@@ -842,6 +848,8 @@
       total: 0,
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
       userList: null,
+      jgvalue: 0,
+
       // 寮瑰嚭灞傛爣棰�
       title: "鏂板褰卞儚闅忚",
       // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
@@ -864,7 +872,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -1732,8 +1740,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -1908,4 +1916,75 @@
   flex-shrink: 0;
   margin-top: 2px;
 }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>
diff --git a/src/views/followvisit/mzsatisfaction/index.vue b/src/views/followvisit/mzsatisfaction/index.vue
index 9cadc18..c62a5ad 100644
--- a/src/views/followvisit/mzsatisfaction/index.vue
+++ b/src/views/followvisit/mzsatisfaction/index.vue
@@ -2,9 +2,8 @@
   <div class="app-container">
     <statistics-cards
       :cardlist="cardlist"
-      :ycvalue="ycvalue"
-      :jgvalue="jgvalue"
-      :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+      :show-extra="false"
+      :show-warning-condition="false"
     />
     <el-row :gutter="20">
       <!--鐢ㄦ埛鏁版嵁-->
@@ -16,13 +15,6 @@
         v-show="showSearch"
         label-width="98px"
       >
-        <el-form-item label="浠诲姟鍚嶇О">
-          <el-input
-            v-model="topqueryParams.taskName"
-            placeholder="璇烽�夋嫨浠诲姟鍚嶇О"
-          ></el-input>
-        </el-form-item>
-
         <el-form-item label="鍑洪櫌鏃堕棿">
           <el-date-picker
             v-model="dateRange"
@@ -41,31 +33,18 @@
             placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname">
-          <el-input
-            v-model="topqueryParams.leavediagname"
-            placeholder="璇疯緭鍏ヨ瘖鏂悕绉�"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="闅忚浜哄憳" prop="updateBy">
+        <el-form-item label="澶勭悊浜哄憳" prop="updateBy">
           <el-input
             v-model="topqueryParams.updateBy"
-            placeholder="璇疯緭鍏ラ殢璁夸汉鍛�"
+            placeholder="璇疯緭鍏ュ鐞嗕汉鍛�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="涓绘不鍖荤敓" prop="drname">
+        <el-form-item label="鎺ヨ瘖鍖荤敓" prop="drname">
           <el-input
             v-model="topqueryParams.drname"
-            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
+            placeholder="璇疯緭鍏ユ帴璇婂尰鐢�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="缁忕鍖荤敓" prop="managementDoctor">
-          <el-input
-            v-model="topqueryParams.managementDoctor"
-            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
-          ></el-input>
-        </el-form-item>
-
         <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-cascader
             v-model="topqueryParams.scopetype"
@@ -92,7 +71,7 @@
             </el-option>
           </el-select>
         </el-form-item> -->
-        <el-form-item label="闅忚鐘舵��" prop="status">
+        <el-form-item label="澶勭悊鐘舵��" prop="status">
           <el-cascader
             v-model="serviceStatusValue"
             placeholder="璇烽�夋嫨"
@@ -225,15 +204,6 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="50" align="center" />
-        <el-table-column
-          label="浠诲姟鍚嶇О"
-          fixed
-          width="150"
-          show-overflow-tooltip
-          align="center"
-          key="taskName"
-          prop="taskName"
-        />
         <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> -->
         <el-table-column
           label="濮撳悕"
@@ -261,7 +231,7 @@
           </template>
         </el-table-column>
         <el-table-column
-          label="闅忚鐘舵��"
+          label="澶勭悊鐘舵��"
           align="center"
           key="sendstateView"
           prop="sendstateView"
@@ -338,20 +308,13 @@
           </template></el-table-column
         >
         <el-table-column
-          label="涓绘不鍖荤敓"
+          label="鎺ヨ瘖鍖荤敓"
           width="120"
           align="center"
           key="drname"
           prop="drname"
         />
 
-        <el-table-column
-          label="缁忕鍖荤敓"
-          align="center"
-          key="managementDoctor"
-          prop="managementDoctor"
-          width="120"
-        />
         <el-table-column
           label="鍑洪櫌澶╂暟"
           width="120"
@@ -415,16 +378,7 @@
         </el-table-column>
 
         <el-table-column
-          label="璇婃柇鍚嶇О"
-          align="center"
-          key="leavediagname"
-          prop="leavediagname"
-          width="120"
-          :show-overflow-tooltip="true"
-        >
-        </el-table-column>
-        <el-table-column
-          label="闅忚浜哄憳"
+          label="澶勭悊浜哄憳"
           align="center"
           key="updateBy"
           prop="updateBy"
@@ -1001,6 +955,8 @@
       multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
+      jgvalue: 0,
+
       dialogFormVisible: false,
       // 鎬绘潯鏁�
       total: 0,
@@ -1028,7 +984,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -1097,25 +1053,24 @@
       loading: false,
       cardlist: [
         {
-          name: "鎮h�呮湇鍔℃�婚噺",
-          value: 0,
-        },
-
-        {
-          name: "鏃犻渶闅忚",
+          name: "闂ㄨ瘖鎬婚噺",
           value: 0,
         },
         {
-          name: "闇�闅忚",
+          name: "鍙戦�佷换鍔¢噺",
           value: 0,
         },
         {
-          name: "寰呴殢璁�",
+          name: "寰呭畬鎴�",
           value: 0,
         },
         {
           name: "宸插畬鎴�",
           value: 0,
+        },
+        {
+          name: "瀹屾垚鐜�",
+          value: "0%",
         },
       ],
       zcrules: {
@@ -1258,6 +1213,8 @@
           },
         },
       },
+      orgname: "",
+
       amendtag: false,
       errtype: "",
       leavehospitaldistrictcode: "",
@@ -1272,6 +1229,8 @@
     this.serviceState = store.getters.serviceState;
     this.checkboxlist = store.getters.checkboxlist;
     this.errtype = this.$route.query.errtype;
+    this.orgname = localStorage.getItem("orgname");
+
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
     this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
@@ -1335,14 +1294,19 @@
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
         if (refresh) {
-          this.cardlist[0].value =
+          // 闂ㄨ瘖鎬婚噺锛氭殏鏃犲瓧娈碉紝淇濇寔 0
+          // 鍙戦�佷换鍔¢噺 = 鎮h�呮湇鍔℃�婚噺锛堟棤闇�闅忚 + 闇�闅忚锛�
+          this.cardlist[1].value =
             Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
-          // this.cardlist[1].value = response.rows[0].wzx;
-          this.cardlist[1].value = response.rows[0].wxsf || 0;
           this.ycvalue = response.rows[0].yc;
-          this.cardlist[2].value = response.rows[0].xsf || 0;
-          this.cardlist[3].value = response.rows[0].dsf || 0;
-          this.cardlist[4].value = response.rows[0].ywc || 0;
+          this.cardlist[2].value = response.rows[0].dsf || 0; // 寰呭畬鎴� = 寰呴殢璁�
+          this.cardlist[3].value = response.rows[0].ywc || 0; // 宸插畬鎴� = 宸查殢璁�
+          // 瀹屾垚鐜� = 宸插畬鎴� / (寰呭畬鎴� + 宸插畬鎴�)
+          const dsf = Number(response.rows[0].dsf) || 0;
+          const ywc = Number(response.rows[0].ywc) || 0;
+          const doneTotal = dsf + ywc;
+          this.cardlist[4].value =
+            doneTotal > 0 ? ((ywc / doneTotal) * 100).toFixed(2) + "%" : "0%";
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1496,7 +1460,7 @@
         this.options = [];
       }
     },
-    // 褰卞儚闅忚鐘舵�佷慨鏀�
+    // 褰卞儚澶勭悊鐘舵�佷慨鏀�
     handleStatusChange(row) {
       let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
       this.$modal
@@ -1883,8 +1847,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -2077,4 +2041,75 @@
   flex-shrink: 0;
   margin-top: 2px;
 }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>
diff --git a/src/views/followvisit/operation/index.vue b/src/views/followvisit/operation/index.vue
index 2703fcb..af43944 100644
--- a/src/views/followvisit/operation/index.vue
+++ b/src/views/followvisit/operation/index.vue
@@ -1165,6 +1165,8 @@
       dialogFormVisible: false,
       // 鎬绘潯鏁�
       total: 0,
+      jgvalue: 0,
+
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
       userList: null,
       // 寮瑰嚭灞傛爣棰�
@@ -1189,8 +1191,8 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
-      jgvalue: "",
+      ycvalue: 0,
+      jgvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/outpatient/index.vue b/src/views/followvisit/outpatient/index.vue
index ee194e0..0f65885 100644
--- a/src/views/followvisit/outpatient/index.vue
+++ b/src/views/followvisit/outpatient/index.vue
@@ -659,6 +659,9 @@
       single: true,
       // 闈炲涓鐢�
       multiple: true,
+      jgvalue: 0,
+      orgname: "",
+
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       // 鎬绘潯鏁�
@@ -684,7 +687,7 @@
       },
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -846,6 +849,8 @@
     this.serviceState = store.getters.serviceState;
     this.checkboxlist = store.getters.checkboxlist;
     this.errtype = this.$route.query.errtype;
+    this.orgname = localStorage.getItem("orgname");
+
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
     this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index 4f97c69..2f0ecfc 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -337,6 +337,7 @@
               (orgname == '鍗楀崕澶у闄勫睘绗竴鍖婚櫌' ||
                 orgname == '涓芥按甯傜浜屼汉姘戝尰闄�' ||
                 orgname == '缂欎簯鍘夸汉姘戝尰闄�'||
+                orgname == '涓芥按甯傚骞间繚鍋ラ櫌'||
                 orgname == '鏉鹃槼鍘夸腑鍖诲尰闄�') &&
               !Voicetype
             "
diff --git a/src/views/followvisit/record/index.vue b/src/views/followvisit/record/index.vue
index b373ed4..1eb323a 100644
--- a/src/views/followvisit/record/index.vue
+++ b/src/views/followvisit/record/index.vue
@@ -783,6 +783,8 @@
       single: true,
       // 闈炲涓鐢�
       multiple: true,
+      jgvalue: 0,
+
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       dialogFormVisible: false,
@@ -843,7 +845,7 @@
       zcform: {},
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/technology/index.vue b/src/views/followvisit/technology/index.vue
index 2b00930..b452289 100644
--- a/src/views/followvisit/technology/index.vue
+++ b/src/views/followvisit/technology/index.vue
@@ -719,6 +719,8 @@
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       dialogFormVisible: false,
+      jgvalue: 0,
+
       // 鎬绘潯鏁�
       total: 0,
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
@@ -743,7 +745,7 @@
       zcform: {},
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/zbAgain/index.vue b/src/views/followvisit/zbAgain/index.vue
index 822cc3b..bce150c 100644
--- a/src/views/followvisit/zbAgain/index.vue
+++ b/src/views/followvisit/zbAgain/index.vue
@@ -839,6 +839,8 @@
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       dialogFormVisible: false,
+      jgvalue: 0,
+
       // 鎬绘潯鏁�
       total: 0,
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
@@ -865,7 +867,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/followvisit/zysatisfaction/index.vue b/src/views/followvisit/zysatisfaction/index.vue
index 551395e..a3c7b54 100644
--- a/src/views/followvisit/zysatisfaction/index.vue
+++ b/src/views/followvisit/zysatisfaction/index.vue
@@ -2,9 +2,8 @@
   <div class="app-container">
     <statistics-cards
       :cardlist="cardlist"
-      :ycvalue="ycvalue"
-      :jgvalue="jgvalue"
-      :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+      :show-extra="false"
+      :show-warning-condition="false"
     />
     <el-row :gutter="20">
       <!--鐢ㄦ埛鏁版嵁-->
@@ -16,13 +15,6 @@
         v-show="showSearch"
         label-width="98px"
       >
-        <el-form-item label="浠诲姟鍚嶇О">
-          <el-input
-            v-model="topqueryParams.taskName"
-            placeholder="璇烽�夋嫨浠诲姟鍚嶇О"
-          ></el-input>
-        </el-form-item>
-
         <el-form-item label="鍑洪櫌鏃堕棿">
           <el-date-picker
             v-model="dateRange"
@@ -41,31 +33,18 @@
             placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname">
-          <el-input
-            v-model="topqueryParams.leavediagname"
-            placeholder="璇疯緭鍏ヨ瘖鏂悕绉�"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="闅忚浜哄憳" prop="updateBy">
+        <el-form-item label="澶勭悊浜哄憳" prop="updateBy">
           <el-input
             v-model="topqueryParams.updateBy"
-            placeholder="璇疯緭鍏ラ殢璁夸汉鍛�"
+            placeholder="璇疯緭鍏ュ鐞嗕汉鍛�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="涓绘不鍖荤敓" prop="drname">
+        <el-form-item label="鎺ヨ瘖鍖荤敓" prop="drname">
           <el-input
             v-model="topqueryParams.drname"
-            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
+            placeholder="璇疯緭鍏ユ帴璇婂尰鐢�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="缁忕鍖荤敓" prop="managementDoctor">
-          <el-input
-            v-model="topqueryParams.managementDoctor"
-            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
-          ></el-input>
-        </el-form-item>
-
         <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-cascader
             v-model="topqueryParams.scopetype"
@@ -92,7 +71,7 @@
             </el-option>
           </el-select>
         </el-form-item> -->
-        <el-form-item label="闅忚鐘舵��" prop="status">
+        <el-form-item label="澶勭悊鐘舵��" prop="status">
           <el-cascader
             v-model="serviceStatusValue"
             placeholder="璇烽�夋嫨"
@@ -225,15 +204,6 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="50" align="center" />
-        <el-table-column
-          label="浠诲姟鍚嶇О"
-          fixed
-          width="150"
-          show-overflow-tooltip
-          align="center"
-          key="taskName"
-          prop="taskName"
-        />
         <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> -->
         <el-table-column
           label="濮撳悕"
@@ -261,7 +231,7 @@
           </template>
         </el-table-column>
         <el-table-column
-          label="闅忚鐘舵��"
+          label="澶勭悊鐘舵��"
           align="center"
           key="sendstateView"
           prop="sendstateView"
@@ -338,20 +308,13 @@
           </template></el-table-column
         >
         <el-table-column
-          label="涓绘不鍖荤敓"
+          label="鎺ヨ瘖鍖荤敓"
           width="120"
           align="center"
           key="drname"
           prop="drname"
         />
 
-        <el-table-column
-          label="缁忕鍖荤敓"
-          align="center"
-          key="managementDoctor"
-          prop="managementDoctor"
-          width="120"
-        />
         <el-table-column
           label="鍑洪櫌澶╂暟"
           width="120"
@@ -415,16 +378,7 @@
         </el-table-column>
 
         <el-table-column
-          label="璇婃柇鍚嶇О"
-          align="center"
-          key="leavediagname"
-          prop="leavediagname"
-          width="120"
-          :show-overflow-tooltip="true"
-        >
-        </el-table-column>
-        <el-table-column
-          label="闅忚浜哄憳"
+          label="澶勭悊浜哄憳"
           align="center"
           key="updateBy"
           prop="updateBy"
@@ -959,6 +913,8 @@
       ids: [],
       // 闈炲崟涓鐢�
       single: true,
+      jgvalue: 0,
+
       // 闈炲涓鐢�
       multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
@@ -989,7 +945,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -1024,25 +980,24 @@
       loading: false,
       cardlist: [
         {
-          name: "鎮h�呮湇鍔℃�婚噺",
-          value: 0,
-        },
-
-        {
-          name: "鏃犻渶闅忚",
+          name: "浣忛櫌鎬婚噺",
           value: 0,
         },
         {
-          name: "闇�闅忚",
+          name: "鍙戦�佷换鍔¢噺",
           value: 0,
         },
         {
-          name: "寰呴殢璁�",
+          name: "寰呭畬鎴�",
           value: 0,
         },
         {
           name: "宸插畬鎴�",
           value: 0,
+        },
+        {
+          name: "瀹屾垚鐜�",
+          value: "0%",
         },
       ],
       // 绾ц仈閫夋嫨鍣ㄧ粦瀹氬��
@@ -1221,6 +1176,8 @@
           },
         },
       },
+      orgname: "",
+
       amendtag: false,
       errtype: "",
       leavehospitaldistrictcode: "",
@@ -1235,6 +1192,8 @@
     this.serviceState = store.getters.serviceState;
     this.checkboxlist = store.getters.checkboxlist;
     this.errtype = this.$route.query.errtype;
+    this.orgname = localStorage.getItem("orgname");
+
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
     this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
@@ -1298,14 +1257,19 @@
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
         if (refresh) {
-          this.cardlist[0].value =
+          // 浣忛櫌鎬婚噺锛氭殏鏃犲瓧娈碉紝淇濇寔 0
+          // 鍙戦�佷换鍔¢噺 = 鎮h�呮湇鍔℃�婚噺锛堟棤闇�闅忚 + 闇�闅忚锛�
+          this.cardlist[1].value =
             Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
-          // this.cardlist[1].value = response.rows[0].wzx;
-          this.cardlist[1].value = response.rows[0].wxsf || 0;
           this.ycvalue = response.rows[0].yc;
-          this.cardlist[2].value = response.rows[0].xsf || 0;
-          this.cardlist[3].value = response.rows[0].dsf || 0;
-          this.cardlist[4].value = response.rows[0].ywc || 0;
+          this.cardlist[2].value = response.rows[0].dsf || 0; // 寰呭畬鎴� = 寰呴殢璁�
+          this.cardlist[3].value = response.rows[0].ywc || 0; // 宸插畬鎴� = 宸查殢璁�
+          // 瀹屾垚鐜� = 宸插畬鎴� / (寰呭畬鎴� + 宸插畬鎴�)
+          const dsf = Number(response.rows[0].dsf) || 0;
+          const ywc = Number(response.rows[0].ywc) || 0;
+          const doneTotal = dsf + ywc;
+          this.cardlist[4].value =
+            doneTotal > 0 ? ((ywc / doneTotal) * 100).toFixed(2) + "%" : "0%";
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1459,7 +1423,7 @@
         this.options = [];
       }
     },
-    // 褰卞儚闅忚鐘舵�佷慨鏀�
+    // 褰卞儚澶勭悊鐘舵�佷慨鏀�
     handleStatusChange(row) {
       let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
       this.$modal
@@ -1874,8 +1838,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -2071,4 +2035,75 @@
 //     font-size: 24px;
 //   }
 // }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>
diff --git a/src/views/knowledge/education/compilequer/index.vue b/src/views/knowledge/education/compilequer/index.vue
index ef4061c..8b63b16 100644
--- a/src/views/knowledge/education/compilequer/index.vue
+++ b/src/views/knowledge/education/compilequer/index.vue
@@ -353,7 +353,7 @@
       editorRef: null,
 
       // 缂栬緫鍣ㄥ唴瀹�
-      content: "<p>娴嬭瘯</p>",
+      content: "",
 
       // 缂栬緫鍣ㄦā寮�
       mode: "default",
diff --git a/src/views/patient/physical/index.vue b/src/views/patient/physical/index.vue
index 6dd11a9..0c2e8db 100644
--- a/src/views/patient/physical/index.vue
+++ b/src/views/patient/physical/index.vue
@@ -659,6 +659,8 @@
       single: true,
       // 闈炲涓鐢�
       multiple: true,
+      jgvalue: 0,
+      orgname: "",
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       // 鎬绘潯鏁�
@@ -684,7 +686,7 @@
       },
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -845,6 +847,7 @@
   created() {
     this.serviceState = store.getters.serviceState;
     this.checkboxlist = store.getters.checkboxlist;
+    this.orgname = localStorage.getItem("orgname");
     this.errtype = this.$route.query.errtype;
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
diff --git a/src/views/patient/propaganda/Missioncreation.vue b/src/views/patient/propaganda/Missioncreation.vue
index 94b8b95..db38b79 100644
--- a/src/views/patient/propaganda/Missioncreation.vue
+++ b/src/views/patient/propaganda/Missioncreation.vue
@@ -297,7 +297,7 @@
                       </div>
                       <el-tag
                         v-for="tag in diagglist"
-                        @close="removediagg(tag.icd10code)"
+                        @close="removediagg(tag)"
                         type="warning"
                         closable
                         :disable-transitions="false"
@@ -1761,20 +1761,23 @@
           });
         }
       });
-      taskdiaggetlist(this.queryParamsdept).then((res) => {
-        if (res.code == 200) {
-          let arr = res.rows;
-          arr.forEach((item) => {
-            getillnesslist({
-              icdcode: item.icd10code,
-            }).then((res) => {
-              item.icdname = res.rows[0].icdname;
-              this.diagglist.push(item);
+     taskdiaggetlist(this.queryParamsdept).then((res) => {
+          if (res.code == 200) {
+            let arr = res.rows;
+            arr.forEach((item) => {
+              if (localStorage.getItem("orgname") == "鍗楀崕澶у闄勫睘绗竴鍖婚櫌") {
+                item.icdname = item.icd10name;
+                this.diagglist.push(item);
+              } else {
+                getillnesslist({ icdcode: item.icd10code }).then((res) => {
+                  item.icdname = res.rows[0].icdname;
+                  this.diagglist.push(item);
+                });
+              }
+              this.illnesscodes.push(item.icd10code);
             });
-            this.illnesscodes.push(item.icd10code);
-          });
-        }
-      });
+          }
+        });
       taskopergetlist(this.queryParamsdept).then((res) => {
         if (res.code == 200) {
           let arr = res.rows;
@@ -1966,22 +1969,26 @@
       }
     },
     // 鐤剧梾鍒犻櫎瑙﹀彂
-    removediagg(row) {
-      console.log(row, "row");
-      console.log(this.diagglist, "this.diagglist");
+    removediagg(tag) {
+      // 浠诲姟缁勶細鏈湴鍒犻櫎鍗冲彲锛屽悗绔繚瀛樻椂缁熶竴鏇存柊
+      if (this.form.appltype == 5) {
+        this.diagglist = this.diagglist.filter((item) => item != tag);
+        return;
+      }
 
-      let result = this.diagglist
-        .filter((item) => item.icd10code == row)
-        .map((item) => item.id);
-      if (result.length) {
-        taskdiaghospgetsondel(result).then((res) => {
+      // 鏅�氱柧鐥呭叧鑱旓細鍒ゆ柇鏄惁鏈� id锛堝凡淇濆瓨鐨勮褰曟墠鏈� id锛�
+      if (tag.id) {
+        // id 瀛樺湪锛岃皟鍚庣鎺ュ彛鍒犻櫎
+        taskdiaghospgetsondel([tag.id]).then((res) => {
           if (res.code) {
-            this.diagglist = this.diagglist.filter(
-              (item) => item.icd10code != row
-            );
+            this.diagglist = this.diagglist.filter((item) => item != tag);
             this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
           }
         });
+      } else {
+        // id 涓嶅瓨鍦紙鏈繚瀛樼殑鏂拌褰曪級锛岀洿鎺ユ湰鍦板垹闄�
+        this.diagglist = this.diagglist.filter((item) => item != tag);
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       }
     },
     /** 瀵煎叆鎸夐挳鎿嶄綔 */
diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue
index 43ed363..b81f5a9 100644
--- a/src/views/patient/propaganda/QuestionnaireTask.vue
+++ b/src/views/patient/propaganda/QuestionnaireTask.vue
@@ -379,7 +379,7 @@
                       </div>
                       <el-tag
                         v-for="tag in diagglist"
-                        @close="removediagg(tag.icd10code)"
+                        @close="removediagg(tag)"
                         type="warning"
                         closable
                         :disable-transitions="false"
@@ -713,7 +713,7 @@
                         </div>
                         <el-tag
                           v-for="tag in diagglist"
-                          @close="removediagg(tag.icd10code)"
+                          @close="removediagg(tag)"
                           type="warning"
                           closable
                           :disable-transitions="false"
@@ -1745,6 +1745,7 @@
         this.form.serviceType == 8 ||
         this.form.serviceType == 12 ||
         this.form.serviceType == 13 ||
+        this.form.serviceType == 20 ||
         this.form.serviceType == 9
       ) {
         this.checkboxlist = [
@@ -2170,7 +2171,7 @@
                 ...item,
                 itemCode: code,
                 itemName: item.itemName || item.medicalName,
-                manufacturerName: item.manufacturerName || item.medicalCompany
+                manufacturerName: item.manufacturerName || item.medicalCompany,
               });
             });
           }
@@ -2183,7 +2184,7 @@
                 item.icdname = item.icd10name;
                 this.diagglist.push(item);
               } else {
-                getillnesslist({ icdname: item.icd10name }).then((res) => {
+                getillnesslist({ icdcode: item.icd10code }).then((res) => {
                   item.icdname = res.rows[0].icdname;
                   this.diagglist.push(item);
                 });
@@ -2234,25 +2235,26 @@
         });
       }
     },
-    removediagg(row) {
+    removediagg(tag) {
       // 浠诲姟缁勶細鏈湴鍒犻櫎鍗冲彲锛屽悗绔繚瀛樻椂缁熶竴鏇存柊
       if (this.form.appltype == 5) {
-        this.diagglist = this.diagglist.filter((item) => item.icd10code != row);
+        this.diagglist = this.diagglist.filter((item) => item != tag);
         return;
       }
-      // 鏅�氱柧鐥呭叧鑱旓細璋冨悗绔帴鍙i�愭潯鍒犻櫎
-      let result = this.diagglist
-        .filter((item) => item.icd10code == row)
-        .map((item) => item.id);
-      if (result.length) {
-        taskdiaghospgetsondel(result).then((res) => {
+
+      // 鏅�氱柧鐥呭叧鑱旓細鍒ゆ柇鏄惁鏈� id锛堝凡淇濆瓨鐨勮褰曟墠鏈� id锛�
+      if (tag.id) {
+        // id 瀛樺湪锛岃皟鍚庣鎺ュ彛鍒犻櫎
+        taskdiaghospgetsondel([tag.id]).then((res) => {
           if (res.code) {
-            this.diagglist = this.diagglist.filter(
-              (item) => item.icd10code != row
-            );
+            this.diagglist = this.diagglist.filter((item) => item != tag);
             this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
           }
         });
+      } else {
+        // id 涓嶅瓨鍦紙鏈繚瀛樼殑鏂拌褰曪級锛岀洿鎺ユ湰鍦板垹闄�
+        this.diagglist = this.diagglist.filter((item) => item != tag);
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       }
     },
     remoteopcode(name) {
@@ -2272,12 +2274,14 @@
     },
     // 鍒犻櫎宸查�夎嵂鍝侊紙鍗曠嫭鎺ュ彛锛�
     removeMedical(code) {
-      taskmedicaldel({ medicalCode: code, taskId: this.form.taskid }).then((res) => {
-        if (res.code == 200) {
-          this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
-          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      taskmedicaldel({ medicalCode: code, taskId: this.form.taskid }).then(
+        (res) => {
+          if (res.code == 200) {
+            this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
+            this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          }
         }
-      });
+      );
     },
 
     // ---------- 鎮h�呴�夋嫨 ----------
diff --git a/src/views/patient/propaganda/index.vue b/src/views/patient/propaganda/index.vue
index 1a2a831..f1b9f34 100644
--- a/src/views/patient/propaganda/index.vue
+++ b/src/views/patient/propaganda/index.vue
@@ -373,7 +373,6 @@
           </template>
         </el-table-column> -->
         <el-table-column
-          fixed="right"
           label="浠诲姟缁撴灉璁板綍"
           width="120"
           align="center"
@@ -394,7 +393,6 @@
           </template>
         </el-table-column>
         <el-table-column
-          fixed="right"
           label="瀹f暀鏃堕棿"
           sortable
           align="center"
@@ -403,6 +401,17 @@
         >
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.finishtime) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column fixed="right" label="鎿嶄綔" align="center" width="100">
+          <template slot-scope="scope">
+            <el-button
+              size="medium"
+              type="text"
+              icon="el-icon-view"
+              @click="previewTemplate(scope.row)"
+              >棰勮</el-button
+            >
           </template>
         </el-table-column>
         <!-- <el-table-column
@@ -557,6 +566,10 @@
         >
       </span>
     </el-dialog>
+    <!-- 瀹f暀妯℃澘棰勮 -->
+    <el-dialog title="妯℃澘棰勮" :visible.sync="previewtf" width="60%">
+      <div v-html="htmlRichText"></div>
+    </el-dialog>
   </div>
 </template>
 
@@ -570,10 +583,11 @@
   resetUserPwd,
   changeUserStatus,
 } from "@/api/system/user";
-import { getTaskservelist } from "@/api/AiCentre/index";
+import { getTaskservelist, getlibrarylist } from "@/api/AiCentre/index";
 import Treeselect from "@riophae/vue-treeselect";
 import store from "@/store";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import axios from "axios";
 
 export default {
   name: "Discharge",
@@ -632,6 +646,8 @@
       inputVisible: false,
       inputValue: "",
       previewVisible: false, //闂ㄨ瘖瀹f暀棰勮寮规
+      previewtf: false, //瀹f暀妯℃澘棰勮寮规
+      htmlRichText: "", //瀹f暀妯℃澘棰勮瀵屾枃鏈�
       radio: "",
       radios: [],
       previewtype: 2, //棰勮闂ㄨ瘖瀹f暀绫诲瀷
@@ -847,8 +863,8 @@
           store.getters.belongWards.map((obj) => obj.districtCode);
       }
       this.loading = true;
-      console.log(this.topqueryParams.leavehospitaldistrictcodes,'123');
-      console.log(this.topqueryParams.leaveldeptcodes,'344');
+      console.log(this.topqueryParams.leavehospitaldistrictcodes, "123");
+      console.log(this.topqueryParams.leaveldeptcodes, "344");
 
       if (
         this.topqueryParams.leavehospitaldistrictcodes[0] &&
@@ -878,6 +894,48 @@
     // 鏌ョ湅闂ㄨ瘖瀹f暀璇︽儏
     Referencequestion(row) {
       this.previewVisible = true;
+    },
+    // 棰勮瀹f暀妯℃澘锛堥�氳繃 libtemplateid 鏌ヨ妯℃澘淇℃伅锛�
+    previewTemplate(row) {
+      if (!row.libtemplateid) {
+        this.$message.warning("璇ヤ换鍔℃湭鍏宠仈瀹f暀妯℃澘");
+        return;
+      }
+      this.htmlRichText = null;
+      this.previewtf = true;
+      getlibrarylist({ id: row.libtemplateid })
+        .then((res) => {
+          const tpl = (res.rows && res.rows[0]) || null;
+          if (!tpl || !tpl.htmlRichText) {
+            this.$message.warning("璇ユā鏉挎殏鏃犻瑙堝唴瀹�");
+            return;
+          }
+          axios
+            .get(tpl.htmlRichText)
+            .then((response) => {
+              this.htmlRichText = response.data;
+              this.htmlRichText = this.addStyleToImages(this.htmlRichText);
+            })
+            .catch(() => {
+              this.$message.error("鑾峰彇妯℃澘鍐呭澶辫触");
+            });
+        })
+        .catch(() => {
+          this.$message.error("鏌ヨ妯℃澘淇℃伅澶辫触");
+        });
+    },
+    // 淇瀵屾枃鏈浘鐗囪矾寰勪笌鏍峰紡
+    addStyleToImages(html) {
+      if (!html) return html;
+      let processedHtml = html.replace(
+        /\/aifollowup\/aifollowup\//g,
+        "/aifollowup/"
+      );
+      processedHtml = processedHtml.replace(
+        /<img([^>]*)style=(['"])(?:(?!\2).)*\2([^>]*)>/g,
+        '<img$1style="width:100%;height:auto;"$3>'
+      );
+      return processedHtml;
     },
     // 娣诲姞寮规鎼滅储
     remoteMethod(query) {
@@ -1101,8 +1159,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -1227,4 +1285,75 @@
 //     font-size: 24px;
 //   }
 // }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>
diff --git a/src/views/patient/propaganda/particty.vue b/src/views/patient/propaganda/particty.vue
index 46d0f82..e189c1c 100644
--- a/src/views/patient/propaganda/particty.vue
+++ b/src/views/patient/propaganda/particty.vue
@@ -228,7 +228,9 @@
                       <el-option
                         v-for="item in medicalOptions"
                         :key="item.id"
-                        :label="item.itemName + ' (' + item.manufacturerName + ')'"
+                        :label="
+                          item.itemName + ' (' + item.manufacturerName + ')'
+                        "
                         :value="item.itemCode"
                       />
                     </el-select>
@@ -377,7 +379,7 @@
                       <el-tag
                         v-for="tag in diagglist"
                         :key="tag.icdcode"
-                        @close="removediagg(tag.icd10code)"
+                        @close="removediagg(tag)"
                         type="warning"
                         closable
                         :disable-transitions="false"
@@ -710,7 +712,7 @@
                         </div>
                         <el-tag
                           v-for="tag in diagglist"
-                          @close="removediagg(tag.icd10code)"
+                          @close="removediagg(tag)"
                           type="warning"
                           closable
                           :disable-transitions="false"
@@ -1764,6 +1766,7 @@
         this.form.serviceType == 9 ||
         this.form.serviceType == 11 ||
         this.form.serviceType == 12 ||
+        this.form.serviceType == 20 ||
         this.form.serviceType == 10
       ) {
         this.checkboxlist = [
@@ -2159,7 +2162,7 @@
                 item.icdname = item.icd10name;
                 this.diagglist.push(item);
               } else {
-               this.diagglist.push(item);
+                this.diagglist.push(item);
               }
               this.illnesscodes.push(item.icd10code);
             });
@@ -2181,7 +2184,7 @@
             });
           }
         });
-        taskdiaggetlist(this.queryParamsdept).then((res) => {
+         taskdiaggetlist(this.queryParamsdept).then((res) => {
           if (res.code == 200) {
             let arr = res.rows;
             arr.forEach((item) => {
@@ -2189,7 +2192,8 @@
                 item.icdname = item.icd10name;
                 this.diagglist.push(item);
               } else {
-                getillnesslist({ icdname: item.icd10name }).then((res) => {
+
+                getillnesslist({ icdcode: item.icd10code }).then((res) => {
                   item.icdname = res.rows[0].icdname;
                   this.diagglist.push(item);
                 });
@@ -2209,7 +2213,7 @@
                 ...item,
                 itemCode: code,
                 itemName: item.itemName || item.medicalName,
-                manufacturerName: item.manufacturerName || item.medicalCompany
+                manufacturerName: item.manufacturerName || item.medicalCompany,
               });
             });
           }
@@ -2255,43 +2259,51 @@
         });
       }
     },
-    removediagg(row) {
+    removediagg(tag) {
       // 浠诲姟缁勶細鏈湴鍒犻櫎鍗冲彲锛屽悗绔繚瀛樻椂缁熶竴鏇存柊
       if (this.form.appltype == 5) {
-        this.diagglist = this.diagglist.filter((item) => item.icd10code != row);
+        this.diagglist = this.diagglist.filter((item) => item != tag);
         return;
       }
-      // 鏅�氱柧鐥呭叧鑱旓細璋冨悗绔帴鍙i�愭潯鍒犻櫎
-      let result = this.diagglist
-        .filter((item) => item.icd10code == row)
-        .map((item) => item.id);
-      if (result.length) {
-        taskdiaghospgetsondel(result).then((res) => {
+
+      // 鏅�氱柧鐥呭叧鑱旓細鍒ゆ柇鏄惁鏈� id锛堝凡淇濆瓨鐨勮褰曟墠鏈� id锛�
+      if (tag.id) {
+        // id 瀛樺湪锛岃皟鍚庣鎺ュ彛鍒犻櫎
+        taskdiaghospgetsondel([tag.id]).then((res) => {
           if (res.code) {
-            this.diagglist = this.diagglist.filter(
-              (item) => item.icd10code != row
-            );
+            this.diagglist = this.diagglist.filter((item) => item != tag);
             this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
           }
         });
+      } else {
+        // id 涓嶅瓨鍦紙鏈繚瀛樼殑鏂拌褰曪級锛岀洿鎺ユ湰鍦板垹闄�
+        this.diagglist = this.diagglist.filter((item) => item != tag);
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
       }
     },
     remoteopcode(name) {
       // 鍗犱綅
     },
     remoteSearchMedical(query) {
-      if (!query) { this.medicalOptions = []; return; }
-      listMedication({ itemName: query, pageNum: 1, pageSize: 20 }).then((res) => {
-        this.medicalOptions = res.rows || [];
-      });
+      if (!query) {
+        this.medicalOptions = [];
+        return;
+      }
+      listMedication({ itemName: query, pageNum: 1, pageSize: 20 }).then(
+        (res) => {
+          this.medicalOptions = res.rows || [];
+        }
+      );
     },
     removeMedical(code) {
-      taskmedicaldel({ itemCode: code, taskid: this.form.taskid }).then((res) => {
-        if (res.code == 200) {
-          this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
-          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      taskmedicaldel({ itemCode: code, taskid: this.form.taskid }).then(
+        (res) => {
+          if (res.code == 200) {
+            this.medicalCodes = this.medicalCodes.filter((c) => c !== code);
+            this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+          }
         }
-      });
+      );
     },
 
     // ---------- 鎮h�呴�夋嫨 ----------
@@ -2821,7 +2833,7 @@
           // 灏嗕富瀵硅薄鏀惧叆 form 鎻愪氦
         }
         if (this.form.appltype == 5) {
-          console.log(this.form,'杩涘叆浠诲姟缁勯厤缃�');
+          console.log(this.form, "杩涘叆浠诲姟缁勯厤缃�");
 
           this.form.serviceTaskScheduleVO.icd10codes = this.form.icd10code;
           this.form.serviceTaskScheduleVO.wardCodes =
@@ -2858,7 +2870,9 @@
           );
           this.form.medicalCode = this.medicalCodes.join(",");
           this.form.medicalName = selectedMeds.map((m) => m.itemName).join(",");
-          this.form.medicalCompany = selectedMeds.map((m) => m.manufacturerName).join(",");
+          this.form.medicalCompany = selectedMeds
+            .map((m) => m.manufacturerName)
+            .join(",");
         }
 
         this.form.serviceType = this.serviceType;
@@ -2871,7 +2885,11 @@
           .map((item) => item.icdname)
           .join(",");
         // 鐤剧梾/鎵嬫湳/鑽搧鍏宠仈鐨勭瀹�/鐥呭尯鏍¢獙
-        if (this.form.appltype == 3 || this.form.appltype == 4 || this.form.appltype == 6) {
+        if (
+          this.form.appltype == 3 ||
+          this.form.appltype == 4 ||
+          this.form.appltype == 6
+        ) {
           const hasDept = this.diseaseDept?.deptCode;
           const hasWard = this.diseaseWard?.districtCode;
           if (!hasDept && !hasWard) {
diff --git a/src/views/patient/questionnaire/index.vue b/src/views/patient/questionnaire/index.vue
index 27c0ef1..9197ccd 100644
--- a/src/views/patient/questionnaire/index.vue
+++ b/src/views/patient/questionnaire/index.vue
@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <div class="leftvlue" style="margin-bottom: 20px">
+    <!-- <div class="leftvlue" style="margin-bottom: 20px">
       <el-row :gutter="10">
         <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index">
           <el-card
@@ -61,7 +61,13 @@
           </div>
         </el-col>
       </el-row>
-    </div>
+    </div> -->
+    <statistics-cards
+      :cardlist="cardlist"
+      :ycvalue="ycvalue"
+      :jgvalue="jgvalue"
+      :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+    />
     <el-row :gutter="20">
       <!--鐢ㄦ埛鏁版嵁-->
       <el-form
@@ -139,7 +145,7 @@
         <el-col :span="1.5">
           <el-button
             type="primary"
-                        icon="el-icon-plus"
+            icon="el-icon-plus"
             size="medium"
             @click="handleAdd"
             >鏂板</el-button
@@ -221,7 +227,7 @@
           width="120"
         >
           <template slot-scope="scope">
-             <el-tooltip
+            <el-tooltip
               class="item"
               effect="dark"
               :content="scope.row.remark"
@@ -393,7 +399,7 @@
           prop="templatename"
           width="200"
         />
-         <el-table-column
+        <el-table-column
           label="浠诲姟鐘舵��"
           align="center"
           key="sendstate"
@@ -681,13 +687,15 @@
 } from "@/api/system/user";
 import { getTaskservelist } from "@/api/AiCentre/index";
 import Treeselect from "@riophae/vue-treeselect";
+import StatisticsCards from "@/components/StatisticsCards";
+
 import store from "@/store";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 
 export default {
   name: "Discharge",
   dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
-  components: { Treeselect },
+  components: { Treeselect, StatisticsCards },
   data() {
     return {
       // 閬僵灞�
@@ -696,6 +704,8 @@
       ids: [],
       // 闈炲崟涓鐢�
       single: true,
+      jgvalue: 0,
+
       // 闈炲涓鐢�
       multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
@@ -723,7 +733,6 @@
       },
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -739,6 +748,7 @@
       },
       value: [],
       list: [],
+      orgname: "",
 
       sourcetype: [
         {
@@ -793,26 +803,39 @@
       ],
       cardlist: [
         {
-          name: "鎮h�呮湇鍔℃�婚噺",
+          name: "鍑洪櫌鏈嶅姟鎬婚噺",
+          value: 0,
+        },
+        {
+          name: "鎮h�呰繃婊�",
+          value: 0,
+        },
+        {
+          name: "搴旈殢璁�",
           value: 0,
         },
 
+        // {
+        //   name: "寮傚父",
+        //   value: 0,
+        // },
         {
-          name: "鏃犻渶闅忚",
+          name: "鍙戦�佸け璐�",
           value: 0,
         },
         {
-          name: "闇�闅忚",
+          name: "寰呮墽琛�",
           value: 0,
         },
-        {
-          name: "寰呴殢璁�",
-          value: 0,
-        },
-        {
-          name: "宸插畬鎴�",
-          value: 0,
-        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
+
+        // {
+        //   name: "琛ㄥ崟宸插彂閫�",
+        //   value: 0,
+        // },
       ],
 
       // 琛ㄥ崟鍙傛暟
@@ -830,7 +853,7 @@
         pageSize: 10,
         serviceType: 7,
         searchscope: 3,
-        sendstate:2,
+        sendstate: 2,
         scopetype: [],
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
@@ -838,7 +861,7 @@
       propss: { multiple: true },
       options: [],
 
-       topicoptions: [
+      topicoptions: [
         {
           value: null,
           label: "鍏ㄩ儴",
@@ -875,6 +898,9 @@
         },
       ],
       errtype: "",
+      ycvalue: 0,
+      jgvalue: 0,
+
       leavehospitaldistrictcode: "",
       serviceState: [],
       checkboxlist: [],
@@ -889,6 +915,8 @@
     this.errtype = this.$route.query.errtype;
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
+    this.orgname = localStorage.getItem("orgname");
+
     this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
       return {
         label: dept.deptName,
@@ -915,48 +943,69 @@
   },
   methods: {
     /** 鏌ヨ闂ㄨ瘖闅忚鏈嶅姟鍒楄〃 */
-    getList(refresh) {
+    async getList(refresh) {
       // 榛樿鍏ㄩ儴
-      if (this.topqueryParams.searchscope == 3) {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
+      this.applyDeptWardScope();
+      if (this.endOut == 0) {
+        this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS(
+          this.getEndOfDay()
         );
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
       }
+
       // 鎺ュ彈寮傚父璺宠浆
       if (this.errtype) {
         this.topqueryParams.leavehospitaldistrictcodes.push(
           this.leavehospitaldistrictcode
         );
-        console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
       }
+
       this.loading = true;
-      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
-        this.topqueryParams.deptOrDistrict=2;
-      }else{
-        this.topqueryParams.deptOrDistrict=1;
+
+      if (
+        this.topqueryParams.leavehospitaldistrictcodes[0] &&
+        this.topqueryParams.leaveldeptcodes[0]
+      ) {
+        this.topqueryParams.deptOrDistrict = 2;
+      } else {
+        this.topqueryParams.deptOrDistrict = 1;
       }
 
       if (!this.followupAuthority()) {
         this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
+        this.loading = false;
         return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
       }
-      getTaskservelist(this.topqueryParams).then((response) => {
+
+      try {
+        const response = await getTaskservelist(this.topqueryParams);
+
+        // 鉁� 绗竴姝ワ細鍏堥攣瀹氭仮澶嶇姸鎬�
+        this.isRestoring = true;
+
+        // 鉁� 绗簩姝ワ細鍐嶆洿鏂版暟鎹紙杩欎細瑙﹀彂 selection-change锛屼絾琚攣浣忎簡锛�
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
+
+        // 鉁� 绗笁姝ワ細鎭㈠閫変腑鐘舵��
+        // this.restoreSelection();
+        this.$nextTick(() => {
+          this.restoreSelection();
+        });
+
+        // 鉁� 绗洓姝ワ細澶勭悊鍏朵粬鏁版嵁
         if (refresh) {
           this.cardlist[0].value =
             Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
-          // this.cardlist[1].value = response.rows[0].wzx;
           this.cardlist[1].value = response.rows[0].wxsf || 0;
-          this.ycvalue = response.rows[0].yc;
+          this.ycvalue = Number(response.rows[0].yc) || 0;
+          this.jgvalue = response.rows[0].jg;
           this.cardlist[2].value = response.rows[0].xsf || 0;
           this.cardlist[3].value = response.rows[0].dsf || 0;
           this.cardlist[4].value = response.rows[0].ywc || 0;
           this.yfsvalue = response.rows[0].yfs;
         }
-        this.loading = false;
+
+        // 鉁� 绗簲姝ワ細澶勭悊 preachform 绛夊叾浠栨暟鎹�
         this.userList.forEach((item) => {
           let idArray = null;
           if (item.endtime) {
@@ -964,23 +1013,36 @@
           }
 
           if (item.preachform) {
-            if (item.endtime) {
-              item.preachformson = item.preachform;
-              idArray = item.preachform.split(",");
-            }
+            item.preachformson = item.preachform;
+            idArray = item.preachform.split(",");
 
             item.preachform = idArray.map((value) => {
-              // 鏌ユ壘id瀵瑰簲鐨勫璞�
               const item = this.checkboxlist.find(
                 (item) => item.value == value
               );
-              // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null
               return item ? item.label : null;
             });
           }
+          if (item.currentPreachform) {
+            item.currentPreachform = this.checkboxlist.find(
+              (item) => item.value == item.currentPreachform
+            )?.value;
+            console.log(item.currentPreachform, "mi");
+          }
         });
+
         this.total = response.total;
-      });
+        this.loading = false;
+
+        // 鉁� 绗叚姝ワ細瑙i攣
+        this.$nextTick(() => {
+          this.isRestoring = false;
+        });
+      } catch (error) {
+        console.error("鑾峰彇鍒楄〃澶辫触:", error);
+        this.loading = false;
+        this.isRestoring = false;
+      }
     },
     // 鏌ョ湅褰卞儚闅忚璇︽儏
     Referencequestion(row) {
@@ -1111,7 +1173,7 @@
         pageSize: 10,
         serviceType: 7,
         searchscope: 2,
-        sendstate:2,
+        sendstate: 2,
       };
       this.handleQuery(1);
     },
@@ -1250,9 +1312,9 @@
     Seedetails(row) {
       let type = "";
       console.log(row, "rwo");
-        if (row.type == 1) {
-          type = 1;
-        }
+      if (row.type == 1) {
+        type = 1;
+      }
       this.$router.push({
         path: "/followvisit/record/detailpage/",
         query: {
@@ -1389,11 +1451,11 @@
   }
 }
 ::v-deep.leftvlue .el-card__body {
-  background: #F2F8FF;
-  color: #324A9B;
+  background: #f2f8ff;
+  color: #324a9b;
 }
 ::v-deep.leftvlue .el-card__body:hover {
-  background: #3664D9;
+  background: #3664d9;
   color: #fff;
   cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
 }
diff --git a/src/views/patient/shadow/index.vue b/src/views/patient/shadow/index.vue
index 96b8adc..7318a93 100644
--- a/src/views/patient/shadow/index.vue
+++ b/src/views/patient/shadow/index.vue
@@ -723,7 +723,7 @@
       },
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
diff --git a/src/views/patient/subsequent/index.vue b/src/views/patient/subsequent/index.vue
index 77484f8..5da46dc 100644
--- a/src/views/patient/subsequent/index.vue
+++ b/src/views/patient/subsequent/index.vue
@@ -661,6 +661,8 @@
       multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
+      jgvalue: 0,
+      orgname: "",
       // 鎬绘潯鏁�
       total: 0,
       // 鐢ㄦ埛琛ㄦ牸鏁版嵁
@@ -684,7 +686,7 @@
       },
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -846,6 +848,7 @@
     this.serviceState = store.getters.serviceState;
     this.checkboxlist = store.getters.checkboxlist;
     this.errtype = this.$route.query.errtype;
+    this.orgname = localStorage.getItem("orgname");
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
     this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
diff --git a/src/views/patient/ycquestionnaire/index.vue b/src/views/patient/ycquestionnaire/index.vue
new file mode 100644
index 0000000..8d5ebba
--- /dev/null
+++ b/src/views/patient/ycquestionnaire/index.vue
@@ -0,0 +1,1298 @@
+<template>
+  <div class="app-container">
+    <statistics-cards
+      :cardlist="cardlist"
+      :ycvalue="ycvalue"
+      :jgvalue="jgvalue"
+      :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+    />
+    <el-row :gutter="20">
+      <!--鐢ㄦ埛鏁版嵁-->
+      <el-form
+        :model="topqueryParams"
+        ref="queryForm"
+        size="small"
+        :inline="true"
+        v-show="showSearch"
+        label-width="98px"
+      >
+        <el-form-item label="浠诲姟鍚嶇О">
+          <el-input
+            v-model="topqueryParams.taskName"
+            placeholder="璇烽�夋嫨浠诲姟鍚嶇О"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="鍑洪櫌鏃堕棿">
+          <el-date-picker
+            v-model="dateRange"
+            style="width: 240px"
+            value-format="yyyy-MM-dd"
+            type="daterange"
+            range-separator="-"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+          ></el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="鎮h�呭鍚�" prop="sendname">
+          <el-input
+            v-model="topqueryParams.sendname"
+            placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="鎮h�呰寖鍥�" prop="status">
+          <el-cascader
+            v-model="topqueryParams.scopetype"
+            placeholder="榛樿鍏ㄩ儴"
+            :options="sourcetype"
+            :props="{ expandTrigger: 'hover' }"
+            @change="handleChange"
+          ></el-cascader>
+        </el-form-item>
+
+        <el-form-item label="浠诲姟鐘舵��" prop="status">
+          <el-select v-model="topqueryParams.sendstate" placeholder="璇烽�夋嫨">
+            <el-option
+              v-for="item in topicoptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item>
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            size="medium"
+            @click="handleQuery(1)"
+            >鎼滅储</el-button
+          >
+          <el-button icon="el-icon-refresh" size="medium" @click="resetQuery"
+            >閲嶇疆</el-button
+          >
+        </el-form-item>
+      </el-form>
+      <el-divider></el-divider>
+      <el-row :gutter="10" class="mb8">
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-plus"
+            size="medium"
+            @click="handleAdd"
+            >鏂板</el-button
+          >
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="warning"
+                plain
+                icon="el-icon-upload2"
+                size="medium"
+                @click="handleExport"
+                v-hasPermi="['system:user:export']"
+                >瀵煎嚭</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="warning"
+                plain
+                icon="el-icon-warning-outline"
+                size="medium"
+                @click="toleadExport(1)"
+                >鎵ц澶辫触</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+        <el-col :span="1.5">
+          <div class="documentf">
+            <div class="document">
+              <el-button
+                type="danger"
+                plain
+                icon="el-icon-warning"
+                size="medium"
+                @click="toleadExport(2)"
+                >缁撴灉寮傚父</el-button
+              >
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+      <el-table
+        v-loading="loading"
+        :data="userList"
+        height="660"
+        :row-class-name="tableRowClassName"
+        @selection-change="handleSelectionChange"
+      >
+        <el-table-column type="selection" width="50" align="center" />
+        <el-table-column
+          label="浠诲姟鍚嶇О"
+          fixed
+          align="center"
+          key="taskName"
+          prop="taskName"
+          width="180"
+        />
+        <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> -->
+        <el-table-column
+          label="濮撳悕"
+          fixed
+          align="center"
+          key="sendname"
+          prop="sendname"
+        />
+        <el-table-column
+          label="浠诲姟鐘舵��"
+          align="center"
+          key="sendstate"
+          prop="sendstate"
+          width="120"
+        >
+          <template slot-scope="scope">
+            <div v-if="scope.row.sendstate == 1">
+              <el-tag type="primary" :disable-transitions="false"
+                >琛ㄥ崟宸查鍙�</el-tag
+              >
+            </div>
+            <div v-if="scope.row.sendstate == 2">
+              <el-tag type="primary" :disable-transitions="false"
+                >寰呮墽琛�</el-tag
+              >
+            </div>
+            <div v-if="scope.row.sendstate == 3">
+              <el-tag type="success" :disable-transitions="false"
+                >琛ㄥ崟宸插彂閫�</el-tag
+              >
+            </div>
+            <div v-if="scope.row.sendstate == 4">
+              <el-tag type="info" :disable-transitions="false">涓嶆墽琛�</el-tag>
+            </div>
+            <div v-if="scope.row.sendstate == 5">
+              <el-tag type="danger" :disable-transitions="false"
+                >鍙戦�佸け璐�</el-tag
+              >
+            </div>
+            <div v-if="scope.row.sendstate == 6">
+              <el-tag type="danger" :disable-transitions="false">宸插畬鎴�</el-tag>
+            </div>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column
+          label="浠诲姟寮傚父璇存槑"
+          width="120"
+          align="center"
+          key="remark"
+          prop="remark" -->
+        />
+
+        <el-table-column
+          label="浜哄伐澶勭悊鎰忚"
+          align="center"
+          key="suggest"
+          prop="suggest"
+          width="120"
+        >
+          <template slot-scope="scope">
+            <dict-tag
+              :options="dict.type.sys_suggest"
+              :value="scope.row.suggest"
+            />
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="闅忚浜哄憳"
+          align="center"
+          key="createBy"
+          prop="createBy"
+          width="120"
+        />
+        <el-table-column
+          label="闅忚鏃堕棿"
+          sortable
+          align="center"
+          prop="finishtime"
+          width="160"
+        >
+          <template slot-scope="scope">
+            <span>{{ parseTime(scope.row.finishtime) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鍑洪櫌鏃ユ湡"
+          width="200"
+          align="center"
+          key="endtime"
+          prop="endtime"
+        >
+          <template slot-scope="scope">
+            <span>{{ formatTime(scope.row.endtime) }}</span>
+          </template></el-table-column
+        >
+        <el-table-column
+          label="搴旈殢璁挎棩鏈�"
+          width="200"
+          align="center"
+          key="longSendTime"
+          prop="longSendTime"
+        >
+          <template slot-scope="scope">
+            <span>{{ formatTime(scope.row.longSendTime) }}</span>
+          </template></el-table-column
+        >
+        <el-table-column
+          label="鍑洪櫌澶╂暟"
+          width="120"
+          align="center"
+          key="endDay"
+          prop="endDay"
+        >
+          <template slot-scope="scope">
+            <span>{{ scope.row.endDay ? scope.row.endDay + "澶�" : "" }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="韬唤璇佸彿鐮�"
+          width="200"
+          align="center"
+          key="sfzh"
+          prop="sfzh"
+        />
+        <el-table-column
+          label="鑱旂郴鐢佃瘽"
+          width="200"
+          align="center"
+          key="phone"
+          prop="phone"
+        />
+        <el-table-column
+          label="璐d换鎶ゅ+"
+          width="120"
+          align="center"
+          key="nurseName"
+          prop="nurseName"
+        />
+        <el-table-column
+          label="涓绘不鍖荤敓"
+          width="120"
+          align="center"
+          key="drname"
+          prop="drname"
+        />
+
+        <!-- <el-table-column
+          label="鐥呭巻鍙�"
+          align="center"
+          sortable
+          key="medicalRecordNo"
+          prop="medicalRecordNo"
+          width="120"
+        /> -->
+
+        <!-- <el-table-column label="骞撮緞" align="center" key="age" prop="age" /> -->
+        <!-- <el-table-column label="鎬у埆" align="center" key="sex" prop="sex" /> -->
+        <!-- <el-table-column label="搴婂彿" align="center" key="badNo" prop="badNo" /> -->
+        <el-table-column
+          label="绉戝"
+          align="center"
+          key="deptname"
+          prop="deptname"
+          width="120"
+        >
+        </el-table-column>
+        <el-table-column
+          label="鐥呭尯"
+          align="center"
+          key="leavehospitaldistrictname"
+          prop="leavehospitaldistrictname"
+          width="120"
+        >
+        </el-table-column>
+
+        <!-- <el-table-column
+          label="鐤剧梾鍚嶇О"
+          align="center"
+          key="icdName"
+          prop="icdName"
+          width="120"
+          :show-overflow-tooltip="true"
+        >
+        </el-table-column> -->
+
+        <el-table-column
+          label="鍑洪櫌闅忚妯℃澘鍚嶇О"
+          align="center"
+          key="templatename"
+          prop="templatename"
+          width="200"
+        />
+        <el-table-column
+          label="浠诲姟鎵ц鏂瑰紡"
+          align="center"
+          key="preachform"
+          prop="preachform"
+          width="160"
+          :show-overflow-tooltip="true"
+        >
+          <template slot-scope="scope">
+            <span v-for="item in scope.row.preachform">{{ item }}銆� </span>
+          </template>
+        </el-table-column>
+        <!-- <el-table-column
+          label="浠诲姟鍙戦�佹祦绋�"
+          align="center"
+          key="serviceSubtaskRecordList"
+          prop="serviceSubtaskRecordList"
+          width="160"
+          :show-overflow-tooltip="true"
+        >
+          <template slot-scope="scope">
+            <span v-for="item in scope.row.serviceSubtaskRecordList"
+              >{{ item.remark }}銆�
+            </span>
+          </template>
+        </el-table-column> -->
+        <el-table-column
+          label="浠诲姟缁撴灉璇存槑"
+          width="200"
+          align="center"
+          key="remark"
+          prop="remark"
+        >
+          <template slot-scope="scope" v-if="scope.row.remark">
+            <el-tag
+              type="warning"
+              v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4"
+              >{{ scope.row.remark }}</el-tag
+            >
+            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="鎿嶄綔"
+          align="center"
+          fixed="right"
+          width="200"
+          class-name="small-padding fixed-width"
+        >
+          <template slot-scope="scope">
+            <!-- <el-tooltip
+              class="item"
+              effect="dark"
+              content="閲嶆柊闅忚"
+              placement="top"
+            >
+              <el-button
+                size="medium"
+                type="text"
+                @click="followupvisit(scope.row)"
+                v-hasPermi="['system:user:edit']"
+                ><span class="button-bb"
+                  ><i class="el-icon-s-promotion"></i></span
+              ></el-button>
+            </el-tooltip> -->
+            <!-- <el-tooltip
+              class="item"
+              effect="dark"
+              content="鍋滄"
+              placement="top"
+            >
+              <el-button
+                size="medium"
+                type="text"
+                @click="handlestop(scope.row)"
+                v-hasPermi="['system:user:edit']"
+                ><span class="button-sc"><i class="el-icon-delete"></i></span
+              ></el-button>
+            </el-tooltip> -->
+            <el-button size="medium" type="text" @click="Seedetails(scope.row)"
+              ><span class="button-zx"
+                ><i class="el-icon-s-order"></i>鏌ョ湅璇︽儏</span
+              ></el-button
+            >
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <pagination
+        v-show="total > 0"
+        :total="total"
+        :page.sync="topqueryParams.pageNum"
+        :limit.sync="topqueryParams.pageSize"
+        @pagination="getList"
+      />
+    </el-row>
+    <!-- 娣诲姞鎴栦慨鏀归棬璇婇殢璁垮璇濇 -->
+    <el-dialog
+      :title="title"
+      :visible.sync="addalteropen"
+      width="700px"
+      append-to-body
+    >
+      <el-form ref="form" :model="form" label-width="100px">
+        <el-row :gutter="20">
+          <el-col :span="12"
+            ><el-form-item label="浠诲姟鍚嶇О">
+              <el-input v-model="form.name"></el-input> </el-form-item
+          ></el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24"
+            ><el-form-item label="鎵�灞炵瀹�">
+              <el-select v-model="form.region" placeholder="璇烽�夋嫨绉戝">
+                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+              </el-select> </el-form-item></el-col
+        ></el-row>
+        <el-row :gutter="20">
+          <el-col :span="24"
+            ><el-form-item label="闅忚绫诲瀷">
+              <el-select v-model="form.region" placeholder="璇烽�夋嫨闅忚绫诲瀷">
+                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+              </el-select> </el-form-item
+          ></el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="鏈嶅姟妯″潡">
+              <el-select v-model="form.region" placeholder="璇烽�夋嫨妯″潡">
+                <el-option label="鍖哄煙涓�" value="shanghai"></el-option>
+                <el-option label="鍖哄煙浜�" value="beijing"></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20">
+          <el-col :span="24">
+            <el-form-item label="闂ㄨ瘖闅忚瑕佹眰">
+              <el-input type="textarea" v-model="form.desc"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">鎻� 浜�</el-button>
+        <el-button @click="cancel">杩� 鍥�</el-button>
+      </div>
+    </el-dialog>
+    <!-- 淇敼鍙戦�佹椂闂村璇濇 -->
+    <el-dialog
+      title="鍙戦�佹椂闂磋缃�"
+      :visible.sync="modificationVisible"
+      width="45%"
+    >
+      <div style="margin-bottom: 20px; color: red">
+        缁熶竴淇敼褰撳ぉ鏈彂閫佺殑浠诲姟鏃堕棿
+      </div>
+
+      <el-form
+        :model="ruleForm"
+        :rules="rules"
+        ref="ruleForm"
+        label-width="120px"
+        class="demo-ruleForm"
+      >
+        <el-form-item label="鍙戦�佹棩鏈�">
+          <el-date-picker
+            v-model="ruleForm.value1"
+            type="date"
+            placeholder="閫夋嫨鏃ユ湡"
+          >
+          </el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="鏃堕棿娈�" prop="type">
+          <el-checkbox-group v-model="ruleForm.type">
+            <el-checkbox label="涓婂崍" name="type"></el-checkbox>
+            <el-checkbox label="涓嬪崍" name="type"></el-checkbox>
+            <el-checkbox label="鏅氫笂" name="type"></el-checkbox>
+          </el-checkbox-group>
+        </el-form-item>
+        <el-form-item label="涓婂崍鏃堕棿鍖洪棿" required>
+          <el-time-picker
+            is-range
+            v-model="ruleForm.value2"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-time-picker>
+        </el-form-item>
+        <el-form-item label="涓嬪崍鏃堕棿鍖洪棿" required>
+          <el-time-picker
+            is-range
+            v-model="ruleForm.value3"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-time-picker>
+        </el-form-item>
+        <el-form-item label="鏅氫笂鏃堕棿鍖洪棿" required>
+          <el-time-picker
+            is-range
+            v-model="ruleForm.value4"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-time-picker>
+        </el-form-item>
+      </el-form>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="modificationVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="modificationVisible = false"
+          >纭� 瀹�</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listUser,
+  getUser,
+  delUser,
+  addUser,
+  updateUser,
+  resetUserPwd,
+  changeUserStatus,
+} from "@/api/system/user";
+import { getTaskservelist } from "@/api/AiCentre/index";
+import Treeselect from "@riophae/vue-treeselect";
+import store from "@/store";
+import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import StatisticsCards from "@/components/StatisticsCards";
+
+export default {
+  name: "Discharge",
+  dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"],
+  components: { Treeselect, StatisticsCards },
+  data() {
+    return {
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      jgvalue: 0,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 鐢ㄦ埛琛ㄦ牸鏁版嵁
+      userList: null,
+      // 寮瑰嚭灞傛爣棰�
+      title: "鏂板闂ㄨ瘖闅忚",
+      // 鏄惁鏄剧ず淇敼銆佹坊鍔犲脊鍑哄眰
+      addalteropen: false,
+      // 淇敼鍙戦�佹椂闂村璇濇
+      modificationVisible: false,
+      // 閮ㄩ棬鍚嶇О
+      deptName: undefined,
+      // 榛樿瀵嗙爜
+      initPassword: undefined,
+      // 鏃ユ湡鑼冨洿
+      dateRange: [],
+      // 宀椾綅閫夐」
+      postOptions: [],
+      ruleForm: {
+        type: [],
+      },
+      ycvalue: 0,
+      jgvalue: 0,
+      dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
+      inputVisible: false,
+      yfsvalue: "",
+      inputValue: "",
+      preachform: "",
+      previewVisible: false, //闂ㄨ瘖闅忚棰勮寮规
+      radio: "",
+      radios: [],
+      previewtype: 2, //棰勮闂ㄨ瘖闅忚绫诲瀷
+      total: 0, // 鎬绘潯鏁�
+      ImportQuantity: 999, //瀵奸棬璇婇殢璁挎暟閲�
+      //棰勮闂ㄨ瘖闅忚淇℃伅
+      previewvalue: {
+        username: "杩欎釜鍖荤敓瀵逛綘鎬庝箞鏍�",
+      },
+      value: [],
+      list: [],
+      orgname: "",
+
+      sourcetype: [
+        {
+          value: 1,
+          label: "绉戝",
+          children: [],
+        },
+        {
+          value: 2,
+          label: "鐥呭尯",
+          children: [],
+        },
+        {
+          value: 3,
+          label: "鍏ㄩ儴",
+        },
+      ],
+      loading: false,
+      cardlist: [
+        {
+          name: "鍑洪櫌鏈嶅姟鎬婚噺",
+          value: 0,
+        },
+        {
+          name: "鎮h�呰繃婊�",
+          value: 0,
+        },
+        {
+          name: "搴旈殢璁�",
+          value: 0,
+        },
+
+        // {
+        //   name: "寮傚父",
+        //   value: 0,
+        // },
+        {
+          name: "鍙戦�佸け璐�",
+          value: 0,
+        },
+        {
+          name: "寰呮墽琛�",
+          value: 0,
+        },
+        // {
+        //   name: "宸插彂閫�",
+        //   value: 0,
+        // },
+
+        // {
+        //   name: "琛ㄥ崟宸插彂閫�",
+        //   value: 0,
+        // },
+      ],
+
+      // 琛ㄥ崟鍙傛暟
+      form: {
+        phonenumber: "",
+        totagid: "",
+        types: "",
+        nickName: "",
+        qystatus: "",
+        btstatus: "",
+      },
+      // 鏌ヨ鍙傛暟
+      topqueryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        serviceType: 20,
+        searchscope: 3,
+        scopetype: [],
+        leaveldeptcodes: [],
+        leavehospitaldistrictcodes: [],
+      },
+      propss: { multiple: true },
+      options: [],
+
+      topicoptions: [
+        {
+          value: 1,
+          label: "琛ㄥ崟宸查鍙�",
+        },
+        {
+          value: 2,
+          label: "寰呮墽琛�",
+        },
+        {
+          value: 3,
+          label: "琛ㄥ崟宸插彂閫�",
+        },
+        {
+          value: 4,
+          label: "涓嶆墽琛�",
+        },
+        {
+          value: 5,
+          label: "鍙戦�佸け璐�",
+        },
+        {
+          value: 6,
+          label: "宸插畬鎴�",
+        },
+      ],
+      topicoptionsyj: [
+        {
+          value: 1,
+          label: "寮傚父",
+        },
+        {
+          value: 0,
+          label: "姝e父",
+        },
+      ],
+      errtype: "",
+      leavehospitaldistrictcode: "",
+      serviceState: [],
+      checkboxlist: [],
+      // 琛ㄥ崟鏍¢獙
+      rules: {},
+    };
+  },
+  watch: {},
+  created() {
+    this.serviceState = store.getters.serviceState;
+    this.checkboxlist = store.getters.checkboxlist;
+    this.errtype = this.$route.query.errtype;
+    this.leavehospitaldistrictcode =
+      this.$route.query.leavehospitaldistrictcode;
+    this.orgname = localStorage.getItem("orgname");
+
+    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
+      return {
+        label: dept.deptName,
+        value: dept.deptCode,
+      };
+    });
+    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
+      return {
+        label: dept.districtName,
+        value: dept.districtCode,
+      };
+    });
+    if (this.errtype) {
+      this.toleadExport(2);
+    } else {
+      this.getList(1);
+    }
+    this.getConfigKey("sys.user.initPassword").then((response) => {
+      this.initPassword = response.msg;
+    });
+  },
+  activated() {
+    this.getList(1);
+  },
+  methods: {
+    /** 鏌ヨ闂ㄨ瘖闅忚鏈嶅姟鍒楄〃 */
+    getList(refresh) {
+      // 榛樿鍏ㄩ儴
+      if (this.topqueryParams.searchscope == 3) {
+        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
+        this.topqueryParams.leavehospitaldistrictcodes =
+          store.getters.belongWards.map((obj) => obj.districtCode);
+      }
+      // 鎺ュ彈寮傚父璺宠浆
+      if (this.errtype) {
+        this.topqueryParams.leavehospitaldistrictcodes.push(
+          this.leavehospitaldistrictcode
+        );
+        console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
+      }
+      this.loading = true;
+      getTaskservelist(this.topqueryParams).then((response) => {
+        this.userList = response.rows[0].serviceSubtaskList;
+        this.total = response.total;
+        if (refresh) {
+          this.cardlist[0].value =
+            Number(response.rows[0].wzx) + Number(response.rows[0].ysf);
+          this.cardlist[1].value = response.rows[0].wzx;
+          this.cardlist[2].value = response.rows[0].ysf;
+          this.ycvalue = response.rows[0].yc;
+          this.cardlist[3].value = response.rows[0].fssb;
+          this.cardlist[4].value = response.rows[0].dsf;
+          // this.cardlist[5].value = response.rows[0].yfs2;
+          this.yfsvalue = response.rows[0].yfs;
+        }
+        this.loading = false;
+        this.userList.forEach((item) => {
+          let idArray = null;
+          if (item.endtime) {
+            item.endDay = this.daysBetween(item.endtime);
+          }
+
+          if (item.preachform) {
+            if (item.endtime) {
+              item.preachformson = item.preachform;
+              idArray = item.preachform.split(",");
+            }
+
+            item.preachform = idArray.map((value) => {
+              // 鏌ユ壘id瀵瑰簲鐨勫璞�
+              const item = this.checkboxlist.find(
+                (item) => item.value == value
+              );
+              // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null
+              return item ? item.label : null;
+            });
+          }
+        });
+        this.total = response.total;
+      });
+    },
+    // 鏌ョ湅闂ㄨ瘖闅忚璇︽儏
+    Referencequestion(row) {
+      this.previewVisible = true;
+    },
+    // 娣诲姞寮规鎼滅储
+    remoteMethod(query) {
+      if (query !== "") {
+        this.loading = true;
+        setTimeout(() => {
+          this.loading = false;
+          this.options = this.list.filter((item) => {
+            return item.label.toLowerCase().indexOf(query.toLowerCase()) > -1;
+          });
+        }, 200);
+      } else {
+        this.options = [];
+      }
+    },
+    // 闂ㄨ瘖闅忚鐘舵�佷慨鏀�
+    handleStatusChange(row) {
+      let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
+      this.$modal
+        .confirm('纭瑕�"' + text + '""' + row.userName + '"鐢ㄦ埛鍚楋紵')
+        .then(function () {
+          return changeUserStatus(row.userId, row.status);
+        })
+        .then(() => {
+          this.$modal.msgSuccess(text + "鎴愬姛");
+        })
+        .catch(function () {
+          row.status = row.status === "0" ? "1" : "0";
+        });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.addalteropen = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        userId: undefined,
+        deptId: undefined,
+        userName: undefined,
+        nickName: undefined,
+        password: undefined,
+        phonenumber: undefined,
+        email: undefined,
+        sex: undefined,
+        status: "0",
+        remark: undefined,
+        postIds: [],
+        roleIds: [],
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery(refresh) {
+      if (this.topqueryParams.searchscope == 3) {
+        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+          (obj) => obj.deptCode
+        );
+        this.topqueryParams.leavehospitaldistrictcodes =
+          store.getters.belongWards.map((obj) => obj.districtCode);
+      }
+      this.topqueryParams.pageNum = 1;
+      this.topqueryParams.startOutHospTime = this.dateRange[0];
+      this.topqueryParams.endOutHospTime = this.dateRange[1];
+
+      this.getList(refresh);
+    },
+    // 鎮h�呰寖鍥村鐞�
+    handleChange(value) {
+      let type = value[0];
+      let code = value.slice(-1)[0];
+      this.topqueryParams.leavehospitaldistrictcodes = [];
+      this.topqueryParams.leaveldeptcodes = [];
+
+      if (type == 1) {
+        this.topqueryParams.leaveldeptcodes.push(code);
+        this.topqueryParams.leavehospitaldistrictcodes = [];
+        this.topqueryParams.searchscope = 1;
+      } else if (type == 2) {
+        this.topqueryParams.leavehospitaldistrictcodes.push(code);
+        this.topqueryParams.leaveldeptcodes = [];
+        this.topqueryParams.searchscope = 2;
+      } else {
+        this.topqueryParams.searchscope = 3;
+      }
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.dateRange = [];
+      this.topqueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        serviceType: 20,
+        searchscope: 2,
+      };
+      this.handleQuery(1);
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map((item) => item.userId);
+      this.single = selection.length != 1;
+      this.multiple = !selection.length;
+    },
+    //鍒犻櫎閫夐」
+    handleClose(tag) {
+      this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
+    },
+    //瑙﹀彂鏂板杈撳叆
+    showInput() {
+      this.inputVisible = true;
+      this.$nextTick((_) => {
+        this.$refs.saveTagInput.$refs.input.focus();
+      });
+    },
+    //鑾峰彇澶卞幓鐒︾偣瑙﹀彂
+    handleInputConfirm() {
+      let inputValue = this.inputValue;
+      if (inputValue) {
+        this.dynamicTags.push(inputValue);
+      }
+      this.inputVisible = false;
+      this.inputValue = "";
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.$router.push({
+        path: "/followvisit/QuestionnaireTask",
+        query: {
+          type: 2,
+          serviceType: 20,
+        },
+      });
+    },
+
+    /** 閲嶇疆瀵嗙爜鎸夐挳鎿嶄綔 */
+    handleResetPwd(row) {
+      this.$prompt('璇疯緭鍏�"' + row.userName + '"鐨勬柊瀵嗙爜', "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
+        closeOnClickModal: false,
+        inputPattern: /^.{5,20}$/,
+        inputErrorMessage: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿",
+      })
+        .then(({ value }) => {
+          resetUserPwd(row.userId, value).then((response) => {
+            this.$modal.msgSuccess("淇敼鎴愬姛锛屾柊瀵嗙爜鏄細" + value);
+          });
+        })
+        .catch(() => {});
+    },
+
+    /** 鎻愪氦鎸夐挳 */
+    submitForm: function () {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          if (this.form.userId != undefined) {
+            updateUser(this.form).then((response) => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList(1);
+            });
+          } else {
+            addUser(this.form).then((response) => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList(1);
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const userIds = row.userId || this.ids;
+      this.$modal
+        .confirm('鏄惁纭鍒犻櫎鐢ㄦ埛缂栧彿涓�"' + userIds + '"鐨勬暟鎹」锛�')
+        .then(function () {
+          return delUser(userIds);
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+        })
+        .catch(() => {});
+    },
+    // 鍏ㄩ儴鍋滄
+    AllStop() {
+      this.$modal
+        .confirm("鏄惁鍋滄鍏ㄩ儴浠诲姟锛�")
+        .then(function () {
+          return console.log("鍋滄鎴愬姛");
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgWarning("鍋滄鎴愬姛");
+        })
+        .catch(() => {});
+    },
+    // 鍏ㄩ儴寮�濮�
+    AllStarted() {
+      this.$modal
+        .confirm("鏄惁寮�鍚叏閮ㄤ换鍔★紵")
+        .then(function () {
+          return console.log("寮�鍚垚鍔�");
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgSuccess("寮�鍚垚鍔�");
+        })
+        .catch(() => {});
+    },
+    // 浠诲姟閲嶇疆
+    TaskReset() {
+      this.$modal
+        .confirm("鏄惁閲嶇疆閫変腑鐨勪换鍔¢」锛�")
+        .then(function () {
+          return console.log("閫変腑鎴愬姛");
+        })
+        .then(() => {
+          this.getList(1);
+          this.$modal.msgSuccess("閲嶇疆鎴愬姛");
+        })
+        .catch(() => {});
+    },
+    // 璁剧疆鍙戦�佹椂闂�
+    Sendtimesetting() {
+      this.modificationVisible = true;
+    },
+    // 璺宠浆璇︽儏椤�
+    Seedetails(row) {
+      let type = "";
+      console.log(row, "rwo");
+      if (row.preachformson) {
+        if (row.preachformson.includes("3")) {
+          type = 1;
+          console.log(type, "rwo");
+        }
+      }
+      this.$router.push({
+        path: "/followvisit/record/detailpage/",
+        query: {
+          taskid: row.taskid,
+          patid: row.patid,
+          id: row.id,
+          Voicetype: type,
+        },
+      });
+    },
+    // 渚挎嵎鎸夐挳
+    toleadExport(too) {
+      if (too == 1) {
+        this.topqueryParams.sendstate = 4;
+        this.topqueryParams.excep = null;
+      } else if (too == 2) {
+        this.topqueryParams.excep = 1;
+      }
+      this.handleQuery();
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.topqueryParams.pageNum = null;
+      this.topqueryParams.pageSize = null;
+      this.download(
+        "smartor/serviceSubtask/export",
+        {
+          ...this.topqueryParams,
+        },
+        `user_${new Date().getTime()}.xlsx`
+      );
+    },
+    // 寮傚父鍒楁覆鏌�
+    tableRowClassName({ row, rowIndex }) {
+      if (row.excep == 1) {
+        return "warning-row";
+      }
+      return "";
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.el-button--primary.is-plain {
+  color: #ffffff;
+  background: #409eff;
+  border-color: #4fabe9;
+}
+
+.document {
+  // width: 100px;
+  height: 50px;
+}
+::v-deep.el-table .warning-row {
+  background: #eec4c4;
+}
+
+.documentf {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.download {
+  text-align: center;
+
+  .el-upload__tip {
+    font-size: 23px;
+  }
+
+  .el-upload__text {
+    font-size: 23px;
+  }
+}
+
+.uploading {
+  margin-top: 20px;
+  margin: 20px;
+  padding: 30px;
+  background: #ffffff;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+}
+
+.el-tag + .el-tag {
+  margin-left: 10px;
+}
+
+.button-new-tag {
+  margin-left: 10px;
+  height: 32px;
+  line-height: 30px;
+  padding-top: 0;
+  padding-bottom: 0;
+}
+
+.input-new-tag {
+  width: 90px;
+  margin-left: 10px;
+  vertical-align: bottom;
+}
+
+.drexamine {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 30px;
+  background: #daeaf5;
+
+  img {
+    width: 100px;
+    height: 100px;
+  }
+}
+
+.qrcode-dialo {
+  // text-align: center;
+  //   display: flex;
+  margin: 20px;
+  padding: 30px;
+  background: #edf1f7;
+  border: 1px solid #dcdfe6;
+  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
+    0 0 6px 0 rgba(0, 0, 0, 0.04);
+
+  .topic-dev {
+    margin-bottom: 25px;
+    font-size: 20px !important;
+
+    .dev-text {
+      margin-bottom: 10px;
+    }
+  }
+}
+::v-deep.leftvlue .el-card__body {
+  background: #d0e9fd;
+}
+::v-deep.leftvlue .el-card__body:hover {
+  background: #8dc8f8;
+  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+::v-deep.errleftvlue .el-card__body {
+  background: #fdd0d7;
+}
+::v-deep.errleftvlue .el-card__body:hover {
+  background: #f88d96;
+  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+
+::v-deep.ysfleftvlue .el-card__body {
+  background: #d0fdd8;
+}
+::v-deep.ysfleftvlue .el-card__body:hover {
+  background: #8df8a4;
+  cursor: pointer; /* 榧犳爣鎮诞鏃跺彉涓烘墜褰� */
+}
+.button-bb {
+  font-weight: 500;
+  background-color: #2ba05c;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+.button-xq {
+  font-weight: 500;
+  background-color: #409eff;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+.button-sc {
+  font-weight: 500;
+  background-color: #dd302a;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+.button-zx {
+  background: #4fabe9;
+  padding: 5px;
+  border-radius: 1px;
+  color: #ffffff;
+}
+
+::v-deep.el-radio-group {
+  span {
+    font-size: 24px;
+  }
+}
+
+// 閫夐」瀛椾綋鏀惧ぇ
+// ::v-deep.el-checkbox-group {
+//   span {
+//     font-size: 24px;
+//   }
+// }
+</style>
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index e972387..a542f86 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -397,7 +397,8 @@
 
     handleQuery() {
       if (!this.queryParams.dateRange) this.queryParams.dateRange = [];
-      if (!this.queryParams.dateRangecy) this.queryParams.dateRange = [];
+      if (!this.queryParams.dateRangecy) this.queryParams.dateRangecy = [];
+
       this.queryParams.startTime = this.parseTime(
         this.queryParams.dateRange[0]
       );
diff --git "a/\351\232\217\350\256\277\345\244\226\351\223\276.zip" "b/\351\232\217\350\256\277\345\244\226\351\223\276.zip"
deleted file mode 100644
index 92e3b79..0000000
--- "a/\351\232\217\350\256\277\345\244\226\351\223\276.zip"
+++ /dev/null
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\2508.26.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\2508.26.zip"
deleted file mode 100644
index 1d9293b..0000000
--- "a/\351\232\217\350\256\277\351\200\232\347\224\2508.26.zip"
+++ /dev/null
Binary files differ

--
Gitblit v1.9.3