From cd574e3394883b79eac5d63f3b11bca852dbc7a0 Mon Sep 17 00:00:00 2001
From: WXL <wl_5969728@163.com>
Date: 星期一, 29 十二月 2025 20:57:17 +0800
Subject: [PATCH] 页面推送

---
 src/views/project/DonationProcess/index.vue | 1351 ++++++++++++++++++++--------------------------------------
 1 files changed, 468 insertions(+), 883 deletions(-)

diff --git a/src/views/project/DonationProcess/index.vue b/src/views/project/DonationProcess/index.vue
index ad48d97..7ff9834 100644
--- a/src/views/project/DonationProcess/index.vue
+++ b/src/views/project/DonationProcess/index.vue
@@ -1,98 +1,184 @@
 <template>
   <div class="app-container">
-    <el-form
-      :model="queryParams"
-      ref="queryForm"
-      :inline="true"
-      v-show="showSearch"
-      label-width="70px"
-    >
-      <el-form-item label="濮撳悕" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="璇疯緭鍏ュ鍚�"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
+    <!-- 鎼滅储绛涢�夊尯鍩� -->
+    <el-card class="filter-card">
+      <el-form
+        :model="queryParams"
+        ref="queryForm"
+        :inline="true"
+        v-show="showSearch"
+        label-width="70px"
+      >
+        <el-form-item label="濮撳悕" prop="name">
+          <el-input
+            v-model="queryParams.name"
+            placeholder="璇疯緭鍏ュ鍚�"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="璇佷欢鍙风爜" prop="idcardno">
+          <el-input
+            v-model="queryParams.idcardno"
+            placeholder="璇疯緭鍏ヨ瘉浠跺彿鐮�"
+            clearable
+            size="small"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="鐘舵��" prop="recordstate">
+          <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="99" />
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <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-form-item>
+      </el-form>
+    </el-card>
 
-      <el-form-item>
-        <el-button
-          type="primary"
-          icon="el-icon-search"
-          size="mini"
-          @click="handleQuery"
-          >鎼滅储</el-button
-        >
-      </el-form-item>
-    </el-form>
+    <!-- 缁熻鍗$墖 -->
+    <el-row :gutter="20" class="stats-row">
+      <el-col :span="6">
+        <el-card class="stats-card total" shadow="hover">
+          <div class="stat-content">
+            <div class="stat-icon">馃搳</div>
+            <div class="stat-info">
+              <div class="stat-count">{{ stats.totalCount }}</div>
+              <div class="stat-label">鎬绘崘鐚��</div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="6">
+        <el-card class="stats-card pending" shadow="hover">
+          <div class="stat-content">
+            <div class="stat-icon">鈴�</div>
+            <div class="stat-info">
+              <div class="stat-count">{{ stats.pendingCount }}</div>
+              鎹愮尞涓�
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="6">
+        <el-card class="stats-card approved" shadow="hover">
+          <div class="stat-content">
+            <div class="stat-icon">鉁�</div>
+            <div class="stat-info">
+              <div class="stat-count">{{ stats.approvedCount }}</div>
+              <div class="stat-label">宸插畬鎴�</div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :span="6">
+        <el-card class="stats-card terminated" shadow="hover">
+          <div class="stat-content">
+            <div class="stat-icon">鉂�</div>
+            <div class="stat-info">
+              <div class="stat-count">{{ stats.terminatedCount }}</div>
+              <div class="stat-label">宸茬粓姝�</div>
+            </div>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
 
-    <!-- <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-          v-hasPermi="['project:donatebaseinfo:edit']"
-          >淇敼</el-button
-        >
-      </el-col> -->
-
+    <!-- 鏁版嵁琛ㄦ牸 -->
     <el-table
       v-loading="loading"
       :data="donatebaseinfoList"
-      @selection-change="handleSelectionChange"
       border
       :default-sort="{ prop: 'donatetime', order: 'descending' }"
+      style="width: 100%; margin-top: 20px;"
     >
-      <!-- <el-table-column label="鎶ュ憡鏃堕棿" align="center" prop="id" /> -->
-      <!-- <el-table-column type="selection" width="55" align="center" /> -->
       <el-table-column
-        label="妗堜緥鏃堕棿"
+        label="涓婃姤鏃堕棿"
         align="center"
         prop="donatetime"
-        width="100"
+        width="110"
+        fixed="left"
       >
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
+
+      <el-table-column
+        label="杩涘害"
+        align="center"
+        prop="coreteamassessconclusion"
+        width="100"
+        fixed="left"
+      >
+        <template slot-scope="scope">
+          <el-tag :type="getStatusTag(scope.row.recordstate)">
+            {{ getStatusText(scope.row.recordstate) }}
+          </el-tag>
+        </template>
+      </el-table-column>
+
       <el-table-column label="濮撳悕" align="center" prop="name" width="100" />
+
+      <el-table-column label="鎬у埆" align="center" prop="sex" width="80">
+        <template slot-scope="scope">
+          <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="200"
+        width="180"
       />
 
