From 877cf2120309d30c08f922191bca1ec5242add82 Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期二, 21 四月 2026 15:49:02 +0800
Subject: [PATCH] 测试完成

---
 src/views/repositoryai/verbaltrick/index.vue                                   |    2 
 src/permission.js                                                              |   29 
 src/views/Satisfaction/sfstatistics/components/components/SeedetailsDialog.vue |   66 +-
 src/views/sfstatistics/percentage/components/TimelyRateDialog.vue              |   24 
 src/views/knowledge/education/compilequer/index copy.vue                       |  115 ++-
 src/views/knowledge/questionnaire/compilequer/index.vue                        |   13 
 src/views/knowledge/education/index.vue                                        |    2 
 src/views/sfstatistics/percentage/components/FirstFollowUp.vue                 | 1096 +++++++++++++++++++++++++++-----------
 src/views/login-sy.vue                                                         |    1 
 src/views/outsideChainnew.vue                                                  |   18 
 src/views/login.vue                                                            |    1 
 src/views/patient/propaganda/index.vue                                         |   12 
 src/views/followvisit/record/detailpage/index.vue                              |   16 
 src/views/repositoryai/verbaltrick/particulars/index.vue                       |    4 
 src/views/sfstatistics/percentage/index.vue                                    |    9 
 src/components/Regular/index.vue                                               |   50 +
 src/views/Satisfaction/configurationmyd/index.vue                              |   16 
 src/views/knowledge/education/compilequer/index.vue                            |  129 ++-
 src/views/patient/propaganda/particty.vue                                      |   22 
 src/views/outsideChainwtnew.vue                                                |    5 
 20 files changed, 1,099 insertions(+), 531 deletions(-)

diff --git a/src/components/Regular/index.vue b/src/components/Regular/index.vue
index 2398279..b4fc53d 100644
--- a/src/components/Regular/index.vue
+++ b/src/components/Regular/index.vue
@@ -27,7 +27,33 @@
                 >
                   <span style="color: #67c23a">鈼� 姝e父</span>
                 </el-option>
+            ><el-form-item label="寮傚父鎻愰啋">
+              <el-select v-model="item.isabnormal" placeholder="璇烽�夋嫨鐘舵��">
+                <el-option
+                  :value="0"
+                  label="姝e父"
+                  :style="{ color: '#67C23A' }"
+                >
+                  <span style="color: #67c23a">鈼� 姝e父</span>
+                </el-option>
 
+                <el-option
+                  :value="2"
+                  label="璀﹀憡"
+                  :style="{ color: '#FFBA00' }"
+                >
+                  <span style="color: #ffba00">鈼� 璀﹀憡</span>
+                </el-option>
+                <el-option
+                  :value="1"
+                  label="寮傚父"
+                  :style="{ color: '#f75c5c' }"
+                >
+                  <span style="color: #f75c5c">鈼� 寮傚父</span>
+                </el-option>
+              </el-select>
+            </el-form-item></el-col
+          >
                 <el-option
                   :value="2"
                   label="璀﹀憡"
@@ -70,12 +96,24 @@
               </el-input> </el-form-item
           ></el-col>
         </el-row>
-        <el-form-item label="缁撴潫瀵硅瘽">
-          <el-radio-group v-model="item.isEnd">
-            <el-radio :label="1">鏄�</el-radio>
-            <el-radio :label="0">鍚�</el-radio>
-          </el-radio-group>
-        </el-form-item>
+        <el-row :gutter="10">
+          <el-col :span="11">
+            <el-form-item label="缁撴潫瀵硅瘽">
+              <el-radio-group v-model="item.isEnd">
+                <el-radio :label="1">鏄�</el-radio>
+                <el-radio :label="0">鍚�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="11">
+            <el-form-item label="榛樿閫夐」">
+              <el-radio-group v-model="item.defaultValue">
+                <el-radio :label="2">鏄�</el-radio>
+                <el-radio :label="1">鍚�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
 
         <el-row :gutter="10" v-if="intent">
           <el-col :span="12"
diff --git a/src/permission.js b/src/permission.js
index e864e35..b049b44 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -52,12 +52,33 @@
       }
     }
   } else {
-    // 娌℃湁token
-    if (whiteList.indexOf(to.path) !== -1) {
+    let processedPath = to.path;
+    if (to.path.startsWith("/aifollowup")) {
+      processedPath = to.path.replace(/^\/aifollowup/, "") || "/";
+    }
+
+    console.log(processedPath, "澶勭悊鍚庣殑璺緞");
+
+    if (whiteList.indexOf(processedPath) !== -1) {
       // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆
-      next();
+      // 濡傛灉璺緞琚慨鏀逛簡锛岄渶瑕侀噸瀹氬悜
+      if (processedPath !== to.path) {
+        next({
+          path: processedPath,
+          query: to.query,
+          hash: to.hash,
+        });
+        NProgress.done();
+      } else {
+        next();
+      }
     } else {
-      next(`/login?redirect=${to.fullPath}`); // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤�
+      // 淇濆瓨閲嶅畾鍚慤RL鏃堕渶瑕佸鐞嗚矾寰�
+      const redirectPath = to.path.startsWith("/aifollowup")
+        ? to.path.replace(/^\/aifollowup/, "")
+        : to.fullPath;
+
+      next(`/login?redirect=${redirectPath}`); // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤�
       NProgress.done();
     }
   }
diff --git a/src/views/Satisfaction/configurationmyd/index.vue b/src/views/Satisfaction/configurationmyd/index.vue
index 5029a05..a6debdc 100644
--- a/src/views/Satisfaction/configurationmyd/index.vue
+++ b/src/views/Satisfaction/configurationmyd/index.vue
@@ -144,14 +144,13 @@
     </div>
 
     <!-- 鎼滅储鍖哄煙锛堥鐩瓫閫夛級 -->
-    <div v-if="questionList.length > 0" class="search-section">
+    <div v-show="questionList.length > 0" class="search-section">
       <el-card shadow="never" class="search-container">
-        <el-form :model="queryParams" :inline="true" size="medium">
+        <el-form :model="queryParams" size="medium">
           <el-form-item label="闂涓婚">
             <el-input
               v-model="queryParams.scriptTopic"
               placeholder="璇疯緭鍏ラ棶棰樹富棰�"
-              clearable
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
@@ -159,7 +158,6 @@
             <el-input
               v-model="queryParams.scriptContent"
               placeholder="璇疯緭鍏ラ棶棰樺唴瀹�"
-              clearable
               @keyup.enter.native="handleQuery"
             />
           </el-form-item>
@@ -763,8 +761,8 @@
 
       // 鏌ヨ鍙傛暟
       queryParams: {
-        scriptTopic: "",
-        scriptContent: "",
+        scriptTopic: null,
+        scriptContent: null,
       },
 
       // 鏁版嵁鍒楄〃
@@ -860,7 +858,8 @@
     // 绛涢�夊悗鐨勯鐩垪琛�
     filteredQuestionList() {
       let filtered = this.questionList;
-
+      console.log("queryParams:", this.queryParams);
+      console.log("questionList:", this.questionList);
       // 绛涢�夋弧鎰忓害棰樼洰
       if (this.templateForm.templateType === 1) {
         filtered = filtered.filter((q) =>
@@ -876,7 +875,7 @@
       if (this.queryParams.scriptTopic) {
         const keyword = this.queryParams.scriptTopic.toLowerCase();
         filtered = filtered.filter(
-          (q) => q.scriptTopic && q.criptTopic.toLowerCase().includes(keyword)
+          (q) => q.scriptTopic && q.scriptTopic.toLowerCase().includes(keyword)
         );
       }
 
@@ -985,7 +984,6 @@
                 isavailable: item.isavailable,
               }));
               console.log(this.followupTemplates, 3);
-
             } else {
               this.$message.error(res.msg || "鍔犺浇闂嵎妯℃澘澶辫触");
             }
diff --git a/src/views/Satisfaction/sfstatistics/components/components/SeedetailsDialog.vue b/src/views/Satisfaction/sfstatistics/components/components/SeedetailsDialog.vue
index ce29cd3..71a40f7 100644
--- a/src/views/Satisfaction/sfstatistics/components/components/SeedetailsDialog.vue
+++ b/src/views/Satisfaction/sfstatistics/components/components/SeedetailsDialog.vue
@@ -221,15 +221,12 @@
 
         <!-- 鍒嗛〉 -->
         <div class="pagination" v-if="patienttotal > 0">
-          <el-pagination
-            background
-            layout="total, sizes, prev, pager, next, jumper"
-            :current-page="patientqueryParams.pn"
-            :page-size="patientqueryParams.ps"
-            :page-sizes="[10, 20, 30]"
+          <pagination
+            v-show="patienttotal > 0"
             :total="patienttotal"
-            @size-change="handleSizeChange"
-            @current-change="handlePageChange"
+            :page.sync="patientqueryParams.pn"
+            :limit.sync="patientqueryParams.ps"
+            @pagination="loadData"
           />
         </div>
       </div>
@@ -241,17 +238,17 @@
 import { selectTimelyRate } from "@/api/system/user";
 
 export default {
-  name: 'SeedetailsDialog',
-  dicts: ['sys_yujing', 'sys_suggest'],
+  name: "SeedetailsDialog",
+  dicts: ["sys_yujing", "sys_suggest"],
   props: {
     rowData: {
       type: Object,
-      default: () => ({})
+      default: () => ({}),
     },
     queryParams: {
       type: Object,
-      default: () => ({})
-    }
+      default: () => ({}),
+    },
   },
   data() {
     return {
@@ -259,8 +256,8 @@
       patientqueryParams: {
         pn: 1,
         ps: 10,
-        name: '',
-        leavediagname: ''
+        name: "",
+        leavediagname: "",
       },
 
       // 鍔犺浇鐘舵��
@@ -270,7 +267,7 @@
       logsheetlist: [],
 
       // 鎬绘潯鏁�
-      patienttotal: 0
+      patienttotal: 0,
     };
   },
 
@@ -285,17 +282,22 @@
       try {
         const params = {
           ...this.patientqueryParams,
-          deptcode: this.rowData.deptcode || '',
-          starttime: this.queryParams.dateRange?.[0] ? this.parseTime(this.queryParams.dateRange[0]) : '',
-          endtime: this.queryParams.dateRange?.[1] ? this.parseTime(this.queryParams.dateRange[1]) : ''
+          deptcode: this.rowData.deptcode || "",
+          starttime: this.queryParams.dateRange?.[0]
+            ? this.parseTime(this.queryParams.dateRange[0])
+            : "",
+          endtime: this.queryParams.dateRange?.[1]
+            ? this.parseTime(this.queryParams.dateRange[1])
+            : "",
         };
+        console.log(params, "params");
 
         const response = await selectTimelyRate(params);
         this.logsheetlist = response.data?.detail || [];
         this.patienttotal = response.data?.total || 0;
       } catch (error) {
-        console.error('鑾峰彇鏈強鏃堕殢璁胯鎯呭け璐�:', error);
-        this.$message.error('鑾峰彇鏁版嵁澶辫触');
+        console.error("鑾峰彇鏈強鏃堕殢璁胯鎯呭け璐�:", error);
+        this.$message.error("鑾峰彇鏁版嵁澶辫触");
       } finally {
         this.loading = false;
       }
@@ -312,16 +314,16 @@
       this.patientqueryParams = {
         pn: 1,
         ps: 10,
-        name: '',
-        leavediagname: ''
+        name: "",
+        leavediagname: "",
       };
       this.loadData();
     },
 
     // 澶勭悊鍒嗛〉澶у皬鍙樺寲
     handleSizeChange(size) {
-      this.patientqueryParams.ps = size;
-      this.patientqueryParams.pn = 1;
+      console.log(this.patientqueryParams);
+
       this.loadData();
     },
 
