docs(迭代11+归档): R-013 归档完成 + 迭代 11 复盘
- 迭代 11 复盘:实施事实(R-013 自定义字段 + 列显隐 + 单元格编辑 + unit)+ 经验教训(JSX 未导入白屏 / z.dict dts / SQLite 关键字列 / map this 丢失 / 列宽稳定) - R-013 归档至 已完成/(归档头:日期/状态/实现迭代/讨论记录) - 索引 R-013 → 已实现(已归档);PLAN-012 → 已完成
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# 计划:策略自定义字段配置(定义随策略,值落库)(阶段航点)
|
||||
|
||||
> 编号:PLAN-012 | 粒度:阶段航点 | 创建:2026-09-02 | 状态:**执行中**
|
||||
> 编号:PLAN-012 | 粒度:阶段航点 | 创建:2026-09-02 | 状态:**已完成(迭代 11 验收通过,2026-09-02)**
|
||||
> 派生自终极目标:目标-002(策略定义能力)、目标-007(人机合一)
|
||||
> 依据需求:**R-013(已定稿,2026-09-02,老师确认 Q1-Q4 + D6)** —— 符合入范围门槛
|
||||
> 设计约束:技术约束-012(策略定义仍存 DSH settings / SQLite 存储)沿用;本次新增 产品约束-010、技术约束-015、UI约束-005
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# 迭代复盘:11-策略自定义字段配置(定义随策略,值落库 + 列显隐)
|
||||
|
||||
> 复盘日期:2026-09-02 | 迭代状态:**已完成(老师确认)**
|
||||
> 关联需求:R-013(策略自定义字段配置,已定稿 Q1-Q4 + D6)
|
||||
> 关联计划:PLAN-012(计划-策略自定义字段配置)
|
||||
|
||||
## 结果
|
||||
|
||||
迭代 11 达成:策略支持**自定义字段**(定义随策略 configSchema 存 settings 不落库,值落 strategy_holdings.values JSON 列),字段作为策略持仓表**列**展示,支持**列显隐/排序**(每策略独立配置)、**单元格点击编辑**(含单位、可编辑视觉记号)。配置页「策略分组」策略行展开配置字段。旧策略(无 configSchema)行为与现状一致。
|
||||
|
||||
## 过程事实
|
||||
|
||||
1. **需求定稿(R-013)**:老师提出每个策略可加自定义字段 → 多轮讨论收敛(定义不落库随策略取 / 值落库 / 类型化 text·number·boolean·enum / 枚举有用 / 旧策略兼容 Q4 / 值编辑入口 D6)→ 老师确认定稿,端到端示例入档;
|
||||
2. **范围扩展(列显隐,老师 2026-09-02)**:字段升级为持仓表列 + 统一显隐管理(不限于自定义字段,含基础数据列);除 代码/名称/操作 外全部可配置;每策略独立;入口 = tab 顶部「列设置」;支持列排序 → visible 单一数据源(strategyColumns,configSchema 不加 visible)老师确认;
|
||||
3. **实现**:settings.js(configSchema + COLUMN_META + strategyColumns + 归一化)、SqliteStore(values 列幂等 ALTER + readValues/writeValues)、DataStore(透传)、PositionManager(updateHoldingValues 按 configSchema 校验 + getStrategyPositions 附 values)、api(holdings/values-update + strategy-columns 端点)、index.js(注入 getStrategySchema);
|
||||
4. **UI**:StrategyFieldsEditor(设置页字段定义编辑器)、StrategyTab 动态列化 + 列设置弹层 ColumnSettingsPopover + 单元格点击编辑 FieldCellEditor;自定义字段从展开交易明细移出(老师指示,字段已列化);
|
||||
5. **UI 细节(老师验收反馈迭代)**:✎ 可编辑记号(值后)、编辑态 ✓/✕ 确认按钮、切换编辑列宽稳定(输入框内容宽度)、数字输入框统一 5 位宽、字段 unit 单位(可为空,展示拼值后);
|
||||
6. **修复**:配置页白屏(SettingsSection Fragment/StrategyFieldsEditor 未导入 → 运行时 ReferenceError,checkJs:false 未捕获);z.dict dts 推断引用 cosmokit(显式类型注解);
|
||||
7. **验证**:typecheck + build 通过;回归 test-r013-custom-fields 21/21、test-r013-columns 16/16、test-r011-tabs 23/23、test-r009 14/14;
|
||||
8. **提交**:aac16b9(R-013 完整实现 + 列显隐 + 单元格编辑),已推送 origin/main。
|
||||
|
||||
## 经验教训(复盘沉淀)
|
||||
|
||||
### 1. JSX 运行时错误 vs typecheck 盲区(白屏根因)
|
||||
- 项目 checkJs:false → .jsx 不校验未导入标识符;`<Fragment>` 未 import / 组件未 import 只在运行时 ReferenceError → 整个组件树崩溃白屏;
|
||||
- **沉淀**:jsx 改动必须自查「使用的 JSX 大写标签是否有 import/定义」(typecheck 不兜底);已建议加 client 构建期 lint 或保持自查清单。
|
||||
|
||||
### 2. z.dict 的 dts 推断陷阱
|
||||
- schemastery z.dict 返回值类型引用 cosmokit Dict → dts 生成报「cannot be named without reference」;
|
||||
- **沉淀**:settings schema 用 z.dict 时给变量加显式 Schema 类型注解(@type import('@deepseek-ai/schemastery').Schema<any>)规避。
|
||||
|
||||
### 3. SQLite 关键字列名
|
||||
- values 是 SQLite 保留字(INSERT VALUES)→ ALTER/SELECT/UPDATE 裸写报语法错误;
|
||||
- **沉淀**:列名需双引号 `"values"`(PRAGMA 检测用裸名 OK);若可改名优先避开关键字。
|
||||
|
||||
### 4. .map(this._mapHolding) 的 this 丢失
|
||||
- 方法内新增调用 this._parseValues 后,`.map(this._mapHolding)` 裸传方法引用 → this 丢失 TypeError;
|
||||
- **沉淀**:map 回调若依赖 this,改模块级纯函数或 `(row) => this._mapHolding(row)`。
|
||||
|
||||
### 5. 编辑态控件宽度 vs 表格列宽稳定
|
||||
- 固定宽输入框(90px)进入编辑使列宽跳变;改内容宽度(ch 随文本)+ 数字固定 5 位宽 + 紧凑 ✓/✕ 后变化最小;
|
||||
- **沉淀**:表格内联编辑控件宽度应贴近展示态(内容宽度/位数基准),按钮用紧凑 inline(浮层会溢出遮挡相邻单元格)。
|
||||
|
||||
## 遗留/后续
|
||||
|
||||
1. **T-006 数据池 + 策略表格动态字段配置**(需求池起草):本迭代的列显隐/字段列化是其「表格列配置」子集的落地,数据池中间层仍未做——后续如需「列名→数据池字段映射/多源字段」再评估;
|
||||
2. **列排序交互**:本期列设置用 ↑↓ 箭头(零依赖);如老师要 Tab 设置同款拖拽可后续换 DnD;
|
||||
3. **值校验服务端已实现**,前端编辑即时提示靠服务端错误 Toast——如需前端预校验可后续加。
|
||||
@@ -1,4 +1,9 @@
|
||||
# R-013 策略自定义字段配置(定义随策略,值落库)
|
||||
# R-013 策略自定义字段配置(定义随策略,值落库) · 已完成
|
||||
|
||||
> 归档日期:2026-09-02 | 需求状态:**已完成**
|
||||
> 原索引:docs/05-需求池/需求池索引.md(主索引保留 R-013 条目,指向本归档)
|
||||
> 实现迭代:11-策略自定义字段配置(验收通过,迭代复盘见 docs/04-迭代记录/11-策略自定义字段配置/迭代复盘.md)
|
||||
> 讨论记录:2026-09-02 定稿(Q1-Q4 + D6);迭代 11 实施中扩展列显隐/单元格编辑/unit(老师确认);实现见迭代 11 技术实现方案/程序结构设计/复盘
|
||||
|
||||
> 状态:**已定稿**(2026-09-02,老师确认 Q1-Q4)| 登记日期:2026-09-02
|
||||
> 来源:老师提出(2026-09-02,策略可自定义 / 可扩展讨论;T-009 转正)
|
||||
@@ -24,7 +24,7 @@
|
||||
| R-010 | 策略持仓行展开关联交易记录(Holding → 交易汇总) | 策略持仓 tab 每个持仓行(Holding)可展开,展开显示与该 holding 关联的交易记录(仅委托汇总,不分笔成交);strategy-positions 附加 holding_id + 新增 trades/by-holding 端点 + 持仓行展开 UI + 成本价/最后一笔成交价两列 + 神之一手 tab 隐藏输入框。**2026-09-02 定稿(Q1-Q4 确认),2026-09-02 完成(老师确认),已归档至 已完成/R-010.md** | 老师指令(2026-09-02) | P1 | 已定稿 | 2026-09-02 | 08-策略持仓行展开关联交易记录 | **已实现(已归档)** |
|
||||
| R-011 | Tab 设置:统一管理所有 tab(内置 + 策略分组混排,显示/隐藏 + 拖动排序) | 设置页「通用设置」升级为「Tab 设置」,统一管理所有会话 tab(系统内置 + 策略分组)的唯一入口:两类混排、**拖动排序**(原生 HTML5 DnD,落点立即持久化)+ **显隐开关**;**任何 tab 均不支持重命名/删除**(策略命名/删除仍在「策略分组」子 tab);顺序/显隐统一为一份数据源(tabs 有序数组,策略行名 join strategies 自动跟随改名),删除策略联动删除对应条目;新增策略追加末尾;老配置自动迁移(旧隐藏策略迁移后显示)。**2026-09-02 定稿(Q1-Q5 确认)并完成(迭代 09 验收通过),已归档至 已完成/R-011.md** | 老师指令(2026-09-02) | P1 | 已定稿 | 2026-09-02 | 09-Tab设置统一管理 | **已实现(已归档)** |
|
||||
| R-012 | UI 适配 DSH 主题(浅色 / 深色 / 跟随系统) | 神之一手 UI 适配 DSH 浅色/深色/跟随系统主题:141 处硬编码色值替换为宿主 `--dsw-*` token,随主题自动切换;不自行维护主题偏好(**暂定跟随系统**);涨跌红涨绿跌 → 宿主 state-error/success;仅色值 token 化不动布局。**2026-09-02 定稿(暂定跟随系统)并完成(迭代 10),已归档至 已完成/R-012.md** | 老师指令(2026-09-02) | P1 | 已定稿 | 2026-09-02 | 10-UI主题适配 | **已实现(已归档)** |
|
||||
| R-013 | 策略自定义字段配置(定义随策略,值落库) | 策略可自定义、可扩展:每个策略在设置页「策略分组」子 tab 配置自定义字段(字段名/类型文本·数字·布尔·枚举/默认值,configSchema 随策略定义存 settings);每个持仓行按所属策略的定义存一份键值对值(strategy_holdings 新增 values TEXT(JSON) 列);策略持仓 tab 持仓行展开区按定义渲染/编辑值。**2026-09-02 定稿(Q1-Q4 + D6 确认)并进入计划 PLAN-012(迭代 11 实施中)**,详见 docs/05-需求池/R-013.md | 老师指令(2026-09-02) | P1 | 已定稿 | 2026-09-02 | 11-策略自定义字段配置 | 实施中(迭代 11) |
|
||||
| R-013 | 策略自定义字段配置(定义随策略,值落库) | 策略可自定义、可扩展:每个策略在设置页「策略分组」子 tab 配置自定义字段(字段名/类型文本·数字·布尔·枚举/枚举项/单位 unit/默认值,configSchema 随策略定义存 settings);每个持仓行按所属策略的定义存一份键值对值(strategy_holdings 新增 values TEXT(JSON) 列);自定义字段作为持仓表列展示,列显隐/排序每策略独立配置(strategyColumns),单元格点击内联编辑。**2026-09-02 定稿(Q1-Q4 + D6)并完成(迭代 11 验收通过),已归档至 已完成/R-013.md** | 老师指令(2026-09-02) | P1 | 已定稿 | 2026-09-02 | 11-策略自定义字段配置 | **已实现(已归档)** |
|
||||
|
||||
## 渐进明细规划素材
|
||||
|
||||
|
||||
Reference in New Issue
Block a user