From 475a352a4bfd7ac3a81e8c7c92d3bb64e2e01037 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期五, 27 二月 2026 15:48:37 +0800
Subject: [PATCH] 青岛维护提交

---
 src/views/project/DonationProcess/index.vue |  567 +++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 351 insertions(+), 216 deletions(-)

diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index 516cc50..451ca73 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -28,18 +28,64 @@
           />
         </el-form-item>
         <el-form-item label="鐘舵��" prop="recordstate">
-          <el-select v-model="queryParams.recordstate" placeholder="璇烽�夋嫨鐘舵��" clearable size="small">
+          <el-select
+            v-model="queryParams.recordstate"
+            placeholder="璇烽�夋嫨鐘舵��"
+            clearable
+            size="small"
+          >
             <el-option label="鍏ㄩ儴" value="" />
-            <el-option label="寰呭鏍�" value="0" />
-            <el-option label="宸插鏍�" value="1" />
+            <el-option label="缁存姢涓�" value="0" />
+            <el-option label="宸插畬鎴�" value="1" />
             <el-option label="宸茬粓姝�" value="99" />
           </el-select>
         </el-form-item>
+
+        <!-- 鏂板鎼滅储瀛楁 -->
+        <el-form-item label="涓婃姤鏃堕棿" prop="reportTimeRange">
+          <el-date-picker
+            v-model="queryParams.reportTimeRange"
+            type="daterange"
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+            value-format="yyyy-MM-dd"
+            size="small"
+            style="width: 240px;"
+          />
+        </el-form-item>
+
+        <el-form-item label="棣栬瘖鍖婚櫌" prop="treatmenthospitalname">
+          <el-input
+            v-model="queryParams.treatmenthospitalname"
+            placeholder="璇疯緭鍏ラ璇婂尰闄�"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+
+        <el-form-item label="浣忛櫌鍙�" prop="hospitalNo">
+          <el-input
+            v-model="queryParams.hospitalNo"
+            placeholder="璇疯緭鍏ヤ綇闄㈠彿"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+
         <el-form-item>
-          <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            size="mini"
+            @click="handleQuery"
             >鎼滅储</el-button
           >
-          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+          <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
+            >閲嶇疆</el-button
+          >
         </el-form-item>
       </el-form>
     </el-card>
@@ -63,7 +109,7 @@
             <div class="stat-icon">鈴�</div>
             <div class="stat-info">
               <div class="stat-count">{{ stats.pendingCount }}</div>
-              <div class="stat-label">寰呭鏍�</div>
+              缁存姢涓�
             </div>
           </div>
         </el-card>
@@ -74,7 +120,7 @@
             <div class="stat-icon">鉁�</div>
             <div class="stat-info">
               <div class="stat-count">{{ stats.approvedCount }}</div>
-              <div class="stat-label">宸插鏍�</div>
+              <div class="stat-label">宸插畬鎴�</div>
             </div>
           </div>
         </el-card>
@@ -97,16 +143,28 @@
       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" width="110" fixed="left">
+      <el-table-column
+        label="涓婃姤鏃堕棿"
+        align="center"
+        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="杩涘害" align="center" prop="coreteamassessconclusion" width="100" fixed="left">
+      <el-table-column
+        label="鎹愮尞鐘舵��"
+        align="center"
+        prop="recordstate"
+        width="100"
+        fixed="left"
+      >
         <template slot-scope="scope">
           <el-tag :type="getStatusTag(scope.row.recordstate)">
             {{ getStatusText(scope.row.recordstate) }}
@@ -118,97 +176,152 @@
 
       <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>
 
       <el-table-column label="骞撮緞" align="center" prop="age" width="80" />
 
