From c441e5f3cb734b5db5e893536f267b13814796f5 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 11 三月 2026 10:12:06 +0800
Subject: [PATCH] 青岛推送

---
 src/views/business/ethicalReview/index.vue |  305 ++++++++++++++++++++++++++++----------------------
 1 files changed, 172 insertions(+), 133 deletions(-)

diff --git a/src/views/business/ethicalReview/index.vue b/src/views/business/ethicalReview/index.vue
index f1e75a8..e0cb1be 100644
--- a/src/views/business/ethicalReview/index.vue
+++ b/src/views/business/ethicalReview/index.vue
@@ -8,37 +8,47 @@
         :inline="true"
         label-width="100px"
       >
-        <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+        <el-form-item label="浣忛櫌鍙�" prop="inpatientno">
           <el-input
-            v-model="queryParams.hospitalNo"
+            v-model="queryParams.inpatientno"
             placeholder="璇疯緭鍏ヤ綇闄㈠彿"
             clearable
             style="width: 200px"
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="鎹愮尞鑰呭鍚�" prop="donorName">
+        <el-form-item label="鎹愮尞鑰呭鍚�" prop="name">
           <el-input
-            v-model="queryParams.donorName"
+            v-model="queryParams.name"
             placeholder="璇疯緭鍏ユ崘鐚�呭鍚�"
             clearable
             style="width: 200px"
             @keyup.enter.native="handleQuery"
           />
         </el-form-item>
-        <el-form-item label="浼︾悊缁撹" prop="ethicsConclusion">
+        <el-form-item label="妗堜緥缂栧彿" prop="caseNo">
+          <el-input
+            v-model="queryParams.caseNo"
+            placeholder="璇疯緭鍏ユ渚嬬紪鍙�"
+            clearable
+            style="width: 200px"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="浼︾悊鐘舵��" prop="status">
           <el-select
-            v-model="queryParams.ethicsConclusion"
-            placeholder="璇烽�夋嫨浼︾悊缁撹"
+            v-model="queryParams.status"
+            placeholder="璇烽�夋嫨浼︾悊鐘舵��"
             clearable
             style="width: 200px"
           >
-            <el-option label="瀹℃煡涓�" value="reviewing" />
-            <el-option label="鍚屾剰" value="approved" />
-            <el-option label="淇敼鍚庡悓鎰�" value="approved_with_modifications" />
-            <el-option label="淇敼鍚庨噸瀹�" value="re-review" />
-            <el-option label="涓嶅悓鎰�" value="disapproved" />
-            <el-option label="缁堟瀹℃煡" value="terminated" />
+            <el-option label="鍏ㄩ儴" value="" />
+            <el-option
+              v-for="dict in dict.type.sys_ethical"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            />
           </el-select>
         </el-form-item>
         <el-form-item label="瀹℃煡鏃堕棿鑼冨洿" prop="reviewTimeRange">
@@ -76,13 +86,6 @@
             >淇敼</el-button
           >
           <el-button
-            type="danger"
-            icon="el-icon-delete"
-            :disabled="multiple"
-            @click="handleDelete"
-            >鍒犻櫎</el-button
-          >
-          <el-button
             type="warning"
             icon="el-icon-download"
             @click="handleExport"
@@ -91,7 +94,7 @@
           <el-button
             type="info"
             icon="el-icon-check"
-            :disabled="multiple"
+            :disabled="single"
             @click="handleEndReview"
             >缁撴潫瀹℃煡</el-button
           >
@@ -113,90 +116,115 @@
       >
         <el-table-column type="selection" width="55" align="center" />
         <el-table-column
-          label="浣忛櫌鍙�"
+          label="妗堜緥缂栧彿"
           align="center"
-          prop="hospitalNo"
+          prop="caseNo"
           width="120"
         />
         <el-table-column
-          label="鎹愮尞鑰呭鍚�"
+          label="鎹愮尞鑰呯紪鍙�"
           align="center"
-          prop="donorName"
+          prop="donorno"
           width="120"
         />
-        <el-table-column label="鎬у埆" align="center" prop="gender" width="80">
+        <el-table-column
+          label="濮撳悕"
+          align="center"
+          prop="name"
+          width="100"
+        />
+        <el-table-column
+          label="浣忛櫌鍙�"
+          align="center"
+          prop="inpatientno"
+          width="120"
+        />
+        <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
           <template slot-scope="scope">
             <dict-tag
               :options="dict.type.sys_user_sex"