@@ -333,19 +335,19 @@
 
     // 鏍煎紡鍖栨椂闂�
     formatTime(time) {
-      if (!time) return '-';
+      if (!time) return "-";
       return time;
     },
 
     // 瑙f瀽鏃堕棿
     parseTime(time) {
-      if (!time) return '';
+      if (!time) return "";
       return time;
     },
 
     // 鏌ョ湅璇︽儏
     handleViewDetail(row) {
-      this.$emit('close');
+      this.$emit("close");
 
       let type = "";
       if (row.preachformson && row.preachformson.includes("3")) {
@@ -359,12 +361,12 @@
             taskid: row.taskid,
             patid: row.patid,
             id: row.id,
-            Voicetype: type
-          }
+            Voicetype: type,
+          },
         });
       }, 300);
-    }
-  }
+    },
+  },
 };
 </script>
 
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index 0df1bfb..00cba0e 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -561,7 +561,7 @@
                 <el-button
                   type="primary"
                   plain
-                  @click="Editsingletasksonyic('')"
+                  @click="alterpatient('')"
                 >
                   淇濆瓨鍩虹淇℃伅
                 </el-button>
@@ -1806,10 +1806,7 @@
         // 澶勭悊 scriptResult锛岀洿鎺ヤ慨鏀瑰師濮嬫暟鎹�
         if (item.scriptType == 2 && item.scriptResult) {
           // 澶勭悊鏁扮粍绫诲瀷鐨� scriptResult
-          if (
-            Array.isArray(item.scriptResult) &&
-            item.scriptResult.length > 0
-          ) {
+          if (Array.isArray(item.scriptResult)) {
             item.originalScriptResult = item.scriptResult; // 淇濆瓨鍘熷鏁扮粍锛堝彲閫夛級
             item.scriptResult = item.scriptResult.join("&"); // 杞崲涓哄瓧绗︿覆
           }
@@ -2203,6 +2200,15 @@
         }
       });
     },
