# 需求:R-027 策略 tab 静态化 + 字段配置入口迁移 · 已定稿 > 登记:2026-09-10 | 来源:老师指令(2026-09-10 功能讨论「重构想法」)| 状态:**已定稿(2026-09-10 老师逐项确认)** > 归属:**22-策略计算字段与策略tab静态化 · 第一阶段**(PLAN-019)| 实现状态:**已实现(2026-09-10 完成,typecheck/build/17 个回归脚本全绿),待老师人工验收** > 前身:草稿 T-011(已转正,草稿文件已清理) > **取代**:R-003(策略 CRUD)、R-011(Tab 统一管理中的「策略条目动态化」部分)、R-013(字段定义入口在设置页部分) ## 诉求(老师,2026-09-10) > 1. 策略 tab 我不想做成动态可增减修改的了,改成静态的,和全部持仓、交易记录这些一样,都是插件内置的 tab; > 2. 这两个策略 tab 原有的字段编辑功能,切换到主窗口的策略 tab 下面,列设置旁边,作为统一的字段配置管理。 ## 现状核实(2026-09-10 实机,代码 + settings.yaml + store.db) - 策略仅两个内置:`grid-supermarket`(网格超市,5 字段:网格上边界/下边界/基准值/网格大小/网格交易量)、`manual-t`(手动做T,1 字段:T仓成本价); - `store.db`:`strategy_holdings` 13 / 3 行,`trade_orders`、`trade_order_attributions` 均只涉及这两个策略 → **无自建策略,零数据迁移风险**; - `settings.tabs` 现状:网格超市(0) → 手动做T(1) → 交易记录(2) → 关注列表(3,隐藏) → 全部持仓(4,隐藏); - 现状实现:`addStrategy/removeStrategy` 联动 `appendStrategyTab/removeStrategyTab`(R-011);字段编辑 = 设置页「策略分组」子 tab 内 `StrategyFieldsEditor`,保存走 `strategies/update` 整表。 ## 定稿结论 ### 1. 策略 tab 静态化(Q1) - 策略**集合与名称固定**(插件内置两项,语义等同 `BUILTIN_TABS`):**不可新增、不可删除、不可重命名**; - **保留**「Tab 设置」里的**显隐开关 + 拖拽排序**(策略 tab 与内置 tab 同权混排)——老师现有偏好(策略 tab 置顶、全部持仓/关注列表隐藏)继续有效; - 策略 CRUD 能力与 `addStrategy / removeStrategy / appendStrategyTab / removeStrategyTab / generateStrategyId`(拼音 slug 一整套)**整体退役**。 ### 2. 设置页「策略分组」子 tab 移除(Q2) - 设置页收敛为两个子 tab:**Tab 设置 / QMT 连接配置**; - 移除策略「新增 / 重命名 / 删除」入口与删除确认弹窗。 ### 3. 字段配置入口迁移(Q3 + Q4) - 入口 = 主窗口**策略 tab 顶部、「列设置」旁的「字段配置」按钮**;每个策略 tab 管理**本策略**字段(符合「字段定义随策略」语义); - 点击打开**独立弹层**:字段列表(展示名 / key / 类型 / 公式或默认值 / 单位 / 操作)+ 添加/编辑/删除字段 + **保存**; - 与「列设置」职责分离:列设置 = 轻量即时持久化(显隐/顺序);字段配置 = 重表单 + 保存按钮; - 字段定义增删 → 表格列自动跟随(沿用 R-013 归一化机制,零改动)。 ### 4. 保存机制(Q5,技术项 AI 定) - 新增**单策略字段端点**(拟 `strategies/schema-update { strategyId, configSchema }`):只改本策略字段定义,避开 `strategies/update` 整表覆盖风险; - 保存成功 → Toast + 刷新该策略数据(列与字段同步跟随)。 ### 5. 存储结构简化(Q7,技术项 AI 定,技术方案阶段定形) - `strategies` **常量化为插件内置两项**(id/name 常量); - settings 只保留可变部分:**字段定义**(按 strategyId)+ **strategyColumns** 列配置覆盖; - 存量 settings(strategies 数组 + configSchema)读取时**归一化迁移**(不写独立迁移脚本);本次实机无自建策略,无需数据处理。 ### 6. 排期(Q6) - **并入迭代 22 作第一阶段**(静态化 + 入口迁移),计算字段(R-026)作**第二阶段**——一次改到位,公式表单直接落在新入口,避免「先按设置页做一遍再整体搬迁」的返工; - 迭代 22 的 `UI交互设计.md` **同步修订**(公式表单移入「字段配置」弹层)。 ## 影响面 / 约束联动 - **约束修订**(实施时执行并记录):产品约束-002/003/004(标签体系 / 标签自定义 + 显示开关的场景收敛)、产品约束-009(Tab 统一管理中「策略条目动态化」条款)、UI约束-002(设置页子 tab 构成:移除策略分组)、UI约束-003(Tab 设置:策略行不再随 CRUD 增删)、UI约束-005(字段配置 UI 入口迁移); - **历史需求追溯**:R-003(策略 CRUD)→ 被取代退役;R-011(Tab 统一管理)→ 策略条目动态化部分被取代,显隐/排序机制保留;R-013 → 字段模型与列机制保留,**入口条款**被取代。 ## 决策记录 | 项 | 结论 | 讨论 | |---|---|---| | 静态化程度 | 固定不可增删改名 + **保留**显隐/排序 | Q1(采纳建议 A)| | 设置页「策略分组」 | 整体移除 | Q2(A)| | 入口形态 | 「列设置」旁独立「字段配置」按钮 + 独立弹层 | Q3(A)| | 「统一」范围 | 每个策略 tab 管自己的字段 | Q4(A)| | 保存机制 | 单策略字段端点(AI 定,技术项)| Q5 | | 排期 | 并入迭代 22 第一阶段,一次改到位 | Q6(A)| | 存储结构 | strategies 常量 + settings 存字段/列配置(AI 定,方案阶段定形)| Q7 | ## 讨论过程 1. 2026-09-10 老师提出重构想法(策略 tab 静态化 + 字段编辑功能迁到策略 tab 内、列设置旁); 2. AI 核实实机现状(settings.yaml 策略与字段、store.db 数据归属、tabs 顺序)→ 结论:仅两个内置策略、无自建策略,**零数据迁移风险**; 3. AI 给出影响面分析(tab 体系 / 设置页 / 字段配置 / 约束与历史需求)+ 与迭代 22 的撞位提示(公式表单落在设置页,入口一搬即废)+ 排期建议; 4. 老师逐项拍板 Q1~Q4、Q6(全采建议);Q5/Q7 为技术项由 AI 定; 5. 转正定稿:T-011 草稿 → R-027(草稿文件已清理,索引同步);迭代 22 结构与交互设计同步修订。 ## 关联 - 上游:T-011 草稿、实机核实(`settings.yaml` + `store.db`); - 联动:**R-026 / 迭代 22**(入口迁移后,计算字段的公式表单落在「字段配置」弹层内);R-013(字段模型 / 列机制沿用)、R-011(Tab 显隐排序机制沿用); - 取代:R-003、R-011(部分)、R-013(入口条款)。