-              :value="parseInt(scope.row.gender)"
+              :value="scope.row.sex"
             />
           </template>
         </el-table-column>
         <el-table-column label="骞撮緞" align="center" prop="age" width="80" />
         <el-table-column
+          label="琛�鍨�"
+          align="center"
+          prop="bloodtype"
+          width="80"
+        />
+        <el-table-column
+          label="璇佷欢鍙风爜"
+          align="center"
+          prop="idcardno"
+          width="180"
+        />
+        <el-table-column
           label="鐤剧梾璇婃柇"
           align="center"
-          prop="diagnosis"
+          prop="diagnosisname"
           min-width="180"
           show-overflow-tooltip
         />
         <el-table-column
-          label="浼︾悊缁撹"
+          label="鍖荤枟鏈烘瀯"
           align="center"
-          prop="ethicsConclusion"
-          width="120"
-        >
-          <template slot-scope="scope">
-            <el-tag :type="conclusionFilter(scope.row.ethicsConclusion)">
-              {{ conclusionTextFilter(scope.row.ethicsConclusion) }}
-            </el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column
-          label="浼︾悊鎰忚"
-          align="center"
-          prop="ethicsOpinion"
-          min-width="200"
+          prop="treatmenthospitalname"
+          min-width="150"
           show-overflow-tooltip
         />
         <el-table-column
-          label="瀹℃煡鏃堕棿"
+          label="浼︾悊鐘舵��"
           align="center"
-          prop="reviewTime"
-          width="160"
+          prop="status"
+          width="100"
         >
           <template slot-scope="scope">
-            <span>{{
-              scope.row.reviewTime
-                ? parseTime(scope.row.reviewTime, "{y}-{m}-{d} {h}:{i}")
-                : "-"
-            }}</span>
+            <dict-tag
+              :options="dict.type.sys_ethical"
+              :value="scope.row.status"
+            />
           </template>
         </el-table-column>
         <el-table-column
-          label="鐧昏鏃堕棿"
+          label="涓撳缁撹"
           align="center"
-          prop="registrationTime"
-          width="160"
-        >
-          <template slot-scope="scope">
-            <span>{{
-              scope.row.registrationTime
-                ? parseTime(scope.row.registrationTime, "{y}-{m}-{d} {h}:{i}")
-                : "-"
-            }}</span>
-          </template>
-        </el-table-column>
+          prop="expertConclusion"
+          width="120"
+        />
         <el-table-column
-          label="鐧昏浜�"
+          label="涓撳鎰忚"
           align="center"
-          prop="registrant"
+          prop="expertOpinion"
+          min-width="150"
+          show-overflow-tooltip
+        />
+        <el-table-column
+          label="涓撳濮撳悕"
+          align="center"
+          prop="expertName"
           width="100"
         />
         <el-table-column
