Files
one_divine_lot/docs/05-需求池/已完成/R-003.md
T
2026-08-29 16:20:33 +08:00

59 lines
4.2 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.
# R-003 分仓管理工具完善与优化 · 已完成
> 归档日期:2026-08-28 需求状态:**已完成**
> 原索引:docs/05-需求池/需求池索引.md(主索引保留 R-003 条目,指向本归档)
> 讨论记录:docs/05-需求池/R-003.md(完整讨论过程保留于此)
## 需求摘要
对 R-002(分仓管理工具)进行完善与优化,本期范围 = **O2 + O3 + O5 + O6**
- **O2 策略 tab 动态化**:tab 由服务端策略配置驱动,增删改/显示开关实时同步(隐藏策略的 tab 不显示;策略变更提示手动刷新)
- **O3 设置界面完善(策略 CRUD)**:新增(自动英文 id)/ 重命名(不影响分配)/ 删除(弹窗确认 + 份额回未分配)/ 排序(上移下移)/ 显隐;预置策略可删(彻底自由)
- **O5 数据加载失败兜底**:加载失败提示(含原因)+ 重试按钮;自动重试 2 次;超时提示(**非数据源状态监控**)
- **O6 份额编辑体验**:单票「全部移入」(未分配全部进当前策略)+ 策略「一键清零」(弹窗确认)+ 操作 Toast 反馈
**实现期间追加(2026-08-28**:设置页 tab 化(通用设置 / 策略分组两个子 tab);通用设置三个 switch(全部持仓 / 交易记录 / 关注列表,控制会话 tab 显隐);策略显示开关改用 switch 控件。
## 核心逻辑(定稿版)
1. **策略 tab 动态化**:客户端启动时拉取策略配置,按 visible 策略动态注册 conversation.view tabsslots.register 返回 disposer,可注销重注册);全部持仓固定保留;
2. **策略 CRUD**:设置页「策略分组」子 tab 提供新增/重命名/删除/排序/显隐;删除弹窗确认 + 份额回未分配(产品约束-004);预置策略可删;
3. **加载失败兜底**LoadState 三态组件(loading/error+重试/success),自动重试 2 次(间隔 2s),超时(15s 可配置)提示;
4. **份额快捷操作**:单票全部移入(move-all-shares 端点)、策略一键清零(remove-all-shares 端点,弹窗确认);
5. **设置 tab 化**:通用设置(三个 switch 控制通用 tab 显隐)+ 策略分组;切换后提示「刷新页面后生效」。
## 实现记录
| 项 | 内容 |
|---|---|
| 实现迭代 | 02-分仓管理工具完善与优化 |
| 实现方式 | 沿用独立插件 one-divine-lot(服务端 + 客户端改造) |
| 服务端 | S1-S4settings.js(策略 CRUD + tabs 配置)、storage.js(清份额)、manager.js(全部移入/清零)、api.jsstrategies/add/remove/move + move-all-shares/remove-all-shares + tabs/tabs-update 端点) |
| 客户端 | S5-S8LoadState/Toast 基础组件、SettingsSection 设置 tab 化 + CRUD、client/index.js 动态 tab 注册、StrategyTab 快捷操作 |
| 构建安装 | S9pnpm build + 宿主动态加载(无需重启即更新客户端 bundle) |
## 验收结果(2026-08-28 老师确认)
- ✅ 策略隐藏/显示(switch 控件)验证 OK
- ✅ 新增策略正常,tab 增加正常
- ✅ 删除策略正常,tab 消失正常
- ✅ 策略排序调整正常(getStrategies 按 order 排序修复后)
- ✅ 全部持仓/策略 tab 表格正常显示(React 空值崩溃修复后)
- ✅ 三个通用 tab(全部持仓/交易记录/关注列表)+ 策略 tabs 按配置注册
- ✅ 设置页两个子 tab(通用设置/策略分组)
- ✅ 服务端 API 全链路验证通过(tabs、strategies CRUD、快捷操作)
## 经验沉淀
- **React JSX 空值崩溃**LoadState 的 children 立即求值,positions 为 null 时崩溃被 slot 边界静默吞掉 → 必须空值保护((positions ?? []).map
- **useRpc 引用稳定性**:每次渲染返回新函数导致 effect 无限循环 → useCallback 稳定化
- **getStrategies 排序一致性**:设置页/tab 栏/move 逻辑必须共用同一 order 排序,否则顺序不一致
- **服务端 API 需重启生效**:客户端 bundle 宿主动态读取,但服务端模块(api.js 等)需重启 DSH 才加载新代码
## 关联文档
- 讨论记录(完整):docs/05-需求池/R-003.md
- 迭代记录:docs/04-迭代记录/02-分仓管理工具完善与优化/
- 设计约束:产品约束-004(删除策略份额回未分配)