1.8 KiB
1.8 KiB
Bug #444 分析报告
Bug 描述
生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息。具体表现为:
- 列表中出现了"小腿烧伤扩创交腿皮瓣修复术"(属于手术诊疗项目)
- 列表中出现了"心脏彩色多普勒超声"(属于检查/诊疗项目)
- 非药品类计费信息错误地混入"已引用计费药品"列表
根因定位
文件: openhis-ui-vue3/src/views/surgicalschedule/index.vue
行号: 1580 (handleMedicalAdvice), 1864 (handleQuoteBilling), 1850 (handleTemporaryMedicalRefresh)
三处过滤逻辑均使用:
if (item.adviceType !== 1) return false;
问题1(主因): adviceType 字段命名兼容不完整。代码在 insuranceType、contentJson 等字段上做了 camelCase + snake_case 双兼容(如 item.insuranceType || item.insurance_type),但 adviceType 只检查了 camelCase。若后端返回 snake_case 数据(advice_type),item.adviceType 为 undefined,undefined !== 1 为 true,导致所有非药品项目全部放行。
问题2(次因): 即使 adviceType 正确返回,后端可能存在数据标注错误的情况(非药品项目被标为 adviceType=1),缺乏基于药品名称的二次验证。
修复方案
adviceType检查增加 snake_case 回退:const at = item.adviceType ?? item.advice_type; if (at !== 1) return false;- 增加药品名称关键字二次过滤:排除名称中包含"术"、"检查"、"超声"、"多普勒"等关键词的非药品项目
验收标准
- "已引用计费药品"列表中只显示药品类项目
- 不显示手术诊疗项目(如"小腿烧伤扩创交腿皮瓣修复术")
- 不显示检查项目(如"心脏彩色多普勒超声")
- 药品名称正常显示