From 66dd93908d85c2e1b6432bb2c296a4b368a17264 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Fri, 29 May 2026 02:06:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(#573):=20=E8=AF=B7=E4=BF=AE=E5=A4=8D=20Bug?= =?UTF-8?q?=20#573=EF=BC=9A[=E4=B8=80=E8=88=AC]=20[=E9=97=A8=E8=AF=8A?= =?UTF-8?q?=E5=8C=BB=E7=94=9F=E5=B7=A5=E4=BD=9C=E7=AB=99-=E8=AF=8A?= =?UTF-8?q?=E6=96=AD]=20=E7=A1=AE=E8=AF=8A=E9=85=8D=E7=BD=AE=E4=BA=86?= =?UTF-8?q?=E2=80=9C=E6=8A=A5=E5=8D=A1=E7=B1=BB=E5=9E=8B=E2=80=9D=E7=9A=84?= =?UTF-8?q?=E7=96=BE=E7=97=85=E5=90=8E=EF=BC=8C=E4=BF=9D=E5=AD=98=E8=AF=8A?= =?UTF-8?q?=E6=96=AD=E6=9C=AA=E8=87=AA=E5=8A=A8=E8=A7=A6=E5=8F=91=E4=BC=A0?= =?UTF-8?q?=E6=9F=93=E7=97=85=E6=8A=A5=E5=8D=A1=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: - 但后端其实已经准备好了:** - `getEncounterDiagnosis` 接口返回的每个诊断项包含了 `reportTypeCode`(报卡类型)和 `hasInfectiousReport`(是否已有报卡)字段 - 前端 `getList()` 获取数据后,这些字段已经挂载在 `form.value.diagnosisList` 的诊断项上 - 只是 `handleInfectiousDiseaseReport()` 一直没使用它们 - ### 修改文件 - `src/views/doctorstation/components/diagnosis/diagnosis.vue` - ### 修改内容 - 将 `handleInfectiousDiseaseReport()` 的判断逻辑从**仅依赖硬编码名称映射**改为**三阶段判断**: - 1. **精确名称匹配** — 优先匹配已有映射表中的疾病名(如"霍乱"→'0102') - 2. **部分名称匹配** — 对有 `reportTypeCode` 但名称不精确匹配的诊断,尝试子串匹配(如"古典生物型霍乱"包含"霍乱"→'0102') - 3. **`reportTypeCode` 兜底** — 配置了报卡类型但无法匹配任何已知疾病名,仍弹出弹窗(`diseaseCode = 'OTHER'`),让医生手动填写 - 同时保留原有规则: - 跳过已有已提交报卡的诊断(`hasInfectiousReport === 1`) 修复: - ### 问题分析 --- .../components/diagnosis/diagnosis.vue | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue b/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue index 83850cec6..cd30b70be 100755 --- a/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue +++ b/openhis-ui-vue3/src/views/doctorstation/components/diagnosis/diagnosis.vue @@ -919,13 +919,37 @@ function handleInfectiousDiseaseReport() { '手足口病': '0311', }; - // 获取所有命中传染病映射的诊断,但跳过已有已提交报卡的诊断 + // 获取所有需要触发传染病报卡的诊断,但跳过已有已提交报卡的诊断 + // 判断依据:1) 硬编码名称匹配;2) 后端配置了 reportTypeCode(报卡类型) const infectiousDiagnoses = form.value.diagnosisList - .map(d => ({ - diagnosis: d, - diseaseCode: d.name && d.hasInfectiousReport !== 1 ? diseaseNameToCode[d.name] : null - })) - .filter(item => item.diseaseCode); + .map(d => { + // 跳过已有已提交报卡的诊断 + if (d.hasInfectiousReport === 1) return null; + + let diseaseCode = null; + + // 1. 尝试精确名称匹配 + if (d.name && diseaseNameToCode[d.name]) { + diseaseCode = diseaseNameToCode[d.name]; + } + // 2. 尝试部分名称匹配(如"古典生物型霍乱"包含"霍乱") + else if (d.name && d.reportTypeCode) { + const match = Object.entries(diseaseNameToCode).find(([name]) => + name && d.name.includes(name) + ); + if (match) { + diseaseCode = match[1]; + } + } + // 3. 配置了 reportTypeCode 但无名称匹配,仍触发弹窗(不预选疾病) + else if (d.reportTypeCode) { + diseaseCode = 'OTHER'; + } + + if (!diseaseCode) return null; + return { diagnosis: d, diseaseCode }; + }) + .filter(item => item !== null); const allSelectedDiseases = infectiousDiagnoses.map(item => item.diseaseCode);