From bbbc478129f72b26e2ec4a2e981ed8698a96880c Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期四, 22 十月 2026 00:28:18 +0800
Subject: [PATCH] 当service_type=6时,需要根据传入的入院还是离院病区(病区)去后端查询

---
 src/views/followvisit/zysatisfaction/index.vue |  329 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 233 insertions(+), 96 deletions(-)

diff --git a/src/views/followvisit/zysatisfaction/index.vue b/src/views/followvisit/zysatisfaction/index.vue
index 551395e..78603be 100644
--- a/src/views/followvisit/zysatisfaction/index.vue
+++ b/src/views/followvisit/zysatisfaction/index.vue
@@ -2,9 +2,8 @@
   <div class="app-container">
     <statistics-cards
       :cardlist="cardlist"
-      :ycvalue="ycvalue"
-      :jgvalue="jgvalue"
-      :show-warning-condition="orgname == '鐪佺珛鍚屽痉缈犺嫅闄㈠尯'"
+      :show-extra="false"
+      :show-warning-condition="false"
     />
     <el-row :gutter="20">
       <!--鐢ㄦ埛鏁版嵁-->
@@ -16,14 +15,19 @@
         v-show="showSearch"
         label-width="98px"
       >
-        <el-form-item label="浠诲姟鍚嶇О">
-          <el-input
-            v-model="topqueryParams.taskName"
-            placeholder="璇烽�夋嫨浠诲姟鍚嶇О"
-          ></el-input>
+        <el-form-item label="婊℃剰搴︾被鍨�" prop="satisfactionScope">
+          <el-select
+            v-model="satisfactionScope"
+            placeholder="榛樿绂婚櫌"
+            clearable
+            style="width: 150px"
+            @change="handleSatisfactionScopeChange"
+          >
+            <el-option label="绂婚櫌婊℃剰搴�" value="leave" />
+            <el-option label="鍦ㄩ櫌婊℃剰搴�" value="hospital" />
+          </el-select>
         </el-form-item>
-
-        <el-form-item label="鍑洪櫌鏃堕棿">
+        <!-- <el-form-item label="鍑洪櫌鏃堕棿">
           <el-date-picker
             v-model="dateRange"
             style="width: 240px"
@@ -33,39 +37,37 @@
             start-placeholder="寮�濮嬫棩鏈�"
             end-placeholder="缁撴潫鏃ユ湡"
           ></el-date-picker>
-        </el-form-item>
+        </el-form-item> -->
 
+        <el-form-item label="瀹屾垚鏃堕棿">
+          <el-date-picker
+            v-model="dateRangefs"
+            style="width: 240px"
+            value-format="yyyy-MM-dd"
+            type="daterange"
+            range-separator="-"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+          ></el-date-picker>
+        </el-form-item>
         <el-form-item label="鎮h�呭鍚�" prop="sendname">
           <el-input
             v-model="topqueryParams.sendname"
             placeholder="璇疯緭鍏ユ偅鑰呭鍚�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="璇婃柇鍚嶇О" prop="leavediagname">
-          <el-input
-            v-model="topqueryParams.leavediagname"
-            placeholder="璇疯緭鍏ヨ瘖鏂悕绉�"
-          ></el-input>
-        </el-form-item>
-        <el-form-item label="闅忚浜哄憳" prop="updateBy">
+        <el-form-item label="澶勭悊浜哄憳" prop="updateBy">
           <el-input
             v-model="topqueryParams.updateBy"
-            placeholder="璇疯緭鍏ラ殢璁夸汉鍛�"
+            placeholder="璇疯緭鍏ュ鐞嗕汉鍛�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="涓绘不鍖荤敓" prop="drname">
+        <el-form-item label="鎺ヨ瘖鍖荤敓" prop="drname">
           <el-input
             v-model="topqueryParams.drname"
-            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
+            placeholder="璇疯緭鍏ユ帴璇婂尰鐢�"
           ></el-input>
         </el-form-item>
