From c43b48c552a99f5541b6cd86ba5b8a02df4ff708 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Mon, 18 May 2026 13:29:59 +0800 Subject: [PATCH] =?UTF-8?q?Fix=20Bug=20#540:=20=E6=A0=B9=E5=9B=A0+?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B9=E6=A1=88=E6=91=98=E8=A6=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BUG540_ANALYSIS.md | 79 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 BUG540_ANALYSIS.md diff --git a/BUG540_ANALYSIS.md b/BUG540_ANALYSIS.md new file mode 100644 index 000000000..0d87b3784 --- /dev/null +++ b/BUG540_ANALYSIS.md @@ -0,0 +1,79 @@ +# Bug #540 分析报告 + +## Bug 描述 +【住院医生站-检查申请】详情页弹窗中"申请单描述"区域缺少临床必要信息显示 + +## 数据流分析 + +### 前端组件 +- 入口: `src/views/inpatientDoctor/home/index.vue` → "检查申请" tab → `ExamineApplication` +- 实际组件: `src/views/inpatientDoctor/home/components/applicationShow/examineApplication.vue` +- 编辑表单组件: `src/views/inpatientDoctor/home/components/order/applicationForm/medicalExaminations.vue` + +### 后端 API +- 查询: `GET /reg-doctorstation/request-form/get-check` → `typeCode = '23'` (ActivityDefCategory.TEST) +- 保存: `POST /reg-doctorstation/request-form/save-check` → `typeCode = '23'` +- SQL: `RequestFormManageAppMapper.xml` 的 `getRequestForm` 查询,SELECT `drf.desc_json` +- DTO: `RequestFormQueryDto` 有 `descJson` 字段 (String 类型) + +### 数据库 +- 表: `doc_request_form`,type_code = '23' 的记录 desc_json 均有数据 +- descJson 包含: targetDepartment, urgencyLevel, symptom, sign, clinicalDiagnosis, otherDiagnosis, relatedResult, attention, examinationPurpose, medicalHistorySummary, allergyHistory, expectedExaminationTime 等 + +## 根因定位 + +对比检验申请 (testApplication.vue) 和检查申请 (examineApplication.vue) 的详情弹窗中"申请单描述"区域的渲染逻辑: + +**testApplication.vue (检验申请) - 正确:** +```vue + +``` +- 遍历 `descJsonData` 的所有 key,只要 key 在 labelMap 中就显示 +- 空值显示为 '-' + +**examineApplication.vue (检查申请) - 问题:** +```vue + + {{ transformField(key, descJsonData[key]) || '-' }} + +``` +- 遍历固定的 `orderedDescFieldKeys` 数组,不遍历 descJsonData 的所有 key +- **关键问题**: `v-if="descJsonData[key] != null && descJsonData[key] !== ''"` 会过滤掉空值字段 + +但是,更关键的是外层条件: +```vue +
+``` + +`hasMatchedFields` 检查 `descJsonData` 的 key 是否在 `labelMap` 中。`labelMap` 包含所有需要显示的字段。 + +**实际根因**:通过对比 testApplication.vue 与 examineApplication.vue,发现两个组件在 "申请单描述" 区域的渲染方式不同。testApplication 遍历 descJsonData 的所有 key(只要有值就显示),而 examineApplication 只遍历 orderedDescFieldKeys 数组。 + +**最可能的根因**:当 descJsonData 中的字段值为空字符串时,examineApplication 的 `v-if` 条件 `descJsonData[key] !== ''` 会过滤掉该字段(整行不显示),而 testApplication 会显示该字段标签并填入 `-`。 + +对于 `targetDepartment` 字段,`recursionFun` 函数在科室列表中找不到对应 ID 时会返回空字符串 `''`,导致 `targetDepartment` 被过滤不显示。 + +**但核心问题是**:如果 descJsonData 存在但某些字段为空,这些字段会被完全隐藏而不是显示 `-`。用户期望看到的是字段标签+占位符 `-`,而不是整个字段不显示。 + +## 修复方案 + +将 examineApplication.vue 中"申请单描述"区域的渲染方式改为与 testApplication.vue 一致: +1. 遍历 `descJsonData` 的所有 key(而非固定 orderedDescFieldKeys) +2. 使用 `isFieldMatched(key)` 过滤需要显示的字段 +3. 空值显示为 `-`(而非完全隐藏) + +同时保留 `orderedDescFieldKeys` 用于打印功能(已有代码使用)。 + +## 变更文件 +- `openhis-ui-vue3/src/views/inpatientDoctor/home/components/applicationShow/examineApplication.vue`(前端模板修改) + +修复结果:✅ 成功,5行改动(+5/-8)