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

---
 src/views/patient/propaganda/index.vue |  279 +++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 239 insertions(+), 40 deletions(-)

diff --git a/src/views/patient/propaganda/index.vue b/src/views/patient/propaganda/index.vue
index 607a911..f1b9f34 100644
--- a/src/views/patient/propaganda/index.vue
+++ b/src/views/patient/propaganda/index.vue
@@ -37,7 +37,7 @@
             placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="鎮h�呰寖鍥�" prop="status">
+        <!-- <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-select
             v-model="topqueryParams.searchscope"
             placeholder="璇烽�夋嫨鎮h�呰寖鍥�"
@@ -50,6 +50,17 @@
             >
             </el-option>
           </el-select>
+        </el-form-item> -->
+        <el-form-item label="鎮h�呰寖鍥�" prop="status">
+          <el-cascader
+            v-model="topqueryParams.scopetype"
+            placeholder="榛樿鍏ㄩ儴"
+            :options="sourcetype"
+            filterable
+            clearable
+            :props="{ expandTrigger: 'hover' }"
+            @change="handleChange"
+          ></el-cascader>
         </el-form-item>
 
         <el-form-item label="瀹f暀鐘舵��" prop="status">
@@ -89,16 +100,15 @@
       </el-form>
       <el-divider></el-divider>
       <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
+        <!-- <el-col :span="1.5">
           <el-button
             type="primary"
-            plain
             icon="el-icon-plus"
             size="medium"
             @click="handleAdd"
             >鏂板</el-button
           >
-        </el-col>
+        </el-col> -->
         <el-col :span="1.5">
           <div class="documentf">
             <div class="document">
@@ -148,7 +158,6 @@
         height="560"
         @selection-change="handleSelectionChange"
       >
-        <el-table-column type="selection" width="50" align="center" />
         <el-table-column
           label="浠诲姟鍚嶇О"
           fixed
@@ -239,7 +248,7 @@
 
         <el-table-column
           label="鍑洪櫌鏃ユ湡"
-          width="200"
+          width="146"
           align="center"
           key="endtime"
           prop="endtime"
@@ -252,11 +261,11 @@
           label="搴斿鏁欐棩鏈�"
           width="200"
           align="center"
-          key="longSendTime"
-          prop="longSendTime"
+          key="visitTime"
+          prop="visitTime"
         >
           <template slot-scope="scope">
-            <span>{{ formatTime(scope.row.longSendTime) }}</span>
+            <span>{{ formatTime(scope.row.visitTime) }}</span>
           </template></el-table-column
         >
         <el-table-column
@@ -267,9 +276,7 @@
           prop="endDay"
         >
           <template slot-scope="scope">
-            <span>{{
-              scope.row.endDay ? scope.row.endDay + "澶�" : ""
-            }}</span>
+            <span>{{ scope.row.endDay ? scope.row.endDay + "澶�" : "" }}</span>
           </template>
         </el-table-column>
         <el-table-column
@@ -293,7 +300,6 @@
           key="drname"
           prop="drname"
         />
-
 
         <!-- <el-table-column
           label="鐥呭巻鍙�"
@@ -367,20 +373,26 @@
           </template>
         </el-table-column> -->
         <el-table-column
-        fixed="right"
           label="浠诲姟缁撴灉璁板綍"
           width="120"
           align="center"
           key="remark"
           prop="remark"
         >
-        <template slot-scope="scope" v-if="scope.row.remark">
-          <el-tag type="success" v-if="scope.row.sendstate!=5&&scope.row.sendstate!=4&&scope.row.remark">{{ scope.row.remark }}</el-tag>
-          <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
-        </template>
-      </el-table-column>
+          <template slot-scope="scope" v-if="scope.row.remark">
+            <el-tag
+              type="success"
+              v-if="
+                scope.row.sendstate != 5 &&
+                scope.row.sendstate != 4 &&
+                scope.row.remark
+              "
+              >{{ scope.row.remark }}</el-tag
+            >
+            <el-tag type="warning" v-else>{{ scope.row.remark }}</el-tag>
+          </template>
+        </el-table-column>
         <el-table-column
-        fixed="right"
           label="瀹f暀鏃堕棿"
           sortable
           align="center"
@@ -389,6 +401,17 @@
         >
           <template slot-scope="scope">
             <span>{{ parseTime(scope.row.finishtime) }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column fixed="right" label="鎿嶄綔" align="center" width="100">
+          <template slot-scope="scope">
+            <el-button
+              size="medium"
+              type="text"
+              icon="el-icon-view"
+              @click="previewTemplate(scope.row)"
+              >棰勮</el-button
+            >
           </template>
         </el-table-column>
         <!-- <el-table-column
@@ -543,6 +566,10 @@
         >
       </span>
     </el-dialog>
+    <!-- 瀹f暀妯℃澘棰勮 -->
+    <el-dialog title="妯℃澘棰勮" :visible.sync="previewtf" width="60%">
+      <div v-html="htmlRichText"></div>
+    </el-dialog>
   </div>
 </template>
 
@@ -556,10 +583,11 @@
   resetUserPwd,
   changeUserStatus,
 } from "@/api/system/user";
