diff --git a/docs/bug462_analysis.md b/docs/bug462_analysis.md new file mode 100644 index 000000000..6b002cd5a --- /dev/null +++ b/docs/bug462_analysis.md @@ -0,0 +1,44 @@ +# Bug #462 分析报告 + +## Bug 描述 +[目录管理-诊疗目录] 编辑弹窗中"所需标本"下拉框数据加载失败,显示为"无数据" + +## 根因分析 + +### 数据流追踪 +1. 前端组件 `diagnosisTreatmentDialog.vue` 第168-178行渲染"所需标本"下拉框 +2. 下拉框选项来自 `specimen_code` 变量(第172行 `v-for="category in specimen_code"`) +3. `specimen_code` 通过 `proxy.useDict('specimen_code', ...)` 加载(第378-386行) +4. `useDict` 调用 API `/system/dict/data/type/specimen_code`(`src/utils/dict.js` 第16行) +5. 后端 `SysDictDataController.dictType()` 处理请求(第65-73行,**无权限校验**) +6. 最终查询 `sys_dict_data` 表,条件:`status = '0' AND dict_type = 'specimen_code'` + +### 根因 +`sys_dict_type` 表中 **缺少 `specimen_code` 字典类型**,导致 `sys_dict_data` 表中也无对应的标本数据记录。 + +前端 `useDict('specimen_code')` 调用 API 后返回空数组 `[]`,下拉框 `v-for` 遍历空数组,没有任何 `` 渲染,Element Plus 显示默认空状态文案"无数据"。 + +**与 Bug #433 对比**:Bug #433 是"麻醉方法回显为代码"和"外请专家姓名数据未加载",根因也是字典数据缺失。本次 Bug #462 属于同类问题——新增字典类型时只在前端引用了 `useDict('specimen_code')`,但后端数据库中未创建对应的字典类型和数据。 + +## 影响范围 +- **前端文件**:`openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue`(仅一处引用) +- **后端文件**:无代码变更,纯数据问题 +- **数据库表**:`sys_dict_type`(插入字典类型)、`sys_dict_data`(插入7条标本数据) +- **影响接口**:`GET /system/dict/data/type/specimen_code` + +## 修复方案 +执行 DDL 脚本 `sql/bug_462_add_specimen_code_dict.sql`: + +1. 在 `sys_dict_type` 表插入 `specimen_code` 字典类型(dict_name='所需标本') +2. 在 `sys_dict_data` 表插入7条标本记录: + - 血液(1)、尿液(2)、粪便(3)、呼吸道(4)、无菌体液(5)、生殖道(6)、其他(99) + +**注意**:数据库中已存在该字典数据(由测试验证),需检查 DDL 是否已执行。 +若数据已存在但前端仍显示"无数据",则需重启后端服务刷新字典缓存(`SysDictTypeServiceImpl.loadingDictCache()`)。 + +## 验证计划 +1. 确认数据库中 `sys_dict_type` 存在 `specimen_code` 记录 +2. 确认数据库中 `sys_dict_data` 存在7条 `specimen_code` 数据(status='0') +3. 重启后端服务(刷新字典缓存) +4. 前端进入诊疗目录编辑弹窗,点击"所需标本"下拉框,应显示7条标本选项 +5. 选择任意标本后保存,再次编辑应正确回显已选标本