From fb34ba28cb908bd328cf6690ab0b19a56428f4e2 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期五, 13 十一月 2026 10:56:55 +0800
Subject: [PATCH] 测试完成

---
 vue.config.js                                                         |    6 
 src/views/sfstatistics/percentage/components/FirstFollowUp.vue        |   19 -
 src/views/followvisit/zysatisfaction/index.vue                        |  101 +++++++
 src/views/patient/propaganda/QuestionnaireTask.vue                    |   70 +++++
 /dev/null                                                             |    0 
 src/views/SatisfactionRelay.vue                                       |    3 
 src/views/followvisit/mzsatisfaction/index.vue                        |   95 +++++++
 src/views/login.vue                                                   |   52 ++-
 src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue |    8 
 src/views/patient/patient/hospital.vue                                |    1 
 src/views/patient/patient/behospitalized.vue                          |    3 
 src/views/patient/propaganda/particty.vue                             |   69 +++++
 src/views/followvisit/discharge/index.vue                             |   56 +++-
 src/views/sfstatistics/percentage/components/CombinedFollowUp.vue     |  194 +++++++++++----
 14 files changed, 539 insertions(+), 138 deletions(-)

diff --git a/11.3.zip b/11.3.zip
deleted file mode 100644
index e7d53d0..0000000
--- a/11.3.zip
+++ /dev/null
Binary files differ
diff --git a/dist.zip b/dist.zip
deleted file mode 100644
index 1f2faf6..0000000
--- a/dist.zip
+++ /dev/null
Binary files differ
diff --git a/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue b/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue
index 1e51627..a5c3cf5 100644
--- a/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue
+++ b/src/views/Satisfaction/sfstatistics/components/FollowupStatistics.vue
@@ -9,7 +9,11 @@
         label-width="100px"
         class="query-form"
       >
-        <el-form-item label="婊℃剰搴︾被鍨�" prop="satisfactionScope">
+        <el-form-item
+          v-if="isTongdeOrg"
+          label="婊℃剰搴︾被鍨�"
+          prop="satisfactionScope"
+        >
           <el-select
             v-model="satisfactionScope"
             placeholder="榛樿鍦ㄩ櫌"
@@ -546,7 +550,7 @@
 
   created() {
     this.orgname = localStorage.getItem("orgname");
-
+    this.queryParams.serviceType = this.isTongdeOrg ? [6] : [2];
     this.initData();
     // 椤堕儴鎮h�呰〃鍗� / 闂璇︽儏鍒嗘瀽 tab锛氶粯璁ゆ寜褰撳墠缁熻鍙e緞鍔犺浇涓�娆�
     this.maybeRefreshCompletedGroups();
diff --git a/src/views/SatisfactionRelay.vue b/src/views/SatisfactionRelay.vue
index fbc5c63..7390597 100644
--- a/src/views/SatisfactionRelay.vue
+++ b/src/views/SatisfactionRelay.vue
@@ -44,7 +44,8 @@
           console.log(res,'鍒濆');
 
           if (res.code == 200) {
-            console.log(res.msg);
+            console.log(res.msg,'res.msg');
+            // return
             window.location.href = res.msg;
             console.log("window鍚�");
           } else {
diff --git a/src/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue
index 0e88fa5..5712ad2 100644
--- a/src/views/followvisit/discharge/index.vue
+++ b/src/views/followvisit/discharge/index.vue
@@ -142,6 +142,16 @@
             </el-option>
           </el-select>
         </el-form-item>
+        <el-form-item
+          v-if="isTongdeCampus"
+          label="鏃ラ棿鏍囪"
+          prop="importanceFlagCode"
+        >
+          <el-input
+            v-model="topqueryParams.importanceFlagCode"
+            placeholder="璇疯緭鍏ユ棩闂存爣璁�"
+          ></el-input>
+        </el-form-item>
 
         <el-form-item>
           <el-button
@@ -467,6 +477,16 @@
           key="currentPreachform"
           prop="currentPreachform"
           width="160"
+          :show-overflow-tooltip="true"
+        >
+        </el-table-column>
+        <el-table-column
+          v-if="isTongdeCampus"
+          label="鏃ラ棿鏍囪"
+          align="center"
+          key="importanceFlagCode"
+          prop="importanceFlagCode"
+          width="120"
           :show-overflow-tooltip="true"
         >
         </el-table-column>
@@ -1421,6 +1441,7 @@
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
         currentPreachforms: [],
+        importanceFlagCode: "",
       },
       orgname: "",
       propss: { multiple: true },
@@ -1702,9 +1723,13 @@
         // 鉁� 绗洓姝ワ細澶勭悊鍏朵粬鏁版嵁
         if (refresh) {
           this.yfsvalue = response.rows[0].yfs;
-          // 椤堕儴鍗$墖鐨勬暟瀛椾笉璺熴�岄殢璁跨姸鎬�/寮傚父銆嶈蛋锛氬崟鐙煡涓�娆″幓鎺夌姸鎬佹潯浠剁殑缁熻锛�
-          // 鍚﹀垯绛涗簡銆屽緟闅忚銆嶅悗銆屽凡瀹屾垚銆嶆案杩滄槸 0锛岀湅鐫�鍍忕畻閿欎簡
-          this.refreshCardCounts(params);
+          if (this.isTongdeOrg) {
+            // 鐪佺珛鍚屽痉/鍗楀崕锛氶《閮ㄥ崱鐗囨暟瀛椾笉璺熴�岄殢璁跨姸鎬�/寮傚父銆嶈蛋锛屽崟鐙煡涓�娆″幓鎺夌姸鎬佹潯浠剁殑缁熻
+            this.refreshCardCounts(params);
+          } else {
+            // 鍏朵粬鍖婚櫌锛氶《閮ㄦ暟鎹窡闅忕瓫閫夋潯浠跺彉鍔紝鍗曟鏌ヨ鍗冲彲
+            this.setCardValues(response.rows[0]);
+          }
         }
 
         // 鉁� 绗簲姝ワ細澶勭悊 preachform 绛夊叾浠栨暟鎹�
@@ -1713,7 +1738,7 @@
           if (item.endtime) {
             item.endDay = this.daysBetween(item.endtime);
           }
-          console.log(item,'3');
+          console.log(item, "3");
 
           if (item.preachform) {
             item.preachformson = item.preachform;
@@ -2152,6 +2177,7 @@
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
         currentPreachforms: [],
+        importanceFlagCode: "",
       };
       this.handleQuery(1);
     },
@@ -2173,6 +2199,7 @@
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
         currentPreachforms: [],