+          label="缁撹鏃堕棿"
+          align="center"
+          prop="expertTime"
+          width="160"
+        >
+          <template slot-scope="scope">
+            <span>{{
+              scope.row.expertTime
+                ? parseTime(scope.row.expertTime, "{y}-{m}-{d} {h}:{i}")
+                : "-"
+            }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
           label="鎿嶄綔"
           align="center"
-          width="200"
+          width="180"
+          fixed="right"
           class-name="small-padding fixed-width"
         >
           <template slot-scope="scope">
@@ -219,16 +247,8 @@
               type="text"
               icon="el-icon-check"
               @click="handleEndReview(scope.row)"
-              :disabled="scope.row.ethicsConclusion === 'terminated'"
+              :disabled="scope.row.status === '2'"
               >缁撴潫</el-button
-            >
-            <el-button
-              size="mini"
-              type="text"
-              icon="el-icon-delete"
-              style="color: #F56C6C"
-              @click="handleDelete(scope.row)"
-              >鍒犻櫎</el-button
             >
           </template>
         </el-table-column>
@@ -247,19 +267,21 @@
 </template>
 
 <script>
-import { listEthicsReview, delEthicsReview, exportEthicsReview, endEthicsReview } from "./ethicsReview";
+import { reviewinitiateBaseInfoList, ethicalreviewedit,  } from "@/api/businessApi";
 import Pagination from "@/components/Pagination";
 
 export default {
   name: "EthicsReviewList",
   components: { Pagination },
-  dicts: ["sys_user_sex"],
+  dicts: ["sys_user_sex", "sys_ethical"],
   data() {
     return {
       // 閬僵灞�
       loading: true,
       // 閫変腑鏁扮粍
       ids: [],
+      // 閫変腑鐨勮鏁版嵁
+      selectedRows: [],
       // 闈炲崟涓鐢�
       single: true,
       // 闈炲涓鐢�
@@ -272,9 +294,10 @@
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        hospitalNo: undefined,
-        donorName: undefined,
-        ethicsConclusion: undefined,
+        inpatientno: undefined,
+        name: undefined,
+        caseNo: undefined,
+        status: undefined,
         reviewTimeRange: []
       }
     };
@@ -283,39 +306,31 @@
     this.getList();
   },
   methods: {
-    // 浼︾悊缁撹杩囨护鍣�
-    conclusionFilter(conclusion) {
-      const conclusionMap = {
-        "reviewing": "warning", // 瀹℃煡涓�
-        "approved": "success", // 鍚屾剰
-        "approved_with_modifications": "primary", // 淇敼鍚庡悓鎰�
-        "re-review": "info", // 淇敼鍚庨噸瀹�
-        "disapproved": "danger", // 涓嶅悓鎰�
-        "terminated": "info" // 缁堟瀹℃煡
-      };
-      return conclusionMap[conclusion] || "info";
-    },
-    conclusionTextFilter(conclusion) {
-      const conclusionMap = {
-        "reviewing": "瀹℃煡涓�",
-        "approved": "鍚屾剰",
-        "approved_with_modifications": "淇敼鍚庡悓鎰�",
-        "re-review": "淇敼鍚庨噸瀹�",
-        "disapproved": "涓嶅悓鎰�",
-        "terminated": "缁堟瀹℃煡"
-      };
-      return conclusionMap[conclusion] || "鏈煡";
-    },
     // 鏌ヨ浼︾悊瀹℃煡鍒楄〃
     getList() {
       this.loading = true;
-      listEthicsReview(this.queryParams)
+
+      // 澶勭悊鏌ヨ鍙傛暟
+      const params = {
+        ...this.queryParams
+      };
+
+      // 绉婚櫎鍒嗛〉鍙傛暟浠ュ鐨勯澶栧弬鏁�
+      delete params.reviewTimeRange;
+
+      // 濡傛灉鏈夋椂闂磋寖鍥村弬鏁�
+      if (this.queryParams.reviewTimeRange && this.queryParams.reviewTimeRange.length === 2) {
+        params.expertTimeStart = this.queryParams.reviewTimeRange[0] + ' 00:00:00';
+        params.expertTimeEnd = this.queryParams.reviewTimeRange[1] + ' 23:59:59';
+      }
+
+      reviewinitiateBaseInfoList(params)
         .then(response => {
           if (response.code === 200) {
-            this.ethicsReviewList = response.data.rows;
-            this.total = response.data.total;
+            this.ethicsReviewList = response.data || [];
+            this.total = response.total || 0;
           } else {
-            this.$message.error("鑾峰彇鏁版嵁澶辫触");
+            this.$message.error(response.msg || "鑾峰彇鏁版嵁澶辫触");
           }
           this.loading = false;
         })
@@ -337,7 +352,8 @@
     },
     // 澶氶�夋閫変腑鏁版嵁
     handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
+      this.ids = selection.map(item => item.infoid);
+      this.selectedRows = selection;
       this.single = selection.length !== 1;
       this.multiple = !selection.length;
     },
@@ -345,7 +361,7 @@
     handleView(row) {
       this.$router.push({
         path: "/case/ethicalReviewInfo",
-        query: { id: row.id }
+        query: { id: row.infoid }
       });
     },
     // 鏂板鎸夐挳鎿嶄綔
@@ -354,53 +370,62 @@
     },
     // 淇敼鎸夐挳鎿嶄綔
     handleUpdate(row) {
-      const id = row.id || this.ids[0];
+      const id = row.infoid || this.ids[0];
       this.$router.push({
         path: "/case/ethicalReviewInfo",
         query: { id: id }
       });
     },
