Files
zyt/.trellis/tasks/05-14-0/prd.md
T

3.8 KiB

血糖趋势折线图过滤 0 值并跨空连线

Goal

修复 admin 端"日常记录"与"医生接诊台"两个入口共用的血糖趋势折线图:

  1. 把数值 0 视为"未设置",不在折线图上画出来,避免一堆 0 点贴 X 轴的视觉混乱;
  2. 当某一天没有有效值时,折线从上一个有值点直接连到下一个有值点(跨空连线)。

表格列原样保留,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

  1. DailyMatrix.vueparseTrendNumberNumber(value) === 0 视为 null 返回。
  2. DailyMatrix.vue 中"空腹血糖"和"餐后血糖"两条 series 的 connectNulls 改为 true
  3. 表格 getCell 路径完全不动,fasting/postprandial/other 列里的 0 仍然原样展示。

Acceptance Criteria

  • 当某一天 fasting_blood_sugarpostprandial_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:719parseTrendNumber 增加 parsed === 0 → null
    • admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:686connectNulls: falsetrue
    • admin/src/views/tcm/diagnosis/components/DailyMatrix.vue:701connectNulls: falsetrue
  • 验证页面:
    • admin/src/views/patient/reception/index.vue (医生接诊台 → 日常记录卡片)。
    • admin/src/views/tcm/diagnosis/readonly.vue / edit.vue 等引用 DailyMatrix 的页面。