-      <el-table-column label="璇佷欢鍙风爜" align="center" prop="idcardno" width="180" />
-
-      <el-table-column label="鍗忚皟鍛�" align="center" prop="reportername" width="100" />
-
-      <el-table-column label="娌荤枟鍖婚櫌" align="center" prop="treatmenthospitalname" width="150" show-overflow-tooltip />
-
-      <el-table-column label="杞负妗堜緥鏃堕棿" align="center" prop="donatetime" width="110">
+      <el-table-column label="琛�鍨�" align="center" prop="bloodtype" width="80">
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
+          <dict-tag
+            :options="dict.type.sys_BloodType"
+            :value="scope.row.bloodtype"
+          />
         </template>
       </el-table-column>
+      <el-table-column
+        label="浼犳煋鐥�"
+        align="center"
+        prop="infectious"
+        width="180"
+      />
+
+      <el-table-column
+        label="棣栬瘖鍖婚櫌"
+        align="center"
+        prop="treatmenthospitalname"
+        width="150"
+      />
+
+      <el-table-column
+        label="鍗忚皟鍛�"
+        align="center"
+        prop="coordinatorName"
+        width="100"
+      />
+
+      <el-table-column
+        label="浣忛櫌鍙�"
+        align="center"
+        prop="hospitalNo"
+        width="120"
+      />
 
       <!-- 绗竴娆″尰瀛﹁瘎浼� -->
-      <el-table-column label="绗竴娆¤瘎浼扮粨璁�" align="center" prop="coreteamassessconclusion" width="120">
+      <el-table-column
+        label="璇勪及鐘舵��"
+        align="center"
+        prop="assessState"
+        width="120"
+      >
         <template slot-scope="scope">
           <dict-tag
             :options="dict.type.sys_BaseAssessConclusion"
-            :value="scope.row.coreteamassessconclusion"
+            :value="scope.row.assessState"
           />
         </template>
       </el-table-column>
 
-      <el-table-column label="绗竴娆¤瘎浼版椂闂�" align="center" prop="coreteamassesstime" width="110">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
-        </template>
+      <el-table-column
+        label="璇勪及鏃堕棿"
+        align="center"
+        prop="assessTime"
+        width="110"
+      >
+        <!-- <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.assessTime, "{y}-{m}-{d}") }}</span>
+        </template> -->
+      </el-table-column>
+      <el-table-column
+        label="浜插睘纭鏃堕棿"
+        align="center"
+        prop="signDate"
+        width="110"
+      >
+        <!-- <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.signDate, "{y}-{m}-{d}") }}</span>
+        </template> -->
       </el-table-column>
 
-      <!-- 绗簩娆″尰瀛﹁瘎浼� -->
-      <el-table-column label="绗簩娆¤瘎浼扮粨璁�" align="center" prop="coreteamassessconclusion" width="120">
-        <template slot-scope="scope">
-          <dict-tag
-            :options="dict.type.sys_BaseAssessConclusion"
-            :value="scope.row.coreteamassessconclusion"
-          />
-        </template>
-      </el-table-column>
-
-      <el-table-column label="绗簩娆¤瘎浼版椂闂�" align="center" prop="coreteamassesstime" width="110">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="浜插睘纭鏃堕棿" align="center" prop="signdate" width="110">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.signdate, "{y}-{m}-{d}") }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column label="浼︾悊瀹℃煡缁撹" align="center" prop="expertconclusion" width="120">
+      <el-table-column
+        label="浼︾悊瀹℃煡缁撹"
+        align="center"
+        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>
 
-      <el-table-column label="浼︾悊瀹℃煡鏃堕棿" align="center" prop="conclusiontime" width="110">
+      <el-table-column
+        label="浼︾悊瀹℃煡鏃堕棿"
+        align="center"
+        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" width="100" />
+      <el-table-column
+        label="鍣ㄥ畼鍒嗛厤鏁伴噺"
+        align="center"
+        prop="organCount"
+        width="100"
+      />
 