+        importanceFlagCode: "",
       };
     },
     handleSelectionChange(rows) {
@@ -2495,6 +2522,18 @@
     // 椤堕儴缁熻鍗$墖鐐瑰嚮锛氭妸瀵瑰簲绛涢�夋潯浠朵笅甯﹀埌涓嬮潰鐨勫垪琛紙鏁板�间负 0 鐨勫崱鐗囧悓鏍峰彲鐐癸級
     // 椤堕儴鍗$墖缁熻锛氬幓鎺夈�岄殢璁跨姸鎬� / 寮傚父銆嶆潯浠跺悗鍐嶇粺璁★紝
     // 杩欐牱鍗$墖鏁板瓧鍙窡鏃ユ湡銆佺瀹�/鐥呭尯绛夋潯浠惰蛋锛屼笉浼氬洜涓虹瓫浜嗐�屽緟闅忚銆嶅氨鎶娿�屽凡瀹屾垚銆嶇畻鎴� 0
+    // 鎶婁竴娆℃煡璇㈣繑鍥炵殑缁熻琛屽啓鍏ラ《閮ㄥ崱鐗�
+    setCardValues(row) {
+      if (!row) return;
+      this.cardlist[0].value = Number(row.wxsf || 0) + Number(row.xsf || 0);
+      this.cardlist[1].value = Number(row.wxsf) || 0;
+      this.cardlist[2].value = Number(row.xsf) || 0;
+      this.cardlist[3].value = Number(row.dsf) || 0;
+      this.cardlist[4].value = Number(row.fssb) || 0;
+      this.cardlist[5].value = Number(row.ywc) || 0;
+      this.ycvalue = Number(row.yc) || 0;
+      this.jgvalue = Number(row.jg) || 0;
+    },
     async refreshCardCounts(baseQuery) {
       const query = {
         ...(baseQuery || this.topqueryParams),
@@ -2512,14 +2551,7 @@
         if (!res || !res.rows || !res.rows.length) {
           return;
         }
-        this.cardlist[0].value = Number(row.wxsf || 0) + Number(row.xsf || 0);
-        this.cardlist[1].value = Number(row.wxsf) || 0;
-        this.cardlist[2].value = Number(row.xsf) || 0;
-        this.cardlist[3].value = Number(row.dsf) || 0;
-        this.cardlist[4].value = Number(row.fssb) || 0;
-        this.cardlist[5].value = Number(row.ywc) || 0;
-        this.ycvalue = Number(row.yc) || 0;
-        this.jgvalue = Number(row.jg) || 0;
+        this.setCardValues(row);
       } catch (e) {
         console.warn("鍒锋柊椤堕儴鍗$墖缁熻澶辫触", e);
       }
diff --git a/src/views/followvisit/mzsatisfaction/index.vue b/src/views/followvisit/mzsatisfaction/index.vue
index 09bc0a7..9f49f34 100644
--- a/src/views/followvisit/mzsatisfaction/index.vue
+++ b/src/views/followvisit/mzsatisfaction/index.vue
@@ -56,6 +56,23 @@
             @change="handleChange"
           ></el-cascader>
         </el-form-item>
+        <el-form-item label="鐐逛綅" prop="pointLocations" v-if="isTongdeCampus">
+          <el-select
+            v-model="topqueryParams.pointLocations"
+            multiple
+            filterable
+            clearable
+            placeholder="璇烽�夋嫨鐐逛綅"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in pointOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
 
         <!-- <el-form-item label="鏈嶅姟鐘舵��" prop="status">
           <el-select
@@ -378,12 +395,15 @@
         </el-table-column>
         <el-table-column
           v-if="isTongdeCampus"
-          label="鐐逛綅缂栫爜"
+          label="鐐逛綅"
           width="120"
           align="center"
           key="pointLocation"
-          prop="pointLocation"
-        />
+        >
+          <template slot-scope="scope">
+            {{ pointNameOf(scope.row) }}
+          </template>
+        </el-table-column>
 
         <el-table-column
           label="澶勭悊浜哄憳"
@@ -933,6 +953,7 @@
   updateUser,
   resetUserPwd,
   changeUserStatus,
+  deptTreeSelect,
 } from "@/api/system/user";
 import {
   getTaskservelist,
@@ -1138,6 +1159,7 @@
         scopetype: [],
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
+        pointLocations: [],
       },
       propss: { multiple: true },
       options: [],
@@ -1229,6 +1251,8 @@
       leavehospitaldistrictcode: "",
       serviceState: [],
       checkboxlist: [],
+      // 鐐逛綅鍒楄〃锛堝悓寰烽櫌鍖猴紝deptType=3锛�
+      pointOptions: [],
       // 琛ㄥ崟鏍¢獙
       rules: {},
     };
@@ -1259,6 +1283,7 @@
     } else {
       this.getList(1);
     }
+    this.getPointOptions();
     this.getConfigKey("sys.user.initPassword").then((response) => {
       this.initPassword = response.msg;
     });
@@ -1285,21 +1310,26 @@
         );
         console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
       }
+
+      const queryParams = this.buildQueryParams();
+
       this.loading = true;
       if (
-        this.topqueryParams.leavehospitaldistrictcodes[0] &&
-        this.topqueryParams.leaveldeptcodes[0]
+        queryParams.leavehospitaldistrictcodes &&
+        queryParams.leavehospitaldistrictcodes[0] &&
+        queryParams.leaveldeptcodes &&
+        queryParams.leaveldeptcodes[0]
       ) {
-        this.topqueryParams.deptOrDistrict = 2;
+        queryParams.deptOrDistrict = 2;
       } else {
-        this.topqueryParams.deptOrDistrict = 1;
+        queryParams.deptOrDistrict = 1;
       }
 
       if (!this.followupAuthority()) {
         this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
         return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
       }