-import { getTaskservelist } from "@/api/AiCentre/index";
+import { getTaskservelist, getlibrarylist } from "@/api/AiCentre/index";
 import Treeselect from "@riophae/vue-treeselect";
 import store from "@/store";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
+import axios from "axios";
 
 export default {
   name: "Discharge",
@@ -598,10 +626,28 @@
       ruleForm: {
         type: [],
       },
+      sourcetype: [
+        {
+          value: 1,
+          label: "绉戝",
+          children: [],
+        },
+        {
+          value: 2,
+          label: "鐥呭尯",
+          children: [],
+        },
+        {
+          value: 3,
+          label: "鍏ㄩ儴",
+        },
+      ],
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       inputValue: "",
       previewVisible: false, //闂ㄨ瘖瀹f暀棰勮寮规
+      previewtf: false, //瀹f暀妯℃澘棰勮寮规
+      htmlRichText: "", //瀹f暀妯℃澘棰勮瀵屾枃鏈�
       radio: "",
       radios: [],
       previewtype: 2, //棰勮闂ㄨ瘖瀹f暀绫诲瀷
@@ -723,8 +769,10 @@
         pageNum: 1,
         pageSize: 10,
         serviceType: 4,
-        searchscope: 2,
-        sendstate:2,
+        searchscope: 3,
+        sendstate: 2,
+        leaveldeptcodes: [],
+        leavehospitaldistrictcodes: [],
       },
       propss: { multiple: true },
       options: [],
@@ -754,6 +802,10 @@
           value: 6,
           label: "宸插畬鎴�",
         },
