Files
zhixing-system/.trellis/tasks/archive/2026-09/09-01-stock-chart-display/implement.md
T
2026-09-01 13:38:45 +08:00

3.5 KiB

选股模块图表展示实施计划

1. 后端图表详情用例与契约

  • 在 selection application 层新增 GetSelectionChart 及具名返回模型,复用 MarketDataReader.load_history 和 compute_kdj,在完整目标日前历史上计算后截取末尾最多 250 点。
  • 为用例补充单元测试,覆盖升序输出、目标日截断、超过 250 点、KDJ 对齐、空历史和可空值。
  • 在 selection HTTP 层新增 GET /stocks/{ts_code}/chart 的 Pydantic response model、依赖组合和错误映射。
  • 扩展 HTTP 测试,覆盖成功、404 空行情、503 存储错误、日期参数校验和完整响应字段。

2. 最佳案例契约与静态资源

  • 调整 _pattern_score_response,让 below_threshold 与 matched 一样返回真实 value/case/breakdown,同时保留状态与阈值语义;补充后端 HTTP 测试。
  • 将用户提供目录中的十张 JPG 复制到 zhixing-web/public/patterns/b1-cases/,保留文件名,并核对十个 case id 均有且仅有一个资源。
  • 在 selection feature 中新增穷举案例图片映射和展示组件;测试断言匹配和低于阈值时详情恰有一张 <img>,其 src、案例名称和分数来自同一个 case.id,并覆盖未知案例、图片加载失败、score: null 未评分和评分失败状态。

3. 前端详情数据链路

  • 在 selection.types.ts 定义图表响应类型,在 selection.api.ts 增加同源详情请求,在 selection.query.ts 增加包含股票代码和目标日的 query key/hook,并传递 AbortSignal。
  • 为 API URL 编码、查询参数和 query 启用条件补充窄测试。
  • 在工作台/详情组件中接入图表 query,保证选择切换不会显示旧股票数据,并呈现加载、错误、空数据和成功状态。

4. ECharts 复合图表与布局

  • 用 pnpm 添加 echarts 运行时依赖并更新 lockfile,不引入 React wrapper。
  • 新增 option 纯构造函数和图表组件;按需注册 candlestick、bar、line、grid、tooltip、legend、dataZoom、Canvas renderer,绑定三组 grid/axis/series。
  • 实现最多 250 点、用 category startValue/endValue 精确显示最后 120 点(不足时全量)的 inside + slider 同步缩放,以及 ResizeObserver resize 和卸载 dispose。
  • 用纯函数测试锁定 [open, close, low, high] 顺序、volume/KDJ 对齐、缺失 OHLC 不绘制蜡烛、空 KDJ 不跨点连线、三个 xAxis 索引和精确 120 点初始范围;页面行为测试断言可见状态与可访问名称。
  • 从 md 双栏断点起将 grid 统一改为左 1fr、右 3fr,移除 lg 的旧比例覆盖并保持移动端现有记录卡行为;在图表正下方展示最佳案例 JPG,再展示评分分解和关键指标。

5. 验证与回滚点

  • 运行后端窄测试:uv run --directory zhixing-server pytest tests/unit/selection tests/test_selection_http.py -q。
  • 运行前端窄测试:pnpm --dir zhixing-web test -- selection,并运行 pnpm --dir zhixing-web typecheck。
  • 运行完整质量门禁:./dev.sh check、./dev.sh test,再运行 pnpm --dir zhixing-web build 验证产物。
  • 使用本地页面核对 1:3 布局、药明康德/方正科技案例图、股票切换、缩放同步和详情滚动;当前数据库未用于验收,已使用确定性 Mock API 与真实浏览器核对。
  • 回滚前先确认无数据库迁移;按“HTTP/用例、前端 query/组件、静态资产与依赖、grid class”顺序撤销即可恢复旧行为。