-      <el-table-column label="閮ㄩ棬鍚嶇О" align="center" prop="deptname" />
-
       <el-table-column
-        label="鎶ュ憡浜�"
+        label="鍗忚皟鍛�"
         align="center"
         prop="reportername"
         width="100"
       />
+
+
       <el-table-column
-        label="鎶ュ憡鏃堕棿"
+        label="杞负妗堜緥鏃堕棿"
         align="center"
-        prop="reporttime"
-        width="100"
+        prop="donatetime"
+        width="110"
       >
         <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.reporttime, "{y}-{m}-{d}") }}</span>
+          <span>{{ parseTime(scope.row.donatetime, "{y}-{m}-{d}") }}</span>
         </template>
       </el-table-column>
 
+      <!-- 绗竴娆″尰瀛﹁瘎浼� -->
       <el-table-column
-        label="鍖诲璇勪及缁撹"
+        label="绗竴娆¤瘎浼扮粨璁�"
         align="center"
         prop="coreteamassessconclusion"
-        width="100"
+        width="120"
       >
         <template slot-scope="scope">
           <dict-tag
@@ -101,11 +187,12 @@
           />
         </template>
       </el-table-column>
+
       <el-table-column
-        label="鍖诲璇勪及鏃堕棿"
+        label="绗竴娆¤瘎浼版椂闂�"
         align="center"
         prop="coreteamassesstime"
-        width="100"
+        width="110"
       >
         <template slot-scope="scope">
           <span>{{
@@ -113,21 +200,51 @@
           }}</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="100"
+        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="100"
+        width="120"
       >
         <template slot-scope="scope">
           <dict-tag
@@ -136,27 +253,30 @@
           />
         </template>
       </el-table-column>
+
       <el-table-column
         label="浼︾悊瀹℃煡鏃堕棿"
         align="center"
         prop="conclusiontime"
-        width="100"
+        width="110"
       >
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.conclusiontime, "{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="operationbegtime"
-        width="100"
+        width="110"
       >
         <template slot-scope="scope">
           <span>{{
@@ -164,21 +284,24 @@
           }}</span>
         </template>
       </el-table-column>
+
       <el-table-column
         label="瀹屾垚鐧昏鏃堕棿"
         align="center"
         prop="completetime"
-        width="100"
+        width="110"
       >
         <template slot-scope="scope">
           <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"
       >
         <template slot-scope="scope">
           <div v-if="!scope.row.terminationCase">
@@ -187,45 +310,31 @@
               :value="scope.row.workflow"
             />
           </div>
-          <div v-else>浠诲姟缁堟</div>
+          <div v-else>
+            <el-tag type="danger">浠诲姟缁堟</el-tag>
+          </div>
         </template>
       </el-table-column>
-      <!-- <el-table-column
-        label="鎿嶄綔"
-        align="center"
-        class-name="small-padding fixed-width"
-        fixed="right"
-      >
+
+      <!-- <el-table-column label="鎿嶄綔" align="center" width="120" fixed="right">
         <template slot-scope="scope">
           <el-button
             size="mini"
             type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['project:donatebaseinfo:edit']"
-            >璇︽儏</el-button
-          >
+            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-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['project:donatebaseinfo:remove']"
-            >鍒犻櫎</el-button
-          >
-
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-refrigerator"
-            @click="handledownload(scope.row)"
-            >涓嬭浇</el-button
-          >
-
+            icon="el-icon-check"
+            @click="handleApprove(scope.row)"
+          >瀹℃牳</el-button>
         </template>
       </el-table-column> -->
     </el-table>
+
     <pagination
       v-show="total > 0"
       :total="total"
@@ -233,864 +342,340 @@
       :limit.sync="queryParams.pageSize"
       @pagination="getList"
     />
+
+    <!-- 璇︽儏寮规 -->
+    <el-dialog
+      :title="`鎹愮尞鑰呰鎯� - ${currentRecord.name}`"
+      :visible.sync="detailVisible"
+      width="1000px"
+      append-to-body
+    >
+      <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>
   </div>
 </template>
+
 <script>