+    alterpatient(sendstate) {
+      alterpatient(this.userform).then((res) => {
+        if (res.code == 200) {
+          this.$modal.msgSuccess("鍩虹淇℃伅淇濆瓨鎴愬姛");
+        } else {
+          this.$modal.msgError("鍩虹淇℃伅淇敼澶辫触");
+        }
+      });
+    },
     // 寮傚父鍒楁覆鏌�
     tableRowClassName({ row, rowIndex }) {
       if (row.id == this.id) {
diff --git a/src/views/knowledge/education/compilequer/index copy.vue b/src/views/knowledge/education/compilequer/index copy.vue
index 18f6baf..4890b23 100644
--- a/src/views/knowledge/education/compilequer/index copy.vue
+++ b/src/views/knowledge/education/compilequer/index copy.vue
@@ -432,70 +432,77 @@
       toolbarConfig: {},
       editorConfig: {
         placeholder: "璇疯緭鍏ュ唴瀹�...",
+        MENU_CONF: {
+          // 鍥剧墖涓婁紶閰嶇疆
+          uploadImage: {
+            server: process.env.VUE_APP_BASE_API + "/common/uploadSort",
+            fieldName: "file",
+            headers: {
+              Authorization: "Bearer " + getToken(),
+            },
+            // 鑷畾涔夋彃鍏�
+            customInsert: (res, insertFn) => {
+              const url = res.url || res.data || res.filePath;
+              if (url) {
+                // 澶勭悊鍐呯綉鍦板潃杞崲
+                const processedUrl = url.replace(
+                  "http://192.168.191.181:8095/profile/upload",
+                  "http://m.zjtongde.com:13871/prod-api/profile/upload"
+                );
+                insertFn(processedUrl);
+              }
+            },
+          },
+
+          // 瑙嗛涓婁紶閰嶇疆
+          uploadVideo: {
+            server: process.env.VUE_APP_BASE_API + "/common/uploadSort",
+            fieldName: "file",
+            maxFileSize: 50 * 1024 * 1024, // 50MB
+            allowedFileTypes: ["video/*"],
+            headers: {
+              "Content-Type": "multipart/form-data",
+              Authorization: "Bearer " + getToken(),
+            },
+            // 鑷畾涔夋彃鍏�
+            customInsert: (res, insertFn) => {
+              const url = res.url || res.data || res.filePath;
+              if (url) {
+                // 澶勭悊鍐呯綉鍦板潃杞崲
+                const processedUrl = url.replace(
+                  "http://192.168.191.181:8095/profile/upload",
+                  "http://m.zjtongde.com:13871/prod-api/profile/upload"
+                );
+                insertFn(processedUrl, "瑙嗛");
+              }
+            },
+            onSuccess: (file, res) => {
+              console.log("瑙嗛涓婁紶鎴愬姛", res);
+              return res.url || res.data || res.filePath;
+            },
+            onFailed: (file, res) => {
+              this.$message.error("瑙嗛涓婁紶澶辫触");
+              console.error("瑙嗛涓婁紶澶辫触", res);
+            },
+            onError: (file, err, res) => {
+              this.$message.error("瑙嗛涓婁紶鍑洪敊");
+              console.error("瑙嗛涓婁紶鍑洪敊", err);
+            },
+          },
+        },
         menus: [
           "head",
           "bold",
           "italic",
           "underline",
           "image",
+          "video", // 纭繚鏈� video
           "link",
           "list",
           "undo",
           "redo",
-          "file", // 娣诲姞鑷畾涔夋枃浠朵笂浼犺彍鍗�
+          "file",
         ],
-        uploadImgServer: process.env.VUE_APP_BASE_API + "/common/uploadSort", // 鍥剧墖涓婁紶鎺ュ彛
-        uploadImgHeaders: {
-          Authorization: "Bearer " + getToken(),
-        }, // 鑷畾涔変笂浼犵殑 headers
-        uploadImgParams: { key: "value" }, // 鑷畾涔変笂浼犵殑鍙傛暟
-        uploadImgMaxSize: 2 * 1024 * 1024, // 鍥剧墖鏈�澶уぇ灏忥紝鍗曚綅 Byte
-        uploadImgMaxLength: 1, // 涓�娆℃渶澶氫笂浼犲浘鐗囨暟閲�
-        uploadImgTimeout: 3 * 60 * 1000, // 瓒呮椂鏃堕棿锛屽崟浣� ms
-        uploadImgHooks: {
-          customInsert: (insertImgFn, result) => {
-            const url = result.url; // 鑾峰彇鍥剧墖鍦板潃
-            insertImgFn(url); // 鎻掑叆鍥剧墖
-          },
-        },
-        customMenus: {
-          file: {
-            tip: "涓婁紶鏂囦欢",
-            click: (editor) => {
-              const input = document.createElement("input");
-              input.type = "file";
-              input.accept =
-                "application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document"; // 鏀寔鐨勬枃浠剁被鍨�
-              input.onchange = (e) => {
-                const file = e.target.files[0];
-                if (!file) return;
-                const formData = new FormData();
-                formData.append("file", file);
-
-                // 纭繚 process.env.VUE_APP_BASE_API 鏄纭殑
-                const uploadUrl =
-                  process.env.VUE_APP_BASE_API + "/common/uploadSort";
-                axios
-                  .post(uploadUrl, formData, {
-                    headers: {
-                      Authorization: "Bearer " + getToken(),
-                    },
-                  })
-                  .then((res) => {
-                    const url = res.data.url; // 鑾峰彇鏂囦欢鍦板潃
-                    // 鎻掑叆鏂囦欢閾炬帴浣滀负鏅�氭枃鏈�
-                    editor.txt.append(url + " ");
-                    // 鎴栬�呮彃鍏ユ枃浠堕摼鎺ヤ綔涓鸿秴閾炬帴
-                    // editor.cmd.do('insertLink', { name: '鏂囦欢閾炬帴', url: url });
-                  })
-                  .catch((err) => {
-                    console.error("鏂囦欢涓婁紶澶辫触", err);
-                  });
-              };
-              input.click();
-            },
-          },
-        },
       },
       modes: "default", // or 'simple'
       headers: {
@@ -732,7 +739,7 @@
 
       // 瀹氫箟瑕佹浛鎹㈢殑鏂版棫URL
       var oldUrlBase = this.oldPattern;
-      var newUrlBase =this.newPattern;
+      var newUrlBase = this.newPattern;
 
       // 鑾峰彇鎵�鏈夌殑video鍏冪礌
       var videos = doc.querySelectorAll("video");
diff --git a/src/views/knowledge/education/compilequer/index.vue b/src/views/knowledge/education/compilequer/index.vue
index f5c3f3f..ef4061c 100644
--- a/src/views/knowledge/education/compilequer/index.vue
+++ b/src/views/knowledge/education/compilequer/index.vue
@@ -360,60 +360,74 @@
       fileList: [],
       // 宸ュ叿鏍忛厤缃�
       toolbarConfig: {
-        excludeKeys: [
-          "group-video",
-          "insertVideo",
-          "uploadVideo",
-          "emotion",
-          "codeBlock",
-        ],
+        excludeKeys: ["emotion", "codeBlock"],
       },
 
-      // 缂栬緫鍣ㄩ厤缃�
       editorConfig: {
-        placeholder: "璇疯緭鍏ュ鏁欏唴瀹�...",
+        placeholder: "璇疯緭鍏ュ唴瀹�...",
         MENU_CONF: {
+          // 鍥剧墖涓婁紶閰嶇疆
           uploadImage: {
             server: process.env.VUE_APP_BASE_API + "/common/uploadSort",
             fieldName: "file",
-            maxFileSize: 2 * 1024 * 1024,
-            maxNumberOfFiles: 1,
-            allowedFileTypes: ["image/*"],
             headers: {
               Authorization: "Bearer " + getToken(),
             },
-            customUpload: async (file, insertFn) => {
-              try {
-                const formData = new FormData();
-                formData.append("file", file);
-
-                const response = await axios.post(
-                  process.env.VUE_APP_BASE_API + "/common/uploadSort",
-                  formData,
-                  {
-                    headers: {
-                      // "Content-Type": "multipart/form-data",
-                      Authorization: "Bearer " + getToken(),
-                    },
-                  }
+            // 鑷畾涔夋彃鍏ュ浘鐗�
+            customInsert: (res, insertFn) => {
+              const url = res.url || res.data || res.filePath;
+              if (url) {
+                // 澶勭悊鍐呯綉鍦板潃杞崲
+                const processedUrl = url.replace(
+                  "http://192.168.191.181:8095/profile/upload",
+                  "http://m.zjtongde.com:13871/prod-api/profile/upload"
                 );
-
-                if (response.data && response.data.url) {
-                  let imgUrl = response.data.url;
-                  // imgUrl = imgUrl.replace(
-                  //   "http://218.108.11.22:8093/profile-api/upload",
-                  //   "http://192.88.117.236:8090/prod-api/profile/upload"
-                  // );
-                  imgUrl = imgUrl.replace(
-                    "http://m.zjtongde.com:13871/prod-api/profile/upload",
-                    "http://192.88.117.236:8090/prod-api/profile/upload"
-                  );
-                  insertFn(imgUrl);
-                }
-              } catch (error) {
-                console.error("鍥剧墖涓婁紶澶辫触", error);
-                this.$message.error("鍥剧墖涓婁紶澶辫触");
+                insertFn(processedUrl);
               }
+            },
+            // 涓婁紶鎴愬姛鍥炶皟
+            onSuccess: (file, res) => {
+              console.log("鍥剧墖涓婁紶鎴愬姛", res);
+              return res.url || res.data || res.filePath;
+            },
+            onFailed: (file, res) => {
+              this.$message.error("鍥剧墖涓婁紶澶辫触");
+              console.error("鍥剧墖涓婁紶澶辫触", res);
+            },
+          },
+
+          // 瑙嗛涓婁紶閰嶇疆
+          uploadVideo: {
+            server: process.env.VUE_APP_BASE_API + "/common/uploadSort",
+            fieldName: "file",
+            maxFileSize: 50 * 1024 * 1024, // 50MB
+            allowedFileTypes: ["video/*"],
+            headers: {
+              Authorization: "Bearer " + getToken(),
+            },
+            // 鑷畾涔夋彃鍏ヨ棰�
+            customInsert: (res, insertFn) => {
+              const url = res.url || res.data || res.filePath;
+              if (url) {
+                // 澶勭悊鍐呯綉鍦板潃杞崲
+                const processedUrl = url.replace(
+                  "http://192.168.191.181:8095/profile/upload",
+                  "http://m.zjtongde.com:13871/prod-api/profile/upload"
+                );
+                insertFn(processedUrl, "瑙嗛");
+              }
+            },
+            onSuccess: (file, res) => {
+              console.log("瑙嗛涓婁紶鎴愬姛", res);
+              return res.url || res.data || res.filePath;
+            },
+            onFailed: (file, res) => {
+              this.$message.error("瑙嗛涓婁紶澶辫触");
+              console.error("瑙嗛涓婁紶澶辫触", res);
+            },
+            onError: (file, err, res) => {
+              this.$message.error("瑙嗛涓婁紶鍑洪敊");
+              console.error("瑙嗛涓婁紶鍑洪敊", err);
             },
           },
         },
@@ -658,17 +672,32 @@
       // 鑾峰彇鎵�鏈夌殑video鍏冪礌
       var videos = doc.querySelectorAll("video");
       var images = doc.querySelectorAll("img");
+      console.log(videos, "videos");
+      console.log(images, "images");
 
       // 閬嶅巻鎵�鏈夌殑video鍏冪礌骞舵浛鎹rc灞炴��
       videos.forEach(function (video) {
+        // 鍏堟鏌ideo鍏冪礌鑷韩鐨剆rc灞炴��
         var src = video.getAttribute("src");
-        if (src.startsWith(oldUrlBase)) {
+        if (src && src.startsWith(oldUrlBase)) {
           video.setAttribute("src", src.replace(oldUrlBase, newUrlBase));
         }
-      });
-      console.log(images,'images');
 
-       images.forEach(function (img) {
+        // 鐒跺悗妫�鏌ideo鍏冪礌鍐呴儴鐨剆ource瀛愬厓绱�
+        var sources = video.querySelectorAll("source");
+        sources.forEach(function (source) {
+          var sourceSrc = source.getAttribute("src");
+          if (sourceSrc && sourceSrc.startsWith(oldUrlBase)) {
+            source.setAttribute(
+              "src",
+              sourceSrc.replace(oldUrlBase, newUrlBase)
+            );
+          }
+        });
+      });
+      console.log(images, "images");
+
+      images.forEach(function (img) {
         var src = img.getAttribute("src");
         if (src.startsWith(oldUrlBase)) {
           img.setAttribute("src", src.replace(oldUrlBase, newUrlBase));
@@ -700,11 +729,13 @@
         content: this.parserdom(this.content),
         fileName: this.generateRandomHtmlFilename(),
       }).then((res) => {
+        console.log(55);
+
         this.ruleForm.richText = res.msg;
         this.ruleForm.richText = res.msg.replace(
-            this.oldPattern,
-            this.newPattern
-          );
+          this.oldPattern,
+          this.newPattern
+        );
         console.log(this.ruleForm.richText, "this.ruleForm.richText");
         // 澶勭悊鍐呯綉html
         addrichText({
diff --git a/src/views/knowledge/education/index.vue b/src/views/knowledge/education/index.vue
index 6fa0afc..5b8a995 100644
--- a/src/views/knowledge/education/index.vue
+++ b/src/views/knowledge/education/index.vue
@@ -866,7 +866,7 @@
     },
     // 鏌ヨ鏍�
     getDeptTree() {
-      getheLibraryAssort({ hetype: 2 }).then((res) => {
+      getheLibraryAssort({ hetype: 1 }).then((res) => {
         this.deptOptions = res.rows;
         this.dialogFormVisible = false;
       });
diff --git a/src/views/knowledge/questionnaire/compilequer/index.vue b/src/views/knowledge/questionnaire/compilequer/index.vue
index 2923b51..76975af 100644
--- a/src/views/knowledge/questionnaire/compilequer/index.vue
+++ b/src/views/knowledge/questionnaire/compilequer/index.vue
@@ -672,7 +672,8 @@
                       </el-col>
                     </el-row>
                     <el-row>
-                      <el-form-item label="鍏宠仈鏈嶅姟">
+                      <el-col :span="12">
+ <el-form-item label="鍏宠仈鏈嶅姟">
                         <div
                           v-if="item.sendTaskname"
                           class="service-tag-container"
@@ -699,6 +700,16 @@
                           </el-button>
                         </div>
                       </el-form-item>
+                      </el-col>
+                         <el-col :span="12">
+                         <el-form-item label="榛樿閫夐」">
+                          <el-radio-group v-model="item.defaultValue">
+                            <el-radio :label="2">鏄�</el-radio>
+                            <el-radio :label="1">鍚�</el-radio>
+                          </el-radio-group>
+                        </el-form-item>
+                      </el-col>
+
                     </el-row>
                     <el-row :gutter="10">
                       <el-col :span="11">
diff --git a/src/views/login-sy.vue b/src/views/login-sy.vue
index 0408a34..2bb661e 100644
--- a/src/views/login-sy.vue
+++ b/src/views/login-sy.vue
@@ -169,7 +169,6 @@
         if (res.code == 200) {
           this.options = res.rows.map((item) => ({
             value: item.medicalCode,
-            // value: item.medicalCode,
             label: item.organizationName,
           }));
         }
diff --git a/src/views/login.vue b/src/views/login.vue
index d087469..4d5a2ac 100644
--- a/src/views/login.vue
+++ b/src/views/login.vue
@@ -165,6 +165,7 @@
           this.options = res.rows.map((item) => ({
             value: item.orgid,
             label: item.organizationName,
+            campusid: item.organizationID,
           }));
         }
       });
diff --git a/src/views/outsideChainnew.vue b/src/views/outsideChainnew.vue
index b9e39b1..1e83bb8 100644
--- a/src/views/outsideChainnew.vue
+++ b/src/views/outsideChainnew.vue
@@ -8,7 +8,9 @@
             {{
               kcb
                 ? kcb
-                : "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸"+localStorage.getItem("orgname")+"鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤闅忚闂嵎銆�"
+                : "浜茬埍鐨勬偅鑰�-瀹跺睘锛屾垜浠槸" +
+                  localStorage.getItem("orgname") +
+                  "鐨勫尰鎶や汉鍛橈紝涓轰簡鏇村ソ鍦颁簡瑙f偍鐨勫悍澶嶆儏鍐碉紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤闅忚闂嵎銆�"
             }}
             <!-- 浜茬埍鐨勬偅鑰�/瀹跺睘鎮ㄥソ锛屼负浜嗘洿濂界殑浜嗚В鎮ㄥ嚭闄㈠悗鐨勫悍澶嶆儏鍐碉紝缁欐偍閫傚綋鍙婃椂鐨勫仴搴锋寚瀵硷紝璇锋偍鎶戒竴鐐瑰疂璐垫椂闂达紝瀹屾垚杩欎唤鍑洪櫌闅忚闂嵎璋冩煡銆� -->
           </div>
@@ -82,7 +84,11 @@
             </div>
           </div>
           <!-- 濉┖ -->
-          <div class="scriptTopic-dev" :key="index" v-if="item.scriptType == 4||item.scriptType == 3">
+          <div
+            class="scriptTopic-dev"
+            :key="index"
+            v-if="item.scriptType == 4 || item.scriptType == 3"
+          >
             <div class="dev-text">
               {{ index + 1 }}銆�<span style="line-height: 1.5"
                 >{{ item.scriptContent
@@ -163,6 +169,7 @@
       kcb: "",
       excep: "",
       taskname: "",
+      param6: null,
       questionList: [
         // {
         //   scriptType: 1,
@@ -288,12 +295,14 @@
 
       geturlinfo(url).then((res) => {
         if (res.code == 200) {
+
           this.getQuestionnaire(
             res.data.param1,
             res.data.param2,
             res.data.param3,
             res.data.param5
           );
+          this.param6 = res.data.param6;
         }
       });
     },
@@ -385,10 +394,12 @@
       let form = {
         param1: this.taskid,
         param2: this.patid,
+        param6: this.param6,
         excep: this.excep,
         type: this.type,
         serviceSubtaskDetailList: [],
       };
+
       const arr = structuredClone(this.questionList);
       // arr.forEach((item) => {
       //   item.asrtext = JSON.stringify(item.questionResult);
@@ -413,13 +424,14 @@
       let form = {
         param1: this.taskid,
         param2: this.patid,
+        param6: this.param6,
         type: this.type,
         ivrTaskTemplateScriptVOList: [],
       };
       const arr = structuredClone(this.questionList);
       console.log(arr, "srr");
       arr.forEach((item, index) => {
-        if (item.scriptType == 3||item.scriptType == 4) return;
+        if (item.scriptType == 3 || item.scriptType == 4) return;
         var obj = item.ivrTaskScriptTargetoptionList.find(
           (items) => items.targetvalue == item.questionResult
         );
diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue
index 205e6d2..0dcd0dd 100644
--- a/src/views/outsideChainwtnew.vue
+++ b/src/views/outsideChainwtnew.vue
@@ -179,6 +179,7 @@
       isabnormal: 0,
       taskname: "",
       questionList: [],
+      param6:null,
       jsy: null,
       dialogVisible: false,
       Endornot: true,
@@ -231,6 +232,8 @@
             res.data.param3,
             res.data.param5
           );
+          this.param6 = res.data.param6;
+
         }
       });
     },
@@ -319,6 +322,7 @@
       let form = {
         param1: this.taskid,
         param2: this.patid,
+        param6: this.param6,
         excep: this.excep,
         isabnormal: this.isabnormal,
         serviceSubtaskDetailList: [],
@@ -349,6 +353,7 @@
       let form = {
         param1: this.taskid,
         param2: this.patid,
+        param6: this.param6,
         svyTaskTemplateScriptVOS: [],
       };
       const arr = structuredClone(this.questionList);
diff --git a/src/views/patient/propaganda/index.vue b/src/views/patient/propaganda/index.vue
index 2ca5f00..8385ba8 100644
--- a/src/views/patient/propaganda/index.vue
+++ b/src/views/patient/propaganda/index.vue
@@ -37,7 +37,7 @@
             placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="鎮h�呰寖鍥�" prop="status">
+        <!-- <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-select
             v-model="topqueryParams.searchscope"
             placeholder="璇烽�夋嫨鎮h�呰寖鍥�"
@@ -50,7 +50,7 @@
             >
             </el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-cascader
             v-model="topqueryParams.scopetype"
@@ -750,9 +750,9 @@
         pageNum: 1,
         pageSize: 10,
         serviceType: 4,
-        searchscope: 2,
+        searchscope: 3,
         sendstate: 2,
-         leaveldeptcodes: [],
+        leaveldeptcodes: [],
         leavehospitaldistrictcodes: [],
       },
       propss: { multiple: true },
@@ -775,7 +775,7 @@
           value: 4,
           label: "涓嶆墽琛�",
         },
-         {
+        {
           value: 5,
           label: "鍙戦�佸け璐�",
         },
@@ -783,7 +783,7 @@
           value: 6,
           label: "宸插畬鎴�",
         },
-         {
+        {
           value: 7,
           label: "瓒呮椂",
         },
diff --git a/src/views/patient/propaganda/particty.vue b/src/views/patient/propaganda/particty.vue
index f1849b8..9ef35f0 100644
--- a/src/views/patient/propaganda/particty.vue
+++ b/src/views/patient/propaganda/particty.vue
@@ -1309,7 +1309,7 @@
       };
       this.currenttype = this.$route.query.type;
       this.title = "闅忚鍐呭鍒楄〃";
-      this.tableLabel = this.tableLabelwj||[];
+      this.tableLabel = this.tableLabelwj || [];
       if (this.form.serviceType == 1) {
         this.checkboxlist = [
           {
@@ -1329,9 +1329,13 @@
             label: "寰俊鍏紬鍙�",
           },
         ];
-      } else if (this.form.serviceType == 6) {
+      } else if (
+        this.form.serviceType == 6 ||
+        this.form.serviceType == 14 ||
+        this.form.serviceType == 15
+      ) {
         this.checkboxlist = [
-           {
+          {
             value: "1",
             label: "浜哄伐",
           },
@@ -1482,8 +1486,8 @@
           this.leavehospitaldistrictcodes = [];
         }
         if (this.checkList) {
-          this.form.preachform = this.checkList.join(",")||[];
-          this.form.preachformList = this.selectedOrder||[];
+          this.form.preachform = this.checkList.join(",") || [];
+          this.form.preachformList = this.selectedOrder || [];
         } else {
           this.$modal.msgError("璇烽�夋嫨鏈嶅姟绫诲瀷");
           this.submitLoading = false;
@@ -1615,7 +1619,7 @@
           // 鐤剧梾
           this.getillness(this.form.libtemplateid);
 
-          selectInfoByCondition({id:this.form.templateid} ).then((res) => {
+          selectInfoByCondition({ id: this.form.templateid }).then((res) => {
             if (res.code == 200) {
               this.previewtf = true;
               this.previewtftype = 1;
@@ -1941,7 +1945,7 @@
               : [];
             this.overallCase = this.form.patTaskRelevances.concat();
             this.checkList = this.form.preachform.split(",") || [];
-            this.selectedOrder = this.form.preachformList||[];
+            this.selectedOrder = this.form.preachformList || [];
 
             this.overallCase.forEach((item) => {
               if (item.endtime) {
@@ -2288,7 +2292,7 @@
       });
     },
     checkSelectionChange(selectedValues, selectedOrder) {
-      this.selectedOrder = selectedValues||[];
+      this.selectedOrder = selectedValues || [];
       console.log("褰撳墠閫変腑:", selectedValues);
       console.log("閫変腑椤哄簭:", selectedOrder);
     },
@@ -2329,6 +2333,8 @@
             this.form.libtemplateid = this.objyl.id;
 
             this.objyl.isoperation = 1;
+            console.log(this.objyl, "this.objyl");
+
             this.objyl.ivrLibaTemplateScriptVOList.forEach((item) => {
               item.ivrTaskScriptTargetoptionList =
                 item.ivrLibaScriptTargetoptionList;
diff --git a/src/views/repositoryai/verbaltrick/index.vue b/src/views/repositoryai/verbaltrick/index.vue
index 29576cc..c55aa46 100644
--- a/src/views/repositoryai/verbaltrick/index.vue
+++ b/src/views/repositoryai/verbaltrick/index.vue
@@ -637,7 +637,7 @@
     handleAdd() {
       this.$router.push({
         path: "/knowledge/verbaltrick/particulars/",
-        query: { id: "", categoryid: this.queryParams.categoryid },
+        query: { id: "", assortid: this.queryParams.assortid },
       });
     },
     // 鍒嗙被鏍�-----------------------------------------
diff --git a/src/views/repositoryai/verbaltrick/particulars/index.vue b/src/views/repositoryai/verbaltrick/particulars/index.vue
index 44205a7..57d2f7a 100644
--- a/src/views/repositoryai/verbaltrick/particulars/index.vue
+++ b/src/views/repositoryai/verbaltrick/particulars/index.vue
@@ -814,7 +814,9 @@
       // 鏍�
       getbaltrickclassify({}).then((res) => {
         this.questionclass = res.rows;
-        console.log(res);
+       if (this.$route.query.assortid) {
+          this.indexform.assortid = Number(this.$route.query.assortid);
+        }
       });
     },
 
diff --git a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
index 3b71ece..546bc0c 100644
--- a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
@@ -26,28 +26,108 @@
               :summary-method="getInnerSummaries"
             >
               <el-table-column label="鍖荤敓濮撳悕" prop="drname" align="center" />
-              <el-table-column label="绉戝" width="120" prop="deptname" align="center" />
-              <el-table-column label="鍑洪櫌浜烘" prop="dischargeCount" align="center" />
-              <el-table-column label="鍑洪櫌浜烘" align="center" key="dischargeCount" prop="dischargeCount" />
-              <el-table-column label="鏃犻渶闅忚浜烘" align="center" width="100" key="nonFollowUp" prop="nonFollowUp" />
-              <el-table-column label="搴旈殢璁夸汉娆�" align="center" width="100" key="followUpNeeded" prop="followUpNeeded" />
+              <el-table-column
+                label="绉戝"
+                width="120"
+                prop="deptname"
+                align="center"
+              />
+              <el-table-column
+                label="鍑洪櫌浜烘"
+                prop="dischargeCount"
+                align="center"
+              />
+              <el-table-column
+                label="鍑洪櫌浜烘"
+                align="center"
+                key="dischargeCount"
+                prop="dischargeCount"
+              />
+              <el-table-column
+                label="鏃犻渶闅忚浜烘"
+                align="center"
+                width="100"
+                key="nonFollowUp"
+                prop="nonFollowUp"
+              />
+              <el-table-column
+                label="搴旈殢璁夸汉娆�"
+                align="center"
+                width="100"
+                key="followUpNeeded"
+                prop="followUpNeeded"
+              />
 
               <el-table-column align="center" label="棣栨鍑洪櫌闅忚">
-                <el-table-column label="闇�闅忚" align="center" key="needFollowUp" prop="needFollowUp" />
-                <el-table-column label="寰呴殢璁�" align="center" key="pendingFollowUp" prop="pendingFollowUp" />
-                <el-table-column label="闅忚鎴愬姛" align="center" key="followUpSuccess" prop="followUpSuccess" />
-                <el-table-column label="闅忚澶辫触" align="center" key="followUpFail" prop="followUpFail" />
-                <el-table-column label="闅忚鐜�" align="center" width="120" key="followUpRate" prop="followUpRate" />
-                <el-table-column v-if="orgname != '涓芥按甯備腑鍖婚櫌'" label="鍙婃椂鐜�" align="center" width="120" key="rate" prop="rate">
+                <el-table-column
+                  label="闇�闅忚"
+                  align="center"
+                  key="needFollowUp"
+                  prop="needFollowUp"
+                />
+                <el-table-column
+                  label="寰呴殢璁�"
+                  align="center"
+                  key="pendingFollowUp"
+                  prop="pendingFollowUp"
+                />
+                <el-table-column
+                  label="闅忚鎴愬姛"
+                  align="center"
+                  key="followUpSuccess"
+                  prop="followUpSuccess"
+                />
+                <el-table-column
+                  label="闅忚澶辫触"
+                  align="center"
+                  key="followUpFail"
+                  prop="followUpFail"
+                />
+                <el-table-column
+                  label="闅忚鐜�"
+                  align="center"
+                  width="120"
+                  key="followUpRate"
+                  prop="followUpRate"
+                />
+                <el-table-column
+                  v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
+                  label="鍙婃椂鐜�"
+                  align="center"
+                  width="120"
+                  key="rate"
+                  prop="rate"
+                >
                   <template slot-scope="scope">
-                    <el-button size="medium" type="text" @click="handleSeeDetails(scope.row)">
-                      <span class="button-zx">{{ (Number(scope.row.rate) * 100).toFixed(2) }}%</span>
+                    <el-button
+                      size="medium"
+                      type="text"
+                      @click="handleSeeDetails(scope.row)"
+                    >
+                      <span class="button-zx"
+                        >{{ (Number(scope.row.rate) * 100).toFixed(2) }}%</span
+                      >
                     </el-button>
                   </template>
                 </el-table-column>
-                <el-table-column label="浜哄伐" align="center" key="manual" prop="manual" />
-                <el-table-column label="鐭俊" align="center" key="sms" prop="sms" />
-                <el-table-column label="寰俊" align="center" key="weChat" prop="weChat" />
+                <el-table-column
+                  label="浜哄伐"
+                  align="center"
+                  key="manual"
+                  prop="manual"
+                />
+                <el-table-column
+                  label="鐭俊"
+                  align="center"
+                  key="sms"
+                  prop="sms"
+                />
+                <el-table-column
+                  label="寰俊"
+                  align="center"
+                  key="weChat"
+                  prop="weChat"
+                />
               </el-table-column>
             </el-table>
           </template>
@@ -64,65 +144,189 @@
           :show-overflow-tooltip="true"
           :sort-method="sortChineseNumber"
         />
-        <el-table-column label="绉戝" align="center" key="deptname" prop="deptname" :show-overflow-tooltip="true" />
-        <el-table-column label="鍑洪櫌浜烘" align="center" key="dischargeCount" prop="dischargeCount" />
-        <el-table-column label="鏃犻渶闅忚浜烘" align="center" width="100" key="nonFollowUp" prop="nonFollowUp" />
-        <el-table-column label="搴旈殢璁夸汉娆�" align="center" width="100" key="followUpNeeded" prop="followUpNeeded" />
+        <el-table-column
+          label="绉戝"
+          align="center"
+          key="deptname"
+          prop="deptname"
+          :show-overflow-tooltip="true"
+        />
+        <el-table-column
+          label="鍑洪櫌浜烘"
+          align="center"
+          key="dischargeCount"
+          prop="dischargeCount"
+        />
+        <el-table-column
+          label="鏃犻渶闅忚浜烘"
+          align="center"
+          width="100"
+          key="nonFollowUp"
+          prop="nonFollowUp"
+        />
+        <el-table-column
+          label="搴旈殢璁夸汉娆�"
+          align="center"
+          width="100"
+          key="followUpNeeded"
+          prop="followUpNeeded"
+        />
 
         <el-table-column align="center" label="棣栨鍑洪櫌闅忚">
-          <el-table-column label="闇�闅忚" align="center" key="needFollowUp" prop="needFollowUp">
+          <el-table-column
+            label="闇�闅忚"
+            align="center"
+            key="needFollowUp"
+            prop="needFollowUp"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'needFollowUpInfo', '闇�闅忚鍒楄〃')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  handleViewDetails(scope.row, 'needFollowUpInfo', '闇�闅忚鍒楄〃')
+                "
+              >
                 <span class="button-zx">{{ scope.row.needFollowUp }}</span>
               </el-button>
             </template>
           </el-table-column>
-          <el-table-column label="寰呴殢璁�" align="center" key="pendingFollowUp" prop="pendingFollowUp">
+          <el-table-column
+            label="寰呴殢璁�"
+            align="center"
+            key="pendingFollowUp"
+            prop="pendingFollowUp"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'pendingFollowUpInfo', '寰呴殢璁垮垪琛�')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  handleViewDetails(
+                    scope.row,
+                    'pendingFollowUpInfo',
+                    '寰呴殢璁垮垪琛�'
+                  )
+                "
+              >
                 <span class="button-zx">{{ scope.row.pendingFollowUp }}</span>
               </el-button>
             </template>
           </el-table-column>
-          <el-table-column label="闅忚鎴愬姛" align="center" key="followUpSuccess" prop="followUpSuccess">
+          <el-table-column
+            label="闅忚鎴愬姛"
+            align="center"
+            key="followUpSuccess"
+            prop="followUpSuccess"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'followUpSuccessInfo', '闅忚鎴愬姛鍒楄〃')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  handleViewDetails(
+                    scope.row,
+                    'followUpSuccessInfo',
+                    '闅忚鎴愬姛鍒楄〃'
+                  )
+                "
+              >
                 <span class="button-zx">{{ scope.row.followUpSuccess }}</span>
               </el-button>
             </template>
           </el-table-column>
-          <el-table-column label="闅忚澶辫触" align="center" key="followUpFail" prop="followUpFail">
+          <el-table-column
+            label="闅忚澶辫触"
+            align="center"
+            key="followUpFail"
+            prop="followUpFail"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'followUpFailInfo', '闅忚澶辫触鍒楄〃')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  handleViewDetails(
+                    scope.row,
+                    'followUpFailInfo',
+                    '闅忚澶辫触鍒楄〃'
+                  )
+                "
+              >
                 <span class="button-zx">{{ scope.row.followUpFail }}</span>
               </el-button>
             </template>
           </el-table-column>
-          <el-table-column label="闅忚鐜�" align="center" width="120" key="followUpRate" prop="followUpRate" />
-          <el-table-column v-if="orgname != '涓芥按甯備腑鍖婚櫌'" label="鍙婃椂鐜�" align="center" width="120" key="rate" prop="rate">
+          <el-table-column
+            label="闅忚鐜�"
+            align="center"
+            width="120"
+            key="followUpRate"
+            prop="followUpRate"
+          />
+          <el-table-column
+            v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
+            label="鍙婃椂鐜�"
+            align="center"
+            width="120"
+            key="rate"
+            prop="rate"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleSeeDetails(scope.row)">
-                <span class="button-zx">{{ (Number(scope.row.rate) * 100).toFixed(2) }}%</span>
+              <el-button
+                size="medium"
+                type="text"
+                @click="handleSeeDetails(scope.row)"
+              >
+                <span class="button-zx"
+                  >{{ (Number(scope.row.rate) * 100).toFixed(2) }}%</span
+                >
               </el-button>
             </template>
           </el-table-column>
-          <el-table-column label="浜哄伐" align="center" key="manual" prop="manual">
+          <el-table-column
+            label="浜哄伐"
+            align="center"
+            key="manual"
+            prop="manual"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'manualInfo', '浜哄伐闅忚鍒楄〃')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  handleViewDetails(scope.row, 'manualInfo', '浜哄伐闅忚鍒楄〃')
+                "
+              >
                 <span class="button-zx">{{ scope.row.manual }}</span>
               </el-button>
             </template>
           </el-table-column>
           <el-table-column label="鐭俊" align="center" key="sms" prop="sms">
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'smsInfo', '鐭俊闅忚鍒楄〃')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="handleViewDetails(scope.row, 'smsInfo', '鐭俊闅忚鍒楄〃')"
+              >
                 <span class="button-zx">{{ scope.row.sms }}</span>
               </el-button>
             </template>
           </el-table-column>
-          <el-table-column label="寰俊" align="center" key="weChat" prop="weChat">
+          <el-table-column
+            label="寰俊"
+            align="center"
+            key="weChat"
+            prop="weChat"
+          >
             <template slot-scope="scope">
-              <el-button size="medium" type="text" @click="handleViewDetails(scope.row, 'weChatInfo', '寰俊闅忚鍒楄〃')">
+              <el-button
+                size="medium"
+                type="text"
+                @click="
+                  handleViewDetails(scope.row, 'weChatInfo', '寰俊闅忚鍒楄〃')
+                "
+              >
                 <span class="button-zx">{{ scope.row.weChat }}</span>
               </el-button>
             </template>
@@ -130,13 +334,53 @@
         </el-table-column>
 
         <!-- 闅忚鎯呭喌鍒楋紙浠呬附姘村競涓尰闄㈡樉绀猴級 -->
-        <el-table-column v-if="orgname == '涓芥按甯備腑鍖婚櫌'" align="center" label="闅忚鎯呭喌">
-          <el-table-column label="姝e父璇煶" align="center" width="100" key="taskSituation1" prop="taskSituation1" />
-          <el-table-column label="鎮h�呮嫆鎺ユ垨鎷掕" align="center" width="100" key="taskSituation2" prop="taskSituation2" />
-          <el-table-column label="闈㈣鎴栬�呮帴璇�" align="center" width="100" key="taskSituation3" prop="taskSituation3" />
-          <el-table-column label="寰俊闅忚" align="center" width="100" key="taskSituation4" prop="taskSituation4" />
-          <el-table-column label="闅忚鐢佃瘽涓嶆纭�" align="center" width="100" key="taskSituation5" prop="taskSituation5" />
-          <el-table-column label="鍏朵粬鎯呭喌涓嶅疁闅忚" align="center" width="100" key="taskSituation6" prop="taskSituation6" />
+        <el-table-column
+          v-if="orgname == '涓芥按甯備腑鍖婚櫌'"
+          align="center"
+          label="闅忚鎯呭喌"
+        >
+          <el-table-column
+            label="姝e父璇煶"
+            align="center"
+            width="100"
+            key="taskSituation1"
+            prop="taskSituation1"
+          />
+          <el-table-column
+            label="鎮h�呮嫆鎺ユ垨鎷掕"
+            align="center"
+            width="100"
+            key="taskSituation2"
+            prop="taskSituation2"
+          />
+          <el-table-column
+            label="闈㈣鎴栬�呮帴璇�"
+            align="center"
+            width="100"
+            key="taskSituation3"
+            prop="taskSituation3"
+          />
+          <el-table-column
+            label="寰俊闅忚"
+            align="center"
+            width="100"
+            key="taskSituation4"
+            prop="taskSituation4"
+          />
+          <el-table-column
+            label="闅忚鐢佃瘽涓嶆纭�"
+            align="center"
+            width="100"
+            key="taskSituation5"
+            prop="taskSituation5"
+          />
+          <el-table-column
+            label="鍏朵粬鎯呭喌涓嶅疁闅忚"
+            align="center"
+            width="100"
+            key="taskSituation6"
+            prop="taskSituation6"
+          />
         </el-table-column>
       </el-table>
     </div>
@@ -149,163 +393,251 @@
 import { saveAs } from "file-saver";
 
 export default {
-  name: 'FirstFollowUp',
+  name: "FirstFollowUp",
   props: {
     queryParams: {
       type: Object,
-      required: true
+      required: true,
     },
     flatArrayhospit: {
       type: Array,
-      default: () => []
+      default: () => [],
     },
     flatArraydept: {
       type: Array,
-      default: () => []
+      default: () => [],
     },
     options: {
       type: Array,
-      default: () => []
+      default: () => [],
     },
     orgname: {
       type: String,
-      default: ''
-    }
+      default: "",
+    },
   },
   data() {
     return {
       tableData: [],
       loading: false,
       expands: [],
-      ids: []
-    }
+      ids: [],
+      patientqueryParams: { pn: 1, ps: 10 },
+    };
   },
   methods: {
     loadData() {
-      this.loading = true
+      this.loading = true;
       const params = {
         ...this.queryParams,
         visitCount: 1,
-        leavehospitaldistrictcodes: this.queryParams.leavehospitaldistrictcodes.includes("all")
-          ? this.getAllWardCodes()
-          : this.queryParams.leavehospitaldistrictcodes,
+        leavehospitaldistrictcodes:
+          this.queryParams.leavehospitaldistrictcodes.includes("all")
+            ? this.getAllWardCodes()
+            : this.queryParams.leavehospitaldistrictcodes,
         deptcodes: this.queryParams.deptcodes.includes("all")
           ? this.getAllDeptCodes()
-          : this.queryParams.deptcodes
-      }
+          : this.queryParams.deptcodes,
+      };
 
-      delete params.leavehospitaldistrictcodes.all
-      delete params.deptcodes.all
+      delete params.leavehospitaldistrictcodes.all;
+      delete params.deptcodes.all;
 
       getSfStatistics(params)
-        .then(response => {
-          this.tableData = this.customSort(response.data)
+        .then((response) => {
+          this.tableData = this.customSort(response.data);
         })
-        .catch(error => {
-          console.error("鑾峰彇棣栨闅忚鏁版嵁澶辫触:", error)
-          this.$message.error("鑾峰彇棣栨闅忚鏁版嵁澶辫触")
+        .catch((error) => {
+          console.error("鑾峰彇棣栨闅忚鏁版嵁澶辫触:", error);
+          this.$message.error("鑾峰彇棣栨闅忚鏁版嵁澶辫触");
         })
         .finally(() => {
-          this.loading = false
-        })
+          this.loading = false;
+        });
     },
 
     getAllWardCodes() {
       return this.flatArrayhospit
-        .filter(item => item.value !== 'all')
-        .map(item => item.value)
+        .filter((item) => item.value !== "all")
+        .map((item) => item.value);
     },
 
     getAllDeptCodes() {
       return this.flatArraydept
-        .filter(item => item.value !== 'all')
-        .map(item => item.value)
+        .filter((item) => item.value !== "all")
+        .map((item) => item.value);
     },
 
     customSort(data) {
       const order = [
-        "涓�","浜�","涓�","鍥�","浜�","鍏�","涓�","鍏�","涔�","鍗�",
-        "鍗佷竴","鍗佷簩","鍗佷笁","鍗佸洓","鍗佷簲","鍗佸叚","鍗佷竷","鍗佸叓","鍗佷節","浜屽崄",
-        "浜屽崄涓�","浜屽崄浜�","浜屽崄涓�","浜屽崄鍥�","浜屽崄浜�","浜屽崄鍏�","浜屽崄涓�","浜屽崄鍏�","浜屽崄涔�","涓夊崄",
-        "涓夊崄涓�","涓夊崄浜�","涓夊崄涓�","涓夊崄鍥�","涓夊崄浜�","涓夊崄鍏�","涓夊崄涓�","涓夊崄鍏�","涓夊崄涔�","鍥涘崄",
-        "鍥涘崄涓�","鍥涘崄浜�","鍥涘崄涓�","鍥涘崄鍥�","鍥涘崄浜�"
-      ]
+        "涓�",
+        "浜�",
+        "涓�",
+        "鍥�",
+        "浜�",
+        "鍏�",
+        "涓�",
+        "鍏�",
+        "涔�",
+        "鍗�",
+        "鍗佷竴",
+        "鍗佷簩",
+        "鍗佷笁",
+        "鍗佸洓",
+        "鍗佷簲",
+        "鍗佸叚",
+        "鍗佷竷",
+        "鍗佸叓",
+        "鍗佷節",
+        "浜屽崄",
+        "浜屽崄涓�",
+        "浜屽崄浜�",
+        "浜屽崄涓�",
+        "浜屽崄鍥�",
+        "浜屽崄浜�",
+        "浜屽崄鍏�",
+        "浜屽崄涓�",
+        "浜屽崄鍏�",
+        "浜屽崄涔�",
+        "涓夊崄",
+        "涓夊崄涓�",
+        "涓夊崄浜�",
+        "涓夊崄涓�",
+        "涓夊崄鍥�",
+        "涓夊崄浜�",
+        "涓夊崄鍏�",
+        "涓夊崄涓�",
+        "涓夊崄鍏�",
+        "涓夊崄涔�",
+        "鍥涘崄",
+        "鍥涘崄涓�",
+        "鍥涘崄浜�",
+        "鍥涘崄涓�",
+        "鍥涘崄鍥�",
+        "鍥涘崄浜�",
+      ];
 
       return data.sort((a, b) => {
         const getIndex = (name) => {
-          if (!name || typeof name !== "string") return -1
-          const chineseMatch = name.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/)
+          if (!name || typeof name !== "string") return -1;
+          const chineseMatch = name.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
           if (chineseMatch && chineseMatch[1]) {
-            return order.indexOf(chineseMatch[1])
+            return order.indexOf(chineseMatch[1]);
           }
-          const arabicMatch = name.match(/^(\d+)/)
+          const arabicMatch = name.match(/^(\d+)/);
           if (arabicMatch && arabicMatch[1]) {
-            const num = parseInt(arabicMatch[1], 10)
+            const num = parseInt(arabicMatch[1], 10);
             if (num >= 1 && num <= 45) {
-              return num - 1
+              return num - 1;
             }
           }
-          return -1
-        }
+          return -1;
+        };
 
-        const indexA = getIndex(a.leavehospitaldistrictname)
-        const indexB = getIndex(b.leavehospitaldistrictname)
+        const indexA = getIndex(a.leavehospitaldistrictname);
+        const indexB = getIndex(b.leavehospitaldistrictname);
 
         if (indexA === -1 && indexB === -1) {
-          return (a.leavehospitaldistrictname || "").localeCompare(b.leavehospitaldistrictname || "")
+          return (a.leavehospitaldistrictname || "").localeCompare(
+            b.leavehospitaldistrictname || ""
+          );
         }
-        if (indexA === -1) return 1
-        if (indexB === -1) return -1
-        return indexA - indexB
-      })
+        if (indexA === -1) return 1;
+        if (indexB === -1) return -1;
+        return indexA - indexB;
+      });
     },
 
     sortChineseNumber(aRow, bRow) {
-      const a = aRow.leavehospitaldistrictname
-      const b = bRow.leavehospitaldistrictname
+      const a = aRow.leavehospitaldistrictname;
+      const b = bRow.leavehospitaldistrictname;
 
       const chineseNumMap = {
-        涓�:1,浜�:2,涓�:3,鍥�:4,浜�:5,鍏�:6,涓�:7,鍏�:8,涔�:9,鍗�:10,
-        鍗佷竴:11,鍗佷簩:12,鍗佷笁:13,鍗佸洓:14,鍗佷簲:15,鍗佸叚:16,鍗佷竷:17,鍗佸叓:18,鍗佷節:19,浜屽崄:20,
-        浜屽崄涓�:21,浜屽崄浜�:22,浜屽崄涓�:23,浜屽崄鍥�:24,浜屽崄浜�:25,浜屽崄鍏�:26,浜屽崄涓�:27,浜屽崄鍏�:28,浜屽崄涔�:29,涓夊崄:30,
-        涓夊崄涓�:31,涓夊崄浜�:32,涓夊崄涓�:33,涓夊崄鍥�:34,涓夊崄浜�:35,涓夊崄鍏�:36,涓夊崄涓�:37,涓夊崄鍏�:38,涓夊崄涔�:39,鍥涘崄:40,
-        鍥涘崄涓�:41,鍥涘崄浜�:42,鍥涘崄涓�:43,鍥涘崄鍥�:44,鍥涘崄浜�:45
-      }
+        涓�: 1,
+        浜�: 2,
+        涓�: 3,
+        鍥�: 4,
+        浜�: 5,
+        鍏�: 6,
+        涓�: 7,
+        鍏�: 8,
+        涔�: 9,
+        鍗�: 10,
+        鍗佷竴: 11,
+        鍗佷簩: 12,
+        鍗佷笁: 13,
+        鍗佸洓: 14,
+        鍗佷簲: 15,
+        鍗佸叚: 16,
+        鍗佷竷: 17,
+        鍗佸叓: 18,
+        鍗佷節: 19,
+        浜屽崄: 20,
+        浜屽崄涓�: 21,
+        浜屽崄浜�: 22,
+        浜屽崄涓�: 23,
+        浜屽崄鍥�: 24,
+        浜屽崄浜�: 25,
+        浜屽崄鍏�: 26,
+        浜屽崄涓�: 27,
+        浜屽崄鍏�: 28,
+        浜屽崄涔�: 29,
+        涓夊崄: 30,
+        涓夊崄涓�: 31,
+        涓夊崄浜�: 32,
+        涓夊崄涓�: 33,
+        涓夊崄鍥�: 34,
+        涓夊崄浜�: 35,
+        涓夊崄鍏�: 36,
+        涓夊崄涓�: 37,
+        涓夊崄鍏�: 38,
+        涓夊崄涔�: 39,
+        鍥涘崄: 40,
+        鍥涘崄涓�: 41,
+        鍥涘崄浜�: 42,
+        鍥涘崄涓�: 43,
+        鍥涘崄鍥�: 44,
+        鍥涘崄浜�: 45,
+      };
 
       const getNumberFromText = (text) => {
-        if (!text || typeof text !== "string") return -1
-        const match = text.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/)
+        if (!text || typeof text !== "string") return -1;
+        const match = text.match(/^([涓�浜屼笁鍥涗簲鍏竷鍏節鍗乚+)/);
         if (match && match[1]) {
-          const chineseNum = match[1]
-          return chineseNumMap[chineseNum] !== undefined ? chineseNumMap[chineseNum] : -1
+          const chineseNum = match[1];
+          return chineseNumMap[chineseNum] !== undefined
+            ? chineseNumMap[chineseNum]
+            : -1;
         }
-        const arabicMatch = text.match(/^(\d+)/)
+        const arabicMatch = text.match(/^(\d+)/);
         if (arabicMatch && arabicMatch[1]) {
-          const num = parseInt(arabicMatch[1], 10)
-          return num >= 1 && num <= 45 ? num : -1
+          const num = parseInt(arabicMatch[1], 10);
+          return num >= 1 && num <= 45 ? num : -1;
         }
-        return -1
-      }
+        return -1;
+      };
 
-      const numA = getNumberFromText(a)
-      const numB = getNumberFromText(b)
+      const numA = getNumberFromText(a);
+      const numB = getNumberFromText(b);
 
       if (numA === -1 && numB === -1) {
-        return (a || "").localeCompare(b || "")
+        return (a || "").localeCompare(b || "");
       }
-      if (numA === -1) return 1
-      if (numB === -1) return -1
-      return numA - numB
+      if (numA === -1) return 1;
+      if (numB === -1) return -1;
+      return numA - numB;
     },
 
     getRowKey(row) {
-      return row.statisticaltype === 1 ? row.leavehospitaldistrictcode : row.deptcode
+      return row.statisticaltype === 1
+        ? row.leavehospitaldistrictcode
+        : row.deptcode;
     },
 
     handleRowClick(row) {
       if (this.expands.includes(this.getRowKey(row))) {
-        this.expands = []
-        return
+        this.expands = [];
+        return;
       }
 
       const params = {
@@ -315,226 +647,253 @@
           : this.queryParams.deptcodes,
         leavehospitaldistrictcodes: [row.leavehospitaldistrictcode],
         drcode: "1",
-        visitCount: 1
-      }
+        visitCount: 1,
+      };
 
-      delete params.leavehospitaldistrictcodes.all
-      delete params.deptcodes.all
+      delete params.leavehospitaldistrictcodes.all;
+      delete params.deptcodes.all;
 
       if (!row.doctorStats) {
-        this.loading = true
+        this.loading = true;
         getSfStatistics(params).then((res) => {
-          this.$set(row, "doctorStats", res.data)
-          this.expands = [this.getRowKey(row)]
-          this.loading = false
-        })
+          this.$set(row, "doctorStats", res.data);
+          this.expands = [this.getRowKey(row)];
+          this.loading = false;
+        });
       } else {
-        this.expands = [this.getRowKey(row)]
+        this.expands = [this.getRowKey(row)];
       }
     },
 
     getSummaries(param) {
-      const { columns, data } = param
-      const sums = []
+      const { columns, data } = param;
+      const sums = [];
 
       columns.forEach((column, index) => {
         if (index === 0) {
-          sums[index] = "鍚堣"
-          return
+          sums[index] = "鍚堣";
+          return;
         }
         if (index === 1 || index === 2) {
-          sums[index] = "/"
-          return
+          sums[index] = "/";
+          return;
         }
 
         if (column.property === "followUpRate" || column.property === "rate") {
           const percentageValues = data
             .map((item) => {
-              const value = item[column.property]
-              if (!value || value === "-" || value === "0%") return null
+              const value = item[column.property];
+              if (!value || value === "-" || value === "0%") return null;
               if (typeof value === "string" && value.includes("%")) {
-                const numValue = parseFloat(value.replace("%", "")) / 100
-                return isNaN(numValue) ? null : numValue
+                const numValue = parseFloat(value.replace("%", "")) / 100;
+                return isNaN(numValue) ? null : numValue;
               } else {
-                const numValue = parseFloat(value)
-                return isNaN(numValue) ? null : numValue
+                const numValue = parseFloat(value);
+                return isNaN(numValue) ? null : numValue;
               }
             })
-            .filter((value) => value !== null && value !== 0)
+            .filter((value) => value !== null && value !== 0);
 
           if (percentageValues.length > 0) {
-            const average = percentageValues.reduce((sum, value) => sum + value, 0) / percentageValues.length
-            sums[index] = (average * 100).toFixed(2) + "%"
+            const average =
+              percentageValues.reduce((sum, value) => sum + value, 0) /
+              percentageValues.length;
+            sums[index] = (average * 100).toFixed(2) + "%";
           } else {
-            sums[index] = "0.00%"
+            sums[index] = "0.00%";
           }
         } else {
           const values = data.map((item) => {
-            const value = item[column.property]
-            if (value === "-" || value === "" || value === null) return 0
-            return Number(value) || 0
-          })
+            const value = item[column.property];
+            if (value === "-" || value === "" || value === null) return 0;
+            return Number(value) || 0;
+          });
 
           if (!values.every((value) => isNaN(value))) {
-            sums[index] = values.reduce((prev, curr) => prev + curr, 0)
-            sums[index] = this.formatNumber(sums[index])
+            sums[index] = values.reduce((prev, curr) => prev + curr, 0);
+            sums[index] = this.formatNumber(sums[index]);
           } else {
-            sums[index] = "-"
+            sums[index] = "-";
           }
         }
-      })
+      });
 