-        <el-form-item label="缁忕鍖荤敓" prop="managementDoctor">
-          <el-input
-            v-model="topqueryParams.managementDoctor"
-            placeholder="璇疯緭鍏ヤ富娌诲尰鐢�"
-          ></el-input>
-        </el-form-item>
-
         <el-form-item label="鎮h�呰寖鍥�" prop="status">
           <el-cascader
             v-model="topqueryParams.scopetype"
@@ -92,12 +94,16 @@
             </el-option>
           </el-select>
         </el-form-item> -->
-        <el-form-item label="闅忚鐘舵��" prop="status">
+        <!-- 澶勭悊鐘舵�侊細淇濈暀绾ц仈鑱斿姩锛堜竴绾уぇ绫� 鈫� 浜岀骇鍏蜂綋鐘舵�侊級锛�
+             闈㈡澘鎸傚湪鏈粍浠跺唴(popper-append-to-body=false)锛岄伩鍏嶄笅鎷夎窇鍒板埆澶� -->
+        <el-form-item label="澶勭悊鐘舵��" prop="status">
           <el-cascader
             v-model="serviceStatusValue"
             placeholder="璇烽�夋嫨"
             :options="serviceStatusOptions"
             :props="cascaderProps"
+            :popper-append-to-body="false"
+            style="width: 180px"
             @change="handleServiceStatusChange"
             clearable
           ></el-cascader>
@@ -194,7 +200,7 @@
             </div>
           </div>
         </el-col>
-        <el-col :span="1.5">
+        <!-- <el-col :span="1.5">
           <div class="documentf">
             <div class="document">
               <el-button
@@ -206,7 +212,7 @@
               >
             </div>
           </div>
-        </el-col>
+        </el-col> -->
         <el-col :span="1.5">
           <div class="documentf">
             <div class="document">
@@ -225,15 +231,6 @@
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="50" align="center" />
-        <el-table-column
-          label="浠诲姟鍚嶇О"
-          fixed
-          width="150"
-          show-overflow-tooltip
-          align="center"
-          key="taskName"
-          prop="taskName"
-        />
         <!-- <el-table-column label="搴忓彿" fixed align="center" key="id" prop="id" /> -->
         <el-table-column
           label="濮撳悕"
@@ -261,7 +258,7 @@
           </template>
         </el-table-column>
         <el-table-column
-          label="闅忚鐘舵��"
+          label="澶勭悊鐘舵��"
           align="center"
           key="sendstateView"
           prop="sendstateView"
@@ -338,20 +335,13 @@
           </template></el-table-column
         >
         <el-table-column
-          label="涓绘不鍖荤敓"
+          label="鎺ヨ瘖鍖荤敓"
           width="120"
           align="center"
           key="drname"
           prop="drname"
         />
 
-        <el-table-column
-          label="缁忕鍖荤敓"
-          align="center"
-          key="managementDoctor"
-          prop="managementDoctor"
-          width="120"
-        />
         <el-table-column
           label="鍑洪櫌澶╂暟"
           width="120"
@@ -400,31 +390,26 @@
         <el-table-column
           label="绉戝"
           align="center"
-          key="deptname"
-          prop="deptname"
+          key="leaveldeptname"
           width="120"
         >
+          <template slot-scope="scope">
+            {{ deptNameOf(scope.row) }}
+          </template>
         </el-table-column>
         <el-table-column
           label="鐥呭尯"
           align="center"
           key="leavehospitaldistrictname"
-          prop="leavehospitaldistrictname"
           width="120"
         >
+          <template slot-scope="scope">
+            {{ wardNameOf(scope.row) }}
+          </template>
         </el-table-column>
 
         <el-table-column
-          label="璇婃柇鍚嶇О"
-          align="center"
-          key="leavediagname"
-          prop="leavediagname"
-          width="120"
-          :show-overflow-tooltip="true"
-        >
-        </el-table-column>
-        <el-table-column
-          label="闅忚浜哄憳"
+          label="澶勭悊浜哄憳"
           align="center"
           key="updateBy"
           prop="updateBy"