-import { getUserProfile } from "@/api/system/user";
-import {
-  listDonationProcess,
-  getDonatebaseinfo,
-  delDonatebaseinfo,
-  addDonatebaseinfo,
-  updateDonatebaseinfo,
-  exportDonatebaseinfo,
-  downloadbaseinfo,
-  getDonationNumber,
-  getdonatorno
-} from "@/api/project/donatebaseinfo";
-import Li_area_select from "@/components/Address";
-import OrgSelecter from "@/views/project/components/orgselect";
-import AnnexUpload from "@/views/project/components/annexupload";
-import ReportName from "@/views/project/components/organizationUser";
-import { getToken } from "@/utils/auth";
-import {
-  listOrganization,
-  getOrganization,
-  listReportname,
-  listUser
-} from "@/api/project/organization";
+// 瀵煎叆妯℃嫙鏁版嵁鐢熸垚宸ュ叿
+import Mock from "mockjs";
+
 export default {
-  components: {
-    Li_area_select,
-    OrgSelecter,
-    AnnexUpload,
-    ReportName
-  },
   name: "Donatebaseinfo",
   dicts: ["sys_donornode", "sys_EthicalReview", "sys_BaseAssessConclusion"],
   data() {
     return {
-      tempRecordState: null,
-      approvalState: false,
-      countyname: "",
-      cuuntry: "",
-      organizationname: "",
-      selecttime: "",
-
-      //鐪佸競鍖�
-      //榛樿鍊艰缃紝鍙负绌�
-      searchAddress: {
-        sheng: "",
-        shi: "",
-        qu: "",
-        organizationname: null
-      },
-      residenceAddresss: {
-        sheng: "娴欐睙鐪�",
-        shi: "",
-        qu: ""
-      },
-      registerAddresss: {
-        sheng: "娴欐睙鐪�",
-        shi: "",
-        qu: ""
-      },
-      terminationCaselist: [
-        { name: "缁堟鐘舵��", value: 1 },
-        { name: "姝e父鐘舵��", value: 0 }
-      ],
       // 閬僵灞�
-      loading: true,
-      // 瀵煎嚭閬僵灞�
-      exportLoading: false,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
+      loading: false,
       // 鏄剧ず鎼滅储鏉′欢
       showSearch: true,
       // 鎬绘潯鏁�
       total: 0,
       // 鎹愮尞鍩虹琛ㄦ牸鏁版嵁
       donatebaseinfoList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鑾峰彇缁勭粐鍚嶇О鏃堕棿鑼冨洿
-      daterangeReporttime: [],
-
+      // 璇︽儏寮规鏄剧ず
+      detailVisible: false,
+      // 瀹℃牳寮规鏄剧ず
+      approveVisible: false,
+      // 褰撳墠鎿嶄綔璁板綍
+      currentRecord: {},
+      // 缁熻鏁版嵁
+      stats: {
+        totalCount: 0,
+        pendingCount: 0,
+        approvedCount: 0,
+        terminatedCount: 0
+      },
       // 鏌ヨ鍙傛暟
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        donorno: null,
-        recordstate: null,
-        // treatmenthospitalno: null,
-        treatmenthospitalname: null,
-        name: null,
-        residenceprovince: null,
-        residencecity: null,
-        residencetown: null,
-        starttime: null,
-        endtime: null,
-        city: null,
-        reporterno: null
-        // organizationname: null,
-        // organizationtype: null,
-        // idcardno: null,
-        // reporterno: null,
-        // reporttime: null,
+        name: undefined,
+        idcardno: undefined,
+        recordstate: undefined
       },
-      // 琛ㄥ崟鍙傛暟
-      form: {
-        id: null,
-        name: null,
-        sex: null,
-        idcardtype: null,
-        idcardno: null,
-        age: null,
-        ageunit: null,
-        birthday: null,
-        phone: null,
-        residenceaddress: null,
-        nationality: "涓浗",
-        nativeplace: null,
-        residenceprovince: null,
-        nation: null,
-        residenceprovincename: null,
-        occupation: null,
-        residencecity: null,
-        education: null,
-        residencecityname: null,
-        residencetown: null,
-        residencetownname: null,
-        residencecommunity: null,
-        residencecommunityname: null,
-        residencecountycode: null,
-        residencecountyname: null,
-        registeraddress: null,
-        registerprovince: null,
-        registerprovincename: null,
-        registercity: null,
-        registercityname: null,
-        registertown: null,
-        registertownname: null,
-        registercommunity: null,
-        registercommunityname: null,
-        registercountycode: null,
-        registercountyname: null,
-        recordstate: null,
-        treatmenthospitalno: null,
-        treatmenthospitalname: null,
-        treatmentdeptname: null,
-        diagnosisno: null,
-        diagnosisname: null,
-        bloodtype: "0",
-        inpatientno: null,
-        rhyin: "0",
-        donorno: null,
-        donationcategory: null,
-        illnessoverview: null,
-        diseasetype: [],
-        infectious: [],
-        selfwill: [],
-        diseasetypeOther: null,
-        othercases: [],
-        kinshipwill: 0,
-        infosources: [],
-        kinship: [],
-        redorganno: null,
-        redorganname: null,
-        contactperson: null,
-        infectiousOther: null,
-        contactnumber: null,
-        contacttime: null,
-        reporterno: null,
-        reportername: null,
-        patientstate: [],
-        reporterphone: null,
-        infosourcesOther: null,
-        reporttime: null,
-        delFlag: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
-        kinshipOther: null,
-        majorrelatives: null,
-        familyrelations: null,
-        acquisitiontissueno: "ZJOPO",
-        acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
-      },
-      //ads
-      reporters: [],
-      users: [],
-
-      //鏄惁鏄剧ず淇濆瓨鎸夐挳
-      showSaveBtn: true,
-      showTerminationBtn: false,
-      //娴佺▼鍚嶇О
-      flowname: "娼滃湪鎹愮尞鐧昏",
-      annexno: "PotentialDonationRegistration",
-      starttime: "",
-      endtime: "",
-      reportlist: [],
-      reportervalue: "",
-      headers: {
-        Authorization: "Bearer " + getToken()
+      // 瀹℃牳琛ㄥ崟
+      approveForm: {
+        approveResult: "1",
+        approveOpinion: ""
       }
     };
   },
   created() {
-    if (sessionStorage.getItem("donatebaseinfo")) {
-      this.queryParams = JSON.parse(sessionStorage.getItem("donatebaseinfo"));
-      console.log(this.queryParams, "queryParams");
-    }
-  },
-
-  mounted(e) {
-    // let idd = this.$route.query.userid
-    // console.log('chuanzhi',idd);
-
-    this.LoadReportList();
-
-    if (this.$route.params.starttime != null && this.$route.params.endtime) {
-      this.selecttime = [
-        this.$moment(this.$route.params.starttime).format("YYYY-MM-DD"),
-        this.$moment(this.$route.params.endtime).format("YYYY-MM-DD")
-      ];
-    }
-    if (this.$route.params.reporterno != "") {
-      this.reporterno = this.$route.params.reporterno;
-    }
-
-    if (
-      this.$route.params.tempRecordState != "" &&
-      this.$route.params.tempRecordState != undefined
-    ) {
-      this.queryParams.recordstate = "" + this.$route.params.tempRecordState;
-    }
-    if (this.$route.params.reporterno != "") {
-      this.reportervalue = this.$route.params.reporterno;
-    }
-    if (!this.$route.params.shen != "") {
-      this.searchAddress.sheng = this.$route.params.shen;
-      if (!this.$route.params.shi != "") {
-        this.searchAddress.shi = this.$route.params.shi;
-      }
-      if (!this.$route.params.qu) {
-        this.searchAddress.qu = this.$route.params.qu;
-      }
-    }
-
-    if (this.$route.params.city != "") {
-      this.queryParams.regionallevel = this.$route.params.city;
-    } else {
-      this.queryParams.regionallevel = "";
-    }
-
-    this.getTimeList();
-
     this.getList();
   },
-
   methods: {
-    LoadReportList() {
-      listDonationProcess().then(res => {
-        let list = res.rows;
-        let reportlist = [];
-        reportlist.push({ reporterno: "", reportername: "鍏ㄩ儴" });
-        list.forEach(element => {
-          reportlist.push({
-            reporterno: element.reporterno,
-            reportername: element.reportername
-          });
-        });
-
-        if (reportlist != 0) {
-          reportlist = this.resetArr(reportlist);
-          this.reportlist = reportlist;
-        }
-      });
-    },
-
-    resetArr(Arr) {
-      var hash = {};
-      Arr = Arr.reduce(function(arr, current) {
-        hash[current.reporterno]
-          ? ""
-          : (hash[current.reporterno] = true && arr.push(current));
-        return arr;
-      }, []);
-      return Arr;
-    },
-
-    getTimeList(e) {
-      console.log(this.selecttime);
-      if (this.selecttime != null) {
-        if (this.selecttime != 0) {
-          this.endtime = this.selecttime[1];
-          this.starttime = this.selecttime[0];
-          // if (this.endtime == this.starttime) {
-          let num = Number(this.endtime.slice(5, 7));
-          if (num < 9) {
-            let mon = Number(this.endtime.slice(6, 7));
-            this.endtime =
-              this.endtime.slice(0, 5) +
-              "0" +
-              (mon + 1) +
-              "-" +
-              "01" +
-              " " +
-              "00" +
-              ":" +
-              "00" +
-              ":" +
-              "00";
+    /** 鐢熸垚妯℃嫙鏁版嵁 */
+    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]
           }
-          // this.endtime=this.endtime.slice(0,5)骞�
-          else if (num >= 10) {
-            this.endtime =
-              this.endtime.slice(0, 5) +
-              (num + 1) +
-              "-" +
-              "01" +
-              " " +
-              "00" +
-              ":" +
-              "00" +
-              ":" +
-              "00";
-          } else {
-            this.endtime =
-              this.endtime.slice(0, 5) +
-              "10" +
-              "-" +
-              "01" +
-              " " +
-              "00" +
-              ":" +
-              "00" +
-              ":" +
-              "00";
-          }
-          this.starttime =
-            this.starttime + " " + "00" + ":" + "00" + ":" + "00";
-          // }
-        } else {
-          this.starttime = "1998-01-01 00:00:00";
-          this.endtime = "2998-01-01 00:00:00";
-        }
-      } else {
-        this.starttime = "1998-01-01 00:00:00";
-        this.endtime = "2998-01-01 00:00:00";
-      }
-    },
+        ]
+      };
 