-      return sums
+      return sums;
     },
 
     getInnerSummaries(param) {
-      const { columns, data } = param
-      const sums = []
+      const { columns, data } = param;
+      const sums = [];
 
       columns.forEach((column, index) => {
         if (index === 0) {
-          sums[index] = "灏忚"
-          return
+          sums[index] = "灏忚";
+          return;
         }
 
         if (column.property === "drname" || column.property === "deptname") {
-          sums[index] = "-"
-          return
+          sums[index] = "-";
+          return;
         }
 
         if (column.property === "followUpRate" || column.property === "rate") {
           const percentageValues = data
             .map((item) => {
-              const value = item[column.property]
-              if (!value || value === "-" || value === "0%") return null
+              const value = item[column.property];
+              if (!value || value === "-" || value === "0%") return null;
               if (typeof value === "string" && value.includes("%")) {
-                const numValue = parseFloat(value.replace("%", "")) / 100
-                return isNaN(numValue) ? null : numValue
+                const numValue = parseFloat(value.replace("%", "")) / 100;
+                return isNaN(numValue) ? null : numValue;
               } else {
-                const numValue = parseFloat(value)
-                return isNaN(numValue) ? null : numValue
+                const numValue = parseFloat(value);
+                return isNaN(numValue) ? null : numValue;
               }
             })
-            .filter((value) => value !== null && value !== 0)
+            .filter((value) => value !== null && value !== 0);
 
           if (percentageValues.length > 0) {
-            const average = percentageValues.reduce((sum, value) => sum + value, 0) / percentageValues.length
-            sums[index] = (average * 100).toFixed(2) + "%"
+            const average =
+              percentageValues.reduce((sum, value) => sum + value, 0) /
+              percentageValues.length;
+            sums[index] = (average * 100).toFixed(2) + "%";
           } else {
-            sums[index] = "0.00%"
+            sums[index] = "0.00%";
           }
         } else {
           const values = data.map((item) => {
-            const value = item[column.property]
-            if (value === "-" || value === "" || value === null) return 0
-            return Number(value) || 0
-          })
+            const value = item[column.property];
+            if (value === "-" || value === "" || value === null) return 0;
+            return Number(value) || 0;
+          });
 
           if (!values.every((value) => isNaN(value))) {
-            sums[index] = values.reduce((prev, curr) => prev + curr, 0)
-            sums[index] = this.formatNumber(sums[index])
+            sums[index] = values.reduce((prev, curr) => prev + curr, 0);
+            sums[index] = this.formatNumber(sums[index]);
           } else {
-            sums[index] = "-"
+            sums[index] = "-";
           }
         }
-      })
+      });
 
