From d3c60e18b95b50751f8088fa2d23cd8ff7f173bc Mon Sep 17 00:00:00 2001
From: WXL (wul) <wl_5969728@163.com>
Date: 星期三, 01 七月 2026 11:05:17 +0800
Subject: [PATCH] 测试完成

---
 src/views/repositoryai/verbaltrick/index.vue                    |    2 
 src/views/sfstatistics/percentage/components/SecondFollowUp.vue |  302 ++++---
 vue.config.js                                                   |    4 
 src/components/Assistant/index.vue                              |  402 +++++++++
 src/api/smartor/smstemplet.js                                   |    6 
 src/views/knowledge/questionbank/index.vue                      |    2 
 src/views/sfstatistics/percentage/components/FirstFollowUp.vue  |  298 ++++---
 随访通用 (2).zip                                                    |    0 
 /dev/null                                                       |    0 
 src/views/knowledge/questionnaire/smsConfig/index.vue           | 1015 +++++++-----------------
 src/views/followvisit/HistoricalFollow/index.vue                |   42 
 随访通用.zip                                                        |    0 
 src/views/followvisit/record/detailpage/index.vue               |   11 
 src/views/repositoryai/verbaltrick/particulars/index.vue        |   65 
 src/views/knowledge/questionbank/particulars/index.vue          |    1 
 src/views/followvisit/record/detailpage/MergeAndModify.vue      |    8 
 外链.zip                                                          |    0 
 src/views/repositoryai/intention/index.vue                      |    2 
 src/views/followvisit/discharge/index.vue                       |  166 +++
 src/views/outsideChainwtnew.vue                                 |   78 +
 20 files changed, 1,333 insertions(+), 1,071 deletions(-)

diff --git "a/dist \0502\051.zip" "b/dist \0502\051.zip"
deleted file mode 100644
index db4bc7e..0000000
--- "a/dist \0502\051.zip"
+++ /dev/null
Binary files differ
diff --git a/dist.zip b/dist.zip
deleted file mode 100644
index b42bd7e..0000000
--- a/dist.zip
+++ /dev/null
Binary files differ
diff --git a/src/api/smartor/smstemplet.js b/src/api/smartor/smstemplet.js
index 9fce27f..b761845 100644
--- a/src/api/smartor/smstemplet.js
+++ b/src/api/smartor/smstemplet.js
@@ -4,8 +4,8 @@
 export function listSmstemplet(query) {
   return request({
     url: '/smartor/smstemplet/list',
-    method: 'get',
-    params: query
+    method: 'post',
+    data: query
   })
 }
 
