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);