-    // 鍒犻櫎鎸夐挳鎿嶄綔
-    handleDelete(row) {
-      const ids = row.id ? [row.id] : this.ids;
-      this.$confirm("鏄惁纭鍒犻櫎閫変腑鐨勬暟鎹」锛�", "璀﹀憡", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          return delEthicsReview(ids);
-        })
-        .then(response => {
-          if (response.code === 200) {
-            this.$message.success("鍒犻櫎鎴愬姛");
-            this.getList();
-          }
-        })
-        .catch(() => {});
-    },
     // 缁撴潫瀹℃煡鎿嶄綔
     handleEndReview(row) {
-      const ids = row.id ? [row.id] : this.ids;
+      const selectedRow = row || (this.selectedRows.length === 1 ? this.selectedRows[0] : null);
+      if (!selectedRow) {
+        this.$message.warning("璇烽�夋嫨涓�鏉¤褰�");
+        return;
+      }
+
       this.$confirm("鏄惁纭缁撴潫閫変腑鐨勫鏌ラ」鐩紵", "鎻愮ず", {
         confirmButtonText: "纭畾",
         cancelButtonText: "鍙栨秷",
         type: "warning"
       })
         .then(() => {
-          return endEthicsReview(ids);
+          // 璋冪敤淇敼鎺ュ彛锛屽皢鐘舵�佹敼涓虹粨鏉燂紙status: '2'锛�
+          const updateData = {
+            infoid: selectedRow.infoid,
+            status: '2',
+            // 鍙互淇濈暀鍘熸湁鏁版嵁
+            expertName: selectedRow.expertName,
+            expertConclusion: selectedRow.expertConclusion,
+            expertOpinion: selectedRow.expertOpinion,
+            expertTime: selectedRow.expertTime
+          };
+
+          return ethicalreviewedit(updateData);
         })
         .then(response => {
           if (response.code === 200) {
             this.$message.success("瀹℃煡宸茬粨鏉�");
             this.getList();
+          } else {
+            this.$message.error(response.msg || "鎿嶄綔澶辫触");
           }
         })
         .catch(() => {});
     },
     // 瀵煎嚭鎸夐挳鎿嶄綔
     handleExport() {
-      const queryParams = this.queryParams;
+      const queryParams = { ...this.queryParams };
+      delete queryParams.pageNum;
+      delete queryParams.pageSize;
+
+      // 澶勭悊鏃堕棿鑼冨洿鍙傛暟
+      if (queryParams.reviewTimeRange && queryParams.reviewTimeRange.length === 2) {
+        queryParams.expertTimeStart = queryParams.reviewTimeRange[0] + ' 00:00:00';
+        queryParams.expertTimeEnd = queryParams.reviewTimeRange[1] + ' 23:59:59';
+      }
+      delete queryParams.reviewTimeRange;
+
       this.$confirm("鏄惁纭瀵煎嚭鎵�鏈変鸡鐞嗗鏌ユ暟鎹紵", "璀﹀憡", {
         confirmButtonText: "纭畾",
         cancelButtonText: "鍙栨秷",
@@ -408,11 +433,25 @@
       })
         .then(() => {
           this.loading = true;
-          return exportEthicsReview(queryParams);
+          // return ethicalreviewexport(queryParams);
         })
         .then(response => {
           if (response.code === 200) {
             this.$message.success("瀵煎嚭鎴愬姛");
+            // 澶勭悊瀵煎嚭鏂囦欢涓嬭浇
+            if (response.data) {
+              const blob = new Blob([response.data], { type: 'application/vnd.ms-excel' });
+              const downloadElement = document.createElement('a');
+              const href = window.URL.createObjectURL(blob);
+              downloadElement.href = href;
+              downloadElement.download = '浼︾悊瀹℃煡鍒楄〃.xlsx';
+              document.body.appendChild(downloadElement);
+              downloadElement.click();
+              document.body.removeChild(downloadElement);
+              window.URL.revokeObjectURL(href);
+            }
+          } else {
+            this.$message.error(response.msg || "瀵煎嚭澶辫触");
           }
           this.loading = false;
         })

--
Gitblit v1.9.3