-      <el-table-column label="鑾峰彇瑙佽瘉鏃堕棿" align="center" prop="operationbegtime" width="110">
+      <el-table-column
+        label="鑾峰彇瑙佽瘉鏃堕棿"
+        align="center"
+        prop="operationBegTime"
+        width="110"
+      >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.operationbegtime, "{y}-{m}-{d}") }}</span>
+          <span>{{
+            parseTime(scope.row.operationBegTime, "{y}-{m}-{d}")
+          }}</span>
         </template>
       </el-table-column>
 
-      <el-table-column label="瀹屾垚鐧昏鏃堕棿" align="center" prop="completetime" width="110">
+      <el-table-column
+        label="瀹屾垚鐧昏鏃堕棿"
+        align="center"
+        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" width="120" fixed="right">
+      <!-- 鎹愮尞杩涘害鍒� -->
+      <el-table-column
+        label="鎹愮尞杩涘害"
+        align="center"
+        prop="recordstate"
+        width="120"
+      >
         <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>
@@ -217,23 +330,32 @@
         </template>
       </el-table-column>
 
-      <!-- <el-table-column label="鎿嶄綔" align="center" width="120" fixed="right">
+      <!-- 鎿嶄綔鍒楋細鍙繚鐣欑粓姝㈠拰鏌ョ湅璇︽儏 -->
+      <el-table-column label="鎿嶄綔" align="center" width="200" 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>
+            style="color: #f56c6c;"
+            @click="handleTerminate(scope.row)"
+            v-if="
+              scope.row.terminationCase === 0 && scope.row.recordstate !== '99'
+            "
+            >缁堟</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: #67c23a;"
+            @click="handleRestore(scope.row)"
+            v-if="scope.row.terminationCase === 1"
+            >鎭㈠</el-button
+          >
         </template>
-      </el-table-column> -->
+      </el-table-column>
     </el-table>
 
     <pagination
@@ -246,7 +368,7 @@
 
     <!-- 璇︽儏寮规 -->
     <el-dialog
-      :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name}`"
+      :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name || ''}`"
       :visible.sync="detailVisible"
       width="1000px"
       append-to-body
@@ -254,47 +376,29 @@
       <donor-detail :donorData="currentRecord" @close="detailVisible = false" />
     </el-dialog>
 
-    <!-- 瀹℃牳寮规 -->
-    <el-dialog
-      title="鎹愮尞鑰呭鏍�"
-      :visible.sync="approveVisible"
-      width="500px"
-      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 slot="footer">
-        <el-button @click="approveVisible = false">鍙栨秷</el-button>
-        <el-button type="primary" @click="submitApprove">纭畾</el-button>
-      </div>
-    </el-dialog>
+    <!-- 缁堟/鎭㈠寮规缁勪欢 -->
+    <terminate-restore-modal
+      :current-record="currentRecord"
+      :visible="modalVisible"
+      :titles="modalTitles"
+      @update:visible="handleModalVisibleChange"
+      @operation-success="handleOperationSuccess"
+    />
   </div>
 </template>
 
 <script>
-// 瀵煎叆妯℃嫙鏁版嵁鐢熸垚宸ュ叿
-import Mock from 'mockjs';
+import { courselist, terminateDonor } from "@/api/businessApi";
+import TerminateRestoreModal from "@/components/TerminateRestoreModal";
 
 export default {
   name: "Donatebaseinfo",
-  dicts: ["sys_donornode", "sys_EthicalReview", "sys_BaseAssessConclusion"],
+  components: {
+    TerminateRestoreModal
+  },
+  dicts: ["sys_donornode",'sys_BloodType', "sys_EthicalReview", "sys_BaseAssessConclusion"],
   data() {
     return {
-      // 閬僵灞�
       loading: false,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
@@ -304,8 +408,6 @@
       donatebaseinfoList: [],
       // 璇︽儏寮规鏄剧ず
       detailVisible: false,
-      // 瀹℃牳寮规鏄剧ず
-      approveVisible: false,
       // 褰撳墠鎿嶄綔璁板綍
       currentRecord: {},
       // 缁熻鏁版嵁
@@ -321,12 +423,21 @@
         pageSize: 10,
         name: undefined,
         idcardno: undefined,
-        recordstate: undefined
+        recordstate: undefined,
+        // 鏂板鐨勬悳绱㈠瓧娈�
+        reportTimeRange: [],
+        treatmenthospitalname: undefined,
+        hospitalNo: undefined
       },
-      // 瀹℃牳琛ㄥ崟
-      approveForm: {
-        approveResult: "1",
-        approveOpinion: ""
+      // 寮规鏄剧ず鐘舵��
+      modalVisible: {
+        terminate: false,
+        restore: false
+      },
+      // 寮规鏍囬
+      modalTitles: {
+        terminate: "缁堟鎹愮尞杩涚▼",
+        restore: "鎭㈠鎹愮尞杩涚▼"
       }
     };
   },
@@ -334,111 +445,134 @@
     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;
-    },
-
     /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
