fix(consultation): 修复会诊取消提交逻辑并优化医生列表显示

新增检查医生确认/签名状态的逻辑,防止已确认/签名的会诊被取消提交
优化前端参与医生列表的显示,只显示已确认或已签名的医生
This commit is contained in:
wangjian963
2026-03-30 15:47:56 +08:00
parent 48d3941701
commit 92511c2777
2 changed files with 59 additions and 27 deletions

View File

@@ -57,11 +57,18 @@
</el-button>
</template>
<!-- 已提交状态显示取消提交按钮 -->
<template v-else-if="row.consultationStatus === 10">
<!-- 🎯 修复如果有医生已确认或签名则隐藏取消提交按钮 -->
<template v-else-if="row.consultationStatus === 10 && !hasConfirmedOrSignedDoctor(row)">
<el-button type="warning" size="small" @click="handleCancelSubmit(row)">
取消提交
</el-button>
</template>
<!-- 已提交但有医生确认/签名显示查看按钮 -->
<template v-else-if="row.consultationStatus === 10 && hasConfirmedOrSignedDoctor(row)">
<el-button type="info" size="small" @click="handleView(row)">
查看
</el-button>
</template>
<!-- 已确认状态显示待签名按钮 -->
<template v-else-if="row.consultationStatus === 20">
<el-button type="success" size="small" @click="handleView(row)">
@@ -239,7 +246,7 @@
</el-form-item>
<!-- 🎯 新增参与医生列表表格形式 -->
<el-form-item label="参与医生签名:" v-if="participatingPhysicians.length > 0">
<el-form-item label="参与医生签名:">
<el-table
:data="participatingPhysicians"
border
@@ -247,11 +254,11 @@
style="width: 100%"
max-height="300"
>
<el-table-column type="index" label="序号" width="60" align="center" />
<el-table-column prop="confirmingDeptName" label="代表科室" width="120" align="center" />
<el-table-column prop="confirmingPhysicianName" label="所属医生" width="100" align="center" />
<el-table-column prop="signature" label="签名医生" width="100" align="center" />
<el-table-column prop="signatureDate" label="签名时间" width="160" align="center">
<el-table-column type="index" label="序号" min-width="60" align="center" />
<el-table-column prop="confirmingDeptName" label="代表科室" min-width="120" align="center" />
<el-table-column prop="confirmingPhysicianName" label="所属医生" min-width="100" align="center" />
<el-table-column prop="signature" label="签名医生" min-width="100" align="center" />
<el-table-column prop="signatureDate" label="签名时间" min-width="160" align="center">
<template #default="{ row }">
{{ formatDateTime(row.signatureDate) }}
</template>
@@ -629,6 +636,14 @@ const clearAllSelections = () => {
selectedPhysiciansList.value = [];
};
// 🎯 检查是否有医生已确认或签名
const hasConfirmedOrSignedDoctor = (row) => {
if (!row.invitedList || row.invitedList.length === 0) {
return false;
}
return row.invitedList.some(inv => inv.invitedStatus >= 20);
};
// 加载会诊列表
const loadConsultationList = async () => {
if (!props.patientInfo?.encounterId) {
@@ -772,14 +787,16 @@ const handleRowClick = async (row) => {
console.log('填充的医生列表:', selectedPhysiciansList.value);
// 🎯 填充参与医生列表(显示确认和签名状态)
participatingPhysicians.value = row.invitedList.map(inv => ({
physicianId: inv.physicianId,
confirmingPhysicianName: inv.physicianName || '',
confirmingDeptName: inv.deptName || '',
signature: inv.signatureTime ? inv.physicianName : '', // 有签名时间才显示签名医生
signatureDate: inv.signatureTime || null,
}));
participatingPhysicians.value = row.invitedList
.filter(inv => inv.invitedStatus >= 20) // 只显示已确认或已签名的医生
.map(inv => ({
physicianId: inv.physicianId,
confirmingPhysicianName: inv.physicianName || '',
confirmingDeptName: inv.deptName || '',
signature: inv.invitedStatus >= 30 ? inv.physicianName : '', // 已签名才显示签名医生
signatureDate: inv.signatureTime || null,
}));
console.log('参与医生列表:', participatingPhysicians.value);
} else {
selectedPhysiciansList.value = [];
@@ -1073,7 +1090,16 @@ const handleCompleteRow = async (row) => {
// 查看详情
const handleView = (row) => {
handleRowClick(row);
ElMessage.info('该申请已完成或已取消,仅可查看');
// 根据状态显示不同的提示消息
if (row.consultationStatus === 10 && hasConfirmedOrSignedDoctor(row)) {
ElMessage.info('已有医生确认或签名,无法取消提交,仅可查看');
} else if (row.consultationStatus === 20) {
ElMessage.info('该申请已确认,等待签名');
} else if (row.consultationStatus === 40) {
ElMessage.info('该申请已完成,仅可查看');
} else if (row.consultationStatus === 50) {
ElMessage.info('该申请已取消,仅可查看');
}
};
// 作废