@@ -959,6 +944,8 @@
       ids: [],
       // 闈炲崟涓鐢�
       single: true,
+      jgvalue: 0,
+
       // 闈炲涓鐢�
       multiple: true,
       // 鏄剧ず鎼滅储鏉′欢
@@ -989,7 +976,7 @@
       dynamicTags: ["閫夐」涓�", "閫夐」浜�", "閫夐」涓�"], //閫夐」
       inputVisible: false,
       Labelchange: false,
-      ycvalue: "",
+      ycvalue: 0,
       yfsvalue: "",
       inputValue: "",
       preachform: "",
@@ -1024,25 +1011,24 @@
       loading: false,
       cardlist: [
         {
-          name: "鎮h�呮湇鍔℃�婚噺",
-          value: 0,
-        },
-
-        {
-          name: "鏃犻渶闅忚",
+          name: "浣忛櫌鎬婚噺",
           value: 0,
         },
         {
-          name: "闇�闅忚",
+          name: "鍙戦�佷换鍔¢噺",
           value: 0,
         },
         {
-          name: "寰呴殢璁�",
+          name: "寰呭畬鎴�",
           value: 0,
         },
         {
           name: "宸插畬鎴�",
           value: 0,
+        },
+        {
+          name: "瀹屾垚鐜�",
+          value: "0%",
         },
       ],
       // 绾ц仈閫夋嫨鍣ㄧ粦瀹氬��
@@ -1123,6 +1109,8 @@
           label: "搴旈殢璁挎棩鏈�(鍊掑簭)",
         },
       ],
+      // 婊℃剰搴︾被鍨嬶細leave=绂婚櫌婊℃剰搴︼紙鎸夌闄㈢瀹�/鐥呭尯鏌ワ級锛宧ospital=鍦ㄩ櫌婊℃剰搴︼紙鎸夊湪闄㈢瀹�/鐥呭尯鏌ワ級
+      satisfactionScope: "leave",
       // 鏌ヨ鍙傛暟
       topqueryParams: {
         pageNum: 1,
@@ -1221,6 +1209,8 @@
           },
         },
       },
+      orgname: "",
+
       amendtag: false,
       errtype: "",
       leavehospitaldistrictcode: "",
@@ -1235,6 +1225,8 @@
     this.serviceState = store.getters.serviceState;
     this.checkboxlist = store.getters.checkboxlist;
     this.errtype = this.$route.query.errtype;
