132 lines
4.8 KiB
Markdown
132 lines
4.8 KiB
Markdown
# 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 分析决策
|