3.8 KiB
3.8 KiB
血糖趋势折线图过滤 0 值并跨空连线
Goal
修复 admin 端"日常记录"与"医生接诊台"两个入口共用的血糖趋势折线图:
- 把数值 0 视为"未设置",不在折线图上画出来,避免一堆 0 点贴 X 轴的视觉混乱;
- 当某一天没有有效值时,折线从上一个有值点直接连到下一个有值点(跨空连线)。
表格列原样保留,0 仍然按现状显示,不在本次需求范围内。
What I already know
- 折线图组件:
admin/src/views/tcm/diagnosis/components/DailyMatrix.vue,被admin/src/views/tcm/diagnosis/readonly.vue等以及admin/src/views/patient/reception/index.vue:132引用 — "日常记录"+"医生接诊台"实际共用同一份代码。 - 折线图取数路径:
bloodTrendSeries(DailyMatrix.vue:633) →parseTrendNumber(DailyMatrix.vue:719) 把每天的空腹/餐后值转成 number 或 null。- 目前
parseTrendNumber对数值 0 返回 0(被画成贴 X 轴的点)。 - 两条 series (
DailyMatrix.vue:686、:701) 都是connectNulls: false,中间任意一天空值都会断开。
- 目前
- 表格取数路径:
getCell(DailyMatrix.vue:725) 与bloodTrendSeries完全独立,改parseTrendNumber不会影响表格。 - 另一处折线图
BloodRecordList.vue+ 后端BloodRecordLogic::getBloodSugarTrend已经做到了同样的效果(后端> 0过滤、前端connectNulls: true),不在本次改动范围。
Assumptions
- "0 值"涵盖整数 0、
0.00、'0'、'0.00'等数值上等于 0 的情况(Number(value) === 0)。 - 跨空连线只在折线图层面通过 echarts
connectNulls完成,不需要前端做线性插值或自定义点位。 - 首尾连续若干天没有数据时,echarts 不会向外延伸,这是预期行为。
Requirements
DailyMatrix.vue的parseTrendNumber把Number(value) === 0视为 null 返回。DailyMatrix.vue中"空腹血糖"和"餐后血糖"两条 series 的connectNulls改为true。- 表格
getCell路径完全不动,fasting/postprandial/other列里的 0 仍然原样展示。
Acceptance Criteria
- 当某一天
fasting_blood_sugar或postprandial_blood_sugar为 0/'0'/'0.00'/null/''时,折线图上对应日期不画点,且折线从上一个有值点平滑连到下一个有值点。 - 当某一天空腹是 5.6、餐后是 0 时,折线图只在空腹线画出 5.6 这个点,餐后线该日期视为空。
- 表格里同一天空腹是 0,在表格相应单元格上仍然能看到
0(或当前已有的展示形式),不被改成空字符串或-。 bloodTrendHasData在所有值都 ≤ 0 / 空 时返回false,触发"暂无数据"占位。
Definition of Done
- 改动只影响
DailyMatrix.vue一个文件。 - 在"医生接诊台 (
patient/reception)"和"诊断只读页 (tcm/diagnosis/readonly)"两处都验证一遍折线图行为。 - 表格列展示无回归(目测
getCell出来的 fasting/postprandial 列在含 0 的日期仍显示 0)。 - 类型检查
npm run type-check通过。
Out of Scope
BloodRecordList.vue的折线图(已经满足需求)。- 表格列展示规则(0 是否要换显示成
-之类),不本次处理。 - 后端
BloodRecordLogic::getBloodSugarTrend的过滤逻辑(已正确)。
Technical Notes
- 改动点:
admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:719—parseTrendNumber增加parsed === 0 → null。admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:686—connectNulls: false→true。admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:701—connectNulls: false→true。
- 验证页面:
admin/src/views/patient/reception/index.vue(医生接诊台 → 日常记录卡片)。admin/src/views/tcm/diagnosis/readonly.vue/edit.vue等引用DailyMatrix的页面。