@@ -20,7 +20,7 @@
 // 鏂板鐭俊妯℃澘
 export function addSmstemplet(data) {
   return request({
-    url: '/smartor/smstemplet',
+    url: '/smartor/smstemplet/add',
     method: 'post',
     data: data
   })
diff --git a/src/components/Assistant/index.vue b/src/components/Assistant/index.vue
index e7c16a4..51d7c7b 100644
--- a/src/components/Assistant/index.vue
+++ b/src/components/Assistant/index.vue
@@ -175,29 +175,99 @@
     <el-dialog
       title="鐭俊鍙戦��"
       :visible.sync="smsDialogVisible"
-      width="500px"
+      width="800px"
       :close-on-click-modal="false"
       append-to-body
     >
       <el-form ref="smsForm" :model="smsForm" label-width="100px">
         <el-form-item label="鎮h�呭悕绉�">
-          <el-input v-model="smsForm.sendname" readonly></el-input>
+          <el-input v-model="smsForm.sendname"></el-input>
         </el-form-item>
         <el-form-item label="骞撮緞">
-          <el-input v-model="smsForm.age" readonly></el-input>
+          <el-input v-model="smsForm.age"></el-input>
         </el-form-item>
         <el-form-item label="鐢佃瘽">
-          <el-input v-model="smsForm.telcode" readonly></el-input>
+          <el-input v-model="smsForm.telcode"></el-input>
         </el-form-item>
         <el-form-item label="绉戝">
-          <el-input v-model="smsForm.deptname" readonly></el-input>
+          <el-input v-model="smsForm.deptname"></el-input>
         </el-form-item>
         <el-form-item label="鐥呭尯">
-          <el-input
-            v-model="smsForm.leavehospitaldistrictname"
-            readonly
-          ></el-input>
+          <el-input v-model="smsForm.leavehospitaldistrictname"></el-input>
         </el-form-item>
+        <!-- 鐭俊鍙戦�佸璇濇 - 妯℃澘閫夋嫨鍖哄煙锛堝寮虹増锛� -->
+        <el-form-item label="閫夋嫨妯℃澘">
+          <el-row :gutter="10">
+            <el-col :span="7">
+              <el-select
+                v-model="templateFilterDept"
+                placeholder="鎸夌瀹�"
+                filterable
+                clearable
+                style="width: 100%"
+                @change="filterTemplates"
+              >
+                <el-option
+                  v-for="dept in departmentOptions"
+                  :key="dept.value"
+                  :label="dept.label"
+                  :value="dept.value"
+                />
+              </el-select>
+            </el-col>
+            <el-col :span="7">
+              <el-select
+                v-model="templateFilterWard"
+                placeholder="鎸夌梾鍖�"
+                filterable
+                clearable
+                style="width: 100%"
+                @change="filterTemplates"
+              >
+                <el-option
+                  v-for="ward in wardOptions"
+                  :key="ward.value"
+                  :label="ward.label"
+                  :value="ward.value"
+                />
+              </el-select>
+            </el-col>
+            <el-col :span="10">
+              <el-select
+                v-model="selectedTemplateId"
+                placeholder="璇烽�夋嫨鐭俊妯℃澘"
+                filterable
+                clearable
+                style="width: 100%"
+                @change="handleTemplateSelect"
+              >
+                <el-option
+                  v-for="tmpl in filteredTemplateOptions"
+                  :key="tmpl.templetid"
+                  :label="`銆�${tmpl.templetno}銆�${tmpl.templetname}`"
+                  :value="tmpl.templetid"
+                >
+                  <span style="float: left">{{ tmpl.templetname }}</span>
+                  <span style="float: right; color: #909399; font-size: 12px">
+                    {{ tmpl.deptName || "閫氱敤" }} /
+                    {{ tmpl.wardName || "鍏ㄩ儴" }}
+                  </span>
+                </el-option>
+              </el-select>
+            </el-col>
+            <el-col :span="6">
+              <el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                @click="openQuickCreateTemplate"
+              >
+                鏂板缓
+              </el-button>
+            </el-col>
+          </el-row>
+        </el-form-item>
+
         <el-form-item label="鐭俊鍐呭">
           <el-input
             type="textarea"
@@ -215,13 +285,109 @@
           纭鍙戦��
         </el-button>
       </div>
+      <!-- 鍐呭祵锛氬揩閫熸柊寤烘ā鏉垮璇濇 -->
+      <!-- 蹇�熸柊寤烘ā鏉垮璇濇锛堝寮虹増锛� -->
+      <el-dialog
+        title="鏂板缓鐭俊妯℃澘"
+        :visible.sync="quickCreateVisible"
+        width="500px"
+        append-to-body
+        :close-on-click-modal="false"
+      >
+        <el-form
+          :model="quickTemplateForm"
+          :rules="quickTemplateRules"
+          ref="quickTemplateForm"
+          label-width="90px"
+        >
+          <el-form-item label="妯℃澘缂栧彿" prop="templetno">
+            <el-input
+              v-model="quickTemplateForm.templetno"
+              placeholder="璇疯緭鍏ユā鏉跨紪鍙�"
+            />
+          </el-form-item>
+          <el-form-item label="妯℃澘鍚嶇О" prop="templetname">
+            <el-input
+              v-model="quickTemplateForm.templetname"
+              placeholder="璇疯緭鍏ユā鏉垮悕绉�"
+            />
+          </el-form-item>
+          <el-form-item label="鎵�灞炵瀹�">
+            <el-select
+              v-model="quickTemplateForm.deptCode"
+              placeholder="璇烽�夋嫨绉戝"
+              filterable
+              clearable
+              style="width: 100%"
+              @change="
+                (val) => {
+                  const dept = departmentOptions.find((d) => d.value === val);
+                  quickTemplateForm.deptName = dept ? dept.label : '';
+                }
+              "
+            >
+              <el-option
+                v-for="dept in departmentOptions"
+                :key="dept.value"
+                :label="dept.label"
+                :value="dept.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="鎵�灞炵梾鍖�">
+            <el-select
+              v-model="quickTemplateForm.wardCode"
+              placeholder="璇烽�夋嫨鐥呭尯"
+              filterable
+              clearable
+              style="width: 100%"
+            >
+              <el-option
+                v-for="ward in wardOptions"
+                :key="ward.value"
+                :label="ward.label"
+                :value="ward.value"
+              />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="妯℃澘鍐呭" prop="templetcontent">
+            <el-input
+              v-model="quickTemplateForm.templetcontent"
+              type="textarea"
+              :rows="4"
+              placeholder="璇疯緭鍏ョ煭淇℃ā鏉垮唴瀹�"
+              maxlength="500"
+              show-word-limit
+            />
+          </el-form-item>
+        </el-form>
+        <div slot="footer">
+          <el-button @click="quickCreateVisible = false">鍙� 娑�</el-button>
+          <el-button
+            type="primary"
+            @click="submitQuickTemplate"
+            :loading="quickCreateLoading"
+          >
+            淇濆瓨骞朵娇鐢�
+          </el-button>
+        </div>
+      </el-dialog>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import { getCurrentUserServiceSubtaskCount } from "@/api/AiCentre/index";
-import { sendMsg } from "@/api/AiCentre/index";
+import {
+  getCurrentUserServiceSubtaskCount,
+  sendMsg,
+} from "@/api/AiCentre/index";
+import {
+  listSmstemplet,
+  getSmstemplet,
+  addSmstemplet,
+  updateSmstemplet,
+  delSmstemplet,
+} from "@/api/smartor/smstemplet";
 export default {
   name: "FloatBall",
 
@@ -269,6 +435,34 @@
       hideTimer: null,
       updateTime: "",
       roles: null,
+      templateOptions: [], // 妯℃澘涓嬫媺鍒楄〃
+      selectedTemplateId: "", // 閫変腑鐨勬ā鏉縄D
+      templateLoading: false, // 妯℃澘鍒楄〃鍔犺浇鐘舵��
+      // 妯℃澘绛涢��
+      templateFilterDept: "",
+      templateFilterWard: "", // 鏂板锛氱梾鍖虹瓫閫�
+      filteredTemplateOptions: [],
+
+      // 绉戝閫夐」锛堜粠 Vuex 鑾峰彇锛�
+      departmentOptions: [],
+      // 鏂板锛氱梾鍖洪�夐」锛堜粠 Vuex 鑾峰彇锛�
+      wardOptions: [],
+      // 蹇�熸柊寤烘ā鏉�
+      quickCreateVisible: false,
+      quickCreateLoading: false,
+      quickTemplateForm: {
+        templetno: "",
+        templetname: "",
+        templetcontent: "",
+      },
+      quickTemplateRules: {
+        templetname: [
+          { required: true, message: "璇疯緭鍏ユā鏉垮悕绉�", trigger: "blur" },
+        ],
+        templetcontent: [
+          { required: true, message: "璇疯緭鍏ユā鏉垮唴瀹�", trigger: "blur" },
+        ],
+      },
       // 鐭俊鍙戦�佸璇濇
       // smsDialogVisible: false,
       smsLoading: false, // 鉁� 鏂板鍔犺浇鐘舵��
@@ -367,19 +561,25 @@
   },
   watch: {
     // 鉁� 鐩戝惉 Vuex 瀵硅瘽妗嗙姸鎬�
-    "$store.state.sms.smsDialogVisible"(val) {
-      if (val) {
-        const patientData = this.$store.state.sms.patientData;
-        this.smsForm = { ...patientData };
-        this.smsContent = this.$store.state.sms.smsTemplate || "";
+    "$store.state.sms.smsDialogVisible": {
+      handler(val) {
+        if (val) {
+          const patientData = this.$store.state.sms.patientData;
+          this.smsForm = { ...patientData };
+          this.smsContent = this.$store.state.sms.smsTemplate || "";
 
-        // 灞曞紑鎮诞鐞�
-        if (!this.isExpanded) {
-          this.isExpanded = true;
-          this.isHidden = false;
-          clearTimeout(this.hideTimer);
+          // 灞曞紑鎮诞鐞�
+          if (!this.isExpanded) {
+            this.isExpanded = true;
+            this.isHidden = false;
+            clearTimeout(this.hideTimer);
+          }
+
+          // 鈽呪槄鈽� 鍏抽敭淇锛氬湪杩欓噷鍒濆鍖栨ā鏉跨浉鍏虫暟鎹� 鈽呪槄鈽�
+          this.initTemplateData();
         }
-      }
+      },
+      immediate: false,
     },
   },
   mounted() {
@@ -404,6 +604,33 @@
   },
 
   methods: {
+    initTemplateData() {
+      // 鍒濆鍖栫瀹ら�夐」
+      if (this.$store.getters.belongDepts) {
+        this.departmentOptions = this.$store.getters.belongDepts.map(
+          (dept) => ({
+            label: dept.deptName,
+            value: dept.deptCode,
+          })
+        );
+      }
+
+      // 鈽呪槄鈽� 鏂板锛氬垵濮嬪寲鐥呭尯閫夐」 鈽呪槄鈽�
+      if (this.$store.getters.belongWards) {
+        this.wardOptions = this.$store.getters.belongWards.map((ward) => ({
+          label: ward.districtName,
+          value: ward.districtCode,
+        }));
+      }
+
+      // 閲嶇疆绛涢��
+      this.templateFilterDept = "";
+      this.templateFilterWard = ""; // 鏂板
+      this.selectedTemplateId = "";
+
+      // 鍔犺浇妯℃澘鍒楄〃
+      this.loadTemplates();
+    },
     toggleExpand() {
       this.isExpanded = !this.isExpanded;
       if (this.isExpanded) {
@@ -412,7 +639,85 @@
         this.updateStats();
       }
     },
+    async loadTemplates() {
+      this.templateLoading = true;
+      try {
+        // const { listSmstemplet } = await import("@/api/smartor/smstemplet");
+        const res = await listSmstemplet({ pageNum: 1, pageSize: 999 });
+        this.templateOptions = res.rows || [];
+        this.filterTemplates(); // 搴旂敤绛涢��
+      } catch (error) {
+        console.error("鍔犺浇鐭俊妯℃澘澶辫触:", error);
+        this.templateOptions = [];
+        this.filteredTemplateOptions = [];
+      } finally {
+        this.templateLoading = false;
+      }
+    },
+    handleTemplateSelect(templateId) {
+      if (!templateId) {
+        this.smsContent = "";
+        return;
+      }
+      const selected = this.templateOptions.find(
+        (t) => t.templetid === templateId
+      );
+      if (selected) {
+        this.smsContent = selected.templetcontent || "";
+      }
+    },
+    openQuickCreateTemplate() {
+      this.quickTemplateForm = {
+        templetno: "",
+        templetname: "",
+        templetcontent: "",
+      };
+      this.quickCreateVisible = true;
+      this.$nextTick(() => {
+        if (this.$refs.quickTemplateForm) {
+          this.$refs.quickTemplateForm.clearValidate();
+        }
+      });
+    },
+    /**
+     * 鎻愪氦蹇�熸柊寤烘ā鏉�
+     */
+    async submitQuickTemplate() {
+      this.$refs.quickTemplateForm.validate(async (valid) => {
+        if (!valid) return;
 
+        this.quickCreateLoading = true;
+        try {
+          // const { addSmstemplet } = await import("@/api/smartor/smstemplet");
+          const res = await addSmstemplet(this.quickTemplateForm);
+
+          if (res.code === 200) {
+            this.$modal.msgSuccess("妯℃澘鍒涘缓鎴愬姛");
+
+            // 鍒锋柊妯℃澘鍒楄〃
+            await this.loadTemplates();
+
+            // 鑷姩閫変腑鍒氬垱寤虹殑妯℃澘
+            const newTmpl = this.templateOptions.find(
+              (t) => t.templetname === this.quickTemplateForm.templetname
+            );
+            if (newTmpl) {
+              this.selectedTemplateId = newTmpl.templetid;
+              this.smsContent = newTmpl.templetcontent;
+            }
+
+            this.quickCreateVisible = false;
+          } else {
+            this.$modal.msgError(res.msg || "鍒涘缓澶辫触");
+          }
+        } catch (error) {
+          console.error("鍒涘缓妯℃澘澶辫触:", error);
+          this.$modal.msgError("鍒涘缓澶辫触锛岃绋嶅悗閲嶈瘯");
+        } finally {
+          this.quickCreateLoading = false;
+        }
+      });
+    },
     handleMouseEnter() {
       this.isHovering = true;
       if (this.autoHide) {
@@ -542,18 +847,54 @@
       }
     },
     // 鎵撳紑鐭俊鍙戦�佸璇濇
-    openSmsDialog() {
-      // 浠庢偓娴悆鍐呴儴鎵撳紑鏃讹紝娓呯┖琛ㄥ崟锛堝洜涓烘病鏈夐�変腑鎮h�咃級
+    /**
+     * 鏀归�犲師鏈夌殑 openSmsDialog 鏂规硶
+     */
+    openSmsDialog(patientData = {}) {
+      // 閲嶇疆绛涢��
+      this.templateFilterDept = "";
+
+      // 閲嶇疆閫夋嫨
+      this.selectedTemplateId = "";
+      this.smsContent = patientData.smsTemplate || "";
+
+      // 鍔犺浇妯℃澘鍒楄〃
+      this.loadTemplates();
+
+      // 鎵撳紑瀵硅瘽妗嗭紙閫氳繃 Vuex锛�
       this.$store.dispatch("sms/openSmsDialog", {
-        name: "",
-        age: "",
-        phone: "",
-        deptName: "",
-        wardName: "",
-        smsTemplate: "",
+        name: patientData.name || "",
+        age: patientData.age || "",
+        phone: patientData.phone || "",
+        deptName: patientData.deptName || "",
+        wardName: patientData.wardName || "",
+        smsTemplate: patientData.smsTemplate || "",
       });
     },
+    // 鏂板锛氱瓫閫夋ā鏉�
+    filterTemplates() {
+      let filtered = [...this.templateOptions];
 
+      // 鎸夌瀹ょ瓫閫�
+      if (this.templateFilterDept) {
+        filtered = filtered.filter(
+          (tmpl) => tmpl.deptCode === this.templateFilterDept || !tmpl.deptCode
+        );
+      }
+
+      // 鈽呪槄鈽� 鏂板锛氭寜鐥呭尯绛涢�� 鈽呪槄鈽�
+      if (this.templateFilterWard) {
+        filtered = filtered.filter(
+          (tmpl) => tmpl.wardCode === this.templateFilterWard || !tmpl.wardCode
+        );
+      }
+
+      this.filteredTemplateOptions = filtered;
+
+      // 娓呯┖宸查��
+      this.selectedTemplateId = "";
+      this.smsContent = "";
+    },
     // 鍙戦�佺煭淇�
     async sendSms() {
       if (!this.smsContent.trim()) {
@@ -586,6 +927,7 @@
         this.$modal.msgError("鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇�");
       } finally {
         this.smsLoading = false;
+        this.selectedTemplateId = "";
       }
     },
     async updateStats() {
diff --git a/src/views/followvisit/HistoricalFollow/index.vue b/src/views/followvisit/HistoricalFollow/index.vue
index 28b3354..ae8f453 100644
--- a/src/views/followvisit/HistoricalFollow/index.vue
+++ b/src/views/followvisit/HistoricalFollow/index.vue
@@ -10,7 +10,7 @@
         size="small"
         :inline="true"
         v-show="showSearch"
-        label-width="98px"
+        label-width="110px"
       >
         <el-form-item label="浠诲姟鍚嶇О">
           <el-input
@@ -30,6 +30,18 @@
             v-model="topqueryParams.leavediagname"
             placeholder="璇疯緭鍏ヨ瘖鏂悕绉�"
           ></el-input>
+        </el-form-item>
+        <el-form-item label="鍑洪櫌鏃堕棿鑼冨洿" required>
+          <el-date-picker
+            type="daterange"
+            v-model="TimeRange"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫椂闂�"
+            end-placeholder="缁撴潫鏃堕棿"
+            value-format="yyyy-MM-dd"
+            placeholder="閫夋嫨鏃堕棿鑼冨洿"
+          >
+          </el-date-picker>
         </el-form-item>
         <el-form-item label="闅忚鐘舵��" prop="status">
           <el-cascader
@@ -101,11 +113,11 @@
               type="text"
               @click="
                 gettoken360(
-                    scope.row.sfzh,
-                    scope.row.drcode,
-                    scope.row.drname,
-                    scope.row.patid
-                  )
+                  scope.row.sfzh,
+                  scope.row.drcode,
+                  scope.row.drname,
+                  scope.row.patid
+                )
               "
               ><span class="button-textsc">{{
                 scope.row.sendname
@@ -121,7 +133,7 @@
           width="120"
         >
           <template slot-scope="scope">
-             <el-tooltip
+            <el-tooltip
               class="item"
               effect="dark"
               :content="scope.row.remark"
@@ -296,7 +308,7 @@
           prop="templatename"
           width="200"
         />
-         <el-table-column
+        <el-table-column
           label="浠诲姟鐘舵��"
           align="center"
           key="sendstate"
@@ -513,7 +525,7 @@
   historservelist,
   buidegetTasklist,
   query360PatInfo,
-  query360PatInfonh
+  query360PatInfonh,
 } from "@/api/AiCentre/index";
 import Treeselect from "@riophae/vue-treeselect";
 import store from "@/store";
@@ -550,8 +562,8 @@
       deptName: undefined,
       // 榛樿瀵嗙爜
       initPassword: undefined,
-      // 鏃ユ湡鑼冨洿
-      dateRange: [],
+
+      TimeRange: [],
       // 宀椾綅閫夐」
       postOptions: [],
       ruleForm: {
@@ -661,7 +673,7 @@
           children: [{ value: 4, label: "涓嶆墽琛�" }],
         },
       ],
-     cardlist: [
+      cardlist: [
         {
           name: "鎮h�呮湇鍔℃�婚噺",
           value: 0,
@@ -1000,8 +1012,8 @@
           store.getters.belongWards.map((obj) => obj.districtCode);
       }
       this.topqueryParams.pageNum = 1;
-      this.topqueryParams.startOutHospTime = this.dateRange[0];
-      this.topqueryParams.endOutHospTime = this.dateRange[1];
+      this.topqueryParams.startOutHospTime = this.TimeRange[0];
+      this.topqueryParams.endOutHospTime = this.TimeRange[1];
 
       this.getList(refresh);
     },
@@ -1057,7 +1069,7 @@
     },
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
     resetQuery() {
-      this.dateRange = [];
+      this.TimeRange = [];
       this.topqueryParams = {
         pageNum: 1,
         pageSize: 10,
diff --git a/src/views/followvisit/discharge/index.vue b/src/views/followvisit/discharge/index.vue
index 8725d92..0ed1b45 100644
--- a/src/views/followvisit/discharge/index.vue
+++ b/src/views/followvisit/discharge/index.vue
@@ -243,12 +243,27 @@
           </div>
         </el-col>
       </el-row>
+      <div class="selected-info">
+        宸查�変腑
+        <span style="color: #409eff; font-weight: bold">{{
+          getSelectedCount()
+        }}</span>
+        鏉℃暟鎹�
+        <el-button
+          v-if="getSelectedCount() > 0"
+          type="text"
+          @click="clearAllSelection"
+        >
+          娓呴櫎閫変腑
+        </el-button>
+      </div>
       <el-table
         v-loading="loading"
         ref="userform"
         :data="userList"
         :row-class-name="tableRowClassName"
         @selection-change="handleSelectionChange"
+        @select-all="handleSelectAll"
       >
         <el-table-column type="selection" width="50" align="center" />
         <el-table-column
@@ -1103,6 +1118,7 @@
       inputValue: "",
       preachform: "",
       previewVisible: false, //褰卞儚闅忚棰勮寮规
+      isRestoring: false,
       radio: "",
       radios: [],
       previewtype: 2, //棰勮褰卞儚闅忚绫诲瀷
@@ -1110,6 +1126,8 @@
       // 婊℃剰搴﹁皟鏌ユ暟鎹�
       scoreDialogVisible: false,
       selectedRows: [],
+      selectedRowMap: new Map(), // key: row.id, value: row 鏁版嵁
+
       // 绾ц仈閫夋嫨鍣ㄧ粦瀹氬��
       serviceStatusValue: 10,
       cascaderProps: {
@@ -1435,7 +1453,7 @@
   },
   methods: {
     /** 鏌ヨ闅忚鏈嶅姟鍒楄〃 */
-    getList(refresh) {
+    async getList(refresh) {
       // 榛樿鍏ㄩ儴
       if (this.topqueryParams.searchscope == 3) {
         this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
@@ -1448,16 +1466,17 @@
         this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS(
           this.getEndOfDay()
         );
-      } else {
-        // this.topqueryParams.endSendDateTime = null;
       }
+
       // 鎺ュ彈寮傚父璺宠浆
       if (this.errtype) {
         this.topqueryParams.leavehospitaldistrictcodes.push(
           this.leavehospitaldistrictcode
         );
       }
+
       this.loading = true;
+
       if (
         this.topqueryParams.leavehospitaldistrictcodes[0] &&
         this.topqueryParams.leaveldeptcodes[0]
@@ -1466,18 +1485,33 @@
       } else {
         this.topqueryParams.deptOrDistrict = 1;
       }
+
       if (!this.followupAuthority()) {
         this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
+        this.loading = false;
         return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
       }
 
-      getTaskservelist(this.topqueryParams).then((response) => {
+      try {
+        const response = await getTaskservelist(this.topqueryParams);
+
+        // 鉁� 绗竴姝ワ細鍏堥攣瀹氭仮澶嶇姸鎬�
+        this.isRestoring = true;
+
+        // 鉁� 绗簩姝ワ細鍐嶆洿鏂版暟鎹紙杩欎細瑙﹀彂 selection-change锛屼絾琚攣浣忎簡锛�
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
+
+        // 鉁� 绗笁姝ワ細鎭㈠閫変腑鐘舵��
+        // this.restoreSelection();
+        this.$nextTick(() => {
+          this.restoreSelection();
+        });
+
+        // 鉁� 绗洓姝ワ細澶勭悊鍏朵粬鏁版嵁
         if (refresh) {
           this.cardlist[0].value =
             Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
-          // this.cardlist[1].value = response.rows[0].wzx;
           this.cardlist[1].value = response.rows[0].wxsf || 0;
           this.ycvalue = Number(response.rows[0].yc) || 0;
           this.jgvalue = response.rows[0].jg;
@@ -1486,7 +1520,8 @@
           this.cardlist[4].value = response.rows[0].ywc || 0;
           this.yfsvalue = response.rows[0].yfs;
         }
-        this.loading = false;
+
+        // 鉁� 绗簲姝ワ細澶勭悊 preachform 绛夊叾浠栨暟鎹�
         this.userList.forEach((item) => {
           let idArray = null;
           if (item.endtime) {
@@ -1500,17 +1535,26 @@
             }
 
             item.preachform = idArray.map((value) => {
-              // 鏌ユ壘id瀵瑰簲鐨勫璞�
               const item = this.checkboxlist.find(
                 (item) => item.value == value
               );
-              // 濡傛灉鎵惧埌瀵瑰簲鐨刬d锛岃繑鍥瀕abel鍊硷紝鍚﹀垯杩斿洖null
               return item ? item.label : null;
             });
           }
         });
+
         this.total = response.total;
-      });
+        this.loading = false;
+
+        // 鉁� 绗叚姝ワ細瑙i攣
+        this.$nextTick(() => {
+          this.isRestoring = false;
+        });
+      } catch (error) {
+        console.error("鑾峰彇鍒楄〃澶辫触:", error);
+        this.loading = false;
+        this.isRestoring = false;
+      }
     },
     loadData() {
       this.errtype = this.$route.query.errtype;
@@ -1772,11 +1816,17 @@
       this.handleQuery(1);
     },
     handleSelectionChange(rows) {
-      console.log(rows, 911);
+      // 鉁� 濡傛灉鏄仮澶嶉�変腑鐘舵�佽Е鍙戠殑锛岀洿鎺ヨ繑鍥�
+      if (this.isRestoring) {
+        console.log("姝e湪鎭㈠閫変腑鐘舵�侊紝璺宠繃 handleSelectionChange");
+        return;
+      }
 
-      this.selectedRows = rows.map((row) => {
-        // 鍒濆鍖栬瘎鍒嗗瓧娈�
-        return {
+      console.log("handleSelectionChange 琚Е鍙戯紝閫変腑琛屾暟:", rows.length);
+
+      // 鍙仛娣诲姞鎿嶄綔
+      rows.forEach((row) => {
+        this.selectedRowMap.set(row.id, {
           ...row,
           authenticity: row.authenticity || 0,
           weekFinish: row.weekFinish || 0,
@@ -1786,14 +1836,11 @@
           environment: row.environment || 0,
           doctorSatisfaction: row.doctorSatisfaction || 0,
           nurseSatisfaction: row.nurseSatisfaction || 0,
-        };
+        });
       });
 
-      if (this.selectedRows.length > 0) {
-        this.multiple = false;
-      } else {
-        this.multiple = true;
-      }
+      this.selectedRows = Array.from(this.selectedRowMap.values());
+      this.multiple = this.selectedRows.length === 0;
     },
 
     // 璁$畻鎬诲垎
@@ -2116,6 +2163,76 @@
       }
       return "";
     },
+    restoreSelection() {
+      if (!this.$refs.userform) {
+        console.log("琛ㄦ牸寮曠敤涓嶅瓨鍦�");
+        return;
+      }
+
+      console.log("鎵ц restoreSelection");
+
+      // 娓呴櫎褰撳墠椤电殑鎵�鏈夐�変腑鐘舵��
+      this.$refs.userform.clearSelection();
+
+      // 鎵惧嚭褰撳墠椤典腑鍝簺琛屾槸琚�変腑鐨�
+      const toBeSelected = this.userList.filter((row) =>
+        this.selectedRowMap.has(row.id)
+      );
+
+      console.log("闇�瑕佹仮澶嶇殑琛屾暟:", toBeSelected.length);
+
+      // 閲嶆柊閫変腑杩欎簺琛�
+      toBeSelected.forEach((row) => {
+        this.$refs.userform.toggleRowSelection(row, true);
+      });
+    },
+    // 鉁� 澶勭悊琛ㄥご鍏ㄩ�変簨浠�
+    handleSelectAll(selection) {
+      console.log("鍏ㄩ�変簨浠惰Е鍙戯紝閫変腑琛屾暟:", selection.length);
+
+      // 濡傛灉 selection 闀垮害绛変簬褰撳墠椤佃鏁帮紝璇存槑鏄叏閫�
+      if (selection.length === this.userList.length) {
+        // 鍏ㄩ�夊綋鍓嶉〉
+        this.userList.forEach((row) => {
+          this.selectedRowMap.set(row.id, {
+            ...row,
+            authenticity: row.authenticity || 0,
+            weekFinish: row.weekFinish || 0,
+            standard: row.standard || 0,
+            timeliness: row.timeliness || 0,
+            library: row.library || 0,
+            environment: row.environment || 0,
+            doctorSatisfaction: row.doctorSatisfaction || 0,
+            nurseSatisfaction: row.nurseSatisfaction || 0,
+          });
+        });
+      } else {
+        // 鍙栨秷鍏ㄩ�夛細娓呴櫎褰撳墠椤电殑閫変腑鐘舵��
+        this.userList.forEach((row) => {
+          this.selectedRowMap.delete(row.id);
+        });
+      }
+
+      // 鏇存柊 selectedRows
+      this.selectedRows = Array.from(this.selectedRowMap.values());
+      this.multiple = this.selectedRows.length === 0;
+    },
+
+    // 娓呴櫎鎵�鏈夐�変腑
+    clearAllSelection() {
+      this.selectedRowMap.clear();
+      this.selectedRows = [];
+      this.multiple = true;
+
+      if (this.$refs.userform) {
+        this.$refs.userform.clearSelection();
+      }
+    },
+
+    // 鑾峰彇閫変腑鏁伴噺
+    getSelectedCount() {
+      return this.selectedRowMap.size;
+    },
     // 鍒涘缓鍐嶆闅忚鏈嶅姟
     setupsubtask() {
       this.$refs["zcform"].validate((valid) => {
@@ -2385,4 +2502,15 @@
   flex-shrink: 0;
   margin-top: 2px;
 }
+
+::v-deep .el-table__row.selected-row:hover > td {
+  background-color: #e6f7ff !important;
+}
+
+/* 閫変腑淇℃伅鏄剧ず */
+.selected-info {
+  padding: 10px 0;
+  font-size: 14px;
+  color: #666;
+}
 </style>
diff --git a/src/views/followvisit/record/detailpage/MergeAndModify.vue b/src/views/followvisit/record/detailpage/MergeAndModify.vue
index 6449d1e..92b2e1b 100644
--- a/src/views/followvisit/record/detailpage/MergeAndModify.vue
+++ b/src/views/followvisit/record/detailpage/MergeAndModify.vue
@@ -39,7 +39,7 @@
                   handleOptionChange(
                     $event,
                     index,
-                    question.svyLibTemplateTargetoptions,
+                    question.svyTaskTemplateTargetoptions,
                     question
                   )
                 "
@@ -47,7 +47,7 @@
                 <el-radio
                   v-for="(
                     option, optIndex
-                  ) in question.svyLibTemplateTargetoptions"
+                  ) in question.svyTaskTemplateTargetoptions"
                   :key="optIndex"
                   :label="option.optioncontent"
                   :class="option.isabnormal ? 'red-star' : ''"
@@ -61,10 +61,10 @@
             <div class="dev-xx" v-if="question.scriptType == 2">
               <el-checkbox-group
                 v-model="question.mergedResult"
-                @change="updateScore($event, index, question.options, question)"
+                @change="updateScore($event, index, question.svyTaskTemplateTargetoptions, question)"
               >
                 <el-checkbox
-                  v-for="(option, optIndex) in question.options"
+                  v-for="(option, optIndex) in question.svyTaskTemplateTargetoptions"
                   :key="optIndex"
                   :label="option.optioncontent"
                   :class="option.isabnormal ? 'red-star' : ''"
diff --git a/src/views/followvisit/record/detailpage/index.vue b/src/views/followvisit/record/detailpage/index.vue
index ed5040e..9d0f20f 100644
--- a/src/views/followvisit/record/detailpage/index.vue
+++ b/src/views/followvisit/record/detailpage/index.vue
@@ -2417,8 +2417,15 @@
     },
     // 璋冭捣鐭俊鍙戦�佸璇濇
     sendAgainmsg() {
-      this.smsDialogVisible = true;
-      // 鍙互鍦ㄨ繖閲屽垵濮嬪寲 smsContent锛屼緥濡� this.smsContent = '';
+      // this.smsDialogVisible = true;
+      this.$store.dispatch("sms/openSmsDialog", {
+        name: this.form.sendname,
+        age: this.form.age,
+        phone: this.userform.telcode,
+        deptName: this.form.deptname,
+        wardName: this.form.leavehospitaldistrictname,
+        smsTemplate: `灏婃暚鐨�${this.form.sendname}锛屾偍濂斤紒`,
+      });
     },
 
     // 鍙戦�佺煭淇$殑鏂规硶
diff --git a/src/views/knowledge/questionbank/index.vue b/src/views/knowledge/questionbank/index.vue
index 7402482..7123ef1 100644
--- a/src/views/knowledge/questionbank/index.vue
+++ b/src/views/knowledge/questionbank/index.vue
@@ -456,7 +456,7 @@
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 export default {
-  name: "questionnaire",
+  name: "Questionbank",
   components: { Treeselect },
   data() {
     return {
diff --git a/src/views/knowledge/questionbank/particulars/index.vue b/src/views/knowledge/questionbank/particulars/index.vue
index b44e2cf..39c5718 100644
--- a/src/views/knowledge/questionbank/particulars/index.vue
+++ b/src/views/knowledge/questionbank/particulars/index.vue
@@ -745,6 +745,7 @@
         svyLibScriptTagList: [],
         suitway: "1",
         scoretype: "4",
+        isavailable: "0",
         language: "鏅�氳瘽",
       },
       headers: {
diff --git a/src/views/knowledge/questionnaire/smsConfig/index.vue b/src/views/knowledge/questionnaire/smsConfig/index.vue
index a6207bd..0397cdd 100644
--- a/src/views/knowledge/questionnaire/smsConfig/index.vue
+++ b/src/views/knowledge/questionnaire/smsConfig/index.vue
@@ -1,274 +1,222 @@
 <template>
   <div class="smsConfig-management">
-    <!-- 宸︿晶鏍� -->
-    <div class="sidecolumn">
-      <div class="sidecolumn-top">
-        <div class="top-wj">妯℃澘鍒嗙被</div>
-        <div class="top-tj" @click="Newcategory">+娣诲姞</div>
-      </div>
-      <div class="center-ss">
-        <el-input
-          placeholder="璇疯緭鍏ュ唴瀹�"
-          v-model="sidecolumnval"
-          class="input-with-select"
-          size="medium"
-        >
-        </el-input>
-      </div>
-      <div class="head-container" style="margin-top: 20px">
-        <el-tree
-          :data="deptOptions"
-          :props="defaultProps"
-          :expand-on-click-node="false"
-          :filter-node-method="filterNode"
-          ref="tree"
-          node-key="id"
-          default-expand-all
-          highlight-current
-          @node-click="handleNodeClick"
-        >
-          <span class="custom-tree-node" slot-scope="{ node, data }">
-            <span class="tree-node-label">{{ node.label }}</span>
-            <span v-if="data.id > 0">
+    <div class="main-content">
+      <el-row :gutter="20">
+        <el-col :span="24" :xs="24">
+          <el-form
+            :model="queryParams"
+            ref="queryForm"
+            size="small"
+            :inline="true"
+            v-show="showSearch"
+            label-width="88px"
+          >
+            <el-form-item label="妯℃澘缂栧彿" prop="templetno">
+              <el-input
+                v-model="queryParams.templetno"
+                placeholder="璇疯緭鍏ユā鏉跨紪鍙�"
+                clearable
+                style="width: 200px"
+                @keyup.enter.native="handleQuery"
+              />
+            </el-form-item>
+
+            <el-form-item label="妯℃澘鍚嶇О" prop="templetname">
+              <el-input
+                v-model="queryParams.templetname"
+                placeholder="璇疯緭鍏ユā鏉垮悕绉�"
+                clearable
+                style="width: 200px"
+                @keyup.enter.native="handleQuery"
+              />
+            </el-form-item>
+
+            <el-form-item label="閮ㄩ棬鍚嶇О" prop="deptName">
+              <el-input
+                v-model="queryParams.deptName"
+                placeholder="璇疯緭鍏ラ儴闂ㄥ悕绉�"
+                clearable
+                style="width: 200px"
+                @keyup.enter.native="handleQuery"
+              />
+            </el-form-item>
+
+            <el-form-item>
               <el-button
-                type="text"
+                type="primary"
+                icon="el-icon-search"
+                size="medium"
+                @click="handleQuery"
+                >鎼滅储</el-button
+              >
+              <el-button
+                icon="el-icon-refresh"
+                size="medium"
+                @click="resetQuery"
+                >閲嶇疆</el-button
+              >
+            </el-form-item>
+          </el-form>
+
+          <el-divider></el-divider>
+
+          <el-row :gutter="10" class="mb8">
+            <el-col :span="1.5">
+              <el-button
+                type="primary"
+                plain
+                icon="el-icon-plus"
+                size="medium"
+                @click="handleAdd"
+                >鏂板</el-button
+              >
+            </el-col>
+            <el-col :span="1.5">
+              <el-button
+                type="danger"
+                plain
                 icon="el-icon-delete"
-                circle
-                size="mini"
-                @click="() => remove(node, data)"
+                size="medium"
+                :disabled="multiple"
+                @click="handleDelete"
+                >鍒犻櫎</el-button
               >
-              </el-button>
-            </span>
-            <span v-if="data.id > 0">
-              <el-button
-                type="text"
-                circle
-                size="mini"
-                @click="() => altertag(node, data)"
-              >
-                <span class="button-textxg">
-                  <i class="el-icon-edit-outline"></i>
-                </span>
-              </el-button>
-            </span>
-          </span>
-        </el-tree>
-      </div>
-    </div>
+            </el-col>
+          </el-row>
 
-    <!-- 鍙充晶鏁版嵁 -->
-    <div class="leftvlue">
-      <div class="leftvlue-bg">
-        <el-row :gutter="20">
-          <el-col :span="24" :xs="24">
-            <el-form
-              :model="queryParams"
-              ref="queryForm"
-              size="small"
-              :inline="true"
-              v-show="showSearch"
-              label-width="98px"
-            >
-              <el-form-item label="妯℃澘鍚嶇О" prop="templetname">
-                <el-input
-                  v-model="queryParams.templetname"
-                  placeholder="璇疯緭鍏ユā鏉垮悕绉�"
-                  clearable
-                  style="width: 200px"
-                  @keyup.enter.native="handleQuery"
-                />
-              </el-form-item>
+          <el-table
+            v-loading="loading"
+            :data="userList"
+            :border="true"
+            @selection-change="handleSelectionChange"
+          >
+            <el-table-column type="selection" width="50" align="center" />
 
-              <el-form-item label="鐭俊绛惧悕" prop="signature">
-                <el-input
-                  v-model="queryParams.signature"
-                  placeholder="璇疯緭鍏ョ煭淇$鍚�"
-                  clearable
-                  style="width: 200px"
-                  @keyup.enter.native="handleQuery"
-                />
-              </el-form-item>
-
-              <el-form-item label="鍚敤鐘舵��" prop="isenable">
-                <el-select
-                  v-model="queryParams.isenable"
-                  placeholder="璇烽�夋嫨鐘舵��"
-                  clearable
-                  style="width: 200px"
-                >
-                  <el-option
-                    v-for="item in statusOptions"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                  >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-
-              <el-form-item>
-                <el-button
-                  type="primary"
-                  icon="el-icon-search"
-                  size="medium"
-                  @click="handleQuery"
-                >鎼滅储</el-button>
-                <el-button
-                  icon="el-icon-refresh"
-                  size="medium"
-                  @click="resetQuery"
-                >閲嶇疆</el-button>
-              </el-form-item>
-            </el-form>
-
-            <el-divider></el-divider>
-
-            <el-row :gutter="10" class="mb8">
-              <el-col :span="1.5">
-                <el-button
-                  type="primary"
-                  plain
-                  icon="el-icon-plus"
-                  size="medium"
-                  @click="handleAdd"
-                >鏂板</el-button>
-              </el-col>
-              <el-col :span="1.5">
-                <el-button
-                  type="danger"
-                  plain
-                  icon="el-icon-delete"
-                  size="medium"
-                  :disabled="multiple"
-                  @click="handleDelete"
-                >鍒犻櫎</el-button>
-              </el-col>
-            </el-row>
-
-            <el-table
-              v-loading="loading"
-              :data="userList"
-              :border="true"
-              @selection-change="handleSelectionChange"
-            >
-              <el-table-column type="selection" width="50" align="center" />
-
-              <el-table-column
-                label="妯℃澘鍚嶇О"
-                align="center"
-                key="templetname"
-                prop="templetname"
-                width="160"
-                :show-overflow-tooltip="true"
-              />
-
-              <el-table-column
-                label="鐭俊绛惧悕"
-                align="center"
-                key="signature"
-                prop="signature"
-                width="120"
-              />
-
-              <el-table-column
-                label="妯℃澘鍐呭"
-                align="center"
-                key="templetcontent"
-                prop="templetcontent"
-                width="280"
-                :show-overflow-tooltip="true"
-              />
-
-              <el-table-column
-                label="妯℃澘绫诲瀷"
-                align="center"
-                key="templettype"
-                prop="templettype"
-                width="120"
-              >
-                <template slot-scope="scope">
-                  <dict-tag :options="typeOptions" :value="scope.row.templettype" />
-                </template>
-              </el-table-column>
-
-              <el-table-column
-                label="鍚敤鐘舵��"
-                align="center"
-                key="isenable"
-                prop="isenable"
-                width="100"
-              >
-                <template slot-scope="scope">
-                  <dict-tag :options="statusOptions" :value="scope.row.isenable" />
-                </template>
-              </el-table-column>
-
-              <el-table-column
-                label="澶囨敞"
-                align="center"
-                key="remark"
-                prop="remark"
-                width="180"
-                :show-overflow-tooltip="true"
-              />
-
-              <el-table-column
-                label="鍒涘缓鏃堕棿"
-                align="center"
-                key="createTime"
-                prop="createTime"
-                width="160"
-              />
-
-              <el-table-column
-                label="鎿嶄綔"
-                fixed="right"
-                align="center"
-                width="240"
-                class-name="small-padding fixed-width"
-              >
-                <template slot-scope="scope">
-                  <el-button
-                    size="medium"
-                    type="text"
-                    @click="handleUpdate(scope.row)"
-                  >
-                    <span class="button-textxg">
-                      <i class="el-icon-edit"></i>淇敼
-                    </span>
-                  </el-button>
-                  <el-button
-                    size="medium"
-                    type="text"
-                    @click="handlePreview(scope.row)"
-                  >
-                    <span class="button-text">
-                      <i class="el-icon-view"></i>棰勮
-                    </span>
-                  </el-button>
-                  <el-button
-                    size="medium"
-                    type="text"
-                    @click="handleDelete(scope.row)"
-                  >
-                    <span class="button-textsc">
-                      <i class="el-icon-edit"></i>鍒犻櫎
-                    </span>
-                  </el-button>
-                </template>
-              </el-table-column>
-            </el-table>
-
-            <pagination
-              v-show="total > 0"
-              :total="total"
-              :page.sync="queryParams.pageNum"
-              :limit.sync="queryParams.pageSize"
-              @pagination="getList"
+            <el-table-column
+              label="妯℃澘缂栧彿"
+              align="center"
+              key="templetno"
+              prop="templetno"
+              width="140"
+              :show-overflow-tooltip="true"
             />
-          </el-col>
-        </el-row>
-      </div>
+
+            <el-table-column
+              label="妯℃澘鍚嶇О"
+              align="center"
+              key="templetname"
+              prop="templetname"
+              width="160"
+              :show-overflow-tooltip="true"
+            />
+
+            <el-table-column
+              label="妯℃澘鍐呭"
+              align="center"
+              key="templetcontent"
+              prop="templetcontent"
+              width="280"
+              :show-overflow-tooltip="true"
+            />
+
+            <el-table-column
+              label="閮ㄩ棬鍚嶇О"
+              align="center"
+              key="deptName"
+              prop="deptName"
+              width="120"
+              :show-overflow-tooltip="true"
+            />
+
+            <el-table-column
+              label="鐥呭尯鍚嶇О"
+              align="center"
+              key="wardName"
+              prop="wardName"
+              width="140"
+              :show-overflow-tooltip="true"
+            />
+
+            <el-table-column
+              label="鐢ㄦ埛宸ュ彿"
+              align="center"
+              key="userName"
+              prop="userName"
+              width="120"
+            />
+
+            <el-table-column
+              label="鐢ㄦ埛鏄电О"
+              align="center"
+              key="nickName"
+              prop="nickName"
+              width="120"
+            />
+
+            <el-table-column
+              label="鏄惁涓婁紶"
+              align="center"
+              key="isupload"
+              prop="isupload"
+              width="90"
+            />
+
+            <el-table-column
+              label="涓婁紶鏃堕棿"
+              align="center"
+              key="uploadTime"
+              prop="uploadTime"
+              width="160"
+            />
+
+            <el-table-column
+              label="鎿嶄綔"
+              fixed="right"
+              align="center"
+              width="200"
+              class-name="small-padding fixed-width"
+            >
+              <template slot-scope="scope">
+                <el-button
+                  size="medium"
+                  type="text"
+                  @click="handleUpdate(scope.row)"
+                >
+                  <span class="button-textxg">
+                    <i class="el-icon-edit"></i>淇敼
+                  </span>
+                </el-button>
+                <el-button
+                  size="medium"
+                  type="text"
+                  @click="handlePreview(scope.row)"
+                >
+                  <span class="button-text">
+                    <i class="el-icon-view"></i>棰勮
+                  </span>
+                </el-button>
+                <el-button
+                  size="medium"
+                  type="text"
+                  @click="handleDelete(scope.row)"
+                >
+                  <span class="button-textsc">
+                    <i class="el-icon-edit"></i>鍒犻櫎
+                  </span>
+                </el-button>
+              </template>
+            </el-table-column>
+          </el-table>
+
+          <pagination
+            v-show="total > 0"
+            :total="total"
+            :page.sync="queryParams.pageNum"
+            :limit.sync="queryParams.pageSize"
+            @pagination="getList"
+          />
+        </el-col>
+      </el-row>
     </div>
 
     <!-- 娣诲姞/淇敼鐭俊妯℃澘寮规 -->
@@ -285,36 +233,19 @@
         label-width="100px"
         size="medium"
       >
-        <el-form-item label="妯℃澘鍒嗙被" prop="categoryid">
-          <el-select
-            v-model="form.categoryid"
-            placeholder="璇烽�夋嫨妯℃澘鍒嗙被"
-            clearable
-            style="width: 100%"
-          >
-            <el-option
-              v-for="item in categoryOptions"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-            </el-option>
-          </el-select>
+        <el-form-item label="妯℃澘缂栧彿" prop="templetno">
+          <el-input
+            v-model="form.templetno"
+            placeholder="璇疯緭鍏ユā鏉跨紪鍙�"
+            maxlength="50"
+          />
         </el-form-item>
 
         <el-form-item label="妯℃澘鍚嶇О" prop="templetname">
           <el-input
             v-model="form.templetname"
             placeholder="璇疯緭鍏ユā鏉垮悕绉�"
-            maxlength="50"
-          />
-        </el-form-item>
-
-        <el-form-item label="鐭俊绛惧悕" prop="signature">
-          <el-input
-            v-model="form.signature"
-            placeholder="璇疯緭鍏ョ煭淇$鍚嶏紙濡傦細銆愪附姘翠汉姘戝尰闄€�戯級"
-            maxlength="20"
+            maxlength="100"
           />
         </el-form-item>
 
@@ -329,118 +260,77 @@
           />
         </el-form-item>
 
-        <el-form-item label="妯℃澘绫诲瀷" prop="templettype">
+        <el-form-item label="绉戝" prop="deptCode">
           <el-select
-            v-model="form.templettype"
-            placeholder="璇烽�夋嫨妯℃澘绫诲瀷"
+            v-model="form.deptCode"
+            placeholder="璇烽�夋嫨绉戝"
+            filterable
+            clearable
             style="width: 100%"
+            @change="handleDeptChange"
           >
             <el-option
-              v-for="item in typeOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            >
-            </el-option>
+              v-for="dept in departmentOptions"
+              :key="dept.value"
+              :label="dept.label"
+              :value="dept.value"
+            />
           </el-select>
         </el-form-item>
 
-        <el-form-item label="鍚敤鐘舵��" prop="isenable">
-          <el-radio-group v-model="form.isenable">
-            <el-radio
-              v-for="item in statusOptions"
-              :key="item.value"
-              :label="item.value"
-            >{{ item.label }}</el-radio>
-          </el-radio-group>
-        </el-form-item>
-
-        <el-form-item label="澶囨敞" prop="remark">
-          <el-input
-            v-model="form.remark"
-            type="textarea"
-            :rows="3"
-            placeholder="璇疯緭鍏ュ娉ㄤ俊鎭�"
-            maxlength="200"
-            show-word-limit
-          />
+        <el-form-item label="鐥呭尯" prop="wardCode">
+          <el-select
+            v-model="form.wardCode"
+            placeholder="璇烽�夋嫨鐥呭尯"
+            filterable
+            clearable
+            style="width: 100%"
+            @change="handleWardChange"
+          >
+            <el-option
+              v-for="ward in wardOptions"
+              :key="ward.value"
+              :label="ward.label"
+              :value="ward.value"
+            />
+          </el-select>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button @click="cancelForm">鍙� 娑�</el-button>
-        <el-button type="primary" @click="submitForm" :loading="submitLoading">纭� 瀹�</el-button>
+        <el-button type="primary" @click="submitForm" :loading="submitLoading"
+          >纭� 瀹�</el-button
+        >
       </div>
     </el-dialog>
 
     <!-- 妯℃澘棰勮寮规 -->
-    <el-dialog
-      title="鐭俊妯℃澘棰勮"
-      :visible.sync="previewVisible"
-      width="40%"
-    >
+    <el-dialog title="鐭俊妯℃澘棰勮" :visible.sync="previewVisible" width="40%">
       <div class="preview-box">
         <div class="preview-item">
+          <div class="preview-label">妯℃澘缂栧彿锛�</div>
+          <div class="preview-value">{{ previewData.templetno || "-" }}</div>
+        </div>
+        <div class="preview-item">
           <div class="preview-label">妯℃澘鍚嶇О锛�</div>
-          <div class="preview-value">{{ previewData.templetname }}</div>
+          <div class="preview-value">{{ previewData.templetname || "-" }}</div>
         </div>
         <div class="preview-item">
-          <div class="preview-label">鐭俊绛惧悕锛�</div>
-          <div class="preview-value">{{ previewData.signature }}</div>
+          <div class="preview-label">閮ㄩ棬鍚嶇О锛�</div>
+          <div class="preview-value">{{ previewData.deptName || "-" }}</div>
         </div>
         <div class="preview-item">
-          <div class="preview-label">妯℃澘绫诲瀷锛�</div>
-          <div class="preview-value">
-            <dict-tag :options="typeOptions" :value="previewData.templettype" />
-          </div>
+          <div class="preview-label">鐥呭尯鍚嶇О锛�</div>
+          <div class="preview-value">{{ previewData.wardName || "-" }}</div>
         </div>
-        <div class="preview-item">
-          <div class="preview-label">鍚敤鐘舵�侊細</div>
-          <div class="preview-value">
-            <dict-tag :options="statusOptions" :value="previewData.isenable" />
-          </div>
-        </div>
+
         <el-divider></el-divider>
         <div class="preview-content">
           <div class="preview-content-label">鐭俊鍐呭棰勮锛�</div>
           <div class="preview-content-box">
-            {{ previewData.templetcontent || '鏆傛棤鍐呭' }}
+            {{ previewData.templetcontent || "鏆傛棤鍐呭" }}
           </div>
         </div>
-        <div class="preview-item" v-if="previewData.remark">
-          <div class="preview-label">澶囨敞锛�</div>
-          <div class="preview-value">{{ previewData.remark }}</div>
-        </div>
-      </div>
-    </el-dialog>
-
-    <!-- 娣诲姞绫诲埆寮规 -->
-    <el-dialog title="绫诲埆缂栬緫" width="30%" :visible.sync="dialogFormVisible">
-      <div style="text-align: center; margin-bottom: 20px">
-        <el-radio-group v-model="radio">
-          <el-radio-button label="涓诲垎绫�"></el-radio-button>
-          <el-radio-button label="瀛愬垎绫�"></el-radio-button>
-        </el-radio-group>
-      </div>
-      <el-divider></el-divider>
-      <el-form :model="classifyform">
-        <el-form-item label="璇烽�夋嫨妯℃澘澶х被" v-if="radio == '瀛愬垎绫�'">
-          <el-select v-model="classifyform.pid" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="item in deptOptions"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            >
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="璇疯緭鍏ョ被鍒悕绉�">
-          <el-input v-model="classifyform.name" autocomplete="off"></el-input>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="getDeptTree()">鍙� 娑�</el-button>
-        <el-button type="primary" @click="submitsidecolumn">纭� 瀹�</el-button>
       </div>
     </el-dialog>
   </div>
@@ -484,35 +374,10 @@
       previewVisible: false,
       // 棰勮鏁版嵁
       previewData: {},
-      // 绫诲埆寮规
-      dialogFormVisible: false,
-      // 绫诲埆form
-      classifyform: {},
-      // 涓�/瀛愬垎绫�
-      radio: "涓诲垎绫�",
-      // 绫诲埆鎼滅储
-      sidecolumnval: "",
-      // 鏍戞暟鎹�
-      deptOptions: [],
-      // 鍒嗙被涓嬫媺閫夐」
-      categoryOptions: [],
-      // 鏍憄rops
-      defaultProps: {
-        children: "children",
-        label: "name",
-      },
-      // 鐘舵�侀�夐」
-      statusOptions: [
-        { label: "鍚敤", value: "0" },
-        { label: "鍋滅敤", value: "1" },
-      ],
-      // 绫诲瀷閫夐」
-      typeOptions: [
-        { label: "楠岃瘉鐮�", value: "0" },
-        { label: "閫氱煡", value: "1" },
-        { label: "钀ラ攢", value: "2" },
-        { label: "闅忚", value: "3" },
-      ],
+      // 绉戝閫夐」
+      departmentOptions: [],
+      // 鐥呭尯閫夐」
+      wardOptions: [],
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
@@ -528,24 +393,40 @@
         templetcontent: [
           { required: true, message: "璇疯緭鍏ユā鏉垮唴瀹�", trigger: "blur" },
         ],
-        signature: [
-          { required: true, message: "璇疯緭鍏ョ煭淇$鍚�", trigger: "blur" },
-        ],
-        isenable: [
-          { required: true, message: "璇烽�夋嫨鍚敤鐘舵��", trigger: "change" },
-        ],
       },
     };
   },
-  watch: {
-    // 鐩戝惉绫诲埆鎼滅储
-    sidecolumnval(val) {
-      this.$refs.tree.filter(val);
+  computed: {
+    // 浠� store getters 鑾峰彇绉戝閫夐」
+    computedDepartmentOptions() {
+      if (this.$store.getters.belongDepts) {
+        return this.$store.getters.belongDepts.map((dept) => ({
+          label: dept.deptName,
+          value: dept.deptCode,
+        }));
+      }
+      return [];
+    },
+    // 浠� store getters 鑾峰彇鐥呭尯閫夐」
+    computedWardOptions() {
+      console.log(
+        this.$store.getters.belongWards,
+        "this.$store.getters.belongWards"
+      );
+
+      if (this.$store.getters.belongWards) {
+        return this.$store.getters.belongWards.map((ward) => ({
+          label: ward.districtName,
+          value: ward.districtCode,
+        }));
+      }
+      return [];
     },
   },
   created() {
     this.getList();
-    this.getDeptTree();
+    this.departmentOptions = this.computedDepartmentOptions;
+    this.wardOptions = this.computedWardOptions;
   },
   methods: {
     /** 鏌ヨ鍒楄〃 */
@@ -581,14 +462,7 @@
     handleAdd() {
       this.dialogTitle = "鏂板鐭俊妯℃澘";
       this.dialogVisible = true;
-      this.form = {
-        isenable: "0",
-        templettype: "1",
-      };
-      // 濡傛灉鏈夋爲閫変腑鍒嗙被锛岄粯璁ゅ甫鍏�
-      if (this.queryParams.categoryid) {
-        this.form.categoryid = this.queryParams.categoryid;
-      }
+      this.form = {};
       this.$nextTick(() => {
         if (this.$refs.formRef) {
           this.$refs.formRef.clearValidate();
@@ -618,6 +492,30 @@
       getSmstemplet(templetid).then((response) => {
         this.previewData = response.data;
       });
+    },
+
+    /** 绉戝閫夋嫨鍙樺寲 - 鑷姩濉厖绉戝鍚嶇О */
+    handleDeptChange(value) {
+      const selectedDept = this.departmentOptions.find(
+        (dept) => dept.value === value
+      );
+      if (selectedDept) {
+        this.form.deptName = selectedDept.label;
+      } else {
+        this.form.deptName = "";
+      }
+    },
+
+    /** 鐥呭尯閫夋嫨鍙樺寲 - 鑷姩濉厖鐥呭尯鍚嶇О */
+    handleWardChange(value) {
+      const selectedWard = this.wardOptions.find(
+        (ward) => ward.value === value
+      );
+      if (selectedWard) {
+        this.form.wardName = selectedWard.label;
+      } else {
+        this.form.wardName = "";
+      }
     },
 
     /** 鎻愪氦琛ㄥ崟 */
@@ -677,260 +575,21 @@
         })
         .catch(() => {});
     },
-
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        templetid: undefined,
-        templetname: undefined,
-        signature: undefined,
-        templetcontent: undefined,
-        templettype: "1",
-        isenable: "0",
-        categoryid: undefined,
-        remark: undefined,
-      };
-      this.resetForm("form");
-    },
-
-    /** 鏌ヨ鍒嗙被鏍� */
-    getDeptTree() {
-      // 妯℃嫙鍒嗙被鏍戞暟鎹� - 瀹為檯椤圭洰涓簲鏇挎崲涓虹湡瀹濧PI
-      this.deptOptions = [
-        {
-          id: 1,
-          name: "闅忚鐭俊",
-          children: [
-            { id: 11, name: "鍑洪櫌闅忚" },
-            { id: 12, name: "澶嶈瘖鎻愰啋" },
-            { id: 13, name: "鍋ュ悍瀹f暀" },
-          ],
-        },
-        {
-          id: 2,
-          name: "閫氱煡鐭俊",
-          children: [
-            { id: 21, name: "棰勭害閫氱煡" },
-            { id: 22, name: "鎶ュ憡閫氱煡" },
-          ],
-        },
-        {
-          id: 3,
-          name: "楠岃瘉鐮�",
-          children: [
-            { id: 31, name: "鐧诲綍楠岃瘉" },
-            { id: 32, name: "娉ㄥ唽楠岃瘉" },
-          ],
-        },
-      ];
-      this.categoryOptions = this.flattenTree(this.deptOptions);
-    },
-
-    /** 鎵佸钩鍖栨爲鏁版嵁鐢ㄤ簬涓嬫媺閫夋嫨 */
-    flattenTree(tree) {
-      let result = [];
-      tree.forEach((item) => {
-        result.push({ id: item.id, name: item.name });
-        if (item.children && item.children.length) {
-          result = result.concat(item.children);
-        }
-      });
-      return result;
-    },
-
-    /** 绛涢�夎妭鐐� */
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.name.indexOf(value) !== -1;
-    },
-
-    /** 鐐瑰嚮鏍戣妭鐐� */
-    handleNodeClick(data) {
-      if (data.children && data.children.length) return;
-      this.queryParams.categoryid = data.id;
-      this.getList();
-    },
-
-    // 鍒嗙被鏍�-----------------------
-    /** 鏂板缓鍒嗙被 */
-    Newcategory() {
-      this.classifyform = {};
-      this.radio = "涓诲垎绫�";
-      this.dialogFormVisible = true;
-    },
-
-    /** 淇敼鍒嗙被 */
-    altertag(node, data) {
-      this.dialogFormVisible = true;
-      if (data.children && data.children.length) {
-        this.radio = "涓诲垎绫�";
-      } else {
-        this.radio = "瀛愬垎绫�";
-      }
-      this.classifyform = { ...data };
-    },
-
-    /** 鎻愪氦鍒嗙被 */
-    submitsidecolumn() {
-      if (this.classifyform.id) {
-        // 淇敼鍒嗙被 - 瀹為檯椤圭洰涓簲鏇挎崲涓虹湡瀹濧PI
-        const index = this.deptOptions.findIndex(
-          (obj) => obj.id === this.classifyform.id
-        );
-        if (index > -1) {
-          this.deptOptions[index].name = this.classifyform.name;
-          this.$set(this.deptOptions, index, this.deptOptions[index]);
-        }
-        this.$modal.msgSuccess("淇敼鎴愬姛");
-        this.dialogFormVisible = false;
-        return;
-      }
-
-      if (this.radio === "涓诲垎绫�" && this.classifyform.name) {
-        // 鏂板涓诲垎绫�
-        const newId = Math.max(...this.deptOptions.map((d) => d.id), 0) + 1;
-        this.deptOptions.push({
-          id: newId,
-          name: this.classifyform.name,
-          children: [],
-        });
-        this.$modal.msgSuccess("鏂板鎴愬姛");
-        this.dialogFormVisible = false;
-      } else if (
-        this.radio === "瀛愬垎绫�" &&
-        this.classifyform.pid &&
-        this.classifyform.name
-      ) {
-        // 鏂板瀛愬垎绫�
-        const parent = this.deptOptions.find(
-          (obj) => obj.id === this.classifyform.pid
-        );
-        if (parent) {
-          const newChildId =
-            Math.max(...parent.children.map((c) => c.id), parent.id * 10) + 1;
-          parent.children.push({
-            id: newChildId,
-            name: this.classifyform.name,
-          });
-        }
-        this.$modal.msgSuccess("鏂板鎴愬姛");
-        this.dialogFormVisible = false;
-      } else {
-        this.$modal.msgError("璇峰~鍐欏畬鏁翠俊鎭�");
-      }
-      this.classifyform = {};
-    },
-
-    /** 鍒犻櫎鍒嗙被 */
-    remove(node, data) {
-      if (data.children && data.children.length) {
-        this.$modal
-          .confirm(
-            '鏄惁纭鍒犻櫎涓�绾у垎绫�"' + data.name + '"锛熷垹闄ゅ悗鍏朵笅鍒嗙被灏嗘棤娉曚娇鐢�'
-          )
-          .then(() => {
-            const index = this.deptOptions.findIndex(
-              (obj) => obj.id === data.id
-            );
-            if (index > -1) {
-              this.deptOptions.splice(index, 1);
-            }
-            this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-          })
-          .catch(() => {});
-      } else {
-        this.$modal
-          .confirm('鏄惁纭鍒犻櫎鍒嗙被椤逛负"' + data.name + '"鐨勬暟鎹」锛�')
-          .then(() => {
-            this.deptOptions.forEach((parent) => {
-              const idx = parent.children.findIndex(
-                (child) => child.id === data.id
-              );
-              if (idx > -1) {
-                parent.children.splice(idx, 1);
-              }
-            });
-            this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-          })
-          .catch(() => {});
-      }
-    },
   },
 };
 </script>
 
 <style lang="scss" scoped>
 .smsConfig-management {
-  display: flex;
+  padding: 20px;
 }
 
-.sidecolumn {
-  width: 380px;
-  min-height: 100vh;
-  text-align: center;
-  margin-top: 20px;
-  margin: 20px;
+.main-content {
   padding: 30px;
   background: #fff;
   border: 1px solid #dcdfe6;
   -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
     0 0 6px 0 rgba(0, 0, 0, 0.04);
-
-  .sidecolumn-top {
-    display: flex;
-    justify-content: space-between;
-    .top-wj {
-      font-size: 20px;
-    }
-    .top-tj {
-      font-size: 18px;
-      color: rgb(0, 89, 255);
-      cursor: pointer;
-    }
-  }
-
-  /* 鏍稿績锛氳缃浐瀹氬搴︼紝瓒呭嚭閮ㄥ垎鏄剧ず鐪佺暐鍙� */
-  .tree-node-label {
-    display: inline-block;
-    max-width: 160px;
-    overflow: hidden;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    vertical-align: bottom;
-  }
-
-  /* 鍙�夛細榧犳爣鎮仠鏃跺彇娑堥檺鍒讹紝鏄剧ず鍏ㄦ枃 */
-  .custom-tree-node:hover .tree-node-label {
-    max-width: none;
-    white-space: normal;
-    overflow: visible;
-  }
-
-  .center-ss {
-    margin-top: 30px;
-    .input-with-select {
-      height: 40px !important;
-    }
-  }
-
-  .bottom-fl {
-    margin-top: 30px;
-    display: center !important;
-  }
-}
-
-.leftvlue {
-  width: 80%;
-  margin-top: 20px;
-  padding: 30px;
-  background: #ffff;
-  border: 1px solid #dcdfe6;
-  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
-    0 0 6px 0 rgba(0, 0, 0, 0.04);
-
-  .mulsz {
-    font-size: 20px;
-  }
 }
 
 // 棰勮寮规鏍峰紡
@@ -980,46 +639,8 @@
   }
 }
 
-// 娣卞害閫夋嫨鍣�
 ::v-deep .el-input--medium .el-input__inner {
   height: 40px !important;
-}
-
-::v-deep .el-tree-node__content {
-  display: -webkit-box;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-align: center;
-  -ms-flex-align: center;
-  align-items: center;
-  height: 46px;
-  font-size: 20px;
-  cursor: pointer;
-}
-
-::v-deep .el-tree {
-  position: relative;
-  cursor: default;
-  border-radius: 5px;
-  background: #eff8fe;
-  color: #606266;
-  border: 1px solid #bbe1fa;
-  -webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
-    0 0 6px 0 rgba(0, 0, 0, 0.04);
-}
-
-::v-deep
-  .el-tree--highlight-current
-  .el-tree-node.is-current
-  > .el-tree-node__content {
-  background-color: #7799fb;
-  color: #fff;
-}
-
-::v-deep .el-button--mini.is-circle {
-  padding: 7px;
-  margin: 0;
-  color: red;
 }
 
 // 鎸夐挳鏂囧瓧棰滆壊
diff --git a/src/views/outsideChainwtnew.vue b/src/views/outsideChainwtnew.vue
index 32cd4e8..6125e1c 100644
--- a/src/views/outsideChainwtnew.vue
+++ b/src/views/outsideChainwtnew.vue
@@ -897,11 +897,18 @@
 }
 
 .questionnaire-title {
-  color: #175997;
+  color: #0d3b6b; // 鍩虹娣辫摑鑹�
   font-size: 28px;
   font-weight: 700;
   margin-bottom: 15px;
   line-height: 1.3;
+  text-shadow: 0 1px 3px rgba(255, 255, 255, 0.4);
+
+  // 閽堝澶滈棿妯″紡鐨勪紭鍖�
+  @media (prefers-color-scheme: dark) {
+    color: #4a90d9; // 澶滈棿妯″紡浣跨敤鏇翠寒鐨勮摑鑹�
+    text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
+  }
 }
 
 .questionnaire-description {
@@ -1023,40 +1030,81 @@
 }
 
 .question-options {
-  margin: 15px 0;
+  margin: 12px 0;
+  padding: 0 4px;
 }
-
+// 淇敼 options-group 鐨勬牱寮�
 .options-group {
-  display: flex;
-  flex-direction: column;
-  gap: 12px;
+  display: grid;
+  grid-template-columns: repeat(2, 1fr); // 鏀逛负涓ゅ垪缃戞牸
+  gap: 10px;
+  width: 100%;
 }
+// 閽堝澶氶�夌殑 checkbox-group 涔熷簲鐢ㄥ悓鏍风殑缃戞牸甯冨眬
+:deep(.el-checkbox-group) {
+  display: grid;
+  grid-template-columns: repeat(2, 1fr);
+  gap: 10px;
+  width: 100%;
 
+  @media (max-width: 420px) {
+    grid-template-columns: 1fr;
+  }
+}
+// 淇敼閫夐」鐨勬牱寮�
 .option-radio,
 .option-checkbox {
   margin: 0;
-  padding: 12px 15px;
+  padding: 10px 12px;
   border-radius: 6px;
   border: 1px solid #e0e0e0;
   transition: all 0.2s;
+  display: flex;
+  align-items: center;
+  width: 100%;
+  box-sizing: border-box;
 
   &:hover {
     border-color: #c0c4cc;
     background-color: #f8fafc;
   }
+
+  // 纭繚鍐呴儴鍐呭鑷�傚簲
+  :deep(.el-radio__label),
+  :deep(.el-checkbox__label) {
+    display: inline;
+    font-size: 15px;
+    line-height: 1.4;
+    word-break: break-all; // 鍏佽鍦ㄤ换鎰忓瓧绗﹀鎹㈣
+    white-space: normal; // 鍏佽鑷姩鎹㈣
+    padding-left: 6px;
+  }
+
+  // 纭繚 radio/checkbox 鍥炬爣涓嶅帇缂�
+  :deep(.el-radio__input),
+  :deep(.el-checkbox__input) {
+    flex-shrink: 0;
+  }
 }
 
-:deep(.option-radio .el-radio__label),
-:deep(.option-checkbox .el-checkbox__label) {
-  display: flex;
-  align-items: center;
-  font-size: 16px;
-}
+// :deep(.option-radio .el-radio__label),
+// :deep(.option-checkbox .el-checkbox__label) {
+//   display: flex;
+//   align-items: center;
+//   font-size: 16px;
+// }
 
 .option-text {
-  margin-right: 5px;
+  word-break: break-all;
+  white-space: normal;
+  line-height: 1.4;
 }
-
+// 鍦ㄥ皬灞忓箷涓婅皟鏁翠负鍗曞垪
+@media (max-width: 300px) {
+  .options-group {
+    grid-template-columns: 1fr; // 瓒呭皬灞忓箷鎭㈠鍗曞垪
+  }
+}
 .abnormal-indicator {
   color: #f56c6c;
   font-weight: bold;
diff --git a/src/views/repositoryai/intention/index.vue b/src/views/repositoryai/intention/index.vue
index 8e7a41d..9bf6dd1 100644
--- a/src/views/repositoryai/intention/index.vue
+++ b/src/views/repositoryai/intention/index.vue
@@ -717,7 +717,7 @@
 import store from "@/store";
 
 export default {
-  name: "questionnaire",
+  name: "Intention",
   dicts: ["sys_normal_disable", "sys_user_sex"],
   components: { Treeselect, Regular },
   data() {
diff --git a/src/views/repositoryai/verbaltrick/index.vue b/src/views/repositoryai/verbaltrick/index.vue
index c55aa46..4753701 100644
--- a/src/views/repositoryai/verbaltrick/index.vue
+++ b/src/views/repositoryai/verbaltrick/index.vue
@@ -473,7 +473,7 @@
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
 export default {
-  name: "questionnaire",
+  name: "Verbaltrick",
   components: { Treeselect },
   data() {
     return {
diff --git a/src/views/repositoryai/verbaltrick/particulars/index.vue b/src/views/repositoryai/verbaltrick/particulars/index.vue
index 57d2f7a..7e7beee 100644
--- a/src/views/repositoryai/verbaltrick/particulars/index.vue
+++ b/src/views/repositoryai/verbaltrick/particulars/index.vue
@@ -40,7 +40,7 @@
           :rules="rules"
           label-width="100px"
         >
-        <el-row :gutter="20">
+          <el-row :gutter="20">
             <el-col :span="12">
               <el-form-item label="闂涓绘棬" prop="scriptTopic">
                 <el-input
@@ -52,26 +52,26 @@
             </el-col>
           </el-row>
           <el-form-item label="闂鏂囨湰" prop="scriptContent">
-                <el-input
-                  :rows="2"
-                  type="textarea"
-                  id="scriptContent"
-                  show-word-limit
-                  placeholder="璇疯緭鍏ュ唴瀹�"
-                  v-model.sync="indexform.scriptContent"
-                  @focus="handleInput('scriptContent')"
-                />
-              </el-form-item>
-              <el-form-item label="闂鎻忚堪" prop="scriptDesc">
-                <el-input
-                  :rows="1"
-                  type="textarea"
-                  id="scriptDesc"
-                  show-word-limit
-                  placeholder="璇疯緭鍏ユ弿杩板唴瀹�"
-                  v-model.sync="indexform.scriptDesc"
-                />
-              </el-form-item>
+            <el-input
+              :rows="2"
+              type="textarea"
+              id="scriptContent"
+              show-word-limit
+              placeholder="璇疯緭鍏ュ唴瀹�"
+              v-model.sync="indexform.scriptContent"
+              @focus="handleInput('scriptContent')"
+            />
+          </el-form-item>
+          <el-form-item label="闂鎻忚堪" prop="scriptDesc">
+            <el-input
+              :rows="1"
+              type="textarea"
+              id="scriptDesc"
+              show-word-limit
+              placeholder="璇疯緭鍏ユ弿杩板唴瀹�"
+              v-model.sync="indexform.scriptDesc"
+            />
+          </el-form-item>
           <el-row>
             <el-col :span="12">
               <el-form-item label="璇█" prop="deptId">
@@ -90,7 +90,7 @@
             </el-col>
             <el-col :span="12">
               <el-form-item label="鍙敤鐘舵��" prop="status">
-                <el-select
+                <!-- <el-select
                   v-model="indexform.isAvailable"
                   placeholder="璇烽�夋嫨鐘舵��"
                 >
@@ -101,7 +101,15 @@
                     :value="item.value"
                   >
                   </el-option>
-                </el-select>
+                </el-select> -->
+                <el-radio-group v-model="indexform.isAvailable">
+                  <el-radio
+                    @change="$forceUpdate()"
+                    v-for="(item, index) in usable"
+                    :label="item.value"
+                    >{{ item.label }}</el-radio
+                  >
+                </el-radio-group>
               </el-form-item>
             </el-col>
           </el-row>
@@ -740,9 +748,10 @@
         ivrLibaScriptTargetoptionList: [],
         ivrLibaScriptTagList: [],
         suitway: "2",
-        noMatchText:'鎶辨瓑锛屾垜娌℃湁鍚噦锛屾偍鑳藉啀璇翠竴閬嶅悧?',
-        noClearlyText:'鎶辨瓑锛屾垜娌℃湁鍚竻鎮ㄨ鐨勮瘽锛屾偍鍙互鍐嶈涓�娆″悧?',
-        slienceText:'鎶辨瓑锛屾垜娌℃湁鍚埌鎮ㄨ鐨勮瘽锛屾偍鍙互鍐嶈涓�娆″悧?',
+        isAvailable: "0",
+        noMatchText: "鎶辨瓑锛屾垜娌℃湁鍚噦锛屾偍鑳藉啀璇翠竴閬嶅悧?",
+        noClearlyText: "鎶辨瓑锛屾垜娌℃湁鍚竻鎮ㄨ鐨勮瘽锛屾偍鍙互鍐嶈涓�娆″悧?",
+        slienceText: "鎶辨瓑锛屾垜娌℃湁鍚埌鎮ㄨ鐨勮瘽锛屾偍鍙互鍐嶈涓�娆″悧?",
       },
       mode: [],
       questionclass: [],
@@ -796,7 +805,7 @@
     getverbaltrick() {
       let id = this.$route.query.id;
       this.indexform.language = "鏅�氳瘽";
-      this.indexform.isAvailable = "1";
+      this.indexform.isAvailable = "0";
 
       if (id) {
         getverbaltrick({ id: id }).then((res) => {
@@ -814,7 +823,7 @@
       // 鏍�
       getbaltrickclassify({}).then((res) => {
         this.questionclass = res.rows;
-       if (this.$route.query.assortid) {
+        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 bcd91ea..89b4de0 100644
--- a/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/FirstFollowUp.vue
@@ -236,6 +236,7 @@
                   width="120"
                   key="successRate"
                   prop="successRate"
+                  :render-header="Tooltipcgl"
                 >
                   <template slot-scope="scope">
                     <span class="success-rate">{{
@@ -253,6 +254,7 @@
                   width="120"
                   key="followUpRate"
                   prop="followUpRate"
+                  :render-header="Tooltipsfl"
                 />
                 <el-table-column
                   v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
@@ -261,6 +263,7 @@
                   width="120"
                   key="rate"
                   prop="rate"
+                  :render-header="Tooltipjsl"
                 >
                   <template slot-scope="scope">
                     <el-button
@@ -543,6 +546,7 @@
             width="120"
             key="successRate"
             prop="successRate"
+            :render-header="Tooltipcgl"
           >
             <template slot-scope="scope">
               <span class="success-rate">{{
@@ -560,6 +564,7 @@
             width="120"
             key="followUpRate"
             prop="followUpRate"
+            :render-header="Tooltipsfl"
           />
           <el-table-column
             v-if="orgname != '涓芥按甯備腑鍖婚櫌'"
@@ -568,6 +573,7 @@
             width="120"
             key="rate"
             prop="rate"
+            :render-header="Tooltipjsl"
           >
             <template slot-scope="scope">
               <el-button
@@ -863,7 +869,45 @@
         return indexA - indexB;
       });
     },
-
+    Tooltipcgl(h, { column }) {
+      return h(
+        "el-tooltip",
+        {
+          props: {
+            content: "闅忚鎴愬姛/(闇�闅忚-寰呴殢璁�)",
+            placement: "top",
+            effect: "dark",
+          },
+        },
+        [h("span", column.label)]
+      );
+    },
+    Tooltipjsl(h, { column }) {
+      return h(
+        "el-tooltip",
+        {
+          props: {
+            content: "(搴旈殢璁挎椂闂�+浠诲姟鍛ㄦ湡)灏忎簬瀹屾垚鏃堕棿鍗充负瓒呮椂;(闇�闅忚-瓒呮椂)/闇�闅忚",
+            placement: "top",
+            effect: "dark",
+          },
+        },
+        [h("span", column.label)]
+      );
+    },
+    Tooltipsfl(h, { column }) {
+      return h(
+        "el-tooltip",
+        {
+          props: {
+            content: "(闅忚鎴愬姛+棣栨闅忚澶辫触)/棣栨搴旈殢璁�",
+            placement: "top",
+            effect: "dark",
+          },
+        },
+        [h("span", column.label)]
+      );
+    },
     sortChineseNumber(aRow, bRow) {
       const a = aRow.leavehospitaldistrictname;
       const b = bRow.leavehospitaldistrictname;
@@ -1181,138 +1225,144 @@
     },
     // 涓昏〃瀵煎嚭
     async exportTable() {
-  try {
-    let dateRangeString = "";
-    let sheetNameSuffix = "";
+      try {
+        let dateRangeString = "";
+        let sheetNameSuffix = "";
 
-    // 鍒ゆ柇鏄惁鏄附姘村競涓尰闄�
-    const isLishuiHospital = this.orgname == "涓芥按甯備腑鍖婚櫌";
+        // 鍒ゆ柇鏄惁鏄附姘村競涓尰闄�
+        const isLishuiHospital = this.orgname == "涓芥按甯備腑鍖婚櫌";
 
-    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];
 
-      if (isLishuiHospital) {
-        // 涓芥按甯備腑鍖婚櫌锛氬彧鏄剧ず骞存湀
-        const formatMonthOnly = (dateTimeStr) => {
-          const date = new Date(dateTimeStr);
-          const year = date.getFullYear();
-          const month = date.getMonth() + 1;
-          return `${year}骞�${month}鏈坄;
+          if (isLishuiHospital) {
+            // 涓芥按甯備腑鍖婚櫌锛氬彧鏄剧ず骞存湀
+            const formatMonthOnly = (dateTimeStr) => {
+              const date = new Date(dateTimeStr);
+              const year = date.getFullYear();
+              const month = date.getMonth() + 1;
+              return `${year}骞�${month}鏈坄;
+            };
+            const startDateFormatted = formatMonthOnly(startDateStr);
+            const endDateFormatted = formatMonthOnly(endDateStr);
+            dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`;
+            sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
+          } else {
+            // 鍏朵粬鍖婚櫌锛氭樉绀哄勾鏈堟棩
+            const formatDateForDisplay = (dateTimeStr) => {
+              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;
+          const currentYear = now.getFullYear();
+
+          if (isLishuiHospital) {
+            // 涓芥按甯備腑鍖婚櫌锛氭樉绀哄勾鏈�
+            dateRangeString = `${currentYear}骞�${currentMonth}鏈坄;
+            sheetNameSuffix = `${currentYear}骞�${currentMonth}鏈坄;
+          } else {
+            // 鍏朵粬鍖婚櫌锛氭樉绀烘湀浠�
+            dateRangeString = `${currentMonth}鏈坄;
+            sheetNameSuffix = `${currentMonth}鏈坄;
+          }
+        }
+
+        // 鏍规嵁 serviceType 鐢熸垚闅忚绫诲瀷鍚嶇О
+        let serviceTypeName = "棣栨鍑洪櫌闅忚"; // 鏂囦欢鍚嶄娇鐢ㄧ殑鍚嶇О
+        let sheetTypeName = "棣栨闅忚"; // 宸ヤ綔琛ㄤ娇鐢ㄧ殑鍚嶇О锛堢畝鍖栫増锛�
+
+        if (
+          this.queryParams.serviceType &&
+          Array.isArray(this.queryParams.serviceType) &&
+          this.queryParams.serviceType.length > 0
+        ) {
+          if (this.tasktypes && Array.isArray(this.tasktypes)) {
+            // 杩囨护鍑哄尮閰嶇殑闅忚绫诲瀷
+            const matchedTypes = this.tasktypes.filter((task) =>
+              this.queryParams.serviceType.includes(task.value)
+            );
+
+            if (matchedTypes.length === 1) {
+              // 鍗曚釜绫诲瀷
+              const label = matchedTypes[0].label;
+              serviceTypeName = `棣栨${label}`;
+              sheetTypeName = `棣栨${label}`;
+            } else if (matchedTypes.length > 1) {
+              // 澶氫釜绫诲瀷
+              const typeNames = matchedTypes.map((task) => task.label);
+
+              // 鏂囦欢鍚嶏細鐢ㄦ枩鏉犲垎闅�
+              serviceTypeName = `棣栨${typeNames.join("/")}`;
+
+              // 宸ヤ綔琛ㄥ悕锛氫娇鐢ㄧ涓�涓被鍨嬫垨绠�鍖栧悕绉�
+              if (matchedTypes.length <= 2) {
+                // 濡傛灉鍙湁2涓被鍨嬶紝閮芥樉绀�
+                sheetTypeName = `棣栨${typeNames[0]}绛塦;
+              } else {
+                // 濡傛灉瓒呰繃2涓被鍨嬶紝鍙樉绀虹涓�涓�
+                sheetTypeName = `棣栨${typeNames[0]}绛塦;
+              }
+            } else if (this.queryParams.serviceType.length > 0) {
+              // 濡傛灉娌℃湁鍖归厤鐨勶紝浣跨敤鍘熷鍊�
+              const typeStr = this.queryParams.serviceType.join("/");
+              serviceTypeName = `棣栨${typeStr}`;
+              sheetTypeName = "棣栨闅忚";
+            }
+          } else if (this.queryParams.serviceType.length > 0) {
+            // 濡傛灉娌℃湁 tasktypes锛屼娇鐢ㄥ師濮嬪��
+            const typeStr = this.queryParams.serviceType.join("/");
+            serviceTypeName = `棣栨${typeStr}`;
+            sheetTypeName = "棣栨闅忚";
+          }
+        }
+
+        const excelName = `${serviceTypeName}缁熻琛╛${dateRangeString}.xlsx`;
+
+        // 娓呯悊宸ヤ綔琛ㄥ悕绉帮紝绉婚櫎闈炴硶瀛楃
+        const cleanSheetName = (name) => {
+          // Excel宸ヤ綔琛ㄥ悕涓嶈兘鍖呭惈鐨勫瓧绗�: * ? : \ / [ ]
+          return name.replace(/[*?:\\/[\]]/g, " ");
         };
-        const startDateFormatted = formatMonthOnly(startDateStr);
-        const endDateFormatted = formatMonthOnly(endDateStr);
-        dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`;
-        sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
-      } else {
-        // 鍏朵粬鍖婚櫌锛氭樉绀哄勾鏈堟棩
-        const formatDateForDisplay = (dateTimeStr) => {
-          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;
-      const currentYear = now.getFullYear();
 
-      if (isLishuiHospital) {
-        // 涓芥按甯備腑鍖婚櫌锛氭樉绀哄勾鏈�
-        dateRangeString = `${currentYear}骞�${currentMonth}鏈坄;
-        sheetNameSuffix = `${currentYear}骞�${currentMonth}鏈坄;
-      } else {
-        // 鍏朵粬鍖婚櫌锛氭樉绀烘湀浠�
-        dateRangeString = `${currentMonth}鏈坄;
-        sheetNameSuffix = `${currentMonth}鏈坄;
-      }
-    }
-
-    // 鏍规嵁 serviceType 鐢熸垚闅忚绫诲瀷鍚嶇О
-    let serviceTypeName = "棣栨鍑洪櫌闅忚"; // 鏂囦欢鍚嶄娇鐢ㄧ殑鍚嶇О
-    let sheetTypeName = "棣栨闅忚"; // 宸ヤ綔琛ㄤ娇鐢ㄧ殑鍚嶇О锛堢畝鍖栫増锛�
-
-    if (this.queryParams.serviceType && Array.isArray(this.queryParams.serviceType) && this.queryParams.serviceType.length > 0) {
-      if (this.tasktypes && Array.isArray(this.tasktypes)) {
-        // 杩囨护鍑哄尮閰嶇殑闅忚绫诲瀷
-        const matchedTypes = this.tasktypes.filter(task =>
-          this.queryParams.serviceType.includes(task.value)
+        const worksheetName = cleanSheetName(
+          `${sheetTypeName}缁熻_${sheetNameSuffix}`
         );
 
-        if (matchedTypes.length === 1) {
-          // 鍗曚釜绫诲瀷
-          const label = matchedTypes[0].label;
-          serviceTypeName = `棣栨${label}`;
-          sheetTypeName = `棣栨${label}`;
-        } else if (matchedTypes.length > 1) {
-          // 澶氫釜绫诲瀷
-          const typeNames = matchedTypes.map(task => task.label);
-
-          // 鏂囦欢鍚嶏細鐢ㄦ枩鏉犲垎闅�
-          serviceTypeName = `棣栨${typeNames.join("/")}`;
-
-          // 宸ヤ綔琛ㄥ悕锛氫娇鐢ㄧ涓�涓被鍨嬫垨绠�鍖栧悕绉�
-          if (matchedTypes.length <= 2) {
-            // 濡傛灉鍙湁2涓被鍨嬶紝閮芥樉绀�
-            sheetTypeName = `棣栨${typeNames[0]}绛塦;
-          } else {
-            // 濡傛灉瓒呰繃2涓被鍨嬶紝鍙樉绀虹涓�涓�
-            sheetTypeName = `棣栨${typeNames[0]}绛塦;
-          }
-        } else if (this.queryParams.serviceType.length > 0) {
-          // 濡傛灉娌℃湁鍖归厤鐨勶紝浣跨敤鍘熷鍊�
-          const typeStr = this.queryParams.serviceType.join("/");
-          serviceTypeName = `棣栨${typeStr}`;
-          sheetTypeName = "棣栨闅忚";
+        if (!this.tableData || this.tableData.length === 0) {
+          this.$message.warning(`鏆傛棤${serviceTypeName}鏁版嵁鍙鍑篳);
+          return false;
         }
-      } else if (this.queryParams.serviceType.length > 0) {
-        // 濡傛灉娌℃湁 tasktypes锛屼娇鐢ㄥ師濮嬪��
-        const typeStr = this.queryParams.serviceType.join("/");
-        serviceTypeName = `棣栨${typeStr}`;
-        sheetTypeName = "棣栨闅忚";
+
+        const workbook = new ExcelJS.Workbook();
+        const worksheet = workbook.addWorksheet(worksheetName);
+
+        // 鏋勫缓琛ㄦ牸
+        this.buildExportSheet(worksheet, sheetNameSuffix);
+
+        const buffer = await workbook.xlsx.writeBuffer();
+        const blob = new Blob([buffer], {
+          type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+        });
+        saveAs(blob, excelName);
+
+        this.$message.success("瀵煎嚭鎴愬姛");
+        return true;
+      } catch (error) {
+        console.error("瀵煎嚭澶辫触:", error);
+        this.$message.error(`瀵煎嚭澶辫触: ${error.message}`);
+        return false;
       }
-    }
-
-    const excelName = `${serviceTypeName}缁熻琛╛${dateRangeString}.xlsx`;
-
-    // 娓呯悊宸ヤ綔琛ㄥ悕绉帮紝绉婚櫎闈炴硶瀛楃
-    const cleanSheetName = (name) => {
-      // Excel宸ヤ綔琛ㄥ悕涓嶈兘鍖呭惈鐨勫瓧绗�: * ? : \ / [ ]
-      return name.replace(/[*?:\\/[\]]/g, ' ');
-    };
-
-    const worksheetName = cleanSheetName(`${sheetTypeName}缁熻_${sheetNameSuffix}`);
-
-    if (!this.tableData || this.tableData.length === 0) {
-      this.$message.warning(`鏆傛棤${serviceTypeName}鏁版嵁鍙鍑篳);
-      return false;
-    }
-
-    const workbook = new ExcelJS.Workbook();
-    const worksheet = workbook.addWorksheet(worksheetName);
-
-    // 鏋勫缓琛ㄦ牸
-    this.buildExportSheet(worksheet, sheetNameSuffix);
-
-    const buffer = await workbook.xlsx.writeBuffer();
-    const blob = new Blob([buffer], {
-      type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
-    });
-    saveAs(blob, excelName);
-
-    this.$message.success("瀵煎嚭鎴愬姛");
-    return true;
-  } catch (error) {
-    console.error("瀵煎嚭澶辫触:", error);
-    this.$message.error(`瀵煎嚭澶辫触: ${error.message}`);
-    return false;
-  }
-},
+    },
     // 瀛愯〃瀵煎嚭
     /** 瀵煎嚭鍖荤敓瀛愯〃 */
     async exportDoctorTable(row) {
diff --git a/src/views/sfstatistics/percentage/components/SecondFollowUp.vue b/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
index 2a6b8e7..c97f352 100644
--- a/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
+++ b/src/views/sfstatistics/percentage/components/SecondFollowUp.vue
@@ -234,6 +234,7 @@
                   width="120"
                   key="successRateAgain"
                   prop="successRateAgain"
+                  :render-header="Tooltipcgl"
                 >
                   <template slot-scope="scope">
                     <span class="success-rate">{{
@@ -251,6 +252,7 @@
                   width="120"
                   key="followUpRateAgain"
                   prop="followUpRateAgain"
+                  :render-header="Tooltipsfl"
                 />
                 <el-table-column
                   label="浜哄伐"
@@ -529,6 +531,7 @@
             width="120"
             key="successRateAgain"
             prop="successRateAgain"
+            :render-header="Tooltipcgl"
           >
             <template slot-scope="scope">
               <span class="success-rate">{{
@@ -546,6 +549,7 @@
             width="120"
             key="followUpRateAgain"
             prop="followUpRateAgain"
+            :render-header="Tooltipsfl"
           />
           <el-table-column
             label="浜哄伐"
@@ -707,7 +711,45 @@
           this.loading = false;
         });
     },
-
+    Tooltipcgl(h, { column }) {
+      return h(
+        "el-tooltip",
+        {
+          props: {
+            content: "闅忚鎴愬姛/(闇�闅忚-寰呴殢璁�)",
+            placement: "top",
+            effect: "dark",
+          },
+        },
+        [h("span", column.label)]
+      );
+    },
+    Tooltipjsl(h, { column }) {
+      return h(
+        "el-tooltip",
+        {
+          props: {
+            content: "(搴旈殢璁挎椂闂�+浠诲姟鍛ㄦ湡)灏忎簬瀹屾垚鏃堕棿鍗充负瓒呮椂;(闇�闅忚-瓒呮椂)/闇�闅忚",
+            placement: "top",
+            effect: "dark",
+          },
+        },
+        [h("span", column.label)]
+      );
+    },
+    Tooltipsfl(h, { column }) {
+      return h(
+        "el-tooltip",
+        {
+          props: {
+            content: "(闅忚鎴愬姛+棣栨闅忚澶辫触)/棣栨搴旈殢璁�",
+            placement: "top",
+            effect: "dark",
+          },
+        },
+        [h("span", column.label)]
+      );
+    },
     getAllWardCodes() {
       return this.flatArrayhospit
         .filter((item) => item.value !== "all")
@@ -1107,143 +1149,145 @@
       return rate.toFixed(2) + "%";
     },
     async exportTable() {
-  try {
-    let dateRangeString = "";
-    let sheetNameSuffix = "";
+      try {
+        let dateRangeString = "";
+        let sheetNameSuffix = "";
 
-    // 鍒ゆ柇鏄惁鏄附姘村競涓尰闄�
-    const isLishuiHospital = this.orgname == "涓芥按甯備腑鍖婚櫌";
+        // 鍒ゆ柇鏄惁鏄附姘村競涓尰闄�
+        const isLishuiHospital = this.orgname == "涓芥按甯備腑鍖婚櫌";
 
-    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];
 
-      if (isLishuiHospital) {
-        // 涓芥按甯備腑鍖婚櫌锛氬彧鏄剧ず骞存湀
-        const formatMonthOnly = (dateTimeStr) => {
-          const date = new Date(dateTimeStr);
-          const year = date.getFullYear();
-          const month = date.getMonth() + 1;
-          return `${year}骞�${month}鏈坄;
+          if (isLishuiHospital) {
+            // 涓芥按甯備腑鍖婚櫌锛氬彧鏄剧ず骞存湀
+            const formatMonthOnly = (dateTimeStr) => {
+              const date = new Date(dateTimeStr);
+              const year = date.getFullYear();
+              const month = date.getMonth() + 1;
+              return `${year}骞�${month}鏈坄;
+            };
+            const startDateFormatted = formatMonthOnly(startDateStr);
+            const endDateFormatted = formatMonthOnly(endDateStr);
+            dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`;
+            sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
+          } else {
+            // 鍏朵粬鍖婚櫌锛氭樉绀哄勾鏈堟棩
+            const formatDateForDisplay = (dateTimeStr) => {
+              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;
+          const currentYear = now.getFullYear();
+
+          if (isLishuiHospital) {
+            // 涓芥按甯備腑鍖婚櫌锛氭樉绀哄勾鏈�
+            dateRangeString = `${currentYear}骞�${currentMonth}鏈坄;
+            sheetNameSuffix = `${currentYear}骞�${currentMonth}鏈坄;
+          } else {
+            // 鍏朵粬鍖婚櫌锛氭樉绀烘湀浠�
+            dateRangeString = `${currentMonth}鏈坄;
+            sheetNameSuffix = `${currentMonth}鏈坄;
+          }
+        }
+
+        // 鏍规嵁 serviceType 鐢熸垚闅忚绫诲瀷鍚嶇О
+        let serviceTypeName = "鍑洪櫌闅忚"; // 鏂囦欢鍚嶄娇鐢ㄧ殑鍚嶇О
+        let sheetTypeName = "鍐嶆闅忚"; // 宸ヤ綔琛ㄤ娇鐢ㄧ殑鍚嶇О锛堢畝鍖栫増锛�
+        console.log(this.queryParams.serviceType);
+
+        if (
+          this.queryParams.serviceType &&
+          Array.isArray(this.queryParams.serviceType) &&
+          this.queryParams.serviceType.length > 0
+        ) {
+          if (this.tasktypes && Array.isArray(this.tasktypes)) {
+            // 杩囨护鍑哄尮閰嶇殑闅忚绫诲瀷
+            const matchedTypes = this.tasktypes.filter((task) =>
+              this.queryParams.serviceType.includes(task.value)
+            );
+
+            if (matchedTypes.length === 1) {
+              // 鍗曚釜绫诲瀷
+              const label = matchedTypes[0].label;
+              serviceTypeName = label;
+              sheetTypeName = label;
+            } else if (matchedTypes.length > 1) {
+              // 澶氫釜绫诲瀷
+              const typeNames = matchedTypes.map((task) => task.label);
+
+              // 鏂囦欢鍚嶏細鐢ㄦ枩鏉犲垎闅�
+              serviceTypeName = typeNames.join("/");
+
+              // 宸ヤ綔琛ㄥ悕锛氫娇鐢ㄧ涓�涓被鍨嬫垨绠�鍖栧悕绉�
+              if (matchedTypes.length <= 2) {
+                // 濡傛灉鍙湁2涓被鍨嬶紝閮芥樉绀�
+                sheetTypeName = `${typeNames[0]}绛塦;
+              } else {
+                // 濡傛灉瓒呰繃2涓被鍨嬶紝鍙樉绀虹涓�涓�
+                sheetTypeName = `${typeNames[0]}绛塦;
+              }
+            } else if (this.queryParams.serviceType.length > 0) {
+              // 濡傛灉娌℃湁鍖归厤鐨勶紝浣跨敤鍘熷鍊�
+              const typeStr = this.queryParams.serviceType.join("/");
+              serviceTypeName = typeStr;
+              sheetTypeName = "鍐嶆闅忚";
+            }
+          } else if (this.queryParams.serviceType.length > 0) {
+            // 濡傛灉娌℃湁 tasktypes锛屼娇鐢ㄥ師濮嬪��
+            const typeStr = this.queryParams.serviceType.join("/");
+            serviceTypeName = typeStr;
+            sheetTypeName = "鍐嶆闅忚";
+          }
+        }
+
+        const excelName = `鍐嶆${serviceTypeName}缁熻琛╛${dateRangeString}.xlsx`;
+
+        // 娓呯悊宸ヤ綔琛ㄥ悕绉帮紝绉婚櫎闈炴硶瀛楃
+        const cleanSheetName = (name) => {
+          // Excel宸ヤ綔琛ㄥ悕涓嶈兘鍖呭惈鐨勫瓧绗�: * ? : \ / [ ]
+          return name.replace(/[*?:\\/[\]]/g, " ");
         };
-        const startDateFormatted = formatMonthOnly(startDateStr);
-        const endDateFormatted = formatMonthOnly(endDateStr);
-        dateRangeString = `${startDateFormatted}鑷�${endDateFormatted}`;
-        sheetNameSuffix = `${startDateFormatted}鑷�${endDateFormatted}`;
-      } else {
-        // 鍏朵粬鍖婚櫌锛氭樉绀哄勾鏈堟棩
-        const formatDateForDisplay = (dateTimeStr) => {
-          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;
-      const currentYear = now.getFullYear();
 
-      if (isLishuiHospital) {
-        // 涓芥按甯備腑鍖婚櫌锛氭樉绀哄勾鏈�
-        dateRangeString = `${currentYear}骞�${currentMonth}鏈坄;
-        sheetNameSuffix = `${currentYear}骞�${currentMonth}鏈坄;
-      } else {
-        // 鍏朵粬鍖婚櫌锛氭樉绀烘湀浠�
-        dateRangeString = `${currentMonth}鏈坄;
-        sheetNameSuffix = `${currentMonth}鏈坄;
-      }
-    }
-
-    // 鏍规嵁 serviceType 鐢熸垚闅忚绫诲瀷鍚嶇О
-    let serviceTypeName = "鍑洪櫌闅忚"; // 鏂囦欢鍚嶄娇鐢ㄧ殑鍚嶇О
-    let sheetTypeName = "鍐嶆闅忚"; // 宸ヤ綔琛ㄤ娇鐢ㄧ殑鍚嶇О锛堢畝鍖栫増锛�
-    console.log(this.queryParams.serviceType);
-
-    if (
-      this.queryParams.serviceType &&
-      Array.isArray(this.queryParams.serviceType) &&
-      this.queryParams.serviceType.length > 0
-    ) {
-      if (this.tasktypes && Array.isArray(this.tasktypes)) {
-        // 杩囨护鍑哄尮閰嶇殑闅忚绫诲瀷
-        const matchedTypes = this.tasktypes.filter((task) =>
-          this.queryParams.serviceType.includes(task.value)
+        const worksheetName = cleanSheetName(
+          `鍐嶆${sheetTypeName}缁熻_${sheetNameSuffix}`
         );
 
-        if (matchedTypes.length === 1) {
-          // 鍗曚釜绫诲瀷
-          const label = matchedTypes[0].label;
-          serviceTypeName = label;
-          sheetTypeName = label;
-        } else if (matchedTypes.length > 1) {
-          // 澶氫釜绫诲瀷
-          const typeNames = matchedTypes.map((task) => task.label);
-
-          // 鏂囦欢鍚嶏細鐢ㄦ枩鏉犲垎闅�
-          serviceTypeName = typeNames.join("/");
-
-          // 宸ヤ綔琛ㄥ悕锛氫娇鐢ㄧ涓�涓被鍨嬫垨绠�鍖栧悕绉�
-          if (matchedTypes.length <= 2) {
-            // 濡傛灉鍙湁2涓被鍨嬶紝閮芥樉绀�
-            sheetTypeName = `${typeNames[0]}绛塦;
-          } else {
-            // 濡傛灉瓒呰繃2涓被鍨嬶紝鍙樉绀虹涓�涓�
-            sheetTypeName = `${typeNames[0]}绛塦;
-          }
-        } else if (this.queryParams.serviceType.length > 0) {
-          // 濡傛灉娌℃湁鍖归厤鐨勶紝浣跨敤鍘熷鍊�
-          const typeStr = this.queryParams.serviceType.join("/");
-          serviceTypeName = typeStr;
-          sheetTypeName = "鍐嶆闅忚";
+        if (!this.tableData || this.tableData.length === 0) {
+          this.$message.warning(`鏆傛棤鍐嶆${serviceTypeName}鏁版嵁鍙鍑篳);
+          return false;
         }
-      } else if (this.queryParams.serviceType.length > 0) {
-        // 濡傛灉娌℃湁 tasktypes锛屼娇鐢ㄥ師濮嬪��
-        const typeStr = this.queryParams.serviceType.join("/");
-        serviceTypeName = typeStr;
-        sheetTypeName = "鍐嶆闅忚";
+
+        const workbook = new ExcelJS.Workbook();
+        const worksheet = workbook.addWorksheet(worksheetName);
+
+        // 鏋勫缓琛ㄦ牸
+        this.buildExportSheet(worksheet, sheetNameSuffix);
+
+        const buffer = await workbook.xlsx.writeBuffer();
+        const blob = new Blob([buffer], {
+          type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
+        });
+        saveAs(blob, excelName);
+
+        this.$message.success("瀵煎嚭鎴愬姛");
+        return true;
+      } catch (error) {
+        console.error("瀵煎嚭澶辫触:", error);
+        this.$message.error(`瀵煎嚭澶辫触: ${error.message}`);
+        return false;
       }
-    }
-
-    const excelName = `鍐嶆${serviceTypeName}缁熻琛╛${dateRangeString}.xlsx`;
-
-    // 娓呯悊宸ヤ綔琛ㄥ悕绉帮紝绉婚櫎闈炴硶瀛楃
-    const cleanSheetName = (name) => {
-      // Excel宸ヤ綔琛ㄥ悕涓嶈兘鍖呭惈鐨勫瓧绗�: * ? : \ / [ ]
-      return name.replace(/[*?:\\/[\]]/g, ' ');
-    };
-
-    const worksheetName = cleanSheetName(`鍐嶆${sheetTypeName}缁熻_${sheetNameSuffix}`);
-
-    if (!this.tableData || this.tableData.length === 0) {
-      this.$message.warning(`鏆傛棤鍐嶆${serviceTypeName}鏁版嵁鍙鍑篳);
-      return false;
-    }
-
-    const workbook = new ExcelJS.Workbook();
-    const worksheet = workbook.addWorksheet(worksheetName);
-
-    // 鏋勫缓琛ㄦ牸
-    this.buildExportSheet(worksheet, sheetNameSuffix);
-
-    const buffer = await workbook.xlsx.writeBuffer();
-    const blob = new Blob([buffer], {
-      type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
-    });
-    saveAs(blob, excelName);
-
-    this.$message.success("瀵煎嚭鎴愬姛");
-    return true;
-  } catch (error) {
-    console.error("瀵煎嚭澶辫触:", error);
-    this.$message.error(`瀵煎嚭澶辫触: ${error.message}`);
-    return false;
-  }
-},
+    },
     /** 瀵煎嚭鍖荤敓瀛愯〃锛堝啀娆¢殢璁匡級 */
     async exportDoctorTable(row) {
       try {
diff --git a/vue.config.js b/vue.config.js
index b58c628..e51e9e4 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -40,10 +40,10 @@
         // 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://localhost:8095`,
         // target:`http://35z1t16164.qicp.vip`,
         // target: `http://192.168.100.172:8095`,
-        target: `http://192.168.100.10:8089`,//鍗楀崕
+        // target: `http://192.168.100.10:8089`,//鍗楀崕
         // target: `http://192.168.191.181:8095`,
         changeOrigin: true,
         pathRewrite: {
diff --git "a/\351\232\217\350\256\277\345\244\226\351\223\276\351\200\232\347\224\250.zip" "b/\345\244\226\351\223\276.zip"
similarity index 82%
rename from "\351\232\217\350\256\277\345\244\226\351\223\276\351\200\232\347\224\250.zip"
rename to "\345\244\226\351\223\276.zip"
index 2b288ef..7970190 100644
--- "a/\351\232\217\350\256\277\345\244\226\351\223\276\351\200\232\347\224\250.zip"
+++ "b/\345\244\226\351\223\276.zip"
Binary files differ
diff --git "a/\351\232\217\350\256\277\345\244\226\351\223\276.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\250 \0502\051.zip"
similarity index 82%
rename from "\351\232\217\350\256\277\345\244\226\351\223\276.zip"
rename to "\351\232\217\350\256\277\351\200\232\347\224\250 \0502\051.zip"
index c0df10a..0bf4c55 100644
--- "a/\351\232\217\350\256\277\345\244\226\351\223\276.zip"
+++ "b/\351\232\217\350\256\277\351\200\232\347\224\250 \0502\051.zip"
Binary files differ
diff --git "a/\351\232\217\350\256\277\351\200\232\347\224\250.zip" "b/\351\232\217\350\256\277\351\200\232\347\224\250.zip"
index e14bfbe..46644cf 100644
--- "a/\351\232\217\350\256\277\351\200\232\347\224\250.zip"
+++ "b/\351\232\217\350\256\277\351\200\232\347\224\250.zip"
Binary files differ

--
Gitblit v1.9.3