From 1c5b4464d65baca0b383e4694d73cd06a8e22dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BA=91?= <赵云@gentronhealth.com> Date: Tue, 12 May 2026 23:20:15 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#448:=20=E9=97=A8=E8=AF=8A=E5=88=92?= =?UTF-8?q?=E4=BB=B7=E6=A8=A1=E5=9D=97-=E9=A1=B9=E7=9B=AE=E5=88=86?= =?UTF-8?q?=E7=B1=BB=E8=BF=87=E6=BB=A4=E5=A4=B1=E6=95=88=EF=BC=8C=E9=80=89?= =?UTF-8?q?=E6=8B=A9"=E8=80=97=E6=9D=90"=E7=B1=BB=E5=9E=8B=E6=97=B6?= =?UTF-8?q?=E4=BB=8D=E8=83=BD=E6=A3=80=E7=B4=A2=E5=87=BA=E8=8D=AF=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: adviceBaseList.vue 中 adviceQueryParams 的 watch 在 popoverVisible=false 时 直接 return,未将参数同步到 queryParams。当 handleFocus 同时修改 adviceQueryParams 和 showPopover 时,Vue 的 watch 触发顺序不确定: - 若 adviceQueryParams watch 先触发(popoverVisible 仍为 false),则 queryParams 保持旧值 - 随后 popoverVisible watch 触发时虽然会同步参数,但存在时序竞态导致查询参数不正确 修复: 将参数同步逻辑移至 early return 之前,确保 queryParams 始终与 adviceQueryParams 保持一致,API 请求仍在 popoverVisible=true 时才触发。 Co-Authored-By: Claude Opus 4.7 --- .../bargain/component/adviceBaseList.vue | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/adviceBaseList.vue b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/adviceBaseList.vue index f539c535..ad9802dc 100755 --- a/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/adviceBaseList.vue +++ b/openhis-ui-vue3/src/views/clinicmanagement/bargain/component/adviceBaseList.vue @@ -69,13 +69,14 @@ const throttledGetList = throttle( watch( () => props.adviceQueryParams, (newValue) => { - // 只有在弹窗打开时才响应 adviceQueryParams 的变化,避免选择项目后弹窗关闭时触发不必要的请求 - if (!props.popoverVisible) { - return; - } + // 始终同步参数到 queryParams,避免弹窗打开时使用旧参数 queryParams.value.searchKey = newValue?.searchKey; queryParams.value.adviceType = newValue?.adviceType; queryParams.value.categoryCode = newValue?.categoryCode; + // 只有在弹窗打开时才触发 API 请求 + if (!props.popoverVisible) { + return; + } throttledGetList(); }, { deep: true }