| | |
| | | /> |
| | | </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> |
| | |
| | | <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> |
| | |
| | | <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> |
| | |
| | | :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) }} |
| | |
| | | |
| | | <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" |
| | |
| | | </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" |
| | |
| | | </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" |
| | |
| | | </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 |
| | |
| | | |
| | | <script> |
| | | // 导入模拟数据生成工具 |
| | | import Mock from 'mockjs'; |
| | | import Mock from "mockjs"; |
| | | |
| | | export default { |
| | | name: "Donatebaseinfo", |
| | |
| | | /** 生成模拟数据 */ |
| | | 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; |
| | |
| | | ); |
| | | } |
| | | 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; |
| | |
| | | /** 更新统计数据 */ |
| | | 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; |
| | |
| | | /** 提交审核 */ |
| | | 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(); // 重新加载更新统计 |
| | | } |
| | |
| | | } |
| | | |
| | | .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 { |