-    handleapproval(row) {
-      this.$confirm("鏄惁纭灏嗘渚嬩笂鎶ュ鏍革紵", "鎻愮ず", {
-        confirmButtonText: "纭畾",
-        cancelButtonText: "鍙栨秷",
-        type: "warning"
-      })
-        .then(() => {
-          row.recordstate = 1;
-          updateDonatebaseinfo(row).then(response => {
-            this.$modal.msgSuccess("涓婃姤瀹℃牳鎴愬姛");
-            this.getList();
-          });
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "宸插彇娑堜笂鎶�"
-          });
-        });
-    },
-    resetapproval(row) {
-      this.approvalState = false;
-      //  this.reset();
-      // const id = row.id || this.ids;
-      updateDonatebaseinfo(row).then(response => {
-        row.recordstate = 0;
-      });
-    },
-
-    updateMessage() {
-      try {
-        const reg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
-        if (reg.test(this.form.idcardno)) {
-          // 韬唤璇佸彿鐮佹槸鍚﹀悎娉�
-          var org_birthday = this.form.idcardno.substring(6, 14);
-          var org_gender = this.form.idcardno.substring(16, 17);
-          var sex = org_gender % 2 == 1 ? 1 : 2;
-          var birthday =
-            org_birthday.substring(0, 4) +
-            "-" +
-            org_birthday.substring(4, 6) +
-            "-" +
-            org_birthday.substring(6, 8);
-          var birthdays = new Date(birthday.replace(/-/g, "/"));
-          let d = new Date();
-          let age =
-            d.getFullYear() -
-            birthdays.getFullYear() -
-            (d.getMonth() < birthdays.getMonth() ||
-            (d.getMonth() == birthdays.getMonth() &&
-              d.getDate() < birthdays.getDate())
-              ? 1
-              : 0);
-          // 璧嬪�肩粰琛ㄦ牸
-          this.form.sex = sex;
-          this.form.birthday = birthday;
-          this.form.age = age;
-        } else {
-        }
-      } catch {}
-    },
-    // sheng: '娴欐睙鐪�',
-    //   shi: '',
-    //   qu: '',
-
-    // 韬唤璇侀獙璇�
-    //鏍规嵁韬唤璇佸彿鑷姩鐢熸垚鎬у埆銆佸嚭鐢熸棩鏈熷拰骞撮緞
-    inputChange() {
-      const idCard = this.props.form.getFieldValue("idCard");
-      let birthday = "";
-      let sex = "0";
-      if (idCard.length === 15) {
-        birthday = `19${idCard.substring(6, 8)}-${idCard.substring(
-          9,
-          10
-        )}-${idCard.substring(11, 12)}`;
-        sex = idCard[14] % 2 === 0 ? "0" : "1";
-      } else {
-        birthday = `${idCard.substring(6, 10)}-${idCard.substring(
-          11,
-          12
-        )}-${idCard.substring(13, 14)}`;
-        sex = idCard[16] % 2 === 0 ? "0" : "1";
-      }
-      this.setState({
-        birthday,
-        sex
-      });
+      return Mock.mock(mockTemplate).list;
     },
 
     /** 鏌ヨ鎹愮尞鍩虹鍒楄〃 */
     getList() {
       this.loading = true;
 
-      // 璺宠浆鏃剁殑榛樿杩涘害
+      // 妯℃嫙API璋冪敤寤惰繜
+      setTimeout(() => {
+        // 鐢熸垚妯℃嫙鏁版嵁
+        const mockData = this.generateMockData();
 
-      if (this.reportervalue != "") {
-        this.queryParams.reporterno = this.reportervalue;
-      }
+        // 搴旂敤绛涢�夋潯浠�
+        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
+          );
+        }
 
-      if (this.starttime != "") {
-        this.queryParams.starttime = this.starttime;
-      } else {
-        this.queryParams.starttime = "";
-      }
-      if (this.endtime != "") {
-        this.queryParams.endtime = this.endtime;
-      } else {
-        this.queryParams.endtime = "";
-      }
-      console.log(this.queryParams);
+        // 鍒嗛〉澶勭悊
+        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;
 
-      listDonationProcess(this.queryParams).then(response => {
-        this.donatebaseinfoList = response.rows;
-        //console.log("listDonationProcess", response.rows);
-        this.total = response.total;
+        // 鏇存柊缁熻鏁版嵁
+        this.updateStats(mockData);
         this.loading = false;
-      });
+      }, 500);
     },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: null,