-      getTaskservelist(this.topqueryParams).then((response) => {
+      getTaskservelist(queryParams).then((response) => {
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
         if (refresh) {
@@ -1359,6 +1389,40 @@
     getCurrentDate() {
       const now = new Date();
       return now.toISOString().slice(0, 10); // 鎴彇鍓�10涓瓧绗︼紝鍗� YYYY-MM-DD
+    },
+
+    // 鐐逛綅鍒楄〃锛堝悓寰烽櫌鍖猴紝deptType=3锛�
+    getPointOptions() {
+      if (!this.isTongdeCampus) return;
+      deptTreeSelect(3).then((response) => {
+        const flat = [];
+        const walk = (nodes) => {
+          (Array.isArray(nodes) ? nodes : []).forEach((n) => {
+            if (n.label && n.deptCode) {
+              flat.push({ label: n.label, value: String(n.deptCode) });
+            }
+            if (n.children && n.children.length) walk(n.children);
+          });
+        };
+        walk(response && response.data);
+        this.pointOptions = flat;
+      });
+    },
+
+    // 鐐逛綅鍚嶇О锛氬皢 pointLocation 缂栫爜鏄犲皠涓虹偣浣嶅悕绉�
+    pointNameOf(row) {
+      if (
+        !row ||
+        row.pointLocation === undefined ||
+        row.pointLocation === null ||
+        row.pointLocation === ""
+      ) {
+        return "";
+      }
+      const found = this.pointOptions.find(
+        (p) => String(p.value) === String(row.pointLocation)
+      );
+      return found ? found.label : row.pointLocation;
     },
     buidegetTasklist(type) {
       // 鐢ㄦ埛鏉冮檺涓嬫墍鏈夊緟闅忚浠诲姟锛氫紶閫掑叏閮ㄧ瀹ゅ拰鐥呭尯
@@ -1519,6 +1583,18 @@
 
       this.getList(refresh);
     },
+    // 鏋勯�犳煡璇�/瀵煎嚭鍙傛暟锛氶�夋嫨鐐逛綅鏃剁瀹�/鐥呭尯浼� null锛屽惁鍒欎繚鎸佸師鍊�
+    buildQueryParams() {
+      const params = { ...this.topqueryParams };
+      if (
+        this.topqueryParams.pointLocations &&
+        this.topqueryParams.pointLocations.length > 0
+      ) {
+        params.leaveldeptcodes = null;
+        params.leavehospitaldistrictcodes = null;
+      }
+      return params;
+    },
     // 鎮h�呰寖鍥村鐞�
     handleChange(value) {
       let type = value[0];
@@ -1555,6 +1631,7 @@
         scopetype: [],
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
+        pointLocations: [],
       };
       this.handleQuery(1);
     },
@@ -1828,7 +1905,7 @@
       this.download(
         "smartor/serviceSubtask/patItemExport",
         {
-          ...this.topqueryParams,
+          ...this.buildQueryParams(),
         },
         `user_${new Date().getTime()}.xlsx`
       ).finally(() => {
diff --git a/src/views/followvisit/zysatisfaction/index.vue b/src/views/followvisit/zysatisfaction/index.vue
index 3ff55b7..3edb9ba 100644
--- a/src/views/followvisit/zysatisfaction/index.vue
+++ b/src/views/followvisit/zysatisfaction/index.vue
@@ -79,6 +79,23 @@
             @change="handleChange"
           ></el-cascader>
         </el-form-item>
+        <el-form-item label="鐐逛綅" prop="pointLocations" v-if="isTongdeCampus">
+          <el-select
+            v-model="topqueryParams.pointLocations"
+            multiple
+            filterable
+            clearable
+            placeholder="璇烽�夋嫨鐐逛綅"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in pointOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
 
         <!-- <el-form-item label="鏈嶅姟鐘舵��" prop="status">
           <el-select
@@ -409,12 +426,15 @@
         </el-table-column>
         <el-table-column
           v-if="isTongdeCampus"
-          label="鐐逛綅缂栫爜"
+          label="鐐逛綅"
           width="120"
           align="center"
           key="pointLocation"
-          prop="pointLocation"
-        />
+        >
+          <template slot-scope="scope">
+            {{ pointNameOf(scope.row) }}
+          </template>
+        </el-table-column>
 
         <el-table-column
           label="澶勭悊浜哄憳"
@@ -926,6 +946,7 @@
   updateUser,
   resetUserPwd,
   changeUserStatus,
+  deptTreeSelect,
 } from "@/api/system/user";
 import {
   getTaskservelist,
@@ -1134,6 +1155,7 @@
         scopetype: [],
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
+        pointLocations: [],
       },
       propss: { multiple: true },
       options: [],
@@ -1225,6 +1247,8 @@
       leavehospitaldistrictcode: "",
       serviceState: [],
       checkboxlist: [],
+      // 鐐逛綅鍒楄〃锛堝悓寰烽櫌鍖猴紝deptType=3锛�
+      pointOptions: [],
       // 琛ㄥ崟鏍¢獙
       rules: {},
     };
@@ -1255,6 +1279,7 @@
     } else {
       this.getList(1);
     }
+    this.getPointOptions();
     this.getConfigKey("sys.user.initPassword").then((response) => {
       this.initPassword = response.msg;
     });
@@ -1281,21 +1306,26 @@
         );
         console.log(this.topqueryParams.leavehospitaldistrictcodes, "11");
       }
+
+      const queryParams = this.buildQueryParams();
+
       this.loading = true;
       if (
-        this.topqueryParams.leavehospitaldistrictcodes[0] &&
-        this.topqueryParams.leaveldeptcodes[0]
+        queryParams.leavehospitaldistrictcodes &&
+        queryParams.leavehospitaldistrictcodes[0] &&
+        queryParams.leaveldeptcodes &&
+        queryParams.leaveldeptcodes[0]
       ) {
-        this.topqueryParams.deptOrDistrict = 2;
+        queryParams.deptOrDistrict = 2;
       } else {
-        this.topqueryParams.deptOrDistrict = 1;
+        queryParams.deptOrDistrict = 1;
       }
 
       if (!this.followupAuthority()) {
         this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
         return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
       }
-      getTaskservelist(this.buildScopePayload(this.topqueryParams)).then((response) => {
+      getTaskservelist(this.buildScopePayload(queryParams)).then((response) => {
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
         if (refresh) {
@@ -1353,8 +1383,9 @@
     buildScopePayload(params) {
       const payload = { ...params };
       if (this.satisfactionScope === "hospital") {
-        payload.deptcodes = params.leaveldeptcodes || [];
-        payload.hospitaldistrictcodes = params.leavehospitaldistrictcodes || [];
+        // 閫夌偣浣嶆椂 leaveldeptcodes/leavehospitaldistrictcodes 涓� null锛岄渶鍘熸牱閫忎紶锛屼笉鑳� || [] 鍏滄垚绌烘暟缁�
+        payload.deptcodes = params.leaveldeptcodes;
+        payload.hospitaldistrictcodes = params.leavehospitaldistrictcodes;
         delete payload.leaveldeptcodes;
         delete payload.leavehospitaldistrictcodes;
       }
@@ -1379,6 +1410,40 @@
           ? row.hospitaldistrictname || row.leavehospitaldistrictname
           : row.leavehospitaldistrictname || row.hospitaldistrictname) || "-"
       );
+    },
+
+    // 鐐逛綅鍒楄〃锛堝悓寰烽櫌鍖猴紝deptType=3锛�
+    getPointOptions() {
+      if (!this.isTongdeCampus) return;
+      deptTreeSelect(3).then((response) => {
+        const flat = [];
+        const walk = (nodes) => {
+          (Array.isArray(nodes) ? nodes : []).forEach((n) => {
+            if (n.label && n.deptCode) {
+              flat.push({ label: n.label, value: String(n.deptCode) });
+            }
+            if (n.children && n.children.length) walk(n.children);
+          });
+        };
+        walk(response && response.data);
+        this.pointOptions = flat;
+      });
+    },
+
+    // 鐐逛綅鍚嶇О锛氬皢 pointLocation 缂栫爜鏄犲皠涓虹偣浣嶅悕绉�
+    pointNameOf(row) {
+      if (
+        !row ||
+        row.pointLocation === undefined ||
+        row.pointLocation === null ||
+        row.pointLocation === ""
+      ) {
+        return "";
+      }
+      const found = this.pointOptions.find(
+        (p) => String(p.value) === String(row.pointLocation)
+      );
+      return found ? found.label : row.pointLocation;
     },
 
     // 鏈嶅姟鐘舵�佸彉鏇村鐞�
@@ -1559,6 +1624,18 @@
       this.topqueryParams.finishtimeEnd = this.dateRangefs[1];
       this.getList(refresh);
     },
+    // 鏋勯�犳煡璇�/瀵煎嚭鍙傛暟锛氶�夋嫨鐐逛綅鏃剁瀹�/鐥呭尯浼� null锛屽惁鍒欎繚鎸佸師鍊�
+    buildQueryParams() {
+      const params = { ...this.topqueryParams };
+      if (
+        this.topqueryParams.pointLocations &&
+        this.topqueryParams.pointLocations.length > 0
+      ) {
+        params.leaveldeptcodes = null;
+        params.leavehospitaldistrictcodes = null;
+      }
+      return params;
+    },
     // 鎮h�呰寖鍥村鐞�
     handleChange(value) {
       let type = value[0];
@@ -1594,6 +1671,7 @@
         scopetype: [],
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
+        pointLocations: [],
       };
       this.handleQuery(1);
     },
@@ -1615,6 +1693,7 @@
         scopetype: [],
         leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
+        pointLocations: [],
       };
     },
     handleSelectionChange(rows) {
@@ -1916,7 +1995,7 @@
       this.download(
         "smartor/serviceSubtask/patItemExport",
         {
-          ...this.buildScopePayload(this.topqueryParams),
+          ...this.buildScopePayload(this.buildQueryParams()),
         },
         `user_${new Date().getTime()}.xlsx`
       ).finally(() => {
diff --git a/src/views/login.vue b/src/views/login.vue
index cc50c59..1b23cef 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -39,16 +39,16 @@
         </el-input>
       </el-form-item>
       <!-- 涓�===================姘� -->
-      <el-form-item prop="campusid">
+      <el-form-item prop="orgid">
         <el-select
           style="width: 100%"
-          v-model="loginForm.campusid"
+          v-model="loginForm.orgid"
           placeholder="璇烽�夋嫨闄㈠尯"
         >
           <el-option
             v-for="item in options"
             :label="item.label"
-            :value="item.campusid"
+            :value="item.value"
           >
           </el-option>
           <i slot="prefix" class="el-icon-mobile"></i>
@@ -127,7 +127,7 @@
         password: "",
         rememberMe: false,
         code: "",
-        orgid: "H41010500003",
+        orgid: "",
       },
       options: [],
       loginRules: {
@@ -137,7 +137,7 @@
         password: [
           { required: true, trigger: "blur", message: "璇疯緭鍏ユ偍鐨勫瘑鐮�" },
         ],
-        campusid: [{ required: true, trigger: "blur", message: "璇烽�夋嫨闄㈠尯" }],
+        orgid: [{ required: true, trigger: "change", message: "璇烽�夋嫨闄㈠尯" }],
       },
       loading: false,
       // 楠岃瘉鐮佸紑鍏�
@@ -164,11 +164,11 @@
     //   this.loginForm.orgid = localStorage.getItem('orgid');
     // }
   },
-    computed: {
+  computed: {
     isAdmin() {
       const roles = this.$store.getters.roles || [];
       return roles.includes("mydstaff");
-    }
+    },
   },
   methods: {
     getCode() {
@@ -184,11 +184,23 @@
     getorganization() {
       getorganization({ pageSize: 30 }).then((res) => {
         if (res.code == 200) {
-          this.options = res.rows.map((item) => ({
-            value: item.orgid,
-            label: item.organizationName,
-            campusid: item.organizationID,
-          }));
+          // 鍚屽痉绯诲垪 / 鍗楀崕绯诲垪 / 娴欐睙鐪佹柊鍗庡尰闄細鐢� campusid(organizationID) 浣滀笅鎷夐敭鍊硷紱
+          // 鍏朵綑锛堜附姘村尯鍩� organizationID 鍏ㄤ负 "1" 涓嶅敮涓�锛夛細鐢� orgid 浣滀笅鎷夐敭鍊�
+          const campusidKeywords = ["鍚屽痉", "鍗楀崕", "娴欐睙鐪佹柊鍗庡尰闄�"];
+          this.options = (res.rows || []).map((item) => {
+            console.log(item.organizationName);
+
+            const name = item.organizationName || "";
+            const useCampusid = campusidKeywords.some((kw) =>
+              name.includes(kw)
+            );
+            return {
+              value: String(useCampusid ? item.organizationID : item.orgid),
+              label: name,
+              campusid: item.organizationID,
+              orgid: item.orgid,
+            };
+          });
         }
       });
     },
@@ -233,13 +245,16 @@
             Cookies.remove("rememberMe");
           }
 
-          // 鍔ㄦ�佽缃� campusid 鍙傛暟
+          // 閿�艰鍒欙細涓芥按鍖哄煙鐢� orgid锛坥rganizationID/campusid 鍧囦负 "1" 涓嶅敮涓�锛夛紱
+          // 鍚屽痉/鍗楀崕/娴欐睙鐪佹柊鍗庡尰闄㈢瓑鍖哄煙鐢� campusid(organizationID) 浣滀笅鎷夐敭鍊�
           const selectedOrg = this.options.find(
-            (item) => item.campusid === this.loginForm.campusid
+            (item) => String(item.value) === String(this.loginForm.orgid)
           );
-          this.loginForm.campusid = selectedOrg.campusid || 1;
-          this.loginForm.orgid = selectedOrg.value || 1;
-          this.loginForm.orgname = selectedOrg.label || "";
+          if (selectedOrg) {
+            this.loginForm.campusid = selectedOrg.campusid;
+            this.loginForm.orgid = selectedOrg.orgid;
+            this.loginForm.orgname = selectedOrg.label;
+          }
           // 甯備竴澶勭悊-----------------
           // if (selectedOrg) {
           //   if (selectedOrg.label.includes("婀栨花")) {
@@ -259,7 +274,7 @@
               } else if (this.isAdmin) {
                 console.log(1);
 
-                 this.$router
+                this.$router
                   .push({ path: "/Intelligentcenter/dispose" })
                   .catch(() => {});
               } else {
@@ -281,7 +296,6 @@
         }
       });
     },