+    this.orgname = localStorage.getItem("orgname");
+
     this.leavehospitaldistrictcode =
       this.$route.query.leavehospitaldistrictcode;
     this.sourcetype[0].children = store.getters.belongDepts.map((dept) => {
@@ -1294,18 +1286,23 @@
         this.$message.warning("鏈厤缃瀹�/鐥呭尯鐩稿叧鏉冮檺涓嶅彲鏌ヨ");
         return Promise.reject(new Error("鏃犳潈闄愭煡璇�"));
       }
-      getTaskservelist(this.topqueryParams).then((response) => {
+      getTaskservelist(this.buildScopePayload(this.topqueryParams)).then((response) => {
         this.userList = response.rows[0].serviceSubtaskList;
         this.total = response.total;
         if (refresh) {
-          this.cardlist[0].value =
+          // 浣忛櫌鎬婚噺锛氭殏鏃犲瓧娈碉紝淇濇寔 0
+          // 鍙戦�佷换鍔¢噺 = 鎮h�呮湇鍔℃�婚噺锛堟棤闇�闅忚 + 闇�闅忚锛�
+          this.cardlist[1].value =
             Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0;
-          // this.cardlist[1].value = response.rows[0].wzx;
-          this.cardlist[1].value = response.rows[0].wxsf || 0;
           this.ycvalue = response.rows[0].yc;
-          this.cardlist[2].value = response.rows[0].xsf || 0;
-          this.cardlist[3].value = response.rows[0].dsf || 0;
-          this.cardlist[4].value = response.rows[0].ywc || 0;
+          this.cardlist[2].value = response.rows[0].dsf || 0; // 寰呭畬鎴� = 寰呴殢璁�
+          this.cardlist[3].value = response.rows[0].ywc || 0; // 宸插畬鎴� = 宸查殢璁�
+          // 瀹屾垚鐜� = 宸插畬鎴� / (寰呭畬鎴� + 宸插畬鎴�)
+          const dsf = Number(response.rows[0].dsf) || 0;
+          const ywc = Number(response.rows[0].ywc) || 0;
+          const doneTotal = dsf + ywc;
+          this.cardlist[4].value =
+            doneTotal > 0 ? ((ywc / doneTotal) * 100).toFixed(2) + "%" : "0%";
           this.yfsvalue = response.rows[0].yfs;
         }
         this.loading = false;
@@ -1334,6 +1331,47 @@
         this.total = response.total;
       });
     },
+
+    // 鍒囨崲婊℃剰搴︾被鍨嬶紙绂婚櫌/鍦ㄩ櫌锛夊悗閲嶆柊鏌ヨ
+    handleSatisfactionScopeChange() {
+      this.topqueryParams.pageNum = 1;
+      this.getList(1);
+    },
+
+    // 鎸夋弧鎰忓害绫诲瀷缁勮绉戝/鐥呭尯鏉′欢锛�
+    // 绂婚櫌婊℃剰搴� => leaveldeptcodes / leavehospitaldistrictcodes锛�
+    // 鍦ㄩ櫌婊℃剰搴� => deptcodes / hospitaldistrictcodes锛堝湪闄㈢瀹ゃ�佸湪闄㈢梾鍖猴級
+    buildScopePayload(params) {
+      const payload = { ...params };
+      if (this.satisfactionScope === "hospital") {
+        payload.deptcodes = params.leaveldeptcodes || [];
+        payload.hospitaldistrictcodes = params.leavehospitaldistrictcodes || [];
+        delete payload.leaveldeptcodes;
+        delete payload.leavehospitaldistrictcodes;
+      }
+      return payload;
+    },
+
+    // 绉戝鍚嶇О锛氬湪闄㈡弧鎰忓害浼樺厛鍙栧湪闄㈢瀹わ紝鍏朵綑鍙栧嚭闄㈢瀹�
+    deptNameOf(row) {
+      if (!row) return "-";
+      return (
+        (this.satisfactionScope === "hospital"
+          ? row.deptname || row.leaveldeptname
+          : row.leaveldeptname || row.deptname) || "-"
+      );
+    },
+
+    // 鐥呭尯鍚嶇О锛氬湪闄㈡弧鎰忓害浼樺厛鍙栧湪闄㈢梾鍖猴紝鍏朵綑鍙栧嚭闄㈢梾鍖�
+    wardNameOf(row) {
+      if (!row) return "-";
+      return (
+        (this.satisfactionScope === "hospital"
+          ? row.hospitaldistrictname || row.leavehospitaldistrictname
+          : row.leavehospitaldistrictname || row.hospitaldistrictname) || "-"
+      );
+    },
+
     // 鏈嶅姟鐘舵�佸彉鏇村鐞�
     handleServiceStatusChange(value) {
       // 娓呯┖閫夋嫨
@@ -1366,13 +1404,17 @@
       }
     },
     affiliation() {
+      this.resetQuerykj();
+
       this.topqueryParams.managementDoctorCode = store.getters.hisUserId;
 
       this.getList(1);
     },
     onthatday() {
-      this.topqueryParams.startSendDateTime = this.getCurrentDate();
-      this.topqueryParams.endSendDateTime = this.getCurrentDate();
+      this.resetQuerykj();
+
+      this.topqueryParams.finishtimeStart = this.getCurrentDate();
+      this.topqueryParams.finishtimeEnd = this.getCurrentDate();
       this.getList(1);
     },
     getCurrentDate() {
@@ -1380,13 +1422,12 @@
       return now.toISOString().slice(0, 10); // 鎴彇鍓�10涓瓧绗︼紝鍗� YYYY-MM-DD
     },
     buidegetTasklist(type) {
-      if (this.topqueryParams.searchscope == 3) {
-        this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
-          (obj) => obj.deptCode
-        );
-        this.topqueryParams.leavehospitaldistrictcodes =
-          store.getters.belongWards.map((obj) => obj.districtCode);
-      }
+      // 鐢ㄦ埛鏉冮檺涓嬫墍鏈夊緟闅忚浠诲姟锛氫紶閫掑叏閮ㄧ瀹ゅ拰鐥呭尯
+      this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
+        (obj) => obj.deptCode
+      );
+      this.topqueryParams.leavehospitaldistrictcodes =
+        store.getters.belongWards.map((obj) => obj.districtCode);
       // 鎺ュ彈寮傚父璺宠浆
       if (this.errtype) {
         this.topqueryParams.leavehospitaldistrictcodes.push(
@@ -1398,7 +1439,7 @@
         pageSize: 10,
         leavehospitaldistrictcodes:
           this.topqueryParams.leavehospitaldistrictcodes,
-        sendstates: [2, 3],
+        sendstateView: 1,
         leaveldeptcodes: this.topqueryParams.leaveldeptcodes,
       };
       buidegetTasklist(obj).then((response) => {
@@ -1459,7 +1500,7 @@
         this.options = [];
       }
     },
-    // 褰卞儚闅忚鐘舵�佷慨鏀�
+    // 褰卞儚澶勭悊鐘舵�佷慨鏀�
     handleStatusChange(row) {
       let text = row.status === "0" ? "鍚敤" : "鍋滅敤";
       this.$modal
@@ -1503,10 +1544,10 @@
           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.startSendDateTime = this.dateRangefs[0];
-      this.topqueryParams.endSendDateTime = this.dateRangefs[1];
+      // this.topqueryParams.startOutHospTime = this.dateRange[0];
+      // this.topqueryParams.endOutHospTime = this.dateRange[1];
+      this.topqueryParams.finishtimeStart = this.dateRangefs[0];
+      this.topqueryParams.finishtimeEnd = this.dateRangefs[1];
       this.getList(refresh);
     },
     // 鎮h�呰寖鍥村鐞�
@@ -1546,6 +1587,26 @@
         leavehospitaldistrictcodes: [],
       };
       this.handleQuery(1);
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuerykj() {
+      this.dateRange = [];
+      this.dateRangefs = [];
+      this.serviceStatusValue = null;
+      this.topqueryParams = {
+        pageNum: 1,
+        pageSize: 10,
+        sendstate: null,
+
+        sendstateView: null,
+        sort: 2, //0 鍑洪櫌鏃堕棿(姝e簭)    1 鍑洪櫌鏃堕棿(鍊掑簭)   2 鍙戦�佹椂闂�(姝e簭)    3 鍙戦�佹椂闂�(鍊掑簭)
+        serviceType: 6,
+        searchscope: 3,
+        visitCount: 1,
+        scopetype: [],
+        leaveldeptcodes: [],
+        leavehospitaldistrictcodes: [],
+      };
     },
     handleSelectionChange(rows) {
       this.selectedRows = rows.map((row) => {
@@ -1843,7 +1904,7 @@
       this.download(
         "smartor/serviceSubtask/patItemExport",
         {
-          ...this.topqueryParams,
+          ...this.buildScopePayload(this.topqueryParams),
         },
         `user_${new Date().getTime()}.xlsx`
       );
@@ -1874,8 +1935,8 @@
 <style lang="scss" scoped>
 .el-button--primary.is-plain {
   color: #ffffff;
-  background: #409eff;
-  border-color: #4fabe9;
+  background: #5b7cfa;
+  border-color: #5b7cfa;
 }
 
 .document {
@@ -2071,4 +2132,80 @@
 //     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-form--inline .el-form-item {
+  position: relative;
+}
+
+/* 闅愯棌鍒嗗壊绾� */
+::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