-        name: null,
-        sex: null,
-        idcardtype: null,
-        idcardno: null,
-        age: null,
-        ageunit: null,
-        birthday: null,
-        phone: null,
-        residenceaddress: null,
-        nationality: "涓浗",
-        nativeplace: null,
-        residenceprovince: null,
-        nation: null,
-        residenceprovincename: null,
-        occupation: null,
-        residencecity: null,
-        education: null,
-        residencecityname: null,
-        residencetown: null,
-        residencetownname: null,
-        residencecommunity: null,
-        residencecommunityname: null,
-        residencecountycode: null,
-        residencecountyname: null,
-        registeraddress: null,
-        registerprovince: null,
-        registerprovincename: null,
-        registercity: null,
-        registercityname: null,
-        registertown: null,
-        registertownname: null,
-        registercommunity: null,
-        registercommunityname: null,
-        registercountycode: null,
-        registercountyname: null,
-        recordstate: null,
-        treatmenthospitalno: null,
-        treatmenthospitalname: null,
-        treatmentdeptname: null,
-        diagnosisno: null,
-        diagnosisname: null,
-        bloodtype: "0",
-        inpatientno: null,
-        rhyin: 0,
-        donorno: null,
-        donationcategory: null,
-        illnessoverview: null,
-        diseasetype: [],
-        infectious: [],
-        selfwill: [],
-        diseasetypeOther: null,
-        othercases: [],
-        kinshipwill: 0,
-        infosources: [],
-        kinship: [],
-        redorganno: null,
-        redorganname: null,
-        contactperson: null,
-        infectiousOther: null,
-        contactnumber: null,
-        contacttime: null,
-        reporterno: null,
-        reportername: null,
-        patientstate: [],
-        reporterphone: null,
-        infosourcesOther: null,
-        reporttime: null,
-        delFlag: null,
-        createBy: null,
-        createTime: null,
-        updateBy: null,
-        updateTime: null,
-        kinshipOther: null,
-        majorrelatives: null,
-        familyrelations: null,
-        acquisitiontissueno: "ZJOPO",
-        acquisitiontissuename: "娴欐睙鐪佷汉浣撳櫒瀹樿幏鍙栫粍缁�"
-      };
 
