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

4.2 KiB
Raw Blame History

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(删除策略份额回未分配)