WXL
2025-12-30 e2eb5acfb3961315df21abfe6f33a959699b562b
src/views/project/DonationProcess/index.vue
@@ -28,18 +28,29 @@
          />
        </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>
          <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 +74,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 +85,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>
@@ -100,13 +111,25 @@
      :default-sort="{ prop: 'donatetime', 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="donatetime"
        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">
      <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) }}
@@ -118,26 +141,45 @@
      <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="idcardno"
        width="180"
      />
      <el-table-column label="协调员" align="center" prop="reportername" width="100" />
      <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="donatetime"
        width="110"
      >
        <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="120">
      <el-table-column
        label="第一次评估结论"
        align="center"
        prop="coreteamassessconclusion"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_BaseAssessConclusion"
@@ -146,14 +188,26 @@
        </template>
      </el-table-column>
      <el-table-column label="第一次评估时间" align="center" prop="coreteamassesstime" width="110">
      <el-table-column
        label="第一次评估时间"
        align="center"
        prop="coreteamassesstime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
          <span>{{
            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
          }}</span>
        </template>
      </el-table-column>
      <!-- 第二次医学评估 -->
      <el-table-column label="第二次评估结论" align="center" prop="coreteamassessconclusion" width="120">
      <el-table-column
        label="第二次评估结论"
        align="center"
        prop="coreteamassessconclusion"
        width="120"
      >
        <template slot-scope="scope">
          <dict-tag
            :options="dict.type.sys_BaseAssessConclusion"
@@ -162,19 +216,36 @@
        </template>
      </el-table-column>
      <el-table-column label="第二次评估时间" align="center" prop="coreteamassesstime" width="110">
      <el-table-column
        label="第二次评估时间"
        align="center"
        prop="coreteamassesstime"
        width="110"
      >
        <template slot-scope="scope">
          <span>{{ parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}") }}</span>
          <span>{{
            parseTime(scope.row.coreteamassesstime, "{y}-{m}-{d}")
          }}</span>
        </template>
      </el-table-column>
      <el-table-column label="亲属确认时间" align="center" prop="signdate" width="110">
      <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"
@@ -183,27 +254,55 @@
        </template>
      </el-table-column>
      <el-table-column label="伦理审查时间" align="center" prop="conclusiontime" width="110">
      <el-table-column
        label="伦理审查时间"
        align="center"
        prop="conclusiontime"
        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="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>
        </template>
      </el-table-column>
      <el-table-column label="捐献进度" align="center" prop="workflow" width="120" fixed="right">
      <el-table-column
        label="捐献进度"
        align="center"
        prop="workflow"
        width="120"
        fixed="right"
      >
        <template slot-scope="scope">
          <div v-if="!scope.row.terminationCase">
            <dict-tag
@@ -287,7 +386,7 @@
<script>
// 导入模拟数据生成工具
import Mock from 'mockjs';
import Mock from "mockjs";
export default {
  name: "Donatebaseinfo",
@@ -337,27 +436,29 @@
    /** 生成模拟数据 */
    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]
        }]
        "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;
@@ -385,13 +486,14 @@
          );
        }
        if (this.queryParams.recordstate) {
          filteredData = filteredData.filter(item =>
            item.recordstate === this.queryParams.recordstate
          filteredData = filteredData.filter(
            item => item.recordstate === this.queryParams.recordstate
          );
        }
        // 分页处理
        const startIndex = (this.queryParams.pageNum - 1) * this.queryParams.pageSize;
        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;
@@ -405,40 +507,49 @@
    /** 更新统计数据 */
    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;
      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'   // 已终止
        "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');
      const month = (date.getMonth() + 1).toString().padStart(2, "0");
      const day = date
        .getDate()
        .toString()
        .padStart(2, "0");
      if (format === '{y}-{m}-{d}') {
      if (format === "{y}-{m}-{d}") {
        return `${year}-${month}-${day}`;
      }
      return time;
@@ -481,10 +592,14 @@
    /** 提交审核 */
    submitApprove() {
      // 模拟审核提交
      const index = this.donatebaseinfoList.findIndex(item => item.id === this.currentRecord.id);
      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.donatebaseinfoList[
          index
        ].recordstate = this.approveForm.approveResult;
        this.$message.success("审核成功");
        this.approveVisible = false;
        this.getList(); // 重新加载更新统计
      }
@@ -512,19 +627,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 {