-      this.resetForm("form");
+    /** 鏇存柊缁熻鏁版嵁 */
+    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;
     },
+
+    /** 鑾峰彇鐘舵�佹爣绛炬牱寮� */
+    getStatusTag(status) {
+      const statusMap = {
+        "0": "warning", // 寰呭鏍�
+        "1": "success", // 宸插鏍�
+        "99": "danger" // 宸茬粓姝�
+      };
+      return statusMap[status] || "info";
+    },
+
+    /** 鑾峰彇鐘舵�佹枃鏈� */
+    getStatusText(status) {
+      const textMap = {
+        "0": "鎹愮尞涓�",
+        "1": "宸插畬鎴�",
+        "99": "宸茬粓姝�"
+      };
+      return textMap[status] || "鏈煡鐘舵��";
+    },
+
+    /** 鏃堕棿鏍煎紡鍖� */
+    parseTime(time, format) {
+      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 (format === "{y}-{m}-{d}") {
+        return `${year}-${month}-${day}`;
+      }
+      return time;
+    },
+
     /** 鎼滅储鎸夐挳鎿嶄綔 */
     handleQuery() {
       this.queryParams.pageNum = 1;
       this.getList();
     },
+
     /** 閲嶇疆鎸夐挳鎿嶄綔 */
     resetQuery() {
-      this.daterangeReporttime = [];
-
-      this.reportervalue = "";
-
       this.queryParams = {
-        doname: null,
         pageNum: 1,
         pageSize: 10,
-        name: null,
-        idcardno: null,
-        residenceprovince: null,
-        residencecity: null,
-        residencetown: null,
-        // "2"
-        recordstate: null,
-        treatmenthospitalname: null,
-        donorno: null,
-        acquisitiontissueno: null,
-        reportername: null,
-        reporttime: null,
-        city: null,
-        treatmenthospitalno: null
+        name: undefined,
+        idcardno: undefined,
+        recordstate: undefined
       };
-      this.selecttime = [];
-      this.getTimeList();
-      this.searchAddress = {
-        sheng: "",
-        shi: "",
-        qu: "",
-        organizationname: null
+      this.getList();
+    },
+
+    /** 鏌ョ湅璇︽儏 */
+    handleDetail(row) {
+      this.currentRecord = { ...row };
+      this.detailVisible = true;
+    },
+
+    /** 瀹℃牳鎿嶄綔 */
+    handleApprove(row) {
+      this.currentRecord = { ...row };
+      this.approveForm = {
+        approveResult: "1",
+        approveOpinion: ""
       };
-      //this.$refs.areaSelect.clean();
-
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id);
-      this.single = selection.length !== 1;
-      this.multiple = !selection.length;
+      this.approveVisible = true;
     },
 
