From bcb9976e7680ce67fadb6fec7ab5fca36552cdbc Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期三, 28 一月 2026 17:10:49 +0800
Subject: [PATCH] 青岛维护

---
 src/views/project/DonationProcess/index.vue |  347 ++++++++++++++++++++++++++++-----------------------------
 1 files changed, 169 insertions(+), 178 deletions(-)

diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 8a7fe08..9eb57f6 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -108,25 +108,25 @@
       v-loading="loading"
       :data="donatebaseinfoList"
       border
-      :default-sort="{ prop: 'donatetime', order: 'descending' }"
+      :default-sort="{ prop: 'reporttime', order: 'descending' }"
       style="width: 100%; margin-top: 20px;"
     >
       <el-table-column
         label="涓婃姤鏃堕棿"
         align="center"
-        prop="donatetime"
+        prop="reporttime"
         width="110"
         fixed="left"
       >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
+          <span>{{ parseTime(scope.row.reporttime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
 
       <el-table-column
-        label="杩涘害"
+        label="鎹愮尞鐘舵��"
         align="center"
-        prop="coreteamassessconclusion"
+        prop="recordstate"
         width="100"
         fixed="left"
       >
@@ -141,7 +141,7 @@
 
       <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
         <template slot-scope="scope">
-          <span>{{ scope.row.sex === 1 ? "鐢�" : "濂�" }}</span>
+          <span>{{ scope.row.sex === "1" ? "鐢�" : "濂�" }}</span>
         </template>
       </el-table-column>
 
@@ -155,34 +155,37 @@
       />
 
       <el-table-column
+        label="娌荤枟鍖婚櫌"
+        align="center"
+        prop="treatmenthospitalname"
+        width="150"
+      />
+
+      <el-table-column
         label="鍗忚皟鍛�"
         align="center"
-        prop="reportername"
+        prop="coordinatorName"
         width="100"
       />
 
       <el-table-column
-        label="杞负妗堜緥鏃堕棿"
+        label="妗堜緥缂栧彿"
         align="center"
-        prop="donatetime"
-        width="110"
-      >
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
-        </template>
-      </el-table-column>
+        prop="caseNo"
+        width="120"
+      />
 
       <!-- 绗竴娆″尰瀛﹁瘎浼� -->
       <el-table-column
         label="绗竴娆¤瘎浼扮粨璁�"
         align="center"
-        prop="coreteamassessconclusion"
+        prop="firstAssessState"
         width="120"
       >
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.sys_BaseAssessConclusion"
-            :value="scope.row.coreteamassessconclusion"
+            :value="scope.row.firstAssessState"
           />
         </template>
       </el-table-column>
@@ -190,13 +193,11 @@
       <el-table-column
         label="绗竴娆¤瘎浼版椂闂�"
         align="center"
-        prop="coreteamassesstime"
+        prop="assessFirstTime"
         width="110"
       >
         <template slot-scope="scope">
-          <span>{{
-            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
-          }}</span>
+          <span>{{ parseTime(scope.row.assessFirstTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
 
@@ -204,13 +205,13 @@
       <el-table-column
         label="绗簩娆¤瘎浼扮粨璁�"
         align="center"
-        prop="coreteamassessconclusion"
+        prop="secondAssessState"
         width="120"
       >
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.sys_BaseAssessConclusion"
-            :value="scope.row.coreteamassessconclusion"
+            :value="scope.row.secondAssessState"
           />
         </template>
       </el-table-column>
@@ -218,12 +219,12 @@
       <el-table-column
         label="绗簩娆¤瘎浼版椂闂�"
         align="center"
-        prop="coreteamassesstime"
+        prop="assessSecondTime"
         width="110"
       >
         <template slot-scope="scope">
           <span>{{
-            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
+            parseTime(scope.row.assessSecondTime, "{y}-{m}-{d}")
           }}</span>
         </template>
       </el-table-column>
@@ -231,24 +232,24 @@
       <el-table-column
         label="浜插睘纭鏃堕棿"
         align="center"
-        prop="signdate"
+        prop="signDate"
         width="110"
       >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.signdate, "{y}-{m}-{d}") }}</span>
+          <span>{{ parseTime(scope.row.signDate, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
 
       <el-table-column
         label="浼︾悊瀹℃煡缁撹"
         align="center"
-        prop="expertconclusion"
+        prop="expertConclusion"
         width="120"
       >
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.sys_EthicalReview"
-            :value="scope.row.expertconclusion"
+            :value="scope.row.expertConclusion"
           />
         </template>
       </el-table-column>
@@ -256,30 +257,30 @@
       <el-table-column
         label="浼︾悊瀹℃煡鏃堕棿"
         align="center"
-        prop="conclusiontime"
+        prop="expertTime"
         width="110"
       >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.conclusiontime, "{y}-{m}-{d}") }}</span>
+          <span>{{ parseTime(scope.row.expertTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
 
       <el-table-column
         label="鍣ㄥ畼鍒嗛厤鏁伴噺"
         align="center"
-        prop="organcount"
+        prop="organCount"
         width="100"
       />
 
       <el-table-column
         label="鑾峰彇瑙佽瘉鏃堕棿"
         align="center"
-        prop="operationbegtime"
+        prop="operationBegTime"
         width="110"
       >
         <template slot-scope="scope">
           <span>{{
-            parseTime(scope.row.operationbegtime, "{y}-{m}-{d}")
+            parseTime(scope.row.operationBegTime, "{y}-{m}-{d}")
           }}</span>
         </template>
       </el-table-column>
@@ -287,26 +288,26 @@
       <el-table-column
         label="瀹屾垚鐧昏鏃堕棿"
         align="center"
-        prop="completetime"
+        prop="completeTime"
         width="110"
       >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.completetime, "{y}-{m}-{d}") }}</span>
+          <span>{{ parseTime(scope.row.completeTime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
 
+      <!-- 鎹愮尞杩涘害鍒� -->
       <el-table-column
         label="鎹愮尞杩涘害"
         align="center"
-        prop="workflow"
+        prop="recordstate"
         width="120"
-        fixed="right"
       >
         <template slot-scope="scope">
-          <div v-if="!scope.row.terminationCase">
+          <div v-if="scope.row.terminationCase == 0">
             <dict-tag
               :options="dict.type.sys_donornode"
-              :value="scope.row.workflow"
+              :value="scope.row.recordstate"
             />
           </div>
           <div v-else>
@@ -315,23 +316,24 @@
         </template>
       </el-table-column>
 
-      <!-- <el-table-column label="鎿嶄綔" align="center" width="120" fixed="right">
+      <!-- 鎿嶄綔鍒楋細鍙繚鐣欑粓姝㈠拰鏌ョ湅璇︽儏 -->
+      <el-table-column label="鎿嶄綔" align="center" width="150" fixed="right">
         <template slot-scope="scope">
+          <el-button size="mini" type="text" @click="handleDetail(scope.row)"
+            >鏌ョ湅璇︽儏</el-button
+          >
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-view"
-            @click="handleDetail(scope.row)"
-          >璇︽儏</el-button>
-          <el-button
-            v-if="scope.row.recordstate == 0"
-            size="mini"
-            type="text"
-            icon="el-icon-check"
-            @click="handleApprove(scope.row)"
-          >瀹℃牳</el-button>
+            style="color: #f56c6c;"
+            @click="handleTerminate(scope.row)"
+            v-if="
+              scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
+            "
+            >缁堟</el-button
+          >
         </template>
-      </el-table-column> -->
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -344,7 +346,7 @@
 
     <!-- 璇︽儏寮规 -->
     <el-dialog
-      :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name}`"
+      :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name || ''}`"
       :visible.sync="detailVisible"
       width="1000px"
       append-to-body
@@ -352,41 +354,32 @@
       <donor-detail :donorData="currentRecord" @close="detailVisible = false" />
     </el-dialog>
 
-    <!-- 瀹℃牳寮规 -->
+    <!-- 缁堟纭寮规 -->
     <el-dialog
-      title="鎹愮尞鑰呭鏍�"
-      :visible.sync="approveVisible"
-      width="500px"
+      title="缁堟纭"
+      :visible.sync="terminateVisible"
+      width="400px"
       append-to-body
     >
-      <el-form ref="approveForm" :model="approveForm" label-width="100px">
-        <el-form-item label="瀹℃牳缁撴灉">
-          <el-radio-group v-model="approveForm.approveResult">
-            <el-radio label="1">閫氳繃</el-radio>
-            <el-radio label="2">椹冲洖</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="瀹℃牳鎰忚">
-          <el-input
-            type="textarea"
-            v-model="approveForm.approveOpinion"
-            placeholder="璇疯緭鍏ュ鏍告剰瑙�"
-            :rows="4"
-          />
-        </el-form-item>
-      </el-form>
+      <div style="margin-bottom: 20px;">
+        <p>
+          纭畾瑕佺粓姝㈡崘鐚��
+          <strong>{{ currentRecord.name }}</strong> 鐨勬崘鐚繘绋嬪悧锛�
+        </p>
+        <p style="color: #f56c6c; font-size: 12px;">
+          姝ゆ搷浣滀笉鍙�嗭紝璇疯皑鎱庢搷浣滐紒
+        </p>
+      </div>
       <div slot="footer">
-        <el-button @click="approveVisible = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="submitApprove">纭畾</el-button>
+        <el-button @click="terminateVisible = false">鍙栨秷</el-button>
+        <el-button type="danger" @click="submitTerminate">纭缁堟</el-button>
       </div>
     </el-dialog>
   </div>
 </template>
 
 <script>
-// 瀵煎叆妯℃嫙鏁版嵁鐢熸垚宸ュ叿
-import Mock from "mockjs";
-import { courselist } from "@/api/businessApi";
+import { courselist, terminateDonor } from "@/api/businessApi";
 
 export default {
   name: "Donatebaseinfo",
@@ -403,8 +396,8 @@
       donatebaseinfoList: [],
       // 璇︽儏寮规鏄剧ず
       detailVisible: false,
-      // 瀹℃牳寮规鏄剧ず
-      approveVisible: false,
+      // 缁堟纭寮规鏄剧ず
+      terminateVisible: false,
       // 褰撳墠鎿嶄綔璁板綍
       currentRecord: {},
       // 缁熻鏁版嵁
@@ -421,11 +414,6 @@
         name: undefined,
         idcardno: undefined,
         recordstate: undefined
-      },
-      // 瀹℃牳琛ㄥ崟
-      approveForm: {
-        approveResult: "1",
-        approveOpinion: ""
       }
     };
   },
@@ -433,96 +421,96 @@
     this.getList();
   },
   methods: {
-    /** 鐢熸垚妯℃嫙鏁版嵁 */
-    generateMockData() {
-      const mockTemplate = {
-        "list|15-30": [
-          {
-            "id|+1": 1001,
-            name: "@cname",
-            "sex|1": [1, 2], // 1:鐢�, 2:濂�
-            "age|18-65": 1,
-            idcardno: /^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$/,
-            reportername: "@cname",
-            treatmenthospitalname: "@ctitle(3, 5)鍖婚櫌",
-            donatetime: '@datetime("yyyy-MM-dd HH:mm:ss")',
-            "coreteamassessconclusion|1": ["1", "2", "3"], // 璇勪及缁撹
-            coreteamassesstime: '@datetime("yyyy-MM-dd HH:mm:ss")',
-            signdate: '@datetime("yyyy-MM-dd HH:mm:ss")',
-            "expertconclusion|1": ["1", "2", "3"], // 浼︾悊瀹℃煡缁撹
-            conclusiontime: '@datetime("yyyy-MM-dd HH:mm:ss")',
-            "organcount|0-5": 1,
-            operationbegtime: '@datetime("yyyy-MM-dd HH:mm:ss")',
-            completetime: '@datetime("yyyy-MM-dd HH:mm:ss")',
-            "workflow|1": ["1", "2", "3", "4", "5"], // 宸ヤ綔娴佺姸鎬�
-            "recordstate|1": ["0", "1", "99"], // 0:寰呭鏍�, 1:宸插鏍�, 99:宸茬粓姝�
-            "terminationCase|1": [true, false]
-          }
-        ]
-      };
-
-      return Mock.mock(mockTemplate).list;
-    },
-
     /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
     async getList() {
       this.loading = true;
-      const response = await courselist(this.queryParams);
-      // 妯℃嫙API璋冪敤寤惰繜
-      setTimeout(() => {
-        // 鐢熸垚妯℃嫙鏁版嵁
-        const mockData = this.generateMockData();
+      try {
+        const response = await courselist(this.queryParams);
 
-        // 搴旂敤绛涢�夋潯浠�
-        let filteredData = mockData;
-        if (this.queryParams.name) {
-          filteredData = filteredData.filter(item =>
-            item.name.includes(this.queryParams.name)
-          );
-        }
-        if (this.queryParams.idcardno) {
-          filteredData = filteredData.filter(item =>
-            item.idcardno.includes(this.queryParams.idcardno)
-          );
-        }
-        if (this.queryParams.recordstate) {
-          filteredData = filteredData.filter(
-            item => item.recordstate === this.queryParams.recordstate
-          );
-        }
+        // 鏍规嵁瀹為檯鎺ュ彛杩斿洖缁撴瀯璋冩暣
+        let realData = [];
+        realData = response.data.donatebaseinfoProgressDTOS;
+        this.total = response.total;
+        this.stats.pendingCount = response.data.terminationCase[0];
+        this.stats.approvedCount = response.data.terminationCase[1];
+        this.stats.terminatedCount = response.data.terminationCase[2];
+        this.stats.totalCount = response.total;
+        // 瀛樺偍鎵�鏈夋暟鎹敤浜庡墠绔瓫閫夊拰鍒嗛〉
+        this.allTableData = realData;
 
-        // 鍒嗛〉澶勭悊
-        const startIndex =
-          (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
-        const endIndex = startIndex + this.queryParams.pageSize;
-        this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
-        this.total = filteredData.length;
+        // 搴旂敤鍓嶇绛涢�夋潯浠讹紙濡傛灉鎺ュ彛涓嶆敮鎸佸悗绔瓫閫夛級
+        let filteredData = this.applyFrontendFilter(realData);
+
+        // 鍓嶇鍒嗛〉澶勭悊锛堝鏋滄帴鍙d笉鏀寔鍚庣鍒嗛〉锛�
+        if (!response.total && !response.data) {
+          const startIndex =
+            (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
+          const endIndex = startIndex + this.queryParams.pageSize;
+          this.donatebaseinfoList = filteredData.slice(startIndex, endIndex);
+          this.total = filteredData.length;
+        } else {
+          // 鎺ュ彛宸插垎椤碉紝鐩存帴浣跨敤杩斿洖鏁版嵁
+          this.donatebaseinfoList = filteredData;
+        }
 
         // 鏇存柊缁熻鏁版嵁
-        this.updateStats(mockData);
+        // this.updateStats(realData);
+      } catch (error) {
+        console.error("鑾峰彇鏁版嵁澶辫触:", error);
+        this.$message.error("鏁版嵁鍔犺浇澶辫触");
+        this.donatebaseinfoList = [];
+        this.total = 0;
+        // this.updateStats([]);
+      } finally {
         this.loading = false;
-      }, 500);
+      }
+    },
+
+    /** 搴旂敤鍓嶇绛涢�� */
+    applyFrontendFilter(data) {
+      let filteredData = data;
+
+      if (this.queryParams.name) {
+        filteredData = filteredData.filter(
+          item => item.name && item.name.includes(this.queryParams.name)
+        );
+      }
+
+      if (this.queryParams.idcardno) {
+        filteredData = filteredData.filter(
+          item =>
+            item.idcardno && item.idcardno.includes(this.queryParams.idcardno)
+        );
+      }
+
+      if (this.queryParams.recordstate) {
+        filteredData = filteredData.filter(
+          item => item.recordstate === this.queryParams.recordstate
+        );
+      }
+
+      return filteredData;
     },
 
     /** 鏇存柊缁熻鏁版嵁 */
     updateStats(data) {
       this.stats.totalCount = data.length;
       this.stats.pendingCount = data.filter(
-        item => item.recordstate === "0"
+        item => item.recordstate === "0" || item.recordstate === 0
       ).length;
       this.stats.approvedCount = data.filter(
-        item => item.recordstate === "1"
+        item => item.recordstate === "1" || item.recordstate === 1
       ).length;
       this.stats.terminatedCount = data.filter(
-        item => item.recordstate === "99"
+        item => item.recordstate === "99" || item.recordstate === 99
       ).length;
     },
 
     /** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
     getStatusTag(status) {
       const statusMap = {
-        "0": "warning", // 寰呭鏍�
-        "1": "success", // 宸插鏍�
+        "0": "warning", // 缁存姢涓�
+        "1": "success", // 宸插畬鎴�
         "99": "danger" // 宸茬粓姝�
       };
       return statusMap[status] || "info";
@@ -541,7 +529,11 @@
     /** 鏃堕棿鏍煎紡鍖� */
     parseTime(time, format) {
       if (!time) return "-";
+
+      // 澶勭悊鏃堕棿鎴冲拰鏃ユ湡瀛楃涓�
       const date = new Date(time);
+      if (isNaN(date.getTime())) return time;
+
       const year = date.getFullYear();
       const month = (date.getMonth() + 1).toString().padStart(2, "0");
       const day = date
@@ -563,13 +555,8 @@
 
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
     resetQuery() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        idcardno: undefined,
-        recordstate: undefined
-      };
+      this.$refs.queryForm.resetFields();
+      this.queryParams.pageNum = 1;
       this.getList();
     },
 
@@ -579,29 +566,28 @@
       this.detailVisible = true;
     },
 
-    /** 瀹℃牳鎿嶄綔 */
-    handleApprove(row) {
+    /** 缁堟鎿嶄綔 */
+    handleTerminate(row) {
       this.currentRecord = { ...row };
-      this.approveForm = {
-        approveResult: "1",
-        approveOpinion: ""
-      };
-      this.approveVisible = true;
+      this.terminateVisible = true;
     },
 
-    /** 鎻愪氦瀹℃牳 */
-    submitApprove() {
-      // 妯℃嫙瀹℃牳鎻愪氦
-      const index = this.donatebaseinfoList.findIndex(
-        item => item.id === this.currentRecord.id
-      );
-      if (index !== -1) {
-        this.donatebaseinfoList[
-          index
-        ].recordstate = this.approveForm.approveResult;
-        this.$message.success("瀹℃牳鎴愬姛");
-        this.approveVisible = false;
-        this.getList(); // 閲嶆柊鍔犺浇鏇存柊缁熻
+    /** 鎻愪氦缁堟 */
+    async submitTerminate() {
+      try {
+        // 璋冪敤缁堟鎺ュ彛
+        await terminateDonor({
+          id: this.currentRecord.id,
+          caseNo: this.currentRecord.caseNo,
+          terminationReason: "绠$悊鍛樻墜鍔ㄧ粓姝�"
+        });
+
+        this.$message.success("缁堟鎴愬姛");
+        this.terminateVisible = false;
+        this.getList(); // 閲嶆柊鍔犺浇鏇存柊鏁版嵁
+      } catch (error) {
+        this.$message.error("缁堟澶辫触");
+        console.error("缁堟閿欒:", error);
       }
     }
   }
@@ -678,4 +664,9 @@
   background-color: #f5f7fa;
   font-weight: bold;
 }
+
+/* 鎿嶄綔鎸夐挳鏍峰紡 */
+::v-deep .el-button--text {
+  padding: 4px 8px;
+}
 </style>

--
Gitblit v1.9.3