Files
one_divine_lot/docs/02-计划/计划-Tab设置统一管理.md
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

4.9 KiB
Raw Permalink Blame History

计划: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. 设置页 UIsrc/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.jstabs 有序数组 schema + DEFAULT_TABS + 归一化(getTabs 旧格式转新)+ updateTabs 整表 + strategies 收窄(去 visible/order 读写);
  3. api/strategies.jstabs/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 切换)。