f1e7e785a1
迭代09 (R-011 Tab 设置统一管理): - 需求 R-011 (定稿 Q1-Q5) + 需求池索引 - 计划 PLAN-010 + 迭代09 四件套 (目标/技术方案/验收/复盘) - 约束: 产品约束-009 / UI约束-003 / 技术约束-014 - UI约束-002 修订: 通用设置→Tab 设置 迭代10 (R-012 UI 适配 DSH 主题): - 需求 R-012 (定稿: 暂定跟随系统) + 需求池索引 - 计划 PLAN-011 + 迭代10 四件套 - 约束: UI约束-004 (主题适配约定)
4.9 KiB
4.9 KiB
计划:Tab 设置——统一管理所有会话 tab(内置 + 策略分组,显示/隐藏 + 拖动排序)(阶段航点)
编号:PLAN-010 | 粒度:阶段航点(大粒度) | 创建:2026-09-02 | 状态:执行中 派生自终极目标:目标-002(分仓管理工具)、目标-003(按策略监控市场) 依据需求:R-011(已定稿,2026-09-02,Q1-Q5 确认) —— 符合入范围门槛 设计约束:产品约束-009、UI约束-003、技术约束-014(R-011 新增沉淀)、技术约束-004/005/006(沿用)
目标
将设置页「通用设置」升级为 「Tab 设置」,成为所有会话 tab(系统内置 + 策略分组)唯一的顺序与显隐入口:两类 tab 混排一张表,每行 = 拖动手柄 + 名称 + 显示/隐藏开关;任何 tab 均不支持重命名与删除;拖动落点立即持久化。
范围
做:
- 数据模型统一(src/settings.js):settings.tabs 从布尔对象 → 有序数组 [{id, kind: builtin|strategy, refKey|refId, name, visible, order}];strategies 收窄为 {id, name};读取时旧格式静默归一化(旧 tabs 布尔对象 → 三个内置条目保留原显隐;旧策略按 order 接续追加,旧隐藏策略迁移后 visible=true);新增整表更新(顺序 + 显隐);DEFAULT_TABS 升级为默认数组;
- API 层(src/api/strategies.js):tabs/update 语义改为整表更新(顺序 + 显隐);strategies/add 联动追加 tab 条目(末尾);strategies/remove 联动删除对应 tab 条目;废弃 strategies/move;strategies/update 仅剩重命名;
- 客户端注册(src/client/index.js):合并 registerGeneralTabs + registerStrategyTabs 为统一注册(读 tabs 数组按 order 排序、过滤 visible;builtin 走内置 render、strategy 走 StrategyTab),移除硬编码 order 间隔(10/11/12 与 13+);
- 设置页 UI(src/client/views/SettingsSection.jsx):
- 「Tab 设置」子 tab 取代「通用设置」:混排表格,内置行「内置」徽标、策略行「策略」徽标;每行 = 拖动手柄 + 名称 + 显隐开关;无任何重命名/删除按钮;
- 拖动:原生 HTML5 Drag & Drop,落点重排 → 立即调 tabs/update 持久化 → 提示「刷新页面后生效」;
- 「策略分组」子 tab 瘦身:只留 新增/重命名/删除,移除排序箭头与显隐开关,加提示「顺序与显示请在「Tab 设置」中调整」。
不做:
- 策略的命名/删除入口迁移(仍在「策略分组」子 tab);
- 内置 tab 的重命名/删除(禁);
- tab 注册热更新(沿用「刷新页面后生效」机制,无事件机制);
- 其他设置子 tab(QMT 连接配置)改动(仅 UI约束-002 文案「通用设置」→「Tab 设置」对齐)。
程序结构
src/
├── settings.js # 改:tabs 有序数组 + 归一化迁移 + 整表更新;strategies 收窄
├── api/strategies.js # 改:tabs/update 整表;add/remove 联动 tabs;废弃 move
src/client/
├── index.js # 改:统一注册(读 tabs 数组)
└── views/SettingsSection.jsx # 改:「Tab 设置」子 tab + 拖动排序 + 策略分组瘦身
实现步骤
- 文档骨架:PLAN-010 + 迭代 09 文档(本步);
- settings.js:tabs 有序数组 schema + DEFAULT_TABS + 归一化(getTabs 旧格式转新)+ updateTabs 整表 + strategies 收窄(去 visible/order 读写);
- api/strategies.js:tabs/update 整表语义;strategies/add 追加 tab;strategies/remove 联动删 tab;废弃 move(API 表 + handler);
- client/index.js:统一注册函数(读 tabs 数组),移除硬编码 order;
- SettingsSection.jsx:「Tab 设置」子 tab(混排表格 + 徽标 + 显隐开关 + 拖动排序 + 立即持久化);策略分组子 tab 瘦身;
- 构建测试:pnpm run build + typecheck + 独立数据目录回归(技术约束-011,注意只读端点可直连、写操作走临时目录);
- 验收 + 复盘。
验收要点
- 「通用设置」子 tab 更名为「Tab 设置」,表格混排内置 + 策略全部 tab;
- 内置行带「内置」徽标、策略行带「策略」徽标;
- 每行可拖动排序,落点立即持久化(刷新页面后生效);
- 每行有显示/隐藏开关,切换立即持久化;
- 任何行均无重命名/删除按钮;
- 策略分组子 tab 只留 新增/重命名/删除,无排序箭头/显隐开关,有指引提示;
- 新增策略出现在 Tab 设置列表末尾;删除策略后对应 tab 条目消失;
- 老配置(布尔对象 tabs + 策略 order/visible)读取时自动归一化,无报错、无数据丢失;
- 会话 tab 栏按新顺序与显隐注册(内置与策略可交错);
- 现有功能不回归(全部持仓/交易记录/策略持仓/QMT 切换)。