| | |
| | | :inline="true" |
| | | label-width="100px" |
| | | > |
| | | <el-form-item label="住院号" prop="hospitalNo"> |
| | | <el-form-item label="住院号" prop="inpatientno"> |
| | | <el-input |
| | | v-model="queryParams.hospitalNo" |
| | | v-model="queryParams.inpatientno" |
| | | placeholder="请输入住院号" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="捐献者姓名" prop="donorName"> |
| | | <el-form-item label="捐献者姓名" prop="name"> |
| | | <el-input |
| | | v-model="queryParams.donorName" |
| | | v-model="queryParams.name" |
| | | placeholder="请输入捐献者姓名" |
| | | clearable |
| | | style="width: 200px" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="死亡原因" prop="deathReason"> |
| | | <el-form-item label="死亡原因" prop="deathreason"> |
| | | <el-select |
| | | v-model="queryParams.deathReason" |
| | | v-model="queryParams.deathreason" |
| | | placeholder="请选择死亡原因" |
| | | clearable |
| | | style="width: 200px" |
| | |
| | | >修改</el-button |
| | | > |
| | | <el-button |
| | | type="danger" |
| | | icon="el-icon-delete" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >删除</el-button |
| | | > |
| | | <el-button |
| | | type="warning" |
| | | icon="el-icon-download" |
| | | @click="handleExport" |
| | |
| | | > |
| | | <el-table-column type="selection" width="55" align="center" /> |
| | | <el-table-column |
| | | label="案例编号" |
| | | align="center" |
| | | prop="caseNo" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="住院号" |
| | | align="center" |
| | | prop="hospitalNo" |
| | | prop="inpatientno" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="捐献者姓名" |
| | | align="center" |
| | | prop="donorName" |
| | | prop="name" |
| | | width="120" |
| | | /> |
| | | <el-table-column label="性别" align="center" prop="gender" width="80"> |
| | | <el-table-column label="性别" align="center" prop="sex" width="80"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag |
| | | :options="dict.type.sys_user_sex" |
| | | :value="parseInt(scope.row.gender)" |
| | | :value="scope.row.sex" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="年龄" align="center" prop="age" width="80" /> |
| | | <el-table-column |
| | | label="治疗医院" |
| | | align="center" |
| | | prop="treatmenthospitalname" |
| | | width="180" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="疾病诊断" |
| | | align="center" |
| | | prop="diagnosis" |
| | | min-width="180" |
| | | prop="diagnosisname" |
| | | min-width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="死亡原因" |
| | | align="center" |
| | | prop="deathReason" |
| | | prop="deathreason" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="reasonFilter(scope.row.deathReason)"> |
| | | {{ reasonTextFilter(scope.row.deathReason) }} |
| | | <el-tag :type="reasonFilter(scope.row.deathreason)"> |
| | | {{ reasonTextFilter(scope.row.deathreason) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="死亡时间" |
| | | align="center" |
| | | prop="deathTime" |
| | | prop="deathtime" |
| | | width="160" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ |
| | | scope.row.deathTime |
| | | ? parseTime(scope.row.deathTime, "{y}-{m}-{d} {h}:{i}") |
| | | scope.row.deathtime |
| | | ? parseTime(scope.row.deathtime, "{y}-{m}-{d} {h}:{i}") |
| | | : "-" |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="判定医生" |
| | | label="判定医生一" |
| | | align="center" |
| | | prop="judgmentDoctor" |
| | | prop="deathjudgedocto" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="判定医生二" |
| | | align="center" |
| | | prop="judgmentDoctortwo" |
| | | prop="deathjudgedoctt" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="登记时间" |
| | | label="记录状态" |
| | | align="center" |
| | | prop="registrationTime" |
| | | prop="recordstate" |
| | | width="100" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tag :type="statusFilter(scope.row.recordstate)"> |
| | | {{ statusTextFilter(scope.row.recordstate) }} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="创建时间" |
| | | align="center" |
| | | prop="createTime" |
| | | width="160" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ |
| | | scope.row.registrationTime |
| | | ? parseTime(scope.row.registrationTime, "{y}-{m}-{d} {h}:{i}") |
| | | scope.row.createTime |
| | | ? parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") |
| | | : "-" |
| | | }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="登记人" |
| | | align="center" |
| | | prop="registrant" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | width="210" |
| | | width="180" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template slot-scope="scope"> |
| | |
| | | icon="el-icon-edit" |
| | | @click="handleUpdate(scope.row)" |
| | | >修改</el-button |
| | | > |
| | | <el-button |
| | | size="mini" |
| | | type="text" |
| | | icon="el-icon-delete" |
| | | style="color: #F56C6C" |
| | | @click="handleDelete(scope.row)" |
| | | >删除</el-button |
| | | > |
| | | </template> |
| | | </el-table-column> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | import { listDeathJudgment, delDeathJudgment, exportDeathJudgment } from "./mockDeathJudgmentApi"; |
| | | import { queryDathInfoBaseInfo, deathinfoedit,deathinfoInfo } from "@/api/businessApi"; |
| | | import Pagination from "@/components/Pagination"; |
| | | |
| | | export default { |
| | |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | hospitalNo: undefined, |
| | | donorName: undefined, |
| | | deathReason: undefined, |
| | | inpatientno: undefined, |
| | | name: undefined, |
| | | deathreason: undefined, |
| | | deathTimeRange: [] |
| | | } |
| | | }, |
| | | // 所有数据(用于前端筛选) |
| | | allTableData: [] |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | // 死亡原因过滤器 |
| | | reasonFilter(reason) { |
| | | const reasonMap = { |
| | | "brain_death": "primary", // 脑死亡 |
| | | "heart_death": "danger", // 心死亡 |
| | | "other": "info" // 其他 |
| | | brain_death: "primary", |
| | | heart_death: "danger", |
| | | other: "info" |
| | | }; |
| | | return reasonMap[reason] || "info"; |
| | | }, |
| | | |
| | | reasonTextFilter(reason) { |
| | | const reasonMap = { |
| | | "brain_death": "脑死亡", |
| | | "heart_death": "心死亡", |
| | | "other": "其他" |
| | | brain_death: "脑死亡", |
| | | heart_death: "心死亡", |
| | | other: "其他" |
| | | }; |
| | | return reasonMap[reason] || "未知"; |
| | | }, |
| | | // 查询死亡判定列表 |
| | | getList() { |
| | | this.loading = true; |
| | | listDeathJudgment(this.queryParams) |
| | | .then(response => { |
| | | if (response.code === 200) { |
| | | this.deathJudgmentList = response.data.rows; |
| | | this.total = response.data.total; |
| | | } else { |
| | | this.$message.error("获取数据失败"); |
| | | } |
| | | this.loading = false; |
| | | }) |
| | | .catch(error => { |
| | | console.error("获取死亡判定列表失败:", error); |
| | | this.loading = false; |
| | | this.$message.error("获取数据失败"); |
| | | }); |
| | | |
| | | // 记录状态过滤器 |
| | | statusFilter(status) { |
| | | const statusMap = { |
| | | "0": "warning", // 维护中 |
| | | "1": "success", // 已完成 |
| | | "99": "danger" // 已终止 |
| | | }; |
| | | return statusMap[status] || "info"; |
| | | }, |
| | | |
| | | statusTextFilter(status) { |
| | | const statusMap = { |
| | | "0": "维护中", |
| | | "1": "已完成", |
| | | "99": "已终止" |
| | | }; |
| | | return statusMap[status] || "未知状态"; |
| | | }, |
| | | |
| | | // 查询死亡判定列表 |
| | | async getList() { |
| | | this.loading = true; |
| | | try { |
| | | const response = await queryDathInfoBaseInfo(this.queryParams); |
| | | |
| | | // 根据实际接口返回结构调整 |
| | | let realData = []; |
| | | realData = response.data; |
| | | this.total = response.total; |
| | | // if (Array.isArray(response)) { |
| | | // realData = response; |
| | | // } else if (response && response.data) { |
| | | // realData = response.data; |
| | | // } else if (response && response.rows) { |
| | | // realData = response.rows; |
| | | // this.total = response.total || response.rows.length; |
| | | // } else if (response && response.code === 200) { |
| | | // realData = response.data.rows || response.data; |
| | | // this.total = response.data.total || realData.length; |
| | | // } else { |
| | | // realData = []; |
| | | // } |
| | | |
| | | // 存储所有数据用于前端筛选 |
| | | 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.deathJudgmentList = filteredData.slice(startIndex, endIndex); |
| | | this.total = filteredData.length; |
| | | } else { |
| | | // 接口已分页,直接使用返回数据 |
| | | this.deathJudgmentList = filteredData; |
| | | } |
| | | } catch (error) { |
| | | console.error("获取死亡判定数据失败:", error); |
| | | this.$message.error("数据加载失败"); |
| | | this.deathJudgmentList = []; |
| | | this.total = 0; |
| | | } finally { |
| | | this.loading = false; |
| | | } |
| | | }, |
| | | |
| | | // 应用前端筛选 |
| | | applyFrontendFilter(data) { |
| | | let filteredData = data; |
| | | |
| | | // 住院号筛选 |
| | | if (this.queryParams.inpatientno) { |
| | | filteredData = filteredData.filter( |
| | | item => |
| | | item.inpatientno && |
| | | item.inpatientno.includes(this.queryParams.inpatientno) |
| | | ); |
| | | } |
| | | |
| | | // 姓名筛选 |
| | | if (this.queryParams.name) { |
| | | filteredData = filteredData.filter( |
| | | item => item.name && item.name.includes(this.queryParams.name) |
| | | ); |
| | | } |
| | | |
| | | // 死亡原因筛选 |
| | | if (this.queryParams.deathreason) { |
| | | filteredData = filteredData.filter( |
| | | item => item.deathreason === this.queryParams.deathreason |
| | | ); |
| | | } |
| | | |
| | | // 死亡时间范围筛选 |
| | | if ( |
| | | this.queryParams.deathTimeRange && |
| | | this.queryParams.deathTimeRange.length === 2 |
| | | ) { |
| | | const [startDate, endDate] = this.queryParams.deathTimeRange; |
| | | filteredData = filteredData.filter(item => { |
| | | if (!item.deathtime) return false; |
| | | const deathTime = new Date(item.deathtime).getTime(); |
| | | const startTime = new Date(startDate).getTime(); |
| | | const endTime = new Date(endDate + " 23:59:59").getTime(); |
| | | return deathTime >= startTime && deathTime <= endTime; |
| | | }); |
| | | } |
| | | |
| | | return filteredData; |
| | | }, |
| | | |
| | | // 搜索按钮操作 |
| | | handleQuery() { |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | |
| | | // 重置按钮操作 |
| | | resetQuery() { |
| | | this.$refs.queryForm.resetFields(); |
| | | this.handleQuery(); |
| | | this.queryParams.pageNum = 1; |
| | | this.getList(); |
| | | }, |
| | | |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | | this.ids = selection.map(item => item.id); |
| | | this.single = selection.length !== 1; |
| | | this.multiple = !selection.length; |
| | | }, |
| | | |
| | | // 查看详情 |
| | | handleView(row) { |
| | | this.$router.push({ |
| | |
| | | query: { id: row.id } |
| | | }); |
| | | }, |
| | | |
| | | // 新增按钮操作 |
| | | handleCreate() { |
| | | this.$router.push("/case/DecideInfo"); |
| | | }, |
| | | |
| | | // 修改按钮操作 |
| | | handleUpdate(row) { |
| | | const id = row.id || this.ids[0]; |
| | |
| | | query: { id: id } |
| | | }); |
| | | }, |
| | | // 删除按钮操作 |
| | | handleDelete(row) { |
| | | const ids = row.id ? [row.id] : this.ids; |
| | | this.$confirm("是否确认删除选中的数据项?", "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }) |
| | | .then(() => { |
| | | return delDeathJudgment(ids); |
| | | }) |
| | | .then(response => { |
| | | if (response.code === 200) { |
| | | this.$message.success("删除成功"); |
| | | this.getList(); |
| | | } |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | // 导出按钮操作 |
| | | |
| | | // 导出按钮操作(模拟调用) |
| | | handleExport() { |
| | | const queryParams = this.queryParams; |
| | | this.$confirm("是否确认导出所有死亡判定数据?", "警告", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | |
| | | }) |
| | | .then(() => { |
| | | this.loading = true; |
| | | return exportDeathJudgment(queryParams); |
| | | // 模拟导出操作 |
| | | return new Promise(resolve => { |
| | | setTimeout(() => { |
| | | resolve({ code: 200 }); |
| | | }, 1000); |
| | | }); |
| | | }) |
| | | .then(response => { |
| | | if (response.code === 200) { |
| | | this.$message.success("导出成功"); |
| | | // 实际项目中这里处理文件下载 |
| | | // 可以添加以下代码来触发文件下载 |
| | | // this.downloadFile(); |
| | | } |
| | | this.loading = false; |
| | | }) |
| | |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | |
| | | // 文件下载方法(预留) |
| | | downloadFile() { |
| | | // 实际项目中的文件下载逻辑 |
| | | const link = document.createElement("a"); |
| | | link.style.display = "none"; |
| | | link.href = "/api/export/death-judgment"; // 替换为实际导出接口 |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | }, |
| | | |
| | | // 时间格式化 |
| | | parseTime(time, pattern) { |
| | | if (!time) return ""; |
| | |
| | | .fixed-width .el-button { |
| | | margin: 0 5px; |
| | | } |
| | | |
| | | /* 表格样式优化 */ |
| | | ::v-deep .el-table .cell { |
| | | padding: 8px 4px; |
| | | } |
| | | |
| | | ::v-deep .el-table th { |
| | | background-color: #f5f7fa; |
| | | font-weight: bold; |
| | | } |
| | | </style> |