Fix Bug #492: 【门诊手术安排】关闭"手术计费"主弹窗后,项目字典选择列表依然残留悬浮在界面上
根因:el-popover 使用 append-to-body 将浮层渲染到 body 下,而 prescriptionlist 组件 使用 v-if="showChargeDialog" 控制渲染。当 closeChargeDialog() 通过 nextTick 将 showChargeDialog 置为 false 时,Vue 立即销毁组件,但 append-to-body 的 popover DOM 元素因关闭过渡动画尚未完成而残留在 body 下。 修复: 1. 移除 prescriptionlist 上的 v-if="showChargeDialog",让组件保持挂载状态 (外层 el-dialog 的 v-model 已控制可见性,v-if 冗余) 2. closeChargeDialog() 同步关闭弹窗并清空数据,不再使用 nextTick 延迟 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -829,7 +829,7 @@
|
|||||||
</el-descriptions>
|
</el-descriptions>
|
||||||
</div>
|
</div>
|
||||||
<div style="padding: 10px">
|
<div style="padding: 10px">
|
||||||
<prescriptionlist v-if="showChargeDialog" :patientInfo="chargePatientInfo" ref="prescriptionRef"
|
<prescriptionlist :patientInfo="chargePatientInfo" ref="prescriptionRef"
|
||||||
:generateSourceEnum="1"
|
:generateSourceEnum="1"
|
||||||
:sourceBillNo="chargePatientInfo.sourceBillNo" />
|
:sourceBillNo="chargePatientInfo.sourceBillNo" />
|
||||||
<div class="overlay" v-if="disabled"></div>
|
<div class="overlay" v-if="disabled"></div>
|
||||||
@@ -1434,12 +1434,10 @@ function closeChargeDialog() {
|
|||||||
if (prescriptionRef.value && prescriptionRef.value.closeAllPopovers) {
|
if (prescriptionRef.value && prescriptionRef.value.closeAllPopovers) {
|
||||||
prescriptionRef.value.closeAllPopovers()
|
prescriptionRef.value.closeAllPopovers()
|
||||||
}
|
}
|
||||||
// 等 Vue 完成 DOM 更新后再关闭弹窗,确保 popover 先消失
|
// 清空数据,避免下次打开时使用缓存
|
||||||
nextTick(() => {
|
showChargeDialog.value = false
|
||||||
showChargeDialog.value = false
|
chargePatientInfo.value = {}
|
||||||
chargePatientInfo.value = {}
|
chargeSurgeryInfo.value = {}
|
||||||
chargeSurgeryInfo.value = {}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 🔧 新增:标志位,用于区分是"打开"还是"刷新"
|
// 🔧 新增:标志位,用于区分是"打开"还是"刷新"
|
||||||
|
|||||||
Reference in New Issue
Block a user