-    /** 淇敼鎸夐挳鎿嶄綔 */
-
-    handleUpdate(row) {
-      this.$router.push({
-        path: "/organ/donationdetails/",
-        query: {
-          id: row.id,
-          organType: "edit"
-        }
-      });
-      // this.showSaveBtn = true;
-      // const id = row.id || this.ids;
-      // //this.$refs.annex.getAnnexList();
-
-      // getDonatebaseinfo(id).then((response) => {
-      //   this.reset();
-
-      //   this.$nextTick(function () {
-      //     this.$refs.annex.getAnnexList();
-      //   });
-      //   this.form = response.data;
-      //   response.data.sex = parseInt(response.data.sex);
-      //   this.form.id = response.data.id;
-      //   this.form.diseasetype = this.form.diseasetype.split(",");
-      //   this.form.infectious = this.form.infectious.split(",");
-      //   this.form.selfwill = this.form.selfwill.split(",");
-      //   this.form.othercases = this.form.othercases.split(",");
-      //   this.form.infosources = this.form.infosources.split(",");
-      //   this.form.kinship = this.form.kinship.split(",");
-      //   this.form.patientstate = this.form.patientstate.split(",");
-      //   this.open = true;
-      //   this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
-      //   this.registerAddresss.sheng = response.data.registerprovincename;
-      //   this.residenceAddresss.sheng = response.data.residenceprovincename;
-      //   this.registerAddresss.shi = response.data.registercityname;
-      //   this.residenceAddresss.shi = response.data.residencecityname;
-      //   this.residenceAddresss.qu = response.data.residencetownname;
-      //   this.registerAddresss.qu = response.data.registertownname;
-      // });
-    },
-    // 缁堟妗堜緥
-    handletermination(row) {
-      this.reset();
-      this.showSaveBtn = false;
-      this.showTerminationBtn = true;
-      const id = row.id || this.ids;
-      getDonatebaseinfo(id).then(response => {
-        this.form = response.data;
-        this.form.diseasetype = this.form.diseasetype.split(",");
-        this.form.infectious = this.form.infectious.split(",");
-        this.form.selfwill = this.form.selfwill.split(",");
-        this.form.othercases = this.form.othercases.split(",");
-        this.form.infosources = this.form.infosources.split(",");
-        this.form.kinship = this.form.kinship.split(",");
-        this.form.patientstate = this.form.patientstate.split(",");
-        this.registerAddresss.sheng = response.data.registerprovincename;
-        this.residenceAddresss.sheng = response.data.residenceprovincename;
-        this.registerAddresss.shi = response.data.registercityname;
-        this.residenceAddresss.shi = response.data.residencecityname;
-        this.residenceAddresss.qu = response.data.residencetownname;
-        this.registerAddresss.qu = response.data.registertownname;
-        this.open = true;
-        this.title = "浜轰綋鍣ㄥ畼娼滃湪鎹愮尞鑰呯櫥璁拌〃";
-        this.form.recordstate = 99;
-        // this.$nextTick(function() {
-        //   this.$refs.annex.getAnnexList();
-        // });
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm() {
-      console.log(this.form);
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          const date = { ...this.form };
-          console.log(date, "date");
-          this.form.birthday = this.$moment(this.form.birthday).format(
-            "YYYY-MM-DD HH:mm:ss"
-          );
-          this.form.diseasetype = this.form.diseasetype.join(",");
-          this.form.infectious = this.form.infectious.join(",");
-          this.form.selfwill = this.form.selfwill.join(",");
-          this.form.othercases = this.form.othercases.join(",");
-          this.form.infosources = this.form.infosources.join(",");
-          this.form.kinship = this.form.kinship.join(",");
-          this.form.patientstate = this.form.patientstate.join(",");
-          this.form.registerprovince = this.$refs.registerSelect.getSheng();
-          this.form.registerprovincename = this.registerAddresss.sheng;
-
-          this.form.residenceprovince = this.$refs.residenceSelect.getSheng();
-          this.form.residenceprovincename = this.residenceAddresss.sheng;
-
-          this.form.registercity = this.$refs.registerSelect.getShi();
-          this.form.registercityname = this.registerAddresss.shi;
-
-          this.form.residencecity = this.$refs.residenceSelect.getShi();
-          this.form.residencecityname = this.residenceAddresss.shi;
-
-          this.form.residencetown = this.$refs.residenceSelect.getQu();
-          this.form.residencetownname = this.residenceAddresss.qu;
-
-          this.form.registertown = this.$refs.registerSelect.getQu();
-          this.form.registertownname = this.registerAddresss.qu;
-
-          this.form.reportername = this.$refs.getReportname.$data.selectedLabel;
-          this.form.donatetime = this.form.reporttime;
-
-          try {
-            this.form.treatmenthospitalname = this.$refs.addOrgSelect.getOptionByValue(
-              this.form.treatmenthospitalno
-            ).organizationname;
-          } catch {
-            this.form.treatmenthospitalname = this.form.treatmenthospitalno;
-          }
-
-          try {
-            this.form.redorganname = this.$refs.addCrossOrgSelect.getOptionByValue(
-              this.form.redorganno
-            ).organizationname;
-          } catch {
-            this.form.redorganname = this.form.redorganno;
-          }
-
-          this.form.workflow = 0;
-          this.form.recordstate = 0;
-          addDonatebaseinfo(this.form).then(res => {
-            console.log("22");
-            console.log(res.code);
-            if (res.code == 200) {
-              this.$modal.msgSuccess("鏂板鎴愬姛");
-              this.$router.push({
-                path: "/organ/donationdetails/",
-                query: {
-                  id: res.data.id,
-                  organType: "edit"
-                }
-              });
-              this.open = false;
-            } else {
-              console.log("1");
-              this.form = date;
-              console.log(this.form, "form");
-              this.$modal.msgError("鏂板澶辫触锛�" + res.msg);
-            }
-          });
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$modal
-        .confirm('鏄惁纭鍒犻櫎鎹愮尞鍩虹缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�')
-        .then(function() {
-          return delDonatebaseinfo(ids);
-        })
-        .then(() => {
-          this.getList();
-          this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-        })
-        .catch(() => {});
-    },
-
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$modal
-        .confirm("鏄惁纭瀵煎嚭鎵�鏈夋崘鐚熀纭�鏁版嵁椤癸紵")
-        .then(() => {
-          this.exportLoading = true;
-          return exportDonatebaseinfo(queryParams);
-        })
-        .then(response => {
-          this.$download.name(response.msg);
-          this.exportLoading = false;
-        })
-        .catch(() => {});
-    },
-
-    // 瀵硅薄杞垚鎸囧畾瀛楃涓插垎闅�
-    listToString(list, separator) {
-      let strs = "";
-      separator = separator || ",";
-      for (let i in list) {
-        strs += list[i] + separator;
+    /** 鎻愪氦瀹℃牳 */
+    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(); // 閲嶆柊鍔犺浇鏇存柊缁熻
       }
-      return strs != "" ? strs.substr(0, strs.length - 1) : "";
-    },
-    //瀛楃涓叉牴鎹寚瀹氬瓧绗︿覆鍒嗛殧
-    stringToList(str, separator) {
-      separator = separator || ",";
-      let tempList = [];
-      if (str != null && str != undefined && str != "") {
-        tempList = str.split(separator);
-      }
-      return tempList;
-    },
-
-    //涓嬭浇娼滃湪鐧昏琛�
-    handledownload(row) {
-      const id = row.id || this.ids;
-
-      downloadbaseinfo(id).then(res => {
-        var fileUrl = res;
-        //鑾峰彇褰撳墠缃戝潃
-        var urlBase = process.env.VUE_APP_BASE_API;
-        var curWWWPath = window.document.location.href;
-        var pos = curWWWPath.indexOf(window.document.location.pathname);
-        // 鍒涘缓a鏍囩
-        var aEle = document.createElement("a");
-        aEle.href =
-          curWWWPath.substring(0, pos) + urlBase + fileUrl["downloadUrl"];
-        console.log(aEle.href);
-        // 娣诲姞Authorization澶撮儴
-        fetch(aEle.href, {
-          headers: this.headers
-        })
-          .then(response => {
-            // 灏嗘枃浠朵笅杞介摼鎺ヤ綔涓篵lob瀵硅薄杩涜涓嬭浇
-            return response.blob();
-          })
-          .then(blob => {
-            const url = window.URL.createObjectURL(new Blob([blob]));
-            console.log(url);
-            const link = document.createElement("a");
-            link.href = url;
-            const name = fileUrl["downloadName"];
-            link.setAttribute("download", name); // 鏇挎崲file.pdf涓哄疄闄呯殑鏂囦欢鍚�
-            document.body.appendChild(link);
-            link.click();
-            link.parentNode.removeChild(link);
-          });
-      });
     }
   }
 };
 </script>
 
 <style scoped>
