From 6e975bf9c4394ab22977a93e9c388993160a6105 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BA=91?= <赵云@gentronhealth.com> Date: Thu, 14 May 2026 20:19:33 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#451:=20=E9=97=A8=E8=AF=8A=E5=8C=BB?= =?UTF-8?q?=E7=94=9F=E7=AB=99-=E6=8F=90=E4=BA=A4=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=89=8B=E6=9C=AF=E7=94=B3=E8=AF=B7=E5=90=8E=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:子组件 submitForm 成功后同时调用 getList() 和 emit('saved'), 父组件 @saved 也调用 getList(),导致两个并发请求产生竞态条件; 若后端事务尚未完全提交,getList() 查询可能失败并弹出 msgError。 修复: 1. 子组件移除直接 getList() 调用,统一由父组件 @saved 刷新 2. 父组件添加 500ms 延迟确保后端事务已提交 3. getList() 错误处理改为 console.warn 优雅降级,避免阻断弹窗 Co-Authored-By: Claude Opus 4.7 --- .../components/surgery/surgeryApplication.vue | 13 ++++++------- openhis-ui-vue3/src/views/doctorstation/index.vue | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue b/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue index fcb3d04da..112cea953 100755 --- a/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/surgery/surgeryApplication.vue @@ -636,12 +636,11 @@ function getList() { if (res.code === 200) { surgeryList.value = res.data?.records || [] } else { - proxy.$modal.msgError(res.msg || '数据加载失败,请稍后重试') + console.warn('手术列表加载失败(可能无权限或数据异常):', res.msg) surgeryList.value = [] } }).catch(error => { - console.error('获取手术列表失败:', error) - proxy.$modal.msgError('数据加载失败,请稍后重试') + console.warn('手术列表请求异常:', error) surgeryList.value = [] }).finally(() => { loading.value = false @@ -1142,8 +1141,8 @@ function submitForm() { // 保存麻醉方式 sessionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum) open.value = false - getList() // 提交成功后直接刷新列表 - emit('saved') // 通知父组件刷新医嘱列表 + // 由父组件 @saved 事件负责刷新列表(带延迟确保后端事务已提交) + emit('saved') } else { proxy.$modal.msgError(res.msg || '新增手术失败,请检查表单信息') } @@ -1159,8 +1158,8 @@ function submitForm() { // 保存麻醉方式 sessionStorage.setItem('anesthesiaType', form.value.anesthesiaTypeEnum) open.value = false - getList() // 修改成功后直接刷新列表 - emit('saved') // 通知父组件刷新医嘱列表 + // 由父组件 @saved 事件负责刷新列表 + emit('saved') } else { proxy.$modal.msgError(res.msg || '更新手术失败,请检查表单信息') } diff --git a/openhis-ui-vue3/src/views/doctorstation/index.vue b/openhis-ui-vue3/src/views/doctorstation/index.vue index c5a3f929b..eb4302c1f 100755 --- a/openhis-ui-vue3/src/views/doctorstation/index.vue +++ b/openhis-ui-vue3/src/views/doctorstation/index.vue @@ -153,7 +153,7 @@ + @saved="() => { prescriptionRef?.getListInfo(); setTimeout(() => surgeryRef?.getList(), 500) }" />