fix(#566): 请修复 Bug #566:[一般] [住院护士站-三测单] 体征数据已录入成功,但在“体温单”图表区中未渲染显示数据点

根因:
- 体征录入时 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` 自动映射旧编码 |
- | 自动刷新 |  | 保存关闭对话框后自动重新查询渲染 |
This commit is contained in:
2026-05-28 23:10:38 +08:00
parent 3c436c0dc2
commit a82f499bee
3 changed files with 23 additions and 5 deletions

View File

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

View File

@@ -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) {

View File

@@ -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();
}
}
</script>