-::v-deep .el-dialog__header {
-  padding-top: 40px !important;
-  margin: auto !important;
-  padding-bottom: 0px !important;
+.filter-card {
+  margin-bottom: 20px;
+}
+
+.stats-row {
+  margin-bottom: 20px;
+}
+
+.stats-card {
+  border-radius: 8px;
+  transition: all 0.3s ease;
+}
+
+.stats-card:hover {
+  transform: translateY(-2px);
+}
+
+.stats-card.total {
+  border-left: 4px solid #409eff;
+}
+
+.stats-card.pending {
+  border-left: 4px solid #e6a23c;
+}
+
+.stats-card.approved {
+  border-left: 4px solid #67c23a;
+}
+
+.stats-card.terminated {
+  border-left: 4px solid #f56c6c;
+}
+
+.stat-content {
+  display: flex;
+  align-items: center;
+  padding: 10px;
+}
+
+.stat-icon {
+  font-size: 32px;
+  margin-right: 15px;
+}
+
+.stat-info {
+  flex: 1;
+}
+
+.stat-count {
+  font-size: 24px;
+  font-weight: bold;
+  color: #303133;
+  margin-bottom: 5px;
+}
+
+.stat-label {
+  font-size: 14px;
+  color: #909399;
+}
+
+/* 琛ㄦ牸鏍峰紡浼樺寲 */
+::v-deep .el-table .cell {
+  padding: 8px 4px;
+}
+
+::v-deep .el-table th {
+  background-color: #f5f7fa;
+  font-weight: bold;
 }
 </style>

--
Gitblit v1.9.3