-      return sums
+      return sums;
     },
 
     formatNumber(num) {
-      if (isNaN(num)) return "-"
-      return Number.isInteger(num) ? num.toString() : num.toFixed(0)
+      if (isNaN(num)) return "-";
+      return Number.isInteger(num) ? num.toString() : num.toFixed(0);
     },
 
     handleSelectionChange(selection) {
-      this.ids = selection.map((item) => item.tagid)
+      this.ids = selection.map((item) => item.tagid);
     },
 
     handleViewDetails(row, infoKey, titleSuffix) {
-      const title = `${row.leavehospitaldistrictname || row.deptname}${titleSuffix}`
-      this.$emit('view-details', row[infoKey], title)
+      const title = `${
+        row.leavehospitaldistrictname || row.deptname
+      }${titleSuffix}`;
+      this.$emit("view-details", row[infoKey], title);
     },
 
     handleSeeDetails(row) {
-      this.$emit('see-details', row)
+      this.$emit("see-details", row);
     },
 
     async exportTable() {
       try {
-        let dateRangeString = ""
-        let sheetNameSuffix = ""
+        let dateRangeString = "";
+        let sheetNameSuffix = "";
 
-        if (this.queryParams.dateRange && this.queryParams.dateRange.length === 2) {
-          const startDateStr = this.queryParams.dateRange[0]
-          const endDateStr = this.queryParams.dateRange[1]
+        if (
+          this.queryParams.dateRange &&
+          this.queryParams.dateRange.length === 2
+        ) {
+          const startDateStr = this.queryParams.dateRange[0];
+          const endDateStr = this.queryParams.dateRange[1];
           const formatDateForDisplay = (dateTimeStr) => {
-            return dateTimeStr.split(" ")[0]
-          }
-          const startDateFormatted = formatDateForDisplay(startDateStr)
-          const endDateFormatted = formatDateForDisplay(endDateStr)
-          dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`
-          sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`
+            return dateTimeStr.split(" ")[0];
+          };
+          const startDateFormatted = formatDateForDisplay(startDateStr);
+          const endDateFormatted = formatDateForDisplay(endDateStr);
+          dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`;
+          sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
         } else {
-          const now = new Date()
-          const currentMonth = now.getMonth() + 1
-          dateRangeString = `${currentMonth}鏈坄
-          sheetNameSuffix = `${currentMonth}鏈坄
+          const now = new Date();
+          const currentMonth = now.getMonth() + 1;
+          dateRangeString = `${currentMonth}鏈坄;
+          sheetNameSuffix = `${currentMonth}鏈坄;
         }
 
-        const excelName = `棣栨鍑洪櫌闅忚缁熻琛╛${dateRangeString}.xlsx`
-        const worksheetName = `棣栨闅忚缁熻_${sheetNameSuffix}`
+        const excelName = `棣栨鍑洪櫌闅忚缁熻琛╛${dateRangeString}.xlsx`;
+        const worksheetName = `棣栨闅忚缁熻_${sheetNameSuffix}`;
 
         if (!this.tableData || this.tableData.length === 0) {
-          this.$message.warning("鏆傛棤棣栨闅忚鏁版嵁鍙鍑�")
-          return false
+          this.$message.warning("鏆傛棤棣栨闅忚鏁版嵁鍙鍑�");
+          return false;
         }
 
-        const workbook = new ExcelJS.Workbook()
-        const worksheet = workbook.addWorksheet(worksheetName)
+        const workbook = new ExcelJS.Workbook();
+        const worksheet = workbook.addWorksheet(worksheetName);
 
         // 鏋勫缓琛ㄦ牸
-        this.buildExportSheet(worksheet, sheetNameSuffix)
+        this.buildExportSheet(worksheet, sheetNameSuffix);
 
-        const buffer = await workbook.xlsx.writeBuffer()
+        const buffer = await workbook.xlsx.writeBuffer();
         const blob = new Blob([buffer], {
-          type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
-        })
-        saveAs(blob, excelName)
+          type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+        });
+        saveAs(blob, excelName);
 
-        this.$message.success("瀵煎嚭鎴愬姛")
-        return true
+        this.$message.success("瀵煎嚭鎴愬姛");
+        return true;
       } catch (error) {
-        console.error("瀵煎嚭澶辫触:", error)
-        this.$message.error(`瀵煎嚭澶辫触: ${error.message}`)
-        return false
+        console.error("瀵煎嚭澶辫触:", error);
+        this.$message.error(`瀵煎嚭澶辫触: ${error.message}`);
+        return false;
       }
     },
 
     buildExportSheet(worksheet, sheetNameSuffix) {
       const titleStyle = {
-        font: { name: "寰蒋闆呴粦", size: 16, bold: true, color: { argb: "FF000000" } },
-        fill: { type: "pattern", pattern: "solid", fgColor: { argb: "FFE6F3FF" } },
+        font: {
+          name: "寰蒋闆呴粦",
+          size: 16,
+          bold: true,
+          color: { argb: "FF000000" },
+        },
+        fill: {
+          type: "pattern",
+          pattern: "solid",
+          fgColor: { argb: "FFE6F3FF" },
+        },
         alignment: { vertical: "middle", horizontal: "center", wrapText: true },
         border: {
           top: { style: "thin", color: { argb: "FFD0D0D0" } },
           left: { style: "thin", color: { argb: "FFD0D0D0" } },
           bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
-          right: { style: "thin", color: { argb: "FFD0D0D0" } }
-        }
-      }
+          right: { style: "thin", color: { argb: "FFD0D0D0" } },
+        },
+      };
 
       const headerStyle = {
-        font: { name: "寰蒋闆呴粦", size: 11, bold: true, color: { argb: "FF000000" } },
-        fill: { type: "pattern", pattern: "solid", fgColor: { argb: "FFF5F7FA" } },
+        font: {
+          name: "寰蒋闆呴粦",
+          size: 11,
+          bold: true,
+          color: { argb: "FF000000" },
+        },
+        fill: {
+          type: "pattern",
+          pattern: "solid",
+          fgColor: { argb: "FFF5F7FA" },
+        },
         alignment: { vertical: "middle", horizontal: "center", wrapText: true },
         border: {
           top: { style: "thin", color: { argb: "FFD0D0D0" } },
           left: { style: "thin", color: { argb: "FFD0D0D0" } },
           bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
-          right: { style: "thin", color: { argb: "FFD0D0D0" } }
-        }
-      }
+          right: { style: "thin", color: { argb: "FFD0D0D0" } },
+        },
+      };
 
       const cellStyle = {
         font: { name: "瀹嬩綋", size: 10, color: { argb: "FF000000" } },
@@ -543,176 +902,243 @@
           top: { style: "thin", color: { argb: "FFD0D0D0" } },
           left: { style: "thin", color: { argb: "FFD0D0D0" } },
           bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
-          right: { style: "thin", color: { argb: "FFD0D0D0" } }
-        }
-      }
+          right: { style: "thin", color: { argb: "FFD0D0D0" } },
+        },
+      };
 
       const summaryStyle = {
-        font: { name: "瀹嬩綋", size: 10, bold: true, color: { argb: "FF409EFF" } },
-        fill: { type: "pattern", pattern: "solid", fgColor: { argb: "FFF5F7FA" } },
+        font: {
+          name: "瀹嬩綋",
+          size: 10,
+          bold: true,
+          color: { argb: "FF409EFF" },
+        },
+        fill: {
+          type: "pattern",
+          pattern: "solid",
+          fgColor: { argb: "FFF5F7FA" },
+        },
         alignment: { vertical: "middle", horizontal: "center" },
         border: {
           top: { style: "thin", color: { argb: "FFD0D0D0" } },
           left: { style: "thin", color: { argb: "FFD0D0D0" } },
           bottom: { style: "thin", color: { argb: "FFD0D0D0" } },
-          right: { style: "thin", color: { argb: "FFD0D0D0" } }
-        }
-      }
+          right: { style: "thin", color: { argb: "FFD0D0D0" } },
+        },
+      };
 
       // 娣诲姞鏍囬琛�
-      worksheet.mergeCells(1, 1, 1, 16)
-      const titleCell = worksheet.getCell(1, 1)
-      titleCell.value = `棣栨鍑洪櫌闅忚缁熻琛╛${sheetNameSuffix}`
-      titleCell.style = titleStyle
-      worksheet.getRow(1).height = 35
+      worksheet.mergeCells(1, 1, 1, 16);
+      const titleCell = worksheet.getCell(1, 1);
+      titleCell.value = `棣栨鍑洪櫌闅忚缁熻琛╛${sheetNameSuffix}`;
+      titleCell.style = titleStyle;
+      worksheet.getRow(1).height = 35;
 
       // 琛ㄥご
       const secondRowHeaders = [
-        "", "鍑洪櫌鐥呭尯", "绉戝", "鍑洪櫌浜烘", "鏃犻渶闅忚浜烘", "搴旈殢璁夸汉娆�",
-        "闇�闅忚", "寰呴殢璁�", "闅忚鎴愬姛", "闅忚澶辫触", "闅忚鐜�", "鍙婃椂鐜�", "浜哄伐", "鐭俊", "寰俊"
-      ]
+        "",
+        "鍑洪櫌鐥呭尯",
+        "绉戝",
+        "鍑洪櫌浜烘",
+        "鏃犻渶闅忚浜烘",
+        "搴旈殢璁夸汉娆�",
+        "闇�闅忚",
+        "寰呴殢璁�",
+        "闅忚鎴愬姛",
+        "闅忚澶辫触",
+        "闅忚鐜�",
+        "鍙婃椂鐜�",
+        "浜哄伐",
+        "鐭俊",
+        "寰俊",
+      ];
 
       secondRowHeaders.forEach((header, index) => {
-        const cell = worksheet.getCell(3, index + 1)
-        cell.value = header
-        cell.style = headerStyle
-      })
+        const cell = worksheet.getCell(3, index + 1);
+        cell.value = header;
+        cell.style = headerStyle;
+      });
 
       // 鍚堝苟鍗曞厓鏍�
       for (let i = 1; i <= 6; i++) {
-        worksheet.mergeCells(2, i, 3, i)
-        const cell = worksheet.getCell(2, i)
-        cell.style = headerStyle
+        worksheet.mergeCells(2, i, 3, i);
+        const cell = worksheet.getCell(2, i);
+        cell.style = headerStyle;
       }
 
-      worksheet.getCell(2, 1).value = ""
-      worksheet.getCell(2, 2).value = "鍑洪櫌鐥呭尯"
-      worksheet.getCell(2, 3).value = "绉戝"
-      worksheet.getCell(2, 4).value = "鍑洪櫌浜烘"
-      worksheet.getCell(2, 5).value = "鏃犻渶闅忚浜烘"
-      worksheet.getCell(2, 6).value = "搴旈殢璁夸汉娆�"
+      worksheet.getCell(2, 1).value = "";
+      worksheet.getCell(2, 2).value = "鍑洪櫌鐥呭尯";
+      worksheet.getCell(2, 3).value = "绉戝";
+      worksheet.getCell(2, 4).value = "鍑洪櫌浜烘";
+      worksheet.getCell(2, 5).value = "鏃犻渶闅忚浜烘";
+      worksheet.getCell(2, 6).value = "搴旈殢璁夸汉娆�";
 
-      worksheet.mergeCells(2, 7, 2, 15)
-      worksheet.getCell(2, 7).value = "棣栨鍑洪櫌闅忚"
-      worksheet.getCell(2, 7).style = headerStyle
+      worksheet.mergeCells(2, 7, 2, 15);
+      worksheet.getCell(2, 7).value = "棣栨鍑洪櫌闅忚";
+      worksheet.getCell(2, 7).style = headerStyle;
 
-      worksheet.getRow(2).height = 28
-      worksheet.getRow(3).height = 25
+      worksheet.getRow(2).height = 28;
+      worksheet.getRow(3).height = 25;
 
       // 鏁版嵁琛�
       this.tableData.forEach((item, rowIndex) => {
-        const dataRow = worksheet.addRow([
-          "",
-          item.leavehospitaldistrictname || "",
-          item.deptname || "",
-          item.dischargeCount || 0,
-          item.nonFollowUp || 0,
-          item.followUpNeeded || 0,
-          item.needFollowUp || 0,
-          item.pendingFollowUp || 0,
-          item.followUpSuccess || 0,
-          item.followUpFail || 0,
-          item.followUpRate || "0%",
-          item.rate ? (Number(item.rate) * 100).toFixed(2) + "%" : "0%",
-          item.manual || 0,
-          item.sms || 0,
-          item.weChat || 0
-        ], rowIndex + 4)
+        const dataRow = worksheet.addRow(
+          [
+            "",
+            item.leavehospitaldistrictname || "",
+            item.deptname || "",
+            item.dischargeCount || 0,
+            item.nonFollowUp || 0,
+            item.followUpNeeded || 0,
+            item.needFollowUp || 0,
+            item.pendingFollowUp || 0,
+            item.followUpSuccess || 0,
+            item.followUpFail || 0,
+            item.followUpRate || "0%",
+            item.rate ? (Number(item.rate) * 100).toFixed(2) + "%" : "0%",
+            item.manual || 0,
+            item.sms || 0,
+            item.weChat || 0,
+          ],
+          rowIndex + 4
+        );
 
         dataRow.eachCell((cell) => {
-          cell.style = cellStyle
-        })
-        dataRow.height = 24
-      })
+          cell.style = cellStyle;
+        });
+        dataRow.height = 24;
+      });
 
       // 鍚堣琛�
-      const summaries = this.getExportSummaries()
-      const summaryRow = worksheet.addRow(summaries)
+      const summaries = this.getExportSummaries();
+      const summaryRow = worksheet.addRow(summaries);
       summaryRow.eachCell((cell, colNumber) => {
-        cell.style = summaryStyle
+        cell.style = summaryStyle;
         if (colNumber === 1) {
-          cell.value = "鍚堣"
+          cell.value = "鍚堣";
         }
-      })
-      summaryRow.height = 28
+      });
+      summaryRow.height = 28;
 
       // 鍒楀
       worksheet.columns = [
-        { width: 8 }, { width: 20 }, { width: 15 }, { width: 12 }, { width: 12 }, { width: 12 },
-        { width: 10 }, { width: 10 }, { width: 10 }, { width: 10 }, { width: 12 }, { width: 12 },
-        { width: 8 }, { width: 8 }, { width: 8 }
-      ]
+        { width: 8 },
+        { width: 20 },
+        { width: 15 },
+        { width: 12 },
+        { width: 12 },
+        { width: 12 },
+        { width: 10 },
+        { width: 10 },
+        { width: 10 },
+        { width: 10 },
+        { width: 12 },
+        { width: 12 },
+        { width: 8 },
+        { width: 8 },
+        { width: 8 },
+      ];
     },
 
     getExportSummaries() {
-      const summaries = ["鍚堣", "/", "/", 0, 0, 0, 0, 0, 0, 0, "0%", "0%", 0, 0, 0]
+      const summaries = [
+        "鍚堣",
+        "/",
+        "/",
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        0,
+        "0%",
+        "0%",
+        0,
+        0,
+        0,
+      ];
 
       this.tableData.forEach((item) => {
-        summaries[3] += Number(item.dischargeCount) || 0
-        summaries[4] += Number(item.nonFollowUp) || 0
-        summaries[5] += Number(item.followUpNeeded) || 0
-        summaries[6] += Number(item.needFollowUp) || 0
-        summaries[7] += Number(item.pendingFollowUp) || 0
-        summaries[8] += Number(item.followUpSuccess) || 0
-        summaries[9] += Number(item.followUpFail) || 0
-        summaries[12] += Number(item.manual) || 0
-        summaries[13] += Number(item.sms) || 0
-        summaries[14] += Number(item.weChat) || 0
-      })
+        summaries[3] += Number(item.dischargeCount) || 0;
+        summaries[4] += Number(item.nonFollowUp) || 0;
+        summaries[5] += Number(item.followUpNeeded) || 0;
+        summaries[6] += Number(item.needFollowUp) || 0;
+        summaries[7] += Number(item.pendingFollowUp) || 0;
+        summaries[8] += Number(item.followUpSuccess) || 0;
+        summaries[9] += Number(item.followUpFail) || 0;
+        summaries[12] += Number(item.manual) || 0;
+        summaries[13] += Number(item.sms) || 0;
+        summaries[14] += Number(item.weChat) || 0;
+      });
 
       const followUpRateValues = this.tableData
         .map((item) => this.extractPercentageValue(item.followUpRate))
-        .filter((value) => value !== null)
+        .filter((value) => value !== null);
 
       const rateValues = this.tableData
         .map((item) => this.extractPercentageValue(item.rate))
-        .filter((value) => value !== null)
+        .filter((value) => value !== null);
 
       if (followUpRateValues.length > 0) {
-        const avgFollowUpRate = followUpRateValues.reduce((sum, val) => sum + val, 0) / followUpRateValues.length
-        summaries[10] = (avgFollowUpRate * 100).toFixed(2) + "%"
+        const avgFollowUpRate =
+          followUpRateValues.reduce((sum, val) => sum + val, 0) /
+          followUpRateValues.length;
+        summaries[10] = (avgFollowUpRate * 100).toFixed(2) + "%";
       }
 
       if (rateValues.length > 0) {
-        const avgRate = rateValues.reduce((sum, val) => sum + val, 0) / rateValues.length
-        summaries[11] = (avgRate * 100).toFixed(2) + "%"
+        const avgRate =
+          rateValues.reduce((sum, val) => sum + val, 0) / rateValues.length;
+        summaries[11] = (avgRate * 100).toFixed(2) + "%";
       }
 
-      summaries[3] = this.formatNumber(summaries[3])
-      summaries[4] = this.formatNumber(summaries[4])
-      summaries[5] = this.formatNumber(summaries[5])
-      summaries[6] = this.formatNumber(summaries[6])
-      summaries[7] = this.formatNumber(summaries[7])
-      summaries[8] = this.formatNumber(summaries[8])
-      summaries[9] = this.formatNumber(summaries[9])
-      summaries[12] = this.formatNumber(summaries[12])
-      summaries[13] = this.formatNumber(summaries[13])
-      summaries[14] = this.formatNumber(summaries[14])
+      summaries[3] = this.formatNumber(summaries[3]);
+      summaries[4] = this.formatNumber(summaries[4]);
+      summaries[5] = this.formatNumber(summaries[5]);
+      summaries[6] = this.formatNumber(summaries[6]);
+      summaries[7] = this.formatNumber(summaries[7]);
+      summaries[8] = this.formatNumber(summaries[8]);
+      summaries[9] = this.formatNumber(summaries[9]);
+      summaries[12] = this.formatNumber(summaries[12]);
+      summaries[13] = this.formatNumber(summaries[13]);
+      summaries[14] = this.formatNumber(summaries[14]);
 
-      return summaries
+      return summaries;
     },
 
     extractPercentageValue(value) {
-      if (!value) return null
+      if (!value) return null;
       if (typeof value === "string" && value.includes("%")) {
-        const num = parseFloat(value.replace("%", ""))
-        return isNaN(num) ? null : num / 100
+        const num = parseFloat(value.replace("%", ""));
+        return isNaN(num) ? null : num / 100;
       }
-      const num = parseFloat(value)
-      return isNaN(num) ? null : num
+      const num = parseFloat(value);
+      return isNaN(num) ? null : num;
     },
 
     selectTimelyRate(row, dateRange) {
-      const params = {
-        ...this.patientqueryParams,
-        starttime: this.parseTime(dateRange[0]),
-        endtime: this.parseTime(dateRange[1]),
-        deptcode: row.deptcode
-      }
-      return selectTimelyRate(params)
-    }
-  }
-}
+      console.log(row, dateRange, 88);
+
+      // const params = {
+      //   ...this.patientqueryParams,
+      //   starttime: this.parseTime(dateRange[0]),
+      //   endtime: this.parseTime(dateRange[1]),
+      //   deptcode: row.deptcode,
+      // };
+      this.patientqueryParams.starttime = this.parseTime(dateRange[0]);
+      this.patientqueryParams.endtime = this.parseTime(dateRange[1]);
+      this.patientqueryParams.deptcode = row.deptcode;
+      return selectTimelyRate(this.patientqueryParams);
+    },
+    selectTimelyRates(dateRange) {
+      this.patientqueryParams.pn = dateRange.pageNum;
+      this.patientqueryParams.ps = dateRange.pageSize;
+
+      return selectTimelyRate(this.patientqueryParams);
+    },
+  },
+};
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/sfstatistics/percentage/components/TimelyRateDialog.vue b/src/views/sfstatistics/percentage/components/TimelyRateDialog.vue
index e3122a4..f58d55c 100644
--- a/src/views/sfstatistics/percentage/components/TimelyRateDialog.vue
+++ b/src/views/sfstatistics/percentage/components/TimelyRateDialog.vue
@@ -115,8 +115,8 @@
           <pagination
             v-show="total > 0"
             :total="total"
-            :page.sync="queryParams.pn"
-            :limit.sync="queryParams.ps"
+            :page.sync="queryParams.pageNum"
+            :limit.sync="queryParams.pageSize"
             @pagination="handlePagination"
           />
         </div>
@@ -126,13 +126,10 @@
 </template>
 
 <script>
-import Pagination from '@/components/Pagination'
 
 export default {
   name: 'TimelyRateDialog',
-  components: {
-    Pagination
-  },
+
   dicts: ['sys_yujing', 'sys_suggest'],
   props: {
     visible: {
@@ -154,8 +151,8 @@
     queryParams: {
       type: Object,
       default: () => ({
-        pn: 1,
-        ps: 10
+        pageNum: 1,
+        pageSize: 10
       })
     }
   },
@@ -182,8 +179,8 @@
 
     resetQuery() {
       this.localQueryParams = {
-        pn: 1,
-        ps: 10,
+        pageNum: 1,
+        pageSize: 10,
         name: '',
         leavediagname: ''
       }
@@ -191,8 +188,11 @@
     },
 
     handlePagination(pagination) {
-      this.localQueryParams.pn = pagination.page
-      this.localQueryParams.ps = pagination.limit
+      this.localQueryParams.pageNum = pagination.page
+      this.localQueryParams.pageSize = pagination.limit
+      console.log(pagination,'pagination');
+      console.log(this.localQueryParams,'this.localQueryParams');
+
       this.$emit('search', this.localQueryParams)
     },
 
diff --git a/src/views/sfstatistics/percentage/index.vue b/src/views/sfstatistics/percentage/index.vue
index 911156a..4474fbb 100644
--- a/src/views/sfstatistics/percentage/index.vue
+++ b/src/views/sfstatistics/percentage/index.vue
@@ -184,13 +184,14 @@
       logsheetlist: [],
       Seedloading: false,
       patientqueryParams: {
-        pn: 1,
-        ps: 10
+        pageNum: 1,
+        pageSize: 10
       }
     }
   },
   created() {
     this.getDeptTree()
+    this.loadCurrentTabData()
   },
   methods: {
     getDeptTree() {
@@ -305,7 +306,9 @@
     },
 
     Seedetailstion() {
-      this.$refs.firstFollowUp.selectTimelyRate(this.patientqueryParams)
+      console.log(this.patientqueryParams);
+
+      this.$refs.firstFollowUp.selectTimelyRates(this.patientqueryParams)
         .then(response => {
           this.logsheetlist = response.data.detail
           this.patienttotal = response.data.total

--
Gitblit v1.9.3