rebuild(stage-8): deliver market insight workspaces

This commit is contained in:
leefer
2026-07-30 04:12:04 +08:00
parent a18e8e9d27
commit 976a5cac03
39 changed files with 3671 additions and 14 deletions
+54
View File
@@ -0,0 +1,54 @@
# 阶段 8 验收记录
## 交付范围
- 集合竞价:盘前归档、9:15 至 9:25 动态观察、9:25 选定和盘后归档状态;重点异动、我的自选、全部候选、竞价一字四组数据及成交额多日对比。
- 题材库:题材排名、行情状态、成分股明细和题材悬浮日 K/分时预览;行情缺失与成分股缺失分别表达。
- 人气热榜:同花顺、东方财富和双榜共识独立呈现;单一来源不会伪装成双榜共识。
- 龙虎榜:官方上榜数、游资操作明细、未识别席位和游资档案;档案采用左侧列表与右侧详情,不打开长弹窗。
## 数据与生命周期
- 外部行情仍只通过 `DataGateway` 进入业务层。正式计算使用 iFinD 动态竞价和 Tushare 权威归档数据,公开网页源不进入确定性计算。
- 动态竞价不可用时不会把前一交易日归档伪装成当日实时结果;携带旧归档时明确标记日期、状态和说明。
- 竞价一字板使用供应商给出的当日真实涨停价判定,因此同时覆盖新规 ST 10% 涨跌幅,不在业务代码硬编码 5%。
- 竞价成交额摘要与多日图形使用同一个标准化股票集合,避免同日数字口径不一致。
- 龙虎榜区分无上榜、明细缺失、席位全部未识别、请求不可用和部分/完整识别状态,不用统一空态掩盖数据链路问题。
- 席位别名持久化后直接重算已归档操作,不重新请求外部数据。
## 账号边界
- 竞价市场快照不保存任何用户私有字段。
- “我的自选”在响应时依据当前已认证账号单独读取并合成,两个账号无法读取彼此的自选记录。
- 自选股表由独立的版本 6 Migration 建立,避免修改已经执行的历史迁移。
## 自动验收
- Ruff:通过。
- Pytest:58 项通过,其中包含竞价生命周期、口径、四类龙虎榜状态、Migration 前进/回退和自选股跨账号隔离。
- Vue TypeScript 检查:通过。
- Vitest:2 个文件、5 项通过。
- Vite 生产构建:通过。
- Playwright6 项通过,覆盖阶段 4 至 8 的完整回归、日间/夜间、1920x1080 和 390x844 视口。
- 浏览器控制台无未处理错误,390px 页面无横向溢出。
- 敏感值扫描:已提供账号密码和令牌未进入 `next/`
- `git diff --check`:通过。
## 视觉证据
- `auction-light-1920x1080.jpg`:集合竞价日间桌面视图。
- `popularity-dark-1920x1080.jpg`:人气热榜夜间桌面视图。
- `dragon-profiles-dark-390x844.jpg`:游资档案夜间移动视图。
## 减法证据
- 四个页面共用唯一市场洞察服务、统一表格列定义和现有行情预览组件,没有复制页面专属 API 客户端或图表实现。
- 竞价共享归档与用户自选在服务端边界合成,不建立每用户一份重复市场快照。
- 新增页面最长 108 行,页面样式 168 行;后端最长纯计算模块 492 行,均在章程门禁内。
- 没有复制旧系统巨型文件、供应商客户端、通用 CRUD、通用缓存或兼容层。
## 剩余边界
- 阶段 9 才迁移智能选股、36 套策略、自定义选股和持续跟踪,本阶段没有预建空策略框架。
- 外部数据是否可用仍取决于管理员凭据和供应商权限;缺少权威数据时保持失败关闭,不生成模拟结果。
- NAS 生产容器保持不变,最终切换仍需人工明确确认。
Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB