Files
his/.agentforge/analysis/529.md
华佗 893cbf1fe0 refactor: 彻底清除所有openhis痕迹
- 重命名目录: openhis-server-new → healthlink-his-server
- 重命名目录: openhis-ui-vue3 → healthlink-his-ui
- 重命名Java类: OpenHisApplication → HealthLinkHisApplication
- 重命名Java类: OpenHisMiniApp → HealthLinkHisMiniApp
- 重命名组件目录: OpenHis → HealthLinkHis
- 重命名样式文件: openhis.scss → healthlink-his.scss
- 重命名配置: nginx-openhis.conf → nginx-healthlink-his.conf
- 更新所有源码引用 (0个残留)
- 更新所有文档/脚本/配置中的引用
2026-06-05 13:36:28 +08:00

2.0 KiB
Raw Blame History

Bug #529 分析报告

Title

[住院医生工作站-检验申请] 点击"修改"打开编辑弹窗后,原已选中的项目未回显

根因分析

数据流

  1. testApplication.vue 列表中点击"修改" → handleEdit(row) 设置 editRowData = row → 打开编辑弹窗
  2. 弹窗使用 destroy-on-close,每次打开都重新创建 LaboratoryTests 组件
  3. LaboratoryTests 组件通过 :editData="editRowData" 接收编辑数据

根因时序竞态Race Condition

laboratoryTests.vue 中:

  1. onMounted() (line 262) 调用 loadAllData() 异步加载检验项目列表到 applicationListAll.value
  2. watch on props.editData (line 347-382) 设置了 { immediate: true },组件创建时立即触发
  3. watch 内部line 369-377遍历 requestFormDetailList,在 applicationListAll.value 中按 adviceName 匹配已选项目

时序问题

  • watch 因 immediate: true 立即触发时,applicationListAll.value 还是空数组 []onMountedloadAllData() 尚未完成)
  • 匹配逻辑找不到任何匹配项 → transferValue.value = []
  • 随后 loadAllData() 完成,applicationListAll.value 被填充,但 watch 不会重新触发(因为 props.editData 没变化)
  • 结果transfer 组件的 "已选择" 区域显示"无数据"

涉及文件

  • 前端: healthlink-his-ui/src/views/inpatientDoctor/home/components/order/applicationForm/laboratoryTests.vue (line 347-382)
  • 前端: healthlink-his-ui/src/views/inpatientDoctor/home/components/applicationShow/testApplication.vue (line 193-210, 弹窗渲染处)

修复方案

laboratoryTests.vue 中新增一个 watch 监听 applicationListAll.value 的变化,当数据加载完成且当前处于编辑模式时,重新执行回显匹配逻辑。这样确保:

  • 编辑模式 watch 先触发(但匹配不到数据,因为 applicationListAll 为空)
  • applicationListAll 加载完成后,新增 watch 触发,重新执行匹配,成功回显

改动量:约 12 行新增代码