-
   },
 };
 </script>
diff --git a/src/views/patient/patient/behospitalized.vue b/src/views/patient/patient/behospitalized.vue
index b92d1e1..bb0eb64 100644
--- a/src/views/patient/patient/behospitalized.vue
+++ b/src/views/patient/patient/behospitalized.vue
@@ -1089,7 +1089,8 @@
             templateid: this.selectedTask.templateid,
             libtemplateid: this.selectedTask.libtemplateid,
             sendstate: 2, // 鍙戦�佺姸鎬�
-            continueFlag: 1, // 寤剁画鎶ょ悊鏍囧織锛堝湪闄㈡偅鑰咃級
+            continueFlag: 2, // 寤剁画鎶ょ悊鏍囧織锛堝湪闄㈡偅鑰咃級
+            hospType: 6, // 鎮h�呯被鍨嬶細6=浣忛櫌
             ...patient,
             sendname: patient.patname,
             // 鍦ㄩ櫌鎮h�呬娇鐢ㄥ綋鍓嶆椂闂翠綔涓轰换鍔″紑濮嬫椂闂�
diff --git a/src/views/patient/patient/hospital.vue b/src/views/patient/patient/hospital.vue
index 7f12039..798372a 100644
--- a/src/views/patient/patient/hospital.vue
+++ b/src/views/patient/patient/hospital.vue
@@ -1014,6 +1014,7 @@
             libtemplateid: this.selectedTask.libtemplateid,
             sendstate: 2,
             continueFlag: 2,
