28 lines
2.0 KiB
Markdown
28 lines
2.0 KiB
Markdown
# Bug #545 分析报告:长效诊断标识设置保存就清空
|
||
|
||
## 根因定位
|
||
|
||
保存诊断后,前端调用 `getList()` 刷新数据,`getEncounterDiagnosis` SQL 查询未包含 `long_term_flag` 字段,且 `DiagnosisQueryDto` 缺少对应属性,导致返回数据中不含 `longTermFlag`,前端覆盖 `form.value.diagnosisList` 后下拉框清空。
|
||
|
||
## 数据流追踪
|
||
|
||
1. 前端用户在 `diagnosis.vue` 第218-231行的 el-select 下拉框选择"长期有效/临时有效",值绑定到 `scope.row.longTermFlag`
|
||
2. 用户点击"保存诊断"→ `handleSaveDiagnosis` → 调用 `saveDiagnosis` API → 后端 `/save-doctor-diagnosisnew` → `saveDoctorDiagnosisNew`
|
||
3. 后端 `saveDoctorDiagnosisNew` 第376行和第404行已正确保存 `encounterDiagnosis.setLongTermFlag(saveDiagnosisChildParam.getLongTermFlag())`
|
||
4. 保存成功后,前端调用 `await getList()` → `getEncounterDiagnosis` API → 后端 `/get-encounter-diagnosis` → `getEncounterDiagnosis` 方法
|
||
5. **断点在此**: SQL (`DoctorStationDiagnosisAppMapper.xml:122-150`) SELECT 列表缺少 `T1.long_term_flag`,DTO (`DiagnosisQueryDto.java`) 缺少 `longTermFlag` 属性
|
||
6. 前端第351行 `form.value.diagnosisList = res.data.filter(...)` 用不含 `longTermFlag` 的数据替换了原有数据
|
||
7. 结果:`longTermFlag` 变为 `undefined`,下拉框清空
|
||
|
||
## 修复方案
|
||
|
||
1. **SQL**: `DoctorStationDiagnosisAppMapper.xml` getEncounterDiagnosis 查询新增 `T1.long_term_flag AS longTermFlag`
|
||
2. **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行已有定义)
|