2.0 KiB
2.0 KiB
Bug #545 分析报告:长效诊断标识设置保存就清空
根因定位
保存诊断后,前端调用 getList() 刷新数据,getEncounterDiagnosis SQL 查询未包含 long_term_flag 字段,且 DiagnosisQueryDto 缺少对应属性,导致返回数据中不含 longTermFlag,前端覆盖 form.value.diagnosisList 后下拉框清空。
数据流追踪
- 前端用户在
diagnosis.vue第218-231行的 el-select 下拉框选择"长期有效/临时有效",值绑定到scope.row.longTermFlag - 用户点击"保存诊断"→
handleSaveDiagnosis→ 调用saveDiagnosisAPI → 后端/save-doctor-diagnosisnew→saveDoctorDiagnosisNew - 后端
saveDoctorDiagnosisNew第376行和第404行已正确保存encounterDiagnosis.setLongTermFlag(saveDiagnosisChildParam.getLongTermFlag()) - 保存成功后,前端调用
await getList()→getEncounterDiagnosisAPI → 后端/get-encounter-diagnosis→getEncounterDiagnosis方法 - 断点在此: SQL (
DoctorStationDiagnosisAppMapper.xml:122-150) SELECT 列表缺少T1.long_term_flag,DTO (DiagnosisQueryDto.java) 缺少longTermFlag属性 - 前端第351行
form.value.diagnosisList = res.data.filter(...)用不含longTermFlag的数据替换了原有数据 - 结果:
longTermFlag变为undefined,下拉框清空
修复方案
- SQL:
DoctorStationDiagnosisAppMapper.xmlgetEncounterDiagnosis 查询新增T1.long_term_flag AS longTermFlag - DTO:
DiagnosisQueryDto.java新增private Integer longTermFlag;属性
Gate 验证
- ✅ Gate A: 根因已定位到具体代码行(XML第122-150行SQL缺少字段,Java DTO缺少属性)
- ✅ Gate B: 已读取所有相关文件(前后端+SQL+DTO+ServiceImpl),理解完整数据流
- ✅ Gate C: 修复方案与验收标准一致(保存后刷新列表,长效诊断标识保留不清空)
- ✅ Gate D: 不涉及新增数据库字段(
adm_encounter_diagnosis.long_term_flag已存在,Entity 第89行已有定义)