| | |
| | | border |
| | | stripe |
| | | > |
| | | <el-table-column label="案例编号" prop="caseNo" align="center" /> |
| | | <el-table-column label="捐献者姓名" prop="donorName" align="center" /> |
| | | <el-table-column label="住院号" prop="inpatientNo" align="center" /> |
| | | <el-table-column label="案例状态" prop="status" align="center" > |
| | | <el-table-column label="案例编号" prop="caseNo" align="center" /> |
| | | <el-table-column label="捐献者姓名" prop="name" align="center" /> |
| | | <el-table-column label="住院号" prop="inpatientNo" align="center" /> |
| | | <el-table-column label="案例状态" prop="workflow" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <el-tag :type="getStatusTag(row.status)" size="small"> |
| | | {{ getStatusText(row.status) }} |
| | | <el-tag :type="getStatusTag(row.workflow)" size="small"> |
| | | {{ getStatusText(row.workflow) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="捐献器官" prop="organs" align="center" > |
| | | <el-table-column label="捐献器官" prop="organName" align="center"> |
| | | <template slot-scope="{ row }"> |
| | | <span v-if="row.organs && row.organs.length > 0"> |
| | | {{ row.organs.join('、') }} |
| | | </span> |
| | | <span v-if="row.organName">{{ row.organName }}</span> |
| | | <span v-else>-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="捐献时间" prop="donationTime" align="center" /> |
| | | <el-table-column label="死亡原因" prop="deathCause" align="center" /> |
| | | <el-table-column label="医院" prop="hospital" align="center" width="200" /> |
| | | <el-table-column label="案例时间" prop="donatetime" align="center" /> |
| | | <el-table-column label="死亡原因" prop="deathReason" align="center" /> |
| | | <el-table-column label="医院" prop="treatmentHospitalName" align="center" width="200" /> |
| | | </el-table> |
| | | |
| | | <div style="text-align: center; margin-top: 20px;"> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { trendList } from '@/api/businessApi'; |
| | | import { toTotalsList } from '@/utils/totals'; |
| | | |
| | | export default { |
| | | name: 'CaseDetail', |
| | | props: { |
| | |
| | | data() { |
| | | return { |
| | | loading: false, |
| | | caseList: [ |
| | | { caseNo: 'C202401001', donorName: '张三', inpatientNo: 'ZY202401001', status: 'completed', organs: ['肝脏', '肾脏'], donationTime: '2024-01-15 10:30', deathCause: '脑外伤', hospital: '青岛大学附属医院' }, |
| | | { caseNo: 'C202401002', donorName: '李四', inpatientNo: 'ZY202401002', status: 'completed', organs: ['心脏', '眼角膜'], donationTime: '2024-01-20 14:20', deathCause: '心搏骤停', hospital: '青岛市立医院' }, |
| | | { caseNo: 'C202401003', donorName: '王五', inpatientNo: 'ZY202401003', status: 'potential', organs: [], donationTime: null, deathCause: '脑血管意外', hospital: '青岛市中心医院' } |
| | | ] |
| | | caseList: [] |
| | | }; |
| | | }, |
| | | created() { |
| | | this.loadList(); |
| | | }, |
| | | watch: { |
| | | query: { |
| | | handler() { |
| | | this.loadList(); |
| | | }, |
| | | deep: true |
| | | } |
| | | }, |
| | | methods: { |
| | | getStatusTag(status) { |
| | | const map = { completed: 'success', potential: 'warning', abandoned: 'danger' }; |
| | | return map[status] || 'info'; |
| | | // 加载案例明细:/opo/totals/trendList |
| | | async loadList() { |
| | | this.loading = true; |
| | | try { |
| | | const params = {}; |
| | | if (this.query.region) params.area = this.query.region; |
| | | if (this.query.month) { |
| | | params.startTime = `${this.query.month}-01`; |
| | | params.endTime = this.endOfMonth(this.query.month); |
| | | } |
| | | const res = await trendList(params); |
| | | this.caseList = toTotalsList(res); |
| | | } catch (error) { |
| | | console.error('加载案例明细失败:', error); |
| | | this.$message.error('案例明细加载失败'); |
| | | } finally { |
| | | this.loading = false; |
| | | } |
| | | }, |
| | | getStatusText(status) { |
| | | const map = { completed: '已完成', potential: '潜在捐献', abandoned: '放弃捐献' }; |
| | | return map[status] || '未知'; |
| | | // 月份(yyyy-MM) -> 当月最后一天(yyyy-MM-dd) |
| | | endOfMonth(month) { |
| | | const [y, m] = String(month).split('-').map(Number); |
| | | const lastDay = new Date(y, m, 0).getDate(); |
| | | return `${month}-${String(lastDay).padStart(2, '0')}`; |
| | | }, |
| | | // 工作流状态文案 |
| | | getStatusText(workflow) { |
| | | const map = { |
| | | 1: '供者维护', |
| | | 2: '捐献意愿', |
| | | 3: '医学评估', |
| | | 4: '死亡判定', |
| | | 5: '伦理审查', |
| | | 6: '器官分配', |
| | | 7: '器官利用', |
| | | 99: '捐献完成' |
| | | }; |
| | | return map[workflow] || '未知'; |
| | | }, |
| | | getStatusTag(workflow) { |
| | | if (workflow === 99) return 'success'; |
| | | if (workflow) return 'warning'; |
| | | return 'info'; |
| | | } |
| | | } |
| | | }; |