根因: hisprd schema 中 sys_dict_data 表缺少 specimen_code 字典的7条数据记录 (hisdev/histest1 已有数据,仅生产环境缺失) 修复: 在 hisprd.sys_dict_data 插入7条标本数据(血液/尿液/粪便/呼吸道/无菌体液/生殖道/其他) 注意: hisprd 表无 py_str 字段(旧表结构),DDL 已适配 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.5 KiB
2.5 KiB
Bug #462 分析报告
Bug 描述
[目录管理-诊疗目录] 编辑弹窗中"所需标本"下拉框数据加载失败,显示为"无数据"
根因分析
数据流追踪
- 前端组件
diagnosisTreatmentDialog.vue第168-178行渲染"所需标本"下拉框 - 下拉框选项来自
specimen_code变量(第172行v-for="category in specimen_code") specimen_code通过proxy.useDict('specimen_code', ...)加载(第378-386行)useDict调用 API/system/dict/data/type/specimen_code(src/utils/dict.js第16行)- 后端
SysDictDataController.dictType()处理请求(第65-73行,无权限校验) - 最终查询
sys_dict_data表,条件:status = '0' AND dict_type = 'specimen_code'
根因
hisprd(生产)schema 中 sys_dict_data 表 缺少 specimen_code 字典类型的7条数据记录。
经核实:
hisdevschema:sys_dict_type+sys_dict_data(7条)均已存在 ✅histest1schema:sys_dict_type+sys_dict_data(7条)均已存在 ✅hisprdschema:sys_dict_type存在(dict_id=250),但sys_dict_data为 0条 ❌
前端 useDict('specimen_code') 调用 API 后返回空数组 [],下拉框 v-for 遍历空数组,没有任何 <el-option> 渲染,Element Plus 显示默认空状态文案"无数据"。
与 Bug #433 对比:Bug #433 是"麻醉方法回显为代码"和"外请专家姓名数据未加载",根因也是字典数据缺失。本次 Bug #462 属于同类问题——字典类型已创建但生产环境的数据记录未同步插入。
影响范围
- 前端文件:
openhis-ui-vue3/src/views/catalog/diagnosistreatment/components/diagnosisTreatmentDialog.vue(仅一处引用) - 后端文件:无代码变更,纯数据问题
- 数据库表:
hisprd.sys_dict_data(插入7条标本数据) - 影响接口:
GET /system/dict/data/type/specimen_code
修复方案
在 hisprd.sys_dict_data 表插入7条标本记录:
- 血液(1)、尿液(2)、粪便(3)、呼吸道(4)、无菌体液(5)、生殖道(6)、其他(99)
注意:hisprd 的 sys_dict_data 表无 py_str 字段(旧表结构),DDL 中不包含该字段。
验证计划
- 确认 hisprd 中
sys_dict_data存在7条specimen_code数据(status='0')✅ 已验证 - 重启后端服务(刷新字典缓存)
- 前端进入诊疗目录编辑弹窗,点击"所需标本"下拉框,应显示7条标本选项
- 选择任意标本后保存,再次编辑应正确回显已选标本