+            hospType: 2, // 鎮h�呯被鍨嬶細2=鍑洪櫌
             ...patient,
             sendname: patient.patname,
             starttime: patient.starttime ? patient.starttime + " 00:00:00" : "",
diff --git a/src/views/patient/propaganda/QuestionnaireTask.vue b/src/views/patient/propaganda/QuestionnaireTask.vue
index d54357c..091f496 100644
--- a/src/views/patient/propaganda/QuestionnaireTask.vue
+++ b/src/views/patient/propaganda/QuestionnaireTask.vue
@@ -70,18 +70,27 @@
                   />
                 </el-form-item>
 
-                <el-form-item
+                <!-- <el-form-item
                   label="鐐逛綅缂栫爜"
                   v-if="
                     isTongdeCampus && (serviceType == 6 || serviceType == 14)
                   "
                 >
-                  <el-input
-                    style="width: 220px"
+                  <el-select
                     v-model="form.pointLocation"
-                    placeholder="璇疯緭鍏ョ偣浣嶇紪鐮�"
-                  />
-                </el-form-item>
+                    style="width: 220px"
+                    clearable
+                    filterable
+                    placeholder="璇烽�夋嫨鐐逛綅"
+                  >
+                    <el-option
+                      v-for="item in pointOptions"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                  </el-select>
+                </el-form-item> -->
 
                 <el-form-item label="鏈嶅姟褰㈠紡">
                   <SortCheckbox
@@ -222,8 +231,29 @@
                       >鑽搧鍏宠仈</el-radio
                     >
                     <el-radio label="5">浠诲姟缁�</el-radio>
+                    <el-radio label="7" v-if="isTongdeCampus&& (serviceType == 6 || serviceType == 14)">鐐逛綅鍏宠仈</el-radio>
                   </el-radio-group>
                 </el-form-item>
+
+                <!-- 鐐逛綅鍏宠仈 -->
+                <el-row v-if="form.appltype == 7">
+                  <el-form-item label="鍏宠仈鐐逛綅" prop="pointLocation">
+                    <el-select
+                      v-model="form.pointLocation"
+                      style="width: 400px"
+                      clearable
+                      filterable
+                      placeholder="璇烽�夋嫨鐐逛綅"
+                    >
+                      <el-option
+                        v-for="item in pointOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
+                  </el-form-item>
+                </el-row>
 
                 <!-- 鑽搧鍏宠仈 -->
                 <el-row v-if="form.appltype == 6">
@@ -1502,6 +1532,7 @@
 } from "@/api/AiCentre/index";
 import { listMedication } from "@/api/knowledge/drug";
 import { getIvrtask } from "@/api/smartor/ivrtask";
+import { deptTreeSelect } from "@/api/system/user";
 import OptionalForm from "@/components/OptionalForm";
 import SFtable from "@/components/SFtable";
 import SortCheckbox from "@/components/SortCheckbox";
@@ -1765,6 +1796,8 @@
       queryParamsdept: {},
       quote: false,
       serviceType: null,
+      // 鍙�夌偣浣嶏紙鍚屽痉闄㈠尯锛宒eptType=3锛�
+      pointOptions: [],
       // 鍐嶆闅忚鍏宠仈浠诲姟锛堢紮浜戝幙浜烘皯鍖婚櫌锛�
       nextTaskDialogVisible: false,
       nextTaskLoading: false,
@@ -1793,6 +1826,7 @@
     this.getillnesslist();
     this.Getdetails();
     this.getQtemplateclassify();
