Fix Bug #584: fallback修复
This commit is contained in:
221
openhis-ui-vue3/src/views/inpatient/SurgeryApplyHistory.vue
Normal file
221
openhis-ui-vue3/src/views/inpatient/SurgeryApplyHistory.vue
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
<template>
|
||||||
|
<div class="surgery-apply-history">
|
||||||
|
<el-card class="box-card">
|
||||||
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<span>手术申请历史</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="applyList"
|
||||||
|
border
|
||||||
|
stripe
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-table-column prop="applyNo" label="申请单号" width="150" />
|
||||||
|
<el-table-column prop="patientName" label="患者姓名" width="120" />
|
||||||
|
<el-table-column prop="deptName" label="科室" width="120" />
|
||||||
|
<el-table-column prop="surgeryName" label="手术名称" min-width="180" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="applyDate" label="申请日期" width="160">
|
||||||
|
<template #default="{ row }">
|
||||||
|
{{ formatDate(row.applyDate) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="status" label="状态" width="120">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-tag :type="statusTagType(row.status)">{{ statusText(row.status) }}</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<!-- 新增操作列 -->
|
||||||
|
<el-table-column label="操作" fixed="right" width="260">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<!-- 详情按钮(原有) -->
|
||||||
|
<el-button type="primary" size="small" @click="viewDetail(row)">
|
||||||
|
详情
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<!-- 根据状态动态显示业务按钮 -->
|
||||||
|
<el-button
|
||||||
|
v-if="row.status === 'PENDING'"
|
||||||
|
type="warning"
|
||||||
|
size="small"
|
||||||
|
@click="handleEdit(row)"
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
v-if="row.status === 'PENDING'"
|
||||||
|
type="danger"
|
||||||
|
size="small"
|
||||||
|
@click="handleDelete(row)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
v-if="row.status === 'APPROVED'"
|
||||||
|
type="info"
|
||||||
|
size="small"
|
||||||
|
@click="handleWithdraw(row)"
|
||||||
|
>
|
||||||
|
撤回
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
v-if="row.status !== 'CANCELLED'"
|
||||||
|
type="success"
|
||||||
|
size="small"
|
||||||
|
@click="handlePrint(row)"
|
||||||
|
>
|
||||||
|
打印
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
|
||||||
|
<!-- 详情弹窗 -->
|
||||||
|
<el-dialog
|
||||||
|
v-model="detailVisible"
|
||||||
|
title="手术申请详情"
|
||||||
|
width="800px"
|
||||||
|
destroy-on-close
|
||||||
|
>
|
||||||
|
<SurgeryApplyDetail :apply-id="currentApplyId" />
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="detailVisible = false">关闭</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
|
||||||
|
<!-- 编辑弹窗 -->
|
||||||
|
<el-dialog
|
||||||
|
v-model="editVisible"
|
||||||
|
title="修改手术申请"
|
||||||
|
width="800px"
|
||||||
|
destroy-on-close
|
||||||
|
>
|
||||||
|
<SurgeryApplyForm :apply-id="currentApplyId" @saved="refreshList" />
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="editVisible = false">取消</el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</el-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, onMounted } from 'vue';
|
||||||
|
import { getSurgeryApplyHistory, deleteSurgeryApply, withdrawSurgeryApply } from '@/api/inpatient/surgery';
|
||||||
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||||
|
import SurgeryApplyDetail from '@/components/SurgeryApplyDetail.vue';
|
||||||
|
import SurgeryApplyForm from '@/components/SurgeryApplyForm.vue';
|
||||||
|
|
||||||
|
// 表格数据及状态
|
||||||
|
const loading = ref(false);
|
||||||
|
const applyList = ref([]);
|
||||||
|
const detailVisible = ref(false);
|
||||||
|
const editVisible = ref(false);
|
||||||
|
const currentApplyId = ref(null);
|
||||||
|
|
||||||
|
// 初始化加载
|
||||||
|
const fetchData = async () => {
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
const res = await getSurgeryApplyHistory();
|
||||||
|
applyList.value = res.data || [];
|
||||||
|
} catch (e) {
|
||||||
|
ElMessage.error('加载手术申请历史失败');
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(fetchData);
|
||||||
|
|
||||||
|
// 刷新列表
|
||||||
|
const refreshList = () => {
|
||||||
|
fetchData();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 操作按钮实现
|
||||||
|
const viewDetail = (row) => {
|
||||||
|
currentApplyId.value = row.id;
|
||||||
|
detailVisible.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleEdit = (row) => {
|
||||||
|
currentApplyId.value = row.id;
|
||||||
|
editVisible.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleDelete = async (row) => {
|
||||||
|
try {
|
||||||
|
await ElMessageBox.confirm('确定要删除该手术申请吗?', '删除确认', {
|
||||||
|
type: 'warning',
|
||||||
|
});
|
||||||
|
await deleteSurgeryApply(row.id);
|
||||||
|
ElMessage.success('删除成功');
|
||||||
|
refreshList();
|
||||||
|
} catch (e) {
|
||||||
|
// 用户取消或接口错误均不做处理
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleWithdraw = async (row) => {
|
||||||
|
try {
|
||||||
|
await ElMessageBox.confirm('撤回后将重新进入审批流程,是否继续?', '撤回确认', {
|
||||||
|
type: 'info',
|
||||||
|
});
|
||||||
|
await withdrawSurgeryApply(row.id);
|
||||||
|
ElMessage.success('撤回成功');
|
||||||
|
refreshList();
|
||||||
|
} catch (e) {
|
||||||
|
// 取消或错误
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handlePrint = (row) => {
|
||||||
|
// 这里调用后端打印接口或打开打印模板
|
||||||
|
window.open(`/api/inpatient/surgery/print/${row.id}`, '_blank');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 状态文字与标签颜色映射
|
||||||
|
const statusText = (code) => {
|
||||||
|
const map = {
|
||||||
|
PENDING: '待审批',
|
||||||
|
APPROVED: '已批准',
|
||||||
|
REJECTED: '已驳回',
|
||||||
|
CANCELLED: '已作废',
|
||||||
|
};
|
||||||
|
return map[code] || code;
|
||||||
|
};
|
||||||
|
|
||||||
|
const statusTagType = (code) => {
|
||||||
|
const map = {
|
||||||
|
PENDING: 'warning',
|
||||||
|
APPROVED: 'success',
|
||||||
|
REJECTED: 'danger',
|
||||||
|
CANCELLED: 'info',
|
||||||
|
};
|
||||||
|
return map[code] || 'default';
|
||||||
|
};
|
||||||
|
|
||||||
|
const formatDate = (dateStr) => {
|
||||||
|
if (!dateStr) return '-';
|
||||||
|
const d = new Date(dateStr);
|
||||||
|
return d.toLocaleString();
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.surgery-apply-history {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
.card-header {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Reference in New Issue
Block a user