迭代19-21收尾: 指示灯自适应探测(R-022/R-023)+ 列设置拖拽排序(R-024)+ Tab设置间隙线统一(R-025)+ 需求池归档(R-014/15/16/17/19 → 已完成)
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
# 需求:R-014 持仓内存快照(服务端 10s 定时同步,请求不再穿透 QMT)
|
||||
|
||||
> 登记:2026-09-02 | 来源:架构梳理讨论 + 老师指令 | 状态:**已定稿(老师逐项拍板 4 问)**
|
||||
> 归属:迭代 12 | 计划:PLAN-013
|
||||
|
||||
|
||||
> **归档头(2026-09-08)** | 需求状态:已完成 | 归档日期:2026-09-08 | 实现迭代:12-持仓内存快照(持仓内存快照)
|
||||
> 讨论记录索引:R-014.md 正文;实现细节见 04-迭代记录/12-持仓内存快照/
|
||||
> 归档路径:05-需求池/已完成/R-014.md
|
||||
> 迭代状态标记:已实现(迭代 12,回归 34/34 + typecheck + build 通过)→ 已归档(2026-09-08 老师归档指令确认验收)
|
||||
|
||||
## 需求描述
|
||||
|
||||
原实盘持仓数据在**每次请求时穿透 QMT**(`PositionManager.getAllPositions()` 实时拉 `/trade/positions`),带来两个问题:
|
||||
|
||||
1. **QMT 一抖(超时/掉线),策略持仓 / 全部持仓 / 未分配三个页面当场空白**——因为拼装以 QMT 返回行为驱动表,QMT 返回空则整页无行;
|
||||
2. **每次进 tab 都打一次 QMT HTTP**,且部分实盘字段(volume/available/frozenVolume/price/marketValue/profit/profitPct 七个)该页面根本不消费,属搭车字段。
|
||||
|
||||
老师拍板优化:**服务端建缓存(内存快照),以快照为准,每 10 秒与 QMT 同步一次;策略持仓等接口相信快照,去掉请求时穿透 QMT 的逻辑。**
|
||||
|
||||
## 讨论记录(2026-09-02,三问拍板)
|
||||
|
||||
| # | 问题 | 结论(老师拍板) |
|
||||
|---|---|---|
|
||||
| 1 | 落库还是内存?(AI 初版方案建 SQLite 缓存表,老师质疑) | **纯内存管理,不落库**。理由(老师追问后 AI 论证修正):持仓快照随时可用一次调用重拿全,不满足落库任一正当条件(不可再生历史 / 重启首屏依赖);落库反引入「过期快照冒充实时的说谎风险」;不复用 strategy_holdings(账本 ≠ 对账单,holding_id 是交易归属锚点,不可掺易变快照) |
|
||||
| 2 | 首启缓存未预热 / QMT 从未连上时,前端请求怎么办? | **读穿透兜底**:缓存为空当场拉一次 QMT 并回填;QMT 也挂才报错(前端既有 LoadState 重试 UI 兜住) |
|
||||
| 3 | QMT 里卖光的票,本地持仓记录(幽灵条目)怎么办? | **同步时自动清仓**:QMT 快照连续 3 轮(约 30s)消失的 code,本地全部策略当前持仓自动转历史(不物理删除);加防抖护栏(账户身份守卫)防误清 |
|
||||
| 4 | 前端要不要显示同步时间(数据最多滞后 10s)? | **本轮不加**,前端零改动;10s 级滞后对持仓场景够用 |
|
||||
|
||||
## 边界
|
||||
|
||||
**做**:内存快照同步服务(PositionSync)、getAllPositions 改读快照 + 读穿透兜底、空快照双重确认、幽灵持仓自动清仓(防抖 + 账户守卫)、回归脚本。
|
||||
|
||||
**不做**:不落库(无新表、无 schema 变更);不同步时间前端显示;部分减持(QMT 仍有但变少 → 负数未分配)的自动修正(维持 UI 暴露现状,后续可另立需求);策略份额账本(strategy_holdings)的任何改动。
|
||||
|
||||
## 验收
|
||||
|
||||
见 `docs/04-迭代记录/12-持仓内存快照/验收标准.md`。
|
||||
@@ -0,0 +1,34 @@
|
||||
# 需求:R-015 盘口数据内存化(QuoteSync/QuoteHub 统一管理)+ 数据同步指示灯
|
||||
|
||||
> 登记:2026-09-02 | 来源:架构演进讨论(老师逐项拍板)| 状态:**已定稿**
|
||||
> 归属:迭代 13 | 计划:PLAN-014
|
||||
|
||||
|
||||
> **归档头(2026-09-08)** | 需求状态:已完成 | 归档日期:2026-09-08 | 实现迭代:13-盘口内存快照(盘口数据内存化+指示灯)
|
||||
> 讨论记录索引:R-015.md 正文;实现细节见 04-迭代记录/13-盘口内存快照/
|
||||
> 归档路径:05-需求池/已完成/R-015.md
|
||||
> 迭代状态标记:已实现(迭代 13,test-quote-sync 全绿 + 存量回归通过)→ 已归档(2026-09-08 老师归档指令确认验收)
|
||||
|
||||
## 需求描述
|
||||
|
||||
持仓数据已完成「内存快照统一管理」(R-014/迭代 12)。本轮把**盘口(市场行情)数据**收敛为同一模式:
|
||||
|
||||
1. **QuoteSync + QuoteHub 工具类**(替换 MarketFeed/MarketDataHub,方案 A 替换不包壳):
|
||||
- QuoteSync 管取数:启动 prime(持仓盘口)+ 5s REST 定时刷新(watch 集合);
|
||||
- QuoteHub 管存查:内存快照 + watch 集合 + 读穿透兜底 + 对外 getQuote(s);
|
||||
2. **纯内存,market_quotes_cache 表退役**(老师拍板 DROP):行情随时可重取、warmup bug 证明落库从未生效、重启 prime 1 秒内有价——三问全否不落库;价格单一入口 = QuoteHub;
|
||||
3. **WS 通路去掉**(老师拍板):从无生效结论(market-stats 诊断无结论文档)、全市场推送被 watch 过滤成本高、REST 5s 已覆盖;ingest 入口来源无关留再接入口子;
|
||||
4. **字段扩展**:新增涨停价/跌停价(来源 /data/instrument,按交易日内存缓存,不落库);昨收 tick 自带;getInstrument 首次投入使用;
|
||||
5. **数据同步指示灯**(老师提出):会话头部 QMT 健康灯旁加「持仓/盘口」两个同步状态圆点——绿(正常)/黄(同步失败中、快照陈旧)/灰(从未同步),悬停详情(同步时间/快照量/错误),**点击 = 立即触发该域 syncNow**;新增 sync-status 端点(吸收临时诊断 market-stats);
|
||||
6. **策略持仓表行情列扩展**(老师确认并入):列设置新增 涨停价/跌停价/今开/最高 4 个基础列(纯价格展示,默认隐藏,列设置勾选开启);最低/成交量/成交额暂不加(单位口径另议);距涨停百分比类衍生展示另立需求;
|
||||
6. **同步失败保留上次价**(AI 定,与持仓对称);**前端不加价龄灰点**(老师采纳预判:管道健康由全局灯表达,个股停牌属数据语义另议)。
|
||||
|
||||
## 边界
|
||||
|
||||
**做**:上述 1-6;watchCodes 维持现状(只进不出、无上限——去掉 WS 后膨胀仅轻微浪费,收缩不值成本)。
|
||||
|
||||
**不做**:不落库任何行情字段(涨停跌停也不落);不做 watch 收缩/降频;不做个股停牌标识;WS 不删除需求草稿(T-005 维持起草);PriceCell 不改动;最低/成交量/成交额列不做;距离涨停百分比衍生展示不做。
|
||||
|
||||
## 验收
|
||||
|
||||
见 `docs/04-迭代记录/13-盘口内存快照/验收标准.md`。
|
||||
@@ -0,0 +1,69 @@
|
||||
# 需求:R-016 策略 tab 历史持仓展示(显示/隐藏已清仓持仓 + 清仓时间范围筛选)
|
||||
|
||||
> 登记:2026-09-07 | 来源:老师指令(优化功能需求讨论)| 状态:**已定稿(2026-09-07,Q1-Q7 老师拍板)**
|
||||
> 归属:迭代 14 | 计划:PLAN-015 | 实现状态:**已实现(2026-09-07,待老师人工验收)**
|
||||
|
||||
|
||||
> **归档头(2026-09-08)** | 需求状态:已完成 | 归档日期:2026-09-08 | 实现迭代:14-策略tab历史持仓展示(策略 tab 历史持仓展示)
|
||||
> 讨论记录索引:R-016.md 正文;实现细节见 04-迭代记录/14-策略tab历史持仓展示/
|
||||
> 归档路径:05-需求池/已完成/R-016.md
|
||||
> 迭代状态标记:已实现(迭代 14)→ 已归档(2026-09-08 老师归档指令确认验收)
|
||||
|
||||
## 需求描述(老师原始诉求)
|
||||
|
||||
**两个策略 tab**(做T / 网格超市)**title 旁边**添加以下功能:
|
||||
|
||||
1. **显示/隐藏已清仓的历史持仓**(开关);
|
||||
2. 显示历史持仓时,**默认显示近一周清仓的持仓**,同时提供 **近 1 个月 / 近 3 个月 / 近半年 / 近 1 年** 几个范围选项。
|
||||
|
||||
## 背景
|
||||
|
||||
- 策略持仓行 = QMT 快照驱动(R-014),卖出清仓后 QMT 无该持仓 → 幽灵清仓把 strategy_holdings 行转历史(closed_at 非空)→ 策略 tab 当场少一行;
|
||||
- 典型场景(2026-09-07 实际发生):早盘卖出大连热电 1000 股(做T),约 70 秒后该持仓行从做T tab 消失——当日交易记录还在(R-009 已入库、归属 holding_id=15 正确),但 tab 上锚点不可见;
|
||||
- 历史数据一直在库(strategy_holdings 全量保留),只是**没有展示入口**;
|
||||
- R-010 持仓行展开(关联委托汇总)以 holding_id 为锚,历史持仓行天然可复用——历史行展开 = 该轮做T/清仓的完整交易复盘(**本需求的核心目标:追溯该持仓相关的历史操作**,老师 2026-09-07 定调)。
|
||||
|
||||
## 讨论记录(2026-09-07,Q1-Q7 老师拍板)
|
||||
|
||||
| # | 问题 | 结论(老师拍板) |
|
||||
|---|---|---|
|
||||
| Q1 | 历史行展示哪些字段? | **按建议**:代码 / 名称(取该 holding 最近关联委托的 name 兜底,无则 —)/ 清仓时间 / 持有天数;实时行情列(现价/涨幅/涨停等)历史行显示 **—**(不参与行情订阅);行展开沿用 R-010 看关联委托;成本价从委托推导本期不做 |
|
||||
| Q2 | 清仓时份额怎么显示?(closeHolding 现把 shares 置 0) | **显示 0 就好了**(老师改判,否决 AI 的「保留 shares」方案):即使显示清仓时的份额也没多少意义,主要目标是追溯该持仓相关的历史操作;**不改 closeHolding 语义**,历史行份额直接显示 DB 原值(0) |
|
||||
| Q3 | 排序与视觉区分? | **按建议**:当前持仓在前(维持现状排序),历史行追加在后按清仓时间降序;历史行灰显 + 「已清仓」徽标(含清仓日期);标题计数(N 只)只数当前持仓 |
|
||||
| Q4 | 开关与范围选择要不要记住偏好? | **按建议**:会话级即可(默认关,进 tab 重置为「只看当前」)——查看历史是临时行为,「策略 tab = 当前持仓」是主语义 |
|
||||
| Q5 | 范围选项集合? | **按建议**:近一周(默认)/ 近 1 个月 / 近 3 个月 / 近半年 / 近 1 年,共 5 档;语义 = closed_at ∈ [now − 范围, now];不加「全部历史」 |
|
||||
| Q6 | 自定义字段值(R-013 values)在历史行怎么处理? | **按建议**:values 数据随行保留,历史行**只读展示**(无编辑入口;服务端本就拒绝已清仓行写入) |
|
||||
| Q7 | 接口形态? | **按建议**:新增独立只读端点(strategy-holdings/history,args: strategyId + range),当前持仓路径(strategy-positions / R-014 快照语义)零改动;前端两份结果合并渲染 |
|
||||
|
||||
## 边界(定稿)
|
||||
|
||||
**做**:两个策略 tab 的历史持仓开关 + 范围筛选(title 旁按钮区);历史行展示(Q1 字段集 + Q2 份额显示 0)+ 行展开复用 R-010;配套后端历史查询端点(SqliteStore 范围查询 + DataStore 门面 + API)。
|
||||
|
||||
**不做**:全部持仓 tab 不加此功能(老师点名两个策略 tab);历史行盈亏统计(R-002 Q4 不做统计原则);清仓方式标记(手动清仓 vs 幽灵自动清仓,数据未区分);历史行实时行情;成本价/收益推导;**不改 closeHolding 存储语义**(shares 置 0 维持,Q2);范围记忆/偏好持久化(Q4 会话级);「全部历史」档位。
|
||||
|
||||
## 关联观察(上一轮会话遗留,不在本需求范围)
|
||||
|
||||
- 交易记录 tab 的归属候选(orders/attribution-candidates)只回**当前持仓**——清仓后当日委托无法再通过下拉关联到对应 holding(2026-09-07 大连热电实际遇到);是否立独立需求(如候选纳入近期清仓持仓)待老师定。
|
||||
|
||||
## 二轮补充(2026-09-07,Q8-Q9 老师拍板:今日已清仓默认层)
|
||||
|
||||
> 追加定稿记录(不改写 Q1-Q7 首轮定稿;本轮在首轮验收前补充,老师 2026-09-07 人工验收前的诉求收窄「历史持仓关 = 当天已清仓也看不见」的体验缺口)。
|
||||
|
||||
**老师原始补充诉求**:两个策略 tab 显示历史持仓的交互需要小的逻辑调整——**当前已清仓的持仓默认也显示**;「历史持仓」开关**不控制当天已清仓的持仓**(历史持仓关 ≠ 当天已清仓也被藏起)。
|
||||
|
||||
| # | 问题 | 结论(老师拍板 2026-09-07) |
|
||||
|---|---|---|
|
||||
| Q8 | 「当天」的边界口径? | **本地自然日 00:00 起**(今天清仓的始终显示;跨零点后自动归入更早历史,由「历史持仓」开关控制) |
|
||||
| Q9 | 今日已清仓行的视觉与计数? | **沿用历史行灰显 + 「已清仓」徽标**;标题计数(N 只)仍只算当前持仓,不含已清仓行 |
|
||||
|
||||
**定稿语义(相对首轮 Q4「默认关 = 只看当前」的修订)**:
|
||||
- 已清仓行分两层:**L1 今日已清仓**(range='today',closed_at ≥ 本地自然日 00:00)**默认恒显示**,进 tab 即出现、随持仓重载刷新;**L2 历史范围层**(week/month/quarter/halfYear/year,仅今天之前)仍由「历史持仓」开关控制(默认关);
|
||||
- 交互文案同步收窄:「历史持仓」开关 = 显示/隐藏**今天之前**已清仓的历史持仓(title/提示更新);当天清仓的持仓始终显示;
|
||||
- 展示(灰显/徽标/行情列 —/份额 0/只读字段/行展开)与计数(不含已清仓行)维持 Q1/Q2/Q3/Q6 不变,两层视觉无差异;
|
||||
- 实现:range='today' 特判本地自然日零点(不走回溯毫秒档);前端 rowsToRender 在开关关时也追加 L1(按 holdingId 去重 L1∩L2,开启历史范围不重复出两行);零写路径变更维持。
|
||||
|
||||
**边界修订**:Q5 档位集语义微调为「**今天之前的**回溯范围」;「开关默认关 = 只看当前」修订为「开关默认关 = 当前持仓 + 今日已清仓」;其余边界(不做全部持仓 tab / 不做统计 / 不改 closeHolding / 会话级不持久化等)不变。
|
||||
|
||||
## 验收
|
||||
|
||||
见 `docs/04-迭代记录/14-策略tab历史持仓展示/验收标准.md`。
|
||||
@@ -0,0 +1,36 @@
|
||||
# 需求:R-017 委托归属候选纳入近期清仓持仓
|
||||
|
||||
> 登记:2026-09-07 | 来源:老师指令(2026-09-07「处理一下,今天大连热电的交易记录,我没办法关联到手动做T持仓的大连热电上」)| 状态:**已定稿**
|
||||
> 归属:迭代 15 | 计划:PLAN-016 | 实现状态:**已实现(2026-09-07,待老师人工验收)**
|
||||
> 前置:R-016「关联观察」所列问题的正式立项(清仓后当日委托无法通过下拉关联到对应 holding,2026-09-07 大连热电实际发生——盘中手动归属后又被清为未关联,下拉已无手动做T候选)。
|
||||
|
||||
|
||||
> **归档头(2026-09-08)** | 需求状态:已完成 | 归档日期:2026-09-08 | 实现迭代:15-归属候选纳入清仓持仓(归属候选纳入近期清仓持仓)
|
||||
> 讨论记录索引:R-017.md 正文;实现细节见 04-迭代记录/15-归属候选纳入清仓持仓/
|
||||
> 归档路径:05-需求池/已完成/R-017.md
|
||||
> 迭代状态标记:已实现(迭代 15)后被 R-018 语义取代退役 → 已归档(2026-09-08)
|
||||
|
||||
## 需求描述
|
||||
|
||||
交易记录 tab 的归属候选(orders/attribution-candidates)只回**当前持仓**——清仓后(幽灵清仓最快约 30s 转历史)当日委托在下拉中失去对应策略/持仓锚点,无法补关联。本轮:**候选 = 该 code 的当前持仓 + 近 7 天清仓的持仓**,清仓行带标记供 UI 区分展示。
|
||||
|
||||
## 讨论记录(2026-09-07)
|
||||
|
||||
| # | 决策点 | 结论 |
|
||||
|---|---|---|
|
||||
| 1 | 立项与方向 | 老师指令确认(对 R-016 关联观察修复方案的采纳) |
|
||||
| 2 | 候选窗口 | 近 7 天清仓(与 R-016 默认范围一致,AI 定;覆盖「当日做T当日盘后补关联」场景足够) |
|
||||
| 3 | 锚点键 | 下拉 value 改用 **holdingId**(同策略可有多轮持仓行,strategyId 会撞值;holding_id 本就是归属锚点,R-009 定稿语义) |
|
||||
| 4 | 标记展示 | 清仓候选在选项文本加「(已清仓 MM-DD)」后缀;已归属但候选列表缺失的委托显示「当前归属」占位选项(避免 select 空白) |
|
||||
| 5 | 排序 | 当前持仓在前,清仓行按 closed_at DESC 追加 |
|
||||
| 6 | 归属写入 | 不变:orders/set-attribution 无候选限制(本次数据修复即经此通道完成) |
|
||||
|
||||
## 边界
|
||||
|
||||
**做**:getAttributionCandidates 纳入近 7 天清仓行(附 closed/closedAt);AttributionSelect 改 holdingId 键控 + 已清仓后缀 + 当前归属占位;回归脚本。
|
||||
|
||||
**不做**:候选窗口可配置;自动归属(Q3 手动原则不变);交易记录 tab 之外的候选消费方调整;历史数据修复工具(本次一次性修复经 set-attribution 完成,不固化成功能)。
|
||||
|
||||
## 验收
|
||||
|
||||
见 `docs/04-迭代记录/15-归属候选纳入清仓持仓/验收标准.md`。
|
||||
@@ -0,0 +1,79 @@
|
||||
# 需求:R-019 策略会话(会话以策略当前数据为依据做讨论)· 已定稿
|
||||
|
||||
> 登记:2026-09-08 | 来源:老师指令(新需求)| 状态:**已定稿(2026-09-08,F1/F2 老师确认)**
|
||||
> 归属:迭代 17(待立项)| 计划:待出(PLAN-017)| 实现状态:未开始
|
||||
|
||||
|
||||
> **归档头(2026-09-08)** | 需求状态:已完成(并入合并需求)| 归档日期:2026-09-08
|
||||
> 合并承接:**R-021(策略会话复盘)**——老师 2026-09-08 指令将 R-019 与 R-021 合并、逻辑整合入 R-021;本文件为 R-019 线讨论史存档(Q1-Q4/R2-Q1..Q4/R3/F1-F2)
|
||||
> 归档路径:05-需求池/已完成/R-019.md
|
||||
|
||||
## 需求描述(老师原始诉求,原话)
|
||||
|
||||
> **新需求,让 AI 会话可以以策略为 Workspace。**
|
||||
> 三轮讨论后收敛为:**让 AI 会话以某个策略的当前数据为讨论依据**(复盘 / 分析),改造现有对话窗口,会话开始前确认用哪个策略。
|
||||
|
||||
## 讨论记录(2026-09-08)
|
||||
|
||||
### 第一轮(Q1-Q4,老师拍板)——语义收敛
|
||||
|
||||
| # | 问题 | 结论 |
|
||||
|---|---|---|
|
||||
| Q1 | 需求对象与形态 | 改造现有 DSH 对话窗口:会话以某个策略的持仓、交易记录为依据做复盘/分析 |
|
||||
| Q2 | 「以策略为 Workspace」含义 | **不是物理工作目录/文件为主要依据**;是让策略数据作为会话的聊天依据 |
|
||||
| Q3 | 入口与触发 | 在现有会话窗口(非独立新页面) |
|
||||
| Q4 | 会话内能力边界 | **A 只读**:读该策略业务数据,不开放账本写 |
|
||||
|
||||
### 第二轮(R2-Q1..Q4,老师拍板)——机制与范围
|
||||
|
||||
| # | 问题 | 结论 |
|
||||
|---|---|---|
|
||||
| R2-Q1 | 聊天依据如何生效 | **A 预注入**:选定策略即开始聊,把该策略数据依据注入会话上下文(不挂按需取数工具) |
|
||||
| R2-Q2 | 选择粒度 | C 单选策略/通用视图混选——后被 R3 收敛(本期仅策略) |
|
||||
| R2-Q3 | 时间覆盖 | **A**:当前持仓 + 该策略全部历史交易(含已清仓) |
|
||||
| R2-Q4 | 复盘产物 | **暂不落盘**(留会话历史);保存沉淀属 T-002/未来复盘管理 |
|
||||
|
||||
### 第三轮(R3,老师定调)——不用 DSH 原生工作区
|
||||
|
||||
**老师原话(2026-09-08)**:目前不需要 dsh web 原本定义的工作区。会话的数据 = ① 会话注入的数据 + ② 会话过程中产生的数据;以后神之一手会加「复盘管理」,可能用数据库存沉淀;**目前会话只是以策略当前数据来做会话讨论**。
|
||||
|
||||
- 不做 DSH 宿主工作区(不注册目录 / 不动工作区分组与侧栏);
|
||||
- 「会话开始前选策略」= 仿工作区"先选再开始"的体验,但只做会话级策略依据选择;
|
||||
- 会话过程中产生的数据 = 会话历史本身;复盘管理(可能带 DB)为未来模块,本期不做。
|
||||
|
||||
### 第四轮(F1-F2,2026-09-08 老师确认)——定稿收口
|
||||
|
||||
| # | 问题 | 结论(老师拍板) |
|
||||
|---|---|---|
|
||||
| F1 | 入口形态(无宿主工作区下"会话开始前选策略") | **采纳 AI 建议**:对话视图首条消息前显示「讨论策略」选择区(仿 DSH workspace chip Choose 体验:显示「依据:做T ▾」),选策略即注入数据摘要开始聊;会话中可点 chip 换策略 / 点「刷新」注入最新数据 |
|
||||
| F2 | 「策略当前数据」口径 | **采纳 AI 建议(R2-Q3=A 维持)**:注入 = 当前持仓明细 + 该策略全历史关联交易**聚合摘要**(按持仓/时间汇总买卖与结果,含已清仓;明细过长不进注入) |
|
||||
|
||||
## 定稿语义
|
||||
|
||||
- **对象**:现有 DSH 对话窗口(挂神之一手 tab 的会话),对话视图首条消息前出现「讨论策略」选择;
|
||||
- **机制**:选策略 → 服务端取该策略当前数据 → 预注入会话上下文(摘要形态,含快照时间)→ 开始聊;换策略 / 点刷新 = 再次注入该策略最新摘要(模型以最近一次注入为依据);
|
||||
- **数据范围**:当前持仓明细 + 全历史关联交易聚合摘要(含已清仓),只读;
|
||||
- **能力**:会话内 AI 只读(无账本写 / 交易执行入口);产物不落盘。
|
||||
|
||||
## 定稿边界
|
||||
|
||||
**做**:对话开始前的策略选择 UI(F1 形态);策略当前数据摘要的生成与注入;会话中换策略/刷新的再注入。
|
||||
|
||||
**不做**:DSH 宿主工作区/目录(R3 明确不需要);账本写与交易执行(Q4=A);按需取数工具(R2-Q1=A);复盘产物落盘与复盘管理/DB(R2-Q4,未来 T-002/复盘管理另立);通用数据视图(全部持仓/交易记录)作为依据(R2-Q2 收敛,本期仅策略)。
|
||||
|
||||
## 计划阶段待办(定稿后第一件事:技术可行性调研)
|
||||
|
||||
1. **宿主注入通道调研**:DSH 会话如何把外部数据作为上下文注入给模型(injected-context 节点 / 会话 send / 其他公开通道),确认可行通道与形态(决定"摘要以消息形态进会话"还是"上下文节点形态");
|
||||
2. 入口 UI 落点核实:对话视图首条消息前的输入区 accessory / workspace chip 同构位置可由插件挂载的 slot(及 composer 可见性管理,与现有"神之一手 tab 隐藏 composer" CSS 的交互);
|
||||
3. settings 是否需记录策略-会话选择偏好(会话级,不持久化 or 持久化待定);
|
||||
4. 数据摘要服务:服务端生成"策略当前数据摘要"的组成与规模边界(当前持仓字段集 / 交易聚合规则 / 上限裁剪)。
|
||||
|
||||
## 关联
|
||||
|
||||
- 终极目标:目标-002(策略)/ 目标-006(交易复盘)/ 目标-007(人机合一·只读);目标-001(复用宿主会话能力)
|
||||
- 需求池:T-002 复盘记录工具(起草)——复盘管理/落库的未来归属
|
||||
- 设计约束影响(计划阶段核对):技术约束-009(会话头部 slot 机制参照)/ 技术约束-014、产品约束-009(会话结构语义)、UI约束-001(chip 形态参照);如需新约束条目于计划阶段补充
|
||||
|
||||
## 验收
|
||||
|
||||
**(计划/迭代立项后写入迭代验收标准.md)**
|
||||
@@ -0,0 +1,46 @@
|
||||
# 需求:R-024 策略 tab 列设置改为拖拽排序 · 已完成
|
||||
|
||||
> 归档日期:2026-09-10 | 需求状态:已完成 | 实现迭代:[迭代 20-策略列设置拖拽排序](../04-迭代记录/20-策略列设置拖拽排序/迭代复盘.md)
|
||||
> 讨论记录索引:本文档(定稿 + 变更记录);登记:2026-09-10 | 来源:老师反馈(策略 tab 列设计细节优化)
|
||||
> 实现状态:**已实现(迭代 20 验收通过,2026-09-10 老师页面确认)**
|
||||
|
||||
## 诉求(老师,2026-09-10)
|
||||
|
||||
> 细节优化,策略 tab 下的列设计,可否做成鼠标选中后、**拖动排序**的形式?
|
||||
|
||||
## 现状
|
||||
|
||||
策略 tab「列设置」弹层(ColumnSettingsPopover,R-013 迭代 11 实现)管理可配置列(基础数据列 + 自定义字段列):
|
||||
- 显隐:复选框勾选;
|
||||
- 排序:**↑↓ 箭头按钮**(连续点按移动),保存按钮提交整份列配置(one-divine-lot/strategy-columns/update);
|
||||
- 代码注释原话:「同 Tab 设置简化版:用箭头替代 DnD,零依赖稳妥」——当时刻意简化。
|
||||
|
||||
## 定稿结论(2026-09-10 老师确认方案 A)
|
||||
|
||||
**方案 A:列设置弹层内拖拽排序(原生 HTML5 DnD,复用 R-011 Tab 设置已验证模式)**
|
||||
|
||||
- 弹层每行加 **≡ 拖拽手柄**(整行 draggable),按住拖动到目标行松手即重排;落点行高亮提示,视觉沿
|
||||
Tab 设置(UI约束-003)同一套:color-mix(primary 12%) 淡底。
|
||||
- **落点立即持久化**(对齐 Tab 设置体验):每次 drop 调一次 one-divine-lot/strategy-columns/update
|
||||
整表提交(含不可见列保位置);点按手势(勾选显隐 / ↑↓ 微调)同步立即持久化 → **弹层去掉「保存」按钮,
|
||||
只留「关闭」**,Toast 反馈保存结果。
|
||||
- **↑↓ 箭头保留作兜底**(精准微调场景,与拖拽并存)。
|
||||
- 固定列(代码/名称/操作/展开箭头)不参与排序,恒显示(维持现状)。
|
||||
- 边界:不改服务端 API(strategy-columns/update 已是整表覆盖语义,天然兼容);核心改动在
|
||||
ColumnSettingsPopover.jsx 单文件;显隐勾选交互不变。
|
||||
|
||||
## 决策记录
|
||||
|
||||
| 项 | 结论 | 讨论 |
|
||||
|---|---|---|
|
||||
| 拖拽范围 | 方案 A:弹层内拖拽(≡ 手柄) | 老师 2026-09-10 确认;方案 C(表头直拖)改动大、需兼容百分比排序点击,暂不做 |
|
||||
| 持久化时机 | 落点立即持久化(每次变更即写库) | 对齐 Tab 设置(UI约束-003)体验;strategy-columns/update 为整表覆盖语义,天然支持 |
|
||||
| ↑↓ 箭头 | 保留作兜底 | 与拖拽并存,兼顾精准微调;不增加额外依赖 |
|
||||
| 保存按钮 | 移除(改「关闭」) | 所有变更即时持久化后按钮失去意义,避免「忘了点保存」 |
|
||||
| 服务端 | 零改动 | strategy-columns/update 已是整表覆盖 |
|
||||
|
||||
## 变更记录(追加式)
|
||||
|
||||
| 日期 | 变更 | 原因 |
|
||||
|---|---|---|
|
||||
| 2026-09-10 | 拖拽落点提示从**整行高亮**改为**行间(两列之间)间隙高亮线**,指示精确插入位置(前/后) | 老师反馈:整行高亮只能看出落在哪一行,无法判断会插入目标列的前面还是后面;间隙高亮是主流列表拖拽交互(Tab 设置的整行高亮是否同样调整待老师评估,见 UI约束-007) |
|
||||
Reference in New Issue
Block a user