Files
zhixing-system/.trellis/tasks/08-10-selection-status-drawer-compact-layout/prd.md
T

70 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 收紧选股执行状态交互与页面布局
## Goal
让选股策略页面把“未完成评估”从主工作区移出,改成由执行状态触发的右侧抽屉;抽屉内用紧凑表格查看明细。同时收紧页面各模块的内外间距,让桌面工作台填满可用高度,移动端保持可操作性。
本任务只修改前端交互和布局,不新增或修改后端接口。现有 API 返回的 `SelectionResults.failures` 作为抽屉数据源,接口扩展留给后续业务需求迭代。
## Confirmed Facts
- 当前 [selection-results-page.tsx](zhixing-web/src/features/selection/pages/selection-results-page.tsx) 在 `ResultState` 下方直接渲染 `FailureList`,标题为“未完成评估”,每条记录是独立卡片(约第 458–491 行)。
- 当前 `ResultMetrics` 已展示“执行状态”,但它只是 Badge,不承担交互(约第 290–315 行)。
- 当前选股结果工作台使用 `min-h-[420px] shrink-0` 包裹,导致桌面端数据面板不能填满页面剩余高度(约第 430–441 行)。
- 当前项目已有基于 Base UI Dialog 的可访问弹层 primitive,可复用其焦点管理、Escape 和遮罩行为;尚无 Drawer/Sheet primitive。
- 当前 `SelectionResults` 已包含 `failures`,字段为股票代码、名称、状态和原因;本任务不需要后端改契约。
- 当前分页、筛选和主从详情已经存在,本任务保留其行为。
## Requirements
### R1. 执行状态抽屉
- 主页面不再直接渲染“未完成评估”卡片或明细列表。
- “执行状态”成为可操作入口;点击后从右侧打开执行状态抽屉,并把当前结果的未完成评估列表传入抽屉。
- 抽屉标题和说明要明确表达当前策略、目标交易日、执行状态及未完成数量。
- 桌面端抽屉宽度固定为 `600px`;视口小于该宽度时退化为不产生水平溢出的全宽/近全宽布局。
- 抽屉支持关闭按钮、遮罩点击、Escape 和焦点返回;打开后焦点进入抽屉。
- 没有未完成评估时仍可查看执行状态,抽屉显示空表状态,不创建无意义的空卡片。
### R2. 未完成评估表格
- 抽屉中的明细必须使用语义化 `table` 组件,不使用逐条卡片替代。
- 表格至少展示:股票名称、股票代码、评估状态、失败原因。
- 表头、单元格和行间距使用紧凑密度;长原因可换行,不撑破抽屉宽度。
- 表格提供 caption/可访问名称;无数据时显示可读的空状态。
- 表格属于 `selection` feature,不把策略字段或业务格式化下沉到 `shared/ui`。
### R3. 页面紧凑布局
- 收紧 `PageLayout` 的页面 gutter、操作区/指标区内边距和纵向间距;页面内容在桌面端尽量使用主区域宽度。
- 收紧选股页执行工具栏、指标区、筛选栏、详情面板、分页和各状态卡的 padding/margin/gap。
- 修复 bounded workspace 的连续高度链:操作区、指标区、筛选栏、分页不参与数据滚动,主表格数据区占满剩余高度并独立滚动。
- 保留移动端至少 `44px` 的主要触控命中区域;移动端改为自然页面滚动,不引入嵌套水平滚动。
- 不改变现有路由、筛选 URL 状态、分页行为、策略执行/轮询行为和主从选中行为。
### R4. 页面状态边界
- 请求加载、请求错误、无结果和执行失败等请求级状态仍可在主页面就地表达。
- 仅将“未完成评估”的结果明细从主页面迁移至抽屉,不把后端接口缺失伪装成前端数据。
## Out of Scope
- 不新增或修改 FastAPI endpoint、Pydantic response model、数据库表或策略执行逻辑。
- 不实现行情数据、同步任务、全局搜索、个股研究详情或新的置信度接口。
- 不改变 `SelectionResults` API 的字段含义,不为“信号置信度”虚构数据。
- 不重写原型 HTML 的交互状态;原型继续作为视觉基线,正式页面以本任务的紧凑布局为准。
## Acceptance Criteria
- [x] 有失败结果时,主页面不出现“未完成评估”明细卡片;执行状态入口可见且可操作。
- [x] 点击执行状态后,右侧打开宽度为 `600px` 的抽屉;抽屉内存在可访问的 `table`,并正确展示所有失败记录。
- [x] 抽屉可以通过关闭按钮、遮罩、Escape 关闭,关闭后焦点返回执行状态入口。
- [x] 无失败记录时,执行状态入口仍能打开抽屉,表格显示空状态。
- [x] 1440×900 桌面视口下,选股工作台的数据面板填满操作区/指标区后的剩余高度,分页固定在面板底部,只有数据行区域滚动。
- [x] 390×844 与 375×812 移动视口下无页面级水平溢出,底部导航不遮挡可滚动内容,主要控件命中区域不低于 `44px`。
- [x] 前端格式、lint、类型检查、单元测试和构建通过;浏览器验证覆盖抽屉交互、紧凑布局和桌面/移动视口。
## Open Questions
无。抽屉触发入口采用现有“执行状态”指标;本次不扩展后端接口。