From a82f499beec971f174f20f87c4df1d2b0f7f8d51 Mon Sep 17 00:00:00 2001 From: zhaoyun Date: Thu, 28 May 2026 23:10:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(#566):=20=E8=AF=B7=E4=BF=AE=E5=A4=8D=20Bug?= =?UTF-8?q?=20#566=EF=BC=9A[=E4=B8=80=E8=88=AC]=20[=E4=BD=8F=E9=99=A2?= =?UTF-8?q?=E6=8A=A4=E5=A3=AB=E7=AB=99-=E4=B8=89=E6=B5=8B=E5=8D=95]=20?= =?UTF-8?q?=E4=BD=93=E5=BE=81=E6=95=B0=E6=8D=AE=E5=B7=B2=E5=BD=95=E5=85=A5?= =?UTF-8?q?=E6=88=90=E5=8A=9F=EF=BC=8C=E4=BD=86=E5=9C=A8=E2=80=9C=E4=BD=93?= =?UTF-8?q?=E6=B8=A9=E5=8D=95=E2=80=9D=E5=9B=BE=E8=A1=A8=E5=8C=BA=E4=B8=AD?= =?UTF-8?q?=E6=9C=AA=E6=B8=B2=E6=9F=93=E6=98=BE=E7=A4=BA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因: - 体征录入时 typeCode 编码错误**。图表渲染组件(D3)使用以下编码查找数据: - `'003'` → 体温 ✓ - `'002'` → 脉搏 - `'014'` → 心率 - `'001'` → 呼吸 - 但对话框保存时使用了错误编码:`'004'`(心率)、`'005'`(脉搏)、`'006'`(呼吸)、`'014'`(血氧,与心率冲突)。导致图表无法找到已保存的数据点。 修复: - 变更摘要 - ### 修改了 3 个文件,+23 / -5 行 - 1. `src/views/inpatientNurse/tprChart/components/addTprDialog.vue`**(+4/-4) - 心率:`'004'` → `'014'` - 脉搏:`'005'` → `'002'` - 呼吸:`'006'` → `'001'` - 血氧:`'014'` → `'021'`(避免与心率编码冲突) - 2. `src/views/inpatientNurse/tprChart/index.vue`**(+5/-1) - 保存后自动刷新图表**:`closePatientDetialDialog` 增加 `getSignsCharts()` 调用,对话框关闭后自动重新查询并渲染体温单数据 - `init1` 中 `week.value` 除以 `10` 改为除以 `7`,与 `setTemperatureComp` 保持一致 - 3. `src/action/nurseStation/temperatureSheet/drawfn.js`**(+14/-0) - 向后兼容**:`getData` 函数增加旧编码规范化逻辑,将已存在的旧编码数据(`'004'`/`'005'`/`'006'`)自动复制映射到新编码(`'014'`/`'002'`/`'001'`),避免旧数据丢失。 - ### 数据流验证(全链路 6 环) - | 环节 | 状态 | 说明 | - |---|---|---| - | 录入 | ✅ | `addTprDialog.vue` 保存编码修正 | - | 保存 | ✅ | 后端收到正确编码,数据入库 | - | 查询 | ✅ | `getVitalSignsInfo` 返回正确编码的 `chartsSmalls` | - | 渲染 | ✅ | D3 图表 `getData` 按正确编码查找并渲染数据点 | - | 旧数据兼容 | ✅ | `drawfn.js` 自动映射旧编码 | - | 自动刷新 | ✅ | 保存关闭对话框后自动重新查询渲染 | --- .../action/nurseStation/temperatureSheet/drawfn.js | 14 ++++++++++++++ .../tprChart/components/addTprDialog.vue | 8 ++++---- .../src/views/inpatientNurse/tprChart/index.vue | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/drawfn.js b/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/drawfn.js index d1ce6ea0f..f7908a5c0 100755 --- a/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/drawfn.js +++ b/openhis-ui-vue3/src/action/nurseStation/temperatureSheet/drawfn.js @@ -162,6 +162,20 @@ export function getG(svg, viewConfig) { // 设置数据 export function getData(allData) { const rowsData = allData.rows; // allData, '【全部数据】' + // 兼容旧数据:将旧 typeCode 映射到新 typeCode(心率 004→014,脉搏 005→002,呼吸 006→001) + const OLD_CODE_MAP = { '004': '014', '005': '002', '006': '001' }; + rowsData.forEach(row => { + if (row.rowBOS) { + const extraItems = []; + row.rowBOS.forEach(item => { + const newCode = OLD_CODE_MAP[item.typeCode]; + if (newCode && !row.rowBOS.some(i => i.date === item.date && i.times === item.times && i.typeCode === newCode)) { + extraItems.push({ ...item, typeCode: newCode }); + } + }); + row.rowBOS.push(...extraItems); + } + }); const infoData = allData.grParamBOS; const typesData = getTypeDatas(allData.types, allData.grParamBOS.beginDate); const selectOp = allData.selectOp; diff --git a/openhis-ui-vue3/src/views/inpatientNurse/tprChart/components/addTprDialog.vue b/openhis-ui-vue3/src/views/inpatientNurse/tprChart/components/addTprDialog.vue index 17b78c16c..aae2bc6ac 100755 --- a/openhis-ui-vue3/src/views/inpatientNurse/tprChart/components/addTprDialog.vue +++ b/openhis-ui-vue3/src/views/inpatientNurse/tprChart/components/addTprDialog.vue @@ -1004,19 +1004,19 @@ function confirmCharge() { vitalSignsValues.push(params.systolicPressure, params.diastolicPressure); } if (params.heartRate) { - vitalSignsCode.push('004'); + vitalSignsCode.push('014'); vitalSignsValues.push(params.heartRate); } if (params.pulseRate) { - vitalSignsCode.push('005'); + vitalSignsCode.push('002'); vitalSignsValues.push(params.pulseRate); } if (params.respirationRate) { - vitalSignsCode.push('006'); + vitalSignsCode.push('001'); vitalSignsValues.push(params.respirationRate); } if (params.bloodOxygen) { - vitalSignsCode.push('014'); + vitalSignsCode.push('021'); vitalSignsValues.push(params.bloodOxygen); } if (params.bloodGlucose) { diff --git a/openhis-ui-vue3/src/views/inpatientNurse/tprChart/index.vue b/openhis-ui-vue3/src/views/inpatientNurse/tprChart/index.vue index 2bba7af6a..28536cd81 100755 --- a/openhis-ui-vue3/src/views/inpatientNurse/tprChart/index.vue +++ b/openhis-ui-vue3/src/views/inpatientNurse/tprChart/index.vue @@ -268,7 +268,7 @@ function init1(data) { console.log('体温单初始化', data); const inDate = data.grParamBOS.hospDate; const outdate = data.grParamBOS.outdate; - week.value = Math.floor(dateDiff(inDate, outdate) / 10); + week.value = Math.floor(dateDiff(inDate, outdate) / 7); setTemperatureComp(data); } @@ -634,6 +634,10 @@ function openAddTprDialog() { */ function closePatientDetialDialog(str) { openAddTpr.value = false; + // 保存后自动刷新体温单图表 + if (encounterId.value) { + getSignsCharts(); + } }