+    this.getPointOptions();
   },
   activated() {
     if (this.id != this.$route.query.id) {
@@ -1864,6 +1898,23 @@
     },
 
     // ---------- 鏁版嵁鍔犺浇 ----------
+    getPointOptions() {
+      // 浠呭悓寰烽櫌鍖猴細鐐逛綅涓嬫媺锛坉eptType=3锛�
+      if (!this.isTongdeCampus) return;
+      deptTreeSelect(3).then((response) => {
+        const flat = [];
+        const walk = (nodes) => {
+          (Array.isArray(nodes) ? nodes : []).forEach((n) => {
+            if (n.label && n.deptCode) {
+              flat.push({ label: n.label, value: String(n.deptCode) });
+            }
+            if (n.children && n.children.length) walk(n.children);
+          });
+        };
+        walk(response && response.data);
+        this.pointOptions = flat;
+      });
+    },
     Acquisitiontype() {
       let queryParams = {
         pageNum: this.topqueryParams.pageNum,
@@ -2936,6 +2987,12 @@
           this.leavehospitaldistrictcodes = [];
           this.illnesscodes = [];
           this.form.oplevelcode = null;
+        } else if (this.form.appltype == 7) {
+          this.deptcodesWards = [];
+          this.leavehospitaldistrictcodes = [];
+          this.illnesscodes = [];
+          this.form.oplevelcode = null;
+          this.medicalCodes = [];
         }
 
         // 鏈嶅姟褰㈠紡鏍¢獙
@@ -2955,6 +3012,7 @@
           this.diagglist[0] ||
           this.form.oplevelcode ||
           this.medicalCodes[0] ||
+          this.form.pointLocation ||
           this.form.longTask == 2 ||
           this.serviceType == 3 ||
           this.form.appltype == 5;
diff --git a/src/views/patient/propaganda/particty.vue b/src/views/patient/propaganda/particty.vue
index 3c23bf2..b9fe50e 100644
--- a/src/views/patient/propaganda/particty.vue
+++ b/src/views/patient/propaganda/particty.vue
@@ -70,13 +70,22 @@
                   />
                 </el-form-item>
 
-                <el-form-item label="鐐逛綅缂栫爜" v-if="isTongdeCampus&& (serviceType == 6 || serviceType == 14)">
-                  <el-input
-                    style="width: 220px"
+                <!-- <el-form-item label="鐐逛綅缂栫爜" v-if="isTongdeCampus&& (serviceType == 6 || serviceType == 14)">
+                  <el-select
                     v-model="form.pointLocation"
-                    placeholder="璇疯緭鍏ョ偣浣嶇紪鐮�"
-                  />
-                </el-form-item>
+                    style="width: 220px"
+                    clearable
+                    filterable
+                    placeholder="璇烽�夋嫨鐐逛綅"
+                  >
+                    <el-option
+                      v-for="item in pointOptions"
+                      :key="item.value"
+                      :label="item.label"
+                      :value="item.value"
+                    />
+                  </el-select>
+                </el-form-item> -->
 
                 <el-form-item label="鏈嶅姟褰㈠紡">
                   <SortCheckbox
@@ -214,8 +223,29 @@
                     <el-radio label="4">鎵嬫湳鍏宠仈</el-radio>
                     <el-radio label="5">浠诲姟缁�</el-radio>
                     <el-radio label="6">鑽搧鍏宠仈</el-radio>
+                    <el-radio label="7"v-if="isTongdeCampus&& (serviceType == 6 || serviceType == 14)">鐐逛綅鍏宠仈</el-radio>
                   </el-radio-group>
                 </el-form-item>
+
+                <!-- 鐐逛綅鍏宠仈 -->
+                <el-row v-if="form.appltype == 7">
+                  <el-form-item label="鍏宠仈鐐逛綅" prop="pointLocation">
+                    <el-select
+                      v-model="form.pointLocation"
+                      style="width: 400px"
+                      clearable
+                      filterable
+                      placeholder="璇烽�夋嫨鐐逛綅"
+                    >
+                      <el-option
+                        v-for="item in pointOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value"
+                      />
+                    </el-select>
+                  </el-form-item>
+                </el-row>
 
                 <!-- 鑽搧鍏宠仈 -->
                 <el-row v-if="form.appltype == 6">
@@ -1772,6 +1802,8 @@
       belongDepts: [],
       quote: false,
       serviceType: null,
+      // 鍙�夌偣浣嶏紙鍚屽痉闄㈠尯锛宒eptType=3锛�
+      pointOptions: [],
       // 鍐嶆闅忚鍏宠仈浠诲姟锛堢紮浜戝幙浜烘皯鍖婚櫌锛�
       orgname: localStorage.getItem("orgname"),
       nextTaskDialogVisible: false,
@@ -1802,6 +1834,7 @@
     this.getillnesslist();
     this.Getdetails();
     this.getFollowupclassify();
+    this.getPointOptions();
   },
   activated() {
     if (this.id != this.$route.query.id) {
@@ -1882,6 +1915,23 @@
     },
 
     // ---------- 鏁版嵁鍔犺浇 ----------
+    getPointOptions() {
+      // 浠呭悓寰烽櫌鍖猴細鐐逛綅涓嬫媺锛坉eptType=3锛�
+      if (!this.isTongdeCampus) return;
+      deptTreeSelect(3).then((response) => {
+        const flat = [];
+        const walk = (nodes) => {
+          (Array.isArray(nodes) ? nodes : []).forEach((n) => {
+            if (n.label && n.deptCode) {
+              flat.push({ label: n.label, value: String(n.deptCode) });
+            }
+            if (n.children && n.children.length) walk(n.children);
+          });
+        };
+        walk(response && response.data);
+        this.pointOptions = flat;
+      });
+    },
     Acquisitiontype() {
       let queryParams = {
         pageNum: this.topqueryParams.pageNum,
@@ -2963,6 +3013,12 @@
           this.leavehospitaldistrictcodes = [];
           this.illnesscodes = [];
           this.operationcodes = [];
+        } else if (this.form.appltype == 7) {
+          this.deptcodesWards = [];
+          this.leavehospitaldistrictcodes = [];
+          this.illnesscodes = [];
+          this.operationcodes = [];
+          this.medicalCodes = [];
         }
 
         // 鏈嶅姟褰㈠紡鏍¢獙
@@ -2982,6 +3038,7 @@
           this.diagglist[0] ||
           this.operationcodes[0] ||
           this.medicalCodes[0] ||
+          this.form.pointLocation ||
           this.form.longTask == 2 ||
           this.serviceType == 3 ||
           this.form.appltype == 5; // 浠诲姟缁勮烦杩囧己鍒跺叧鑱�
diff --git a/src/views/sfstatistics/percentage/components/CombinedFollowUp.vue b/src/views/sfstatistics/percentage/components/CombinedFollowUp.vue
index b070bbf..078eab8 100644
--- a/src/views/sfstatistics/percentage/components/CombinedFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/CombinedFollowUp.vue
@@ -1301,7 +1301,7 @@
       };
 
       // 鏍囬琛�
-      worksheet.mergeCells(1, 1, 1, 20);
+      worksheet.mergeCells(1, 1, 1, 26);
       worksheet.getCell(
         1,
         1
@@ -1356,13 +1356,40 @@
         worksheet.getCell(3, col).style = headerStyle;
       });
 
-      // 鏂板璁$畻鎸囨爣
-      worksheet.mergeCells(2, 16, 3, 16);
-      worksheet.getCell(2, 16).value = "闅忚鐜�";
+      // 闅忚鎯呭喌澶у垪锛堟甯歌闊�/鎷掓帴鎴栨嫆璁�/闈㈣鎴栨帴璇�/寰俊/鐢佃瘽涓嶆纭�/鍏朵粬锛�
+      worksheet.mergeCells(2, 16, 2, 21);
+      worksheet.getCell(2, 16).value = "闅忚鎯呭喌";
       worksheet.getCell(2, 16).style = headerStyle;
-      worksheet.mergeCells(2, 17, 3, 17);
-      worksheet.getCell(2, 17).value = "鎺ㄩ�佺巼";
-      worksheet.getCell(2, 17).style = headerStyle;
+      const situationCols = [
+        "姝e父璇煶",
+        "鎮h�呮嫆鎺ユ垨鎷掕",
+        "闈㈣鎴栬�呮帴璇�",
+        "寰俊闅忚",
+        "闅忚鐢佃瘽涓嶆纭�",
+        "鍏朵粬鎯呭喌涓嶅疁闅忚",
+      ];
+      situationCols.forEach((label, idx) => {
+        const col = 16 + idx;
+        worksheet.getCell(3, col).value = label;
+        worksheet.getCell(3, col).style = headerStyle;
+      });
+
+      // 鏂板璁$畻鎸囨爣
+      worksheet.mergeCells(2, 22, 3, 22);
+      worksheet.getCell(2, 22).value = "闅忚鐜�";
+      worksheet.getCell(2, 22).style = headerStyle;
+      worksheet.mergeCells(2, 23, 3, 23);
+      worksheet.getCell(2, 23).value = "鎺ㄩ�佺巼";
+      worksheet.getCell(2, 23).style = headerStyle;
+      worksheet.mergeCells(2, 24, 3, 24);
+      worksheet.getCell(2, 24).value = "宸叉嫧閫�";
+      worksheet.getCell(2, 24).style = headerStyle;
+      worksheet.mergeCells(2, 25, 3, 25);
+      worksheet.getCell(2, 25).value = "鍐嶆闅忚鎺ㄩ�佷汉鏁�";
+      worksheet.getCell(2, 25).style = headerStyle;
+      worksheet.mergeCells(2, 26, 3, 26);
+      worksheet.getCell(2, 26).value = "杩借釜闅忚鎺ㄩ�佺巼";
+      worksheet.getCell(2, 26).style = headerStyle;
 
       // 鏁版嵁琛�
       this.tableData.forEach((item) => {
@@ -1390,8 +1417,17 @@
             item.needFollowUpAgain,
             item.pendingFollowUpAgain
           ),
+          item.taskSituation1 || 0,
+          item.taskSituation2 || 0,
+          item.taskSituation3 || 0,
+          item.taskSituation4 || 0,
+          item.taskSituation5 || 0,
+          item.taskSituation6 || 0,
           this.calculateFollowUpRate(item),
           this.calculatePushRate(item),
+          item.manuallyCalled || 0,
+          item.againFollowUpPushCount || 0,
+          this.calculateAgainFollowUpPushRate(item),
         ];
         const row = worksheet.addRow(rowData);
         row.eachCell((cell) => {
@@ -1426,61 +1462,77 @@
         { width: 12 },
         { width: 12 },
         { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
       ];
     },
 
     getExportSummaries() {
-      // 鎻愬彇鏁版嵁锛岃绠楀悎璁¤
+      // 鎻愬彇鏁版嵁锛岃绠楀悎璁¤锛�26 鍒楋細涓庝富琛ㄥ鍑鸿〃澶翠竴鑷达級
       const data = this.tableData;
       const sums = [
-        "鍚堣",
-        "/",
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        0,
-        "0%",
-        0,
-        0,
-        0,
-        0,
-        "0%",
-        "0%",
-        "0%",
+        "鍚堣", // 0
+        "/", // 1
+        0, // 2 鍑洪櫌浜烘
+        0, // 3 鏃犻渶闅忚
+        0, // 4 搴旈殢璁�
+        0, // 5 闇�闅忚(棣栨)
+        0, // 6 寰呴殢璁�(棣栨)
+        0, // 7 瀹屾垚(棣栨)
+        0, // 8 澶辫触(棣栨)
+        "0.00%", // 9 鎴愬姛鐜�(棣栨)
+        0, // 10 闇�闅忚(鍐嶆)
+        0, // 11 寰呴殢璁�(鍐嶆)
+        0, // 12 瀹屾垚(鍐嶆)
+        0, // 13 澶辫触(鍐嶆)
+        "0.00%", // 14 鎴愬姛鐜�(鍐嶆)
+        0, // 15 姝e父璇煶
+        0, // 16 鎮h�呮嫆鎺ユ垨鎷掕
+        0, // 17 闈㈣鎴栬�呮帴璇�
+        0, // 18 寰俊闅忚
+        0, // 19 闅忚鐢佃瘽涓嶆纭�
+        0, // 20 鍏朵粬鎯呭喌涓嶅疁闅忚
+        "0.00%", // 21 闅忚鐜�
+        "0.00%", // 22 鎺ㄩ�佺巼
+        0, // 23 宸叉嫧閫�
+        0, // 24 鍐嶆闅忚鎺ㄩ�佷汉鏁�
+        "0.00%", // 25 杩借釜闅忚鎺ㄩ�佺巼
       ];
-      // 鏁板瓧鍒楃储寮�
-      const numIndices = [2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13];
-      data.forEach((row) => {
-        numIndices.forEach((idx) => {
-          const val = Number(row[this.getFieldByIndex(idx)]) || 0;
-          sums[idx] += val;
-        });
+      // 鏁板瓧鍒楁眰鍜岋紙绱㈠紩 -> 瀛楁鍚嶏級
+      const numFields = [
+        [2, "dischargeCount"],
+        [3, "nonFollowUp"],
+        [4, "followUpNeeded"],
+        [5, "needFollowUp"],
+        [6, "pendingFollowUp"],
+        [7, "followUpSuccess"],
+        [8, "followUpFail"],
+        [10, "needFollowUpAgain"],
+        [11, "pendingFollowUpAgain"],
+        [12, "followUpSuccessAgain"],
+        [13, "followUpFailAgain"],
+        [15, "taskSituation1"],
+        [16, "taskSituation2"],
+        [17, "taskSituation3"],
+        [18, "taskSituation4"],
+        [19, "taskSituation5"],
+        [20, "taskSituation6"],
+        [23, "manuallyCalled"],
+        [24, "againFollowUpPushCount"],
+      ];
+      numFields.forEach(([idx, field]) => {
+        sums[idx] = this.formatNumber(
+          data.reduce((s, row) => s + (Number(row[field]) || 0), 0)
+        );
       });
-      // 鏍煎紡鍖栨暟瀛�
-      numIndices.forEach((idx) => {
-        sums[idx] = this.formatNumber(sums[idx]);
-      });
-      // 璁$畻涓や釜鐧惧垎姣斿垪鐨勫钩鍧囧��
-      const followUpRates = data
-        .map((row) =>
-          parseFloat(this.calculateFollowUpRate(row).replace("%", ""))
-        )
-        .filter((v) => !isNaN(v));
-      const pushRates = data
-        .map((row) => parseFloat(this.calculatePushRate(row).replace("%", "")))
-        .filter((v) => !isNaN(v));
-      sums[15] = followUpRates.length
-        ? (
-            followUpRates.reduce((a, b) => a + b, 0) / followUpRates.length
-          ).toFixed(2) + "%"
-        : "0.00%";
-      sums[16] = pushRates.length
-        ? (pushRates.reduce((a, b) => a + b, 0) / pushRates.length).toFixed(2) +
-          "%"
-        : "0.00%";
+
       // 鎴愬姛鐜囩殑鍚堣鐢ㄦ暣浣撴硶璁$畻
       const totalSuccess = data.reduce(
         (s, row) => s + (Number(row.followUpSuccess) || 0),
@@ -1514,6 +1566,40 @@
         denomAgain > 0
           ? ((totalSuccessAgain / denomAgain) * 100).toFixed(2) + "%"
           : "0.00%";
+
+      // 闅忚鐜� / 鎺ㄩ�佺巼锛氬彇鍚勮鐨勫钩鍧囧��
+      const followUpRates = data
+        .map((row) =>
+          parseFloat(this.calculateFollowUpRate(row).replace("%", ""))
+        )
+        .filter((v) => !isNaN(v));
+      sums[21] = followUpRates.length
+        ? (
+            followUpRates.reduce((a, b) => a + b, 0) / followUpRates.length
+          ).toFixed(2) + "%"
+        : "0.00%";
+      const pushRates = data
+        .map((row) => parseFloat(this.calculatePushRate(row).replace("%", "")))
+        .filter((v) => !isNaN(v));
+      sums[22] = pushRates.length
+        ? (pushRates.reduce((a, b) => a + b, 0) / pushRates.length).toFixed(2) +
+          "%"
+        : "0.00%";
+
+      // 杩借釜闅忚鎺ㄩ�佺巼锛氭暣浣撴硶 = 鍐嶆闅忚鎺ㄩ�佷汉鏁板悎璁� / 鍑洪櫌浜烘鍚堣
+      const totalPush = data.reduce(
+        (s, row) => s + (Number(row.againFollowUpPushCount) || 0),
+        0
+      );
+      const totalDischarge = data.reduce(
+        (s, row) => s + (Number(row.dischargeCount) || 0),
+        0
+      );
+      sums[25] =
+        totalDischarge > 0
+          ? ((totalPush / totalDischarge) * 100).toFixed(2) + "%"
+          : "0.00%";
+
       return sums;
     },
 
diff --git a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
index 030bc2f..1e2b17e 100644
--- a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
@@ -1660,19 +1660,9 @@
             sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
           }
         } else {
-          const now = new Date();
-          const currentMonth = now.getMonth() + 1;
-          const currentYear = now.getFullYear();
-
-          if (isLishuiHospital) {
-            // 涓芥按甯備腑鍖婚櫌锛氭樉绀哄勾鏈�
-            dateRangeString = `${currentYear}骞�${currentMonth}鏈坄;
-            sheetNameSuffix = `${currentYear}骞�${currentMonth}鏈坄;
-          } else {
-            // 鍏朵粬鍖婚櫌锛氭樉绀烘湀浠�
-            dateRangeString = `${currentMonth}鏈坄;
-            sheetNameSuffix = `${currentMonth}鏈坄;
-          }
+          // 鏈�夋嫨鏃堕棿锛氭暟鎹湭鍋氭椂闂寸瓫閫夛紝涓哄叏閮ㄦ暟鎹紝鏂囦欢鍚嶆爣娉ㄢ�滃叏閮ㄢ��
+          dateRangeString = "鍏ㄩ儴";
+          sheetNameSuffix = "鍏ㄩ儴";
         }
 
         // 鏍规嵁 serviceType 鐢熸垚闅忚绫诲瀷鍚嶇О锛堝吋瀹瑰崟閫�/澶氶�夛級
@@ -1768,7 +1758,8 @@
           const end = this.queryParams.dateRange[1].split(" ")[0];
           dateRangeString = `${start}鑷�${end}`;
         } else {
-          dateRangeString = `${new Date().getMonth() + 1}鏈坄;
+          // 鏈�夋嫨鏃堕棿锛氭暟鎹负鍏ㄩ儴
+          dateRangeString = "鍏ㄩ儴";
         }
 
         const fileName = `${areaName}鍖荤敓闅忚鍒楄〃_${dateRangeString}.xlsx`;
diff --git a/vue.config.js b/vue.config.js
index 21ebdfa..06f608c 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -36,14 +36,14 @@
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
         // target: `https://www.health-y.cn/lssf`,
-        target: `http://192.168.100.10:8096`,
-        // target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
+        // target: `http://192.168.100.10:8096`,
+        target: `http://192.168.100.10:8094`,//鐪佺珛鍚屽痉
         // target: `http://192.168.100.10:8095`,//鏂板崕
         // target: `http://192.168.100.10:8098`,//甯備竴
         // target:`http://localhost:8095`,
         // target: `http://192.168.100.168:8095`,
         // target:`http://35z1t16164.qicp.vip`,
-        // target: `http://192.168.100.172:8095`,
+        // target: `http://220.66.153.137:8095`,
         // target: `http://192.168.100.10:8089`,//鍗楀崕
         // target: `https://9.208.38.93:8092/`,
         changeOrigin: true,
diff --git "a/\351\232\217\350\256\277\344\275\277\347\224\25011.10.zip" "b/\351\232\217\350\256\277\344\275\277\347\224\25011.10.zip"
deleted file mode 100644
index 44ce0ff..0000000
--- "a/\351\232\217\350\256\277\344\275\277\347\224\25011.10.zip"
+++ /dev/null
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\202\347\224\25011.10.zip" "b/\351\232\217\350\256\277\351\200\202\347\224\25011.10.zip"
deleted file mode 100644
index c9baa53..0000000
--- "a/\351\232\217\350\256\277\351\200\202\347\224\25011.10.zip"
+++ /dev/null
Binary files differ

--
Gitblit v1.9.3