-    getList() {
+    /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
+    async getList() {
       this.loading = true;
+      try {
+        const response = await courselist(this.queryParams);
 
-      // 妯℃嫙API璋冪敤寤惰繜
-      setTimeout(() => {
-        // 鐢熸垚妯℃嫙鏁版嵁
-        const mockData = this.generateMockData();
+        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 - response.data.terminationCase[2];
 
-        // 搴旂敤绛涢�夋潯浠�
-        let filteredData = mockData;
-        if (this.queryParams.name) {
-          filteredData = filteredData.filter(item =>
-            item.name.includes(this.queryParams.name)
-          );
+        this.allTableData = realData;
+        let filteredData = this.applyFrontendFilter(realData);
+
+        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;
         }
-        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
-          );
-        }
-
-        // 鍒嗛〉澶勭悊
-        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;
-
-        // 鏇存柊缁熻鏁版嵁
-        this.updateStats(mockData);
+      } catch (error) {
+        console.error("鑾峰彇鏁版嵁澶辫触:", error);
+        this.$message.error("鏁版嵁鍔犺浇澶辫触");
+        this.donatebaseinfoList = [];
+        this.total = 0;
+      } finally {
         this.loading = false;
-      }, 500);
+      }
     },
 
-    /** 鏇存柊缁熻鏁版嵁 */
-    updateStats(data) {
-      this.stats.totalCount = data.length;
-      this.stats.pendingCount = data.filter(item => item.recordstate === '0').length;
-      this.stats.approvedCount = data.filter(item => item.recordstate === '1').length;
-      this.stats.terminatedCount = data.filter(item => item.recordstate === '99').length;
+    /** 搴旂敤鍓嶇绛涢�� */
+    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
+        );
+      }
+
+      if (this.queryParams.treatmenthospitalname) {
+        filteredData = filteredData.filter(
+          item =>
+            item.treatmenthospitalname &&
+            item.treatmenthospitalname.includes(
+              this.queryParams.treatmenthospitalname
+            )
+        );
+      }
+
+      if (this.queryParams.hospitalNo) {
+        filteredData = filteredData.filter(
+          item =>
+            item.hospitalNo &&
+            item.hospitalNo.includes(this.queryParams.hospitalNo)
+        );
+      }
+
+      if (
+        this.queryParams.reportTimeRange &&
+        this.queryParams.reportTimeRange.length === 2
+      ) {
+        const [startTime, endTime] = this.queryParams.reportTimeRange;
+        filteredData = filteredData.filter(item => {
+          if (!item.reporttime) return false;
+          const reportDate = this.parseTime(item.reporttime, "{y}-{m}-{d}");
+          return reportDate >= startTime && reportDate <= endTime;
+        });
+      }
+
+      return filteredData;
     },
 
     /** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
     getStatusTag(status) {
       const statusMap = {
-        '0': 'warning',  // 寰呭鏍�
-        '1': 'success',  // 宸插鏍�
-        '99': 'danger'   // 宸茬粓姝�
+        "0": "warning", // 缁存姢涓�
+        "1": "success", // 宸插畬鎴�
+        "99": "danger" // 宸茬粓姝�
       };
-      return statusMap[status] || 'info';
+      return statusMap[status] || "info";
     },
 
     /** 鑾峰彇鐘舵�佹枃鏈� */
     getStatusText(status) {
       const textMap = {
-        '0': '寰呭鏍�',
-        '1': '宸插鏍�',
-        '99': '宸茬粓姝�'
+        "0": "缁存姢涓�",
+        "1": "宸插畬鎴�",
+        "99": "宸茬粓姝�"
       };
-      return textMap[status] || '鏈煡鐘舵��';
+      return textMap[status] || "鏈煡鐘舵��";
     },
 
     /** 鏃堕棿鏍煎紡鍖� */
     parseTime(time, format) {
-      if (!time) return '-';
+      if (!time) return "-";
       const date = new Date(time);
-      const year = date.getFullYear();
-      const month = (date.getMonth() + 1).toString().padStart(2, '0');
-      const day = date.getDate().toString().padStart(2, '0');
+      if (isNaN(date.getTime())) return time;
 
-      if (format === '{y}-{m}-{d}') {
+      const year = date.getFullYear();
+      const month = (date.getMonth() + 1).toString().padStart(2, "0");
+      const day = date
+        .getDate()
+        .toString()
+        .padStart(2, "0");
+
+      if (format === "{y}-{m}-{d}") {
         return `${year}-${month}-${day}`;
       }
       return time;
@@ -452,13 +586,8 @@
 
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
     resetQuery() {
-      this.queryParams = {
-        pageNum: 1,
-        pageSize: 10,
-        name: undefined,
-        idcardno: undefined,
-        recordstate: undefined
-      };
+      this.$refs.queryForm.resetFields();
+      this.queryParams.pageNum = 1;
       this.getList();
     },
 
@@ -468,26 +597,27 @@
       this.detailVisible = true;
     },
 
-    /** 瀹℃牳鎿嶄綔 */
-    handleApprove(row) {
+    /** 缁堟鎿嶄綔 */
+    handleTerminate(row) {
       this.currentRecord = { ...row };
-      this.approveForm = {
-        approveResult: "1",
-        approveOpinion: ""
-      };
-      this.approveVisible = true;
+      this.modalVisible = { ...this.modalVisible, terminate: 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(); // 閲嶆柊鍔犺浇鏇存柊缁熻
-      }
+    /** 鎭㈠鎿嶄綔 */
+    handleRestore(row) {
+      this.currentRecord = { ...row };
+      this.modalVisible = { ...this.modalVisible, restore: true };
+    },
+
+    /** 澶勭悊寮规鏄剧ず鐘舵�佸彉鍖� */
+    handleModalVisibleChange(newVisible) {
+      this.modalVisible = { ...newVisible };
+    },
+
+    /** 澶勭悊鎿嶄綔鎴愬姛 */
+    handleOperationSuccess({ type, record }) {
+      console.log(`${type}鎿嶄綔鎴愬姛:`, record);
+      this.getList(); // 閲嶆柊鍔犺浇鏁版嵁
     }
   }
 };
@@ -512,19 +642,19 @@
 }
 
 .stats-card.total {
-  border-left: 4px solid #409EFF;
+  border-left: 4px solid #409eff;
 }
 
 .stats-card.pending {
-  border-left: 4px solid #E6A23C;
+  border-left: 4px solid #e6a23c;
 }
 
 .stats-card.approved {
-  border-left: 4px solid #67C23A;
+  border-left: 4px solid #67c23a;
 }
 
 .stats-card.terminated {
-  border-left: 4px solid #F56C6C;
+  border-left: 4px solid #f56c6c;
 }
 
 .stat-content {
@@ -563,4 +693,9 @@
   background-color: #f5f7fa;
   font-weight: bold;
 }
+
+/* 鎿嶄綔鎸夐挳鏍峰紡 */
+::v-deep .el-button--text {
+  padding: 4px 8px;
+}
 </style>

--
Gitblit v1.9.3