Fix Bug #584: AI修复
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<div class="surgery-apply-list-container">
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>手术申请历史列表</span>
|
||||
<el-button type="primary" @click="handleRefresh">刷新</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-table :data="tableData" v-loading="loading" border style="width: 100%">
|
||||
<el-table-column prop="applyNo" label="申请单号" width="160" />
|
||||
<el-table-column prop="patientName" label="患者姓名" width="120" />
|
||||
<el-table-column prop="surgeryName" label="手术名称" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="applyTime" label="申请时间" width="180" />
|
||||
<el-table-column prop="status" label="状态" width="120">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="getStatusType(row.status)">{{ getStatusLabel(row.status) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180" fixed="right" class-name="operation-cell">
|
||||
<template #default="{ row }">
|
||||
<el-dropdown trigger="click" @command="(cmd) => handleOperation(cmd, row)">
|
||||
<el-button type="primary" link size="small">
|
||||
操作<el-icon class="el-icon--right"><arrow-down /></el-icon>
|
||||
</el-button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<!-- 待签发 (0) -->
|
||||
<el-dropdown-item v-if="row.status === 0" command="edit">编辑</el-dropdown-item>
|
||||
<el-dropdown-item v-if="row.status === 0" command="delete" divided>删除</el-dropdown-item>
|
||||
|
||||
<!-- 已签发 (1) -->
|
||||
<el-dropdown-item v-if="row.status === 1" command="revoke">撤回</el-dropdown-item>
|
||||
|
||||
<!-- 已校对/已执行/已安排/已完成 (2/3/4/5) -->
|
||||
<el-dropdown-item v-if="[2,3,4,5].includes(row.status)" command="print">打印</el-dropdown-item>
|
||||
|
||||
<!-- 通用 -->
|
||||
<el-dropdown-item command="detail" divided>详情</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<!-- 详情/编辑弹窗复用 -->
|
||||
<SurgeryApplyDialog
|
||||
v-model="dialogVisible"
|
||||
:mode="dialogMode"
|
||||
:data="currentRow"
|
||||
@success="handleRefresh"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { ElMessage, ElMessageBox } from 'element-plus';
|
||||
import { ArrowDown } from '@element-plus/icons-vue';
|
||||
import { getSurgeryApplyList, deleteSurgeryApply, revokeSurgeryApply } from '@/api/inpatient/surgery';
|
||||
import SurgeryApplyDialog from './components/SurgeryApplyDialog.vue';
|
||||
|
||||
const loading = ref(false);
|
||||
const tableData = ref<any[]>([]);
|
||||
const dialogVisible = ref(false);
|
||||
const dialogMode = ref<'view' | 'edit'>('view');
|
||||
const currentRow = ref<any>(null);
|
||||
|
||||
const STATUS_MAP: Record<number, { label: string; type: string }> = {
|
||||
0: { label: '待签发', type: 'info' },
|
||||
1: { label: '已签发', type: 'warning' },
|
||||
2: { label: '已校对', type: 'success' },
|
||||
3: { label: '已执行', type: 'primary' },
|
||||
4: { label: '已安排', type: '' },
|
||||
5: { label: '已完成', type: 'success' },
|
||||
6: { label: '已撤销', type: 'danger' },
|
||||
7: { label: '已作废', type: 'info' }
|
||||
};
|
||||
|
||||
const getStatusLabel = (status: number) => STATUS_MAP[status]?.label || '未知';
|
||||
const getStatusType = (status: number) => STATUS_MAP[status]?.type || 'info';
|
||||
|
||||
const fetchData = async () => {
|
||||
loading.value = true;
|
||||
try {
|
||||
const res = await getSurgeryApplyList({ patientId: 'current_patient_id' });
|
||||
tableData.value = res.data || [];
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleRefresh = () => fetchData();
|
||||
|
||||
const handleOperation = async (command: string, row: any) => {
|
||||
switch (command) {
|
||||
case 'detail':
|
||||
dialogMode.value = 'view';
|
||||
currentRow.value = row;
|
||||
dialogVisible.value = true;
|
||||
break;
|
||||
case 'edit':
|
||||
dialogMode.value = 'edit';
|
||||
currentRow.value = row;
|
||||
dialogVisible.value = true;
|
||||
break;
|
||||
case 'delete':
|
||||
try {
|
||||
await ElMessageBox.confirm(
|
||||
'确认删除该笔手术申请单吗?删除后数据还原将无法恢复。',
|
||||
'删除确认',
|
||||
{ confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', confirmButtonClass: 'el-button--danger' }
|
||||
);
|
||||
await deleteSurgeryApply(row.id);
|
||||
ElMessage.success('删除成功');
|
||||
handleRefresh();
|
||||
} catch (e) {
|
||||
// 用户取消或请求失败
|
||||
}
|
||||
break;
|
||||
case 'revoke':
|
||||
try {
|
||||
await revokeSurgeryApply(row.id);
|
||||
ElMessage.success('撤回成功,单据已恢复至待签发状态');
|
||||
handleRefresh();
|
||||
} catch (err: any) {
|
||||
ElMessage.error(err.response?.data?.msg || '撤回失败');
|
||||
}
|
||||
break;
|
||||
case 'print':
|
||||
window.open(`/inpatient/surgery/print/${row.id}`, '_blank');
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(fetchData);
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.surgery-apply-list-container { padding: 16px; }
|
||||
.card-header { display: flex; justify-content: space-between; align-items: center; }
|
||||
</style>
|
||||
Reference in New Issue
Block a user