+        {
+          value: 7,
+          label: "瓒呮椂",
+        },
       ],
       topicoptionsyj: [
         {
@@ -773,6 +825,19 @@
   watch: {},
   created() {
     this.serviceState = store.getters.serviceState;
+    this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
+      return {
+        label: dept.deptName,
+        value: dept.deptCode,
+      };
+    });
+    this.sourcetype[1].children = store.getters.belongWards.map((dept) => {
+      return {
+        label: dept.districtName,
+        value: dept.districtCode,
+      };
+    });
+
     this.getList();
     this.getConfigKey("sys.user.initPassword").then((response) => {
       this.initPassword = response.msg;
@@ -790,16 +855,7 @@
   methods: {
     /** 鏌ヨ闂ㄨ瘖瀹f暀鏈嶅姟鍒楄〃 */
     getList() {
-      if (this.topqueryParams.searchscope == 1) {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.topqueryParams.leavehospitaldistrictcodes = null;
-      } else if (this.topqueryParams.searchscope == 2) {
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
-        this.topqueryParams.leaveldeptcodes = null;
-      } else {
+      if (this.topqueryParams.searchscope == 3) {
         this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
           (obj) => obj.deptCode
         );
@@ -807,10 +863,22 @@
           store.getters.belongWards.map((obj) => obj.districtCode);
       }
       this.loading = true;
-      if (this.topqueryParams.leavehospitaldistrictcodes[0]&&this.topqueryParams.leaveldeptcodes[0]) {
-        this.topqueryParams.deptOrDistrict=2;
-      }else{
-        this.topqueryParams.deptOrDistrict=1;
+      console.log(this.topqueryParams.leavehospitaldistrictcodes, "123");
+      console.log(this.topqueryParams.leaveldeptcodes, "344");
+
+      if (
+        this.topqueryParams.leavehospitaldistrictcodes[0] &&
+        this.topqueryParams.leaveldeptcodes[0]
+      ) {
+        this.topqueryParams.deptOrDistrict = 2;
+      } else {
+        this.topqueryParams.deptOrDistrict = 1;
+      }
+      console.log(55);
+
+      if (!this.followupAuthority()) {
+        this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
+        return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
       }
       getTaskservelist(this.topqueryParams).then((response) => {
         this.userList = response.rows[0].serviceSubtaskList;
@@ -827,6 +895,48 @@
     Referencequestion(row) {
       this.previewVisible = true;
     },
+    // 棰勮瀹f暀妯℃澘锛堥�氳繃 libtemplateid 鏌ヨ妯℃澘淇℃伅锛�
+    previewTemplate(row) {
+      if (!row.libtemplateid) {
+        this.$message.warning("璇ヤ换鍔℃湭鍏宠仈瀹f暀妯℃澘");
+        return;
+      }
+      this.htmlRichText = null;
+      this.previewtf = true;
+      getlibrarylist({ id: row.libtemplateid })
+        .then((res) => {
+          const tpl = (res.rows && res.rows[0]) || null;
+          if (!tpl || !tpl.htmlRichText) {
+            this.$message.warning("璇ユā鏉挎殏鏃犻瑙堝唴瀹�");
+            return;
+          }
+          axios
+            .get(tpl.htmlRichText)
+            .then((response) => {
+              this.htmlRichText = response.data;
+              this.htmlRichText = this.addStyleToImages(this.htmlRichText);
+            })
+            .catch(() => {
+              this.$message.error("鑾峰彇妯℃澘鍐呭澶辫触");
+            });
+        })
+        .catch(() => {
+          this.$message.error("鏌ヨ妯℃澘淇℃伅澶辫触");
+        });
+    },
+    // 淇瀵屾枃鏈浘鐗囪矾寰勪笌鏍峰紡
+    addStyleToImages(html) {
+      if (!html) return html;
+      let processedHtml = html.replace(
+        /\/aifollowup\/aifollowup\//g,
+        "/aifollowup/"
+      );
+      processedHtml = processedHtml.replace(
+        /<img([^>]*)style=(['"])(?:(?!\2).)*\2([^>]*)>/g,
+        '<img$1style="width:100%;height:auto;"$3>'
+      );
+      return processedHtml;
+    },
     // 娣诲姞寮规鎼滅储
     remoteMethod(query) {
       if (query !== "") {
@@ -839,6 +949,24 @@
         }, 200);
       } else {
         this.options = [];
+      }
+    },
+    // 鎮h�呰寖鍥村鐞�
+    handleChange(value) {
+      let type = value[0];
+      let code = value.slice(-1)[0];
+      this.topqueryParams.leavehospitaldistrictcodes = [];
+      this.topqueryParams.leaveldeptcodes = [];
+      if (type == 1) {
+        this.topqueryParams.leaveldeptcodes.push(code);
+        this.topqueryParams.leavehospitaldistrictcodes = [];
+        this.topqueryParams.searchscope = 1;
+      } else if (type == 2) {
+        this.topqueryParams.leavehospitaldistrictcodes.push(code);
+        this.topqueryParams.leaveldeptcodes = [];
+        this.topqueryParams.searchscope = 2;
+      } else {
+        this.topqueryParams.searchscope = 3;
       }
     },
     // 闂ㄨ瘖瀹f暀鐘舵�佷慨鏀�
@@ -910,7 +1038,7 @@
         pageNum: 1,
         pageSize: 10,
         serviceType: 4,
-        sendstate:2,
+        sendstate: 2,
       };
       this.handleQuery();
     },
@@ -1031,8 +1159,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -1157,4 +1285,75 @@
 //     font-size: 24px;
 //   }
 // }
+/* ================= 娓呮柊楂樼骇绠�绾﹂ ================= */
+.app-container {
+  background: #f5f7fb;
+  border-radius: 14px;
+  padding: 20px;
+}
+
+/* 鏌ヨ琛ㄥ崟锛氱櫧鑹插渾瑙掑崱鐗� */
+::v-deep .el-form--inline {
+  background: #ffffff;
+  border-radius: 14px;
+  padding: 22px 22px 8px;
+  margin-bottom: 18px;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::v-deep .el-divider {
+  display: none;
+}
+
+/* 宸ュ叿鏍忓簳閮ㄩ棿璺� */
+.mb8 {
+  margin-bottom: 18px;
+}
+
+/* 鎸夐挳锛氬渾瑙� + 鏌斿拰杩囨浮 */
+::v-deep .el-button {
+  border-radius: 8px;
+  font-weight: 500;
+  transition: all 0.25s ease;
+}
+
+/* 涓绘寜閽細娓呮柊闈涜摑 */
+::v-deep .el-button--primary:not(.is-plain) {
+  background: #5b7cfa;
+  border-color: #5b7cfa;
+}
+::v-deep .el-button--primary:not(.is-plain):hover,
+::v-deep .el-button--primary:not(.is-plain):focus {
+  background: #7593fb;
+  border-color: #7593fb;
+}
+
+/* 琛ㄦ牸锛氱櫧鑹插渾瑙掑崱鐗� + 鏌斿拰琛ㄥご */
+::v-deep .el-table {
+  border-radius: 14px;
+  overflow: hidden;
+  box-shadow: 0 2px 12px rgba(31, 45, 61, 0.05);
+}
+::v-deep .el-table::before {
+  display: none;
+}
+::v-deep .el-table th {
+  background: #f7f9fd !important;
+  color: #3f4d63;
+  font-weight: 600;
+}
+::v-deep .el-table td {
+  padding: 12px 0;
+}
+
+/* 鏍囩鍦嗚 */
+::v-deep .el-tag {
+  border-radius: 6px;
+}
+
+/* 鍒嗛〉闂磋窛 */
+::v-deep .pagination-container {
+  padding-top: 18px;
+}
 </style>

--
Gitblit v1.9.3