Files
one_divine_lot/docs/02-计划/计划-Tab设置统一管理.md
T
kyugao f1e7e785a1 docs(迭代09/10): Tab 设置统一管理 + UI 主题适配 全量文档
迭代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 (主题适配约定)
2026-09-02 14:01:08 +08:00

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