# Bug #444 分析报告 ## Bug 描述 【手术管理-门诊手术安排】生成临时医嘱界面,"已引用计费药品"列表未正常显示药品详细名称信息,且错误地带出了非药品类的计费信息(如手术诊疗项目"小腿烧伤扩创交腿皮瓣修复术"、检查项目"心脏彩色多普勒超声")。 ## 根因分析 ### 数据流 1. 用户点击"医嘱"按钮 → `handleMedicalAdvice()` → 调用 `getPrescriptionList()` 获取计费数据 2. 用户对数据进行过滤后展示在"已引用计费药品"列表 3. 用户点击"引用计费"按钮 → `handleQuoteBilling()` → 再次调用 `getPrescriptionList()` 获取最新计费数据 ### 根因定位 **`handleQuoteBilling()` 方法(index.vue:1866-1877)缺少非药品关键词过滤逻辑。** `handleMedicalAdvice()` 中有两层过滤: 1. `adviceType !== 1` 过滤(只保留药品类型) 2. **关键词排除过滤**(排除名称中包含"术"、"超声"、"检查"等非药品关键词的项目) 但 `handleQuoteBilling()` 中只有第一层过滤(`adviceType !== 1`),**缺少关键词排除过滤**。 当后端返回的计费数据中某些非药品项目被错误标注为 `adviceType=1` 时: - `handleMedicalAdvice()` 能通过关键词过滤排除这些项目 - `handleQuoteBilling()` 无法排除,导致非药品项目出现在"已引用计费药品"列表中 ### 代码对比 | 过滤条件 | handleMedicalAdvice (L1576-1597) | handleQuoteBilling (L1866-1877) | |---------|:---:|:---:| | encounterId 匹配 | ✓ | ✓ | | adviceType === 1 | ✓ | ✓ | | 名称非空 | ✓ | ✓ | | **关键词排除** | ✓ **有** | ✗ **缺失** | | requestId 过滤 | ✓ | ✓ | ## 修复方案 在 `handleQuoteBilling()` 方法的过滤逻辑中,添加与 `handleMedicalAdvice()` 一致的关键词排除逻辑: ```javascript // 🔧 修复 Bug #444: 排除名称中包含手术/检查/诊疗关键词的非药品项目 const excludedKeywords = ['术', '超声', '多普勒', '检查', '检验', '彩超', 'X线', 'CT', 'MRI', '扫描', '造影']; if (excludedKeywords.some(kw => medicineName.includes(kw))) return false; ```