Files
his/MD/bugs/BUG_762_ANALYSIS.md

132 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bug #762 诸葛亮分析报告
> **文档类型**: Bug分析
> **分析时间**: 2026-06-12 14:18:44
> **分析模型**: mimo-v2.5 (LLM深度分析)
---
## 基本信息
- **Bug #**: 762
- **标题**: [住院护士站-领药汇总]“汇总领药”界面的筛选标签文字丢失且功能失效
- **模块**: 病区护士工作站
- **提出人**: 陈显精
---
I now have a complete picture. Let me produce the analysis.
---
### 一、Bug 理解
住院护士站的"汇总领药"页面中,顶部筛选栏有两组 `el-radio-group`:第一组是药物类别("西药"/"中药"),第二组是展示方式("明细"/"汇总")。当前这 4 个按钮均只显示空白(无文字标签),用户无法辨识按钮功能;同时点击切换按钮不能触发数据筛选刷新,功能完全失效。
### 二、根因分析
**根因在** `drugDistribution/index.vue`,涉及两个独立缺陷:
**缺陷 1`el-radio-button` 缺少 `label` 属性UI 文字丢失)**
文件 `healthlink-his-ui/src/views/inpatientNurse/drugDistribution/index.vue`,第 60-76 行:
```html
<el-radio-group v-model="drugType" class="ml10">
<el-radio-button value="1" /> <!-- ❌ 无 label → 空白 -->
<el-radio-button value="2" /> <!-- ❌ 无 label → 空白 -->
</el-radio-group>
<el-radio-group v-model="isDetails" class="ml20" @change="handleRadioChange">
<el-radio-button value="1" /> <!-- ❌ 无 label → 空白 -->
<el-radio-button value="2" /> <!-- ❌ 无 label → 空白 -->
</el-radio-group>
```
Element Plus 的 `el-radio-button` 中,`value`(或旧版 `label`)控制内部值,但**按钮显示文字来自 `label` prop 或 `<template #default>` 插槽**。这里只设了 `value` 没设 `label`,导致按钮渲染为空白。
**缺陷 2`drugType` 变更未触发数据刷新 + `isDetails` 切换到汇总时也不刷新(功能失效)**
- `drugType``el-radio-group` 没有 `@change` 事件处理 → 切换西药/中药不触发任何数据请求。
- `handleRadioChange` 函数(第 266 行)仅处理 `value == '1'`(明细模式),切换到汇总模式(`value == '2'`)时不调用 `handleGetPrescription()`
- `drugType` 未作为 prop 传给子组件 `PrescriptionList` / `SummaryMedicineList`,后端 API 无法区分药物类别。
### 三、修复方案
**仅需修改 1 个文件**`healthlink-his-ui/src/views/inpatientNurse/drugDistribution/index.vue`
**修改 1 — 添加 label 属性恢复按钮文字:**
```html
<!-- 药物类别组:西药 / 中药 -->
<el-radio-group v-model="drugType" class="ml10" @change="handleDrugTypeChange">
<el-radio-button value="1" label="西药" />
<el-radio-button value="2" label="中药" />
</el-radio-group>
<!-- 展示方式组:明细 / 汇总 -->
<el-radio-group v-model="isDetails" class="ml20" @change="handleRadioChange">
<el-radio-button value="1" label="明细" />
<el-radio-button value="2" label="汇总" />
</el-radio-group>
```
**修改 2 — 新增 `handleDrugTypeChange` 方法:**
```javascript
function handleDrugTypeChange() {
chooseAll.value = false;
handleGetPrescription();
}
```
**修改 3 — 修复 `handleRadioChange` 使其在两种模式下都触发刷新:**
```javascript
// 修改前(只处理明细)
function handleRadioChange(value) {
chooseAll.value = false;
if (value == '1') {
handleGetPrescription();
}
}
// 修改后(两种模式都触发)
function handleRadioChange() {
chooseAll.value = false;
handleGetPrescription();
}
```
**修改 4 — 将 `drugType` 传递给子组件:**
```html
<PrescriptionList
v-if="isDetails == 1"
ref="prescriptionRefs"
:exe-status="exeStatus"
:request-status="requestStatus"
:deadline="deadline"
:therapy-enum="therapyEnum"
:drug-type="drugType"
/>
<SummaryMedicineList
v-else
ref="summaryMedicineRefs"
:therapy-enum="therapyEnum"
:drug-type="drugType"
/>
```
**注意**:子组件 `prescriptionList.vue``summaryMedicineList.vue``defineProps` 中需同步增加 `drugType` prop并在各自的 API 请求参数中传入 `drugType`,后端接口 `getPrescriptionList` / `getMedicineSummary` 也需要支持 `drugType` 参数进行过滤。如果后端已支持该参数(通过其他方式传入或不需要),则前端只需加 prop + 传参即可。
### 四、路由决策
**FIXER: zhaoyun赵云 - 前端开发)**
**REASON**: 这是纯前端 Bug——Element Plus `el-radio-button` 缺少 `label` 属性导致文字丢失,以及前端事件处理逻辑不完整导致筛选功能失效。全部修改集中在 Vue 文件(模板 + 脚本),不涉及后端接口变更(除非后端 `drugType` 参数也缺失,需 zhaoyun 修完前端后验证 API 调用是否生效,若不生效再转 guanyu 补后端参数)。
---
## 路由决策
- **修复 Agent**: zhaoyun
- **原因**: LLM 分析决策