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

61 lines
3.8 KiB
Markdown

# 血糖趋势折线图过滤 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.vue``parseTrendNumber``Number(value) === 0` 视为 null 返回。
2. `DailyMatrix.vue` 中"空腹血糖"和"餐后血糖"两条 series 的 `connectNulls` 改为 `true`
3. 表格 `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` 的页面。