f1e7e785a1
迭代09 (R-011 Tab 设置统一管理): - 需求 R-011 (定稿 Q1-Q5) + 需求池索引 - 计划 PLAN-010 + 迭代09 四件套 (目标/技术方案/验收/复盘) - 约束: 产品约束-009 / UI约束-003 / 技术约束-014 - UI约束-002 修订: 通用设置→Tab 设置 迭代10 (R-012 UI 适配 DSH 主题): - 需求 R-012 (定稿: 暂定跟随系统) + 需求池索引 - 计划 PLAN-011 + 迭代10 四件套 - 约束: UI约束-004 (主题适配约定)
47 lines
4.1 KiB
Markdown
47 lines
4.1 KiB
Markdown
# R-012 UI 适配 DSH 主题(浅色 / 深色 / 跟随系统)
|
||
|
||
> 状态:**已定稿(暂定:跟随系统,语义色映射可再调)**(2026-09-02,老师确认方向「暂定跟随系统」)| 登记日期:2026-09-02
|
||
> 来源:老师指令(2026-09-02)
|
||
> 优先级:P1(UI 体验)
|
||
|
||
## 需求描述
|
||
|
||
神之一手插件 UI 适配 DSH 的浅色 / 深色 / 跟随系统主题:将客户端全部硬编码颜色替换为宿主主题 token(`--dsw-*` CSS 变量),插件各页面随 DSH 主题切换自动适配,不自行维护主题偏好(跟随宿主)。
|
||
|
||
## 现状(代码审查 2026-09-02)
|
||
|
||
- 客户端 10 个文件共 **141 处硬编码颜色**:SettingsSection.jsx 55 / StrategyTab.jsx 24 / TradeRecordsTab.jsx 21 / QmtConnectionChip.jsx 13 / RangeSelector.jsx 7 / PriceCell.jsx 5 / AllPositionsTab.jsx 4 / LoadState.jsx 3 / Toast.jsx 2 / PlaceholderTab.jsx 1;
|
||
- 宿主机制(已查明):深色主题时宿主挂 `body[data-ds-dark-theme]`,并注入 `--dsw-*` token(`--dsw-alias-bg-base/layer-1/layer-2`、`label-primary/secondary/tertiary/caption`、`border-l1..l4`、`state-success/error/business-primary`、`brand-primary`、`button-primary-fill/hover`、`button-contrast-fill`、`interactive-bg-hover/active`、`bg-mask-1`、`tooltip-bg` 等),随 light/dark/system 自动切换;
|
||
- 先例:QmtConnectionChip 部分样式已引用 `var(--dsw-alias-label-secondary, #666)`,token 可用。
|
||
|
||
## 决策(2026-09-02 老师确认:暂定跟随系统)
|
||
|
||
- **D1** 主题偏好跟随宿主(light/dark/system),插件不自行监听/维护;
|
||
- **D2** 全部颜色映射到宿主 `--dsw-*` token(语义映射表见下);涨跌色 A 股红涨绿跌 → 宿主语义:涨=红=`state-error-primary`、跌=绿=`state-success-primary`(宿主在深浅主题下保证可读);
|
||
- **D3** 实心主按钮 / 徽标 / 提示底色等语义色(success/error/business)跟随宿主对应 token;淡色底用 `color-mix(in srgb, <primary> 10%, transparent)` 跟随主题;
|
||
- **D4** 仅做色值 token 化(最小改动),不动布局 / 间距 / 圆角;
|
||
- **D5** 若宿主 token 观感不满意,后续可加插件级 `--odl-*` 覆盖变量(本迭代不做,暂定)。
|
||
|
||
## 语义映射表(实施基准)
|
||
|
||
| 原色 | 语义 | 替换 |
|
||
|---|---|---|
|
||
| #fff(表面底) | 表格/卡片/弹窗/输入框/菜单/按钮白底 | var(--dsw-alias-bg-layer-1) |
|
||
| rgba(0,0,0,.4)(遮罩) | 弹窗遮罩 | var(--dsw-alias-bg-mask-1) |
|
||
| #f5f5f5(hover/静态行底) | 次级面/hover | var(--dsw-alias-interactive-bg-hover) 或 bg-layer-2(静态) |
|
||
| #e8f5e9/#f1f8f2(激活浅绿底) | 选中/激活 | color-mix(in srgb, var(--dsw-alias-state-success-primary) 10%, transparent) |
|
||
| #fdecea(错误浅红底) | 错误提示底 | color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, transparent) |
|
||
| #e3f2fd(信息浅蓝底) | 信息提示底 | color-mix(in srgb, var(--dsw-alias-state-business-primary) 10%, transparent) |
|
||
| #333/#222 | 主文字 | var(--dsw-alias-label-primary) |
|
||
| #555/#666 | 次文字 | var(--dsw-alias-label-secondary) |
|
||
| #888/#999/#aaa | 弱文字/caption | var(--dsw-alias-label-tertiary) |
|
||
| #1565c0(蓝字) | 业务/信息字 | var(--dsw-alias-state-business-primary) |
|
||
| #eee(细线) | 行分隔/表头细线 | var(--dsw-alias-border-l1) |
|
||
| #ddd/#ccc(描边/强调) | 控件描边/分隔 | var(--dsw-alias-border-l2) |
|
||
| #90caf9/#ce93d8(徽标淡描边) | 徽标描边 | var(--dsw-alias-border-l3)(描边中性化,文字保留语义色) |
|
||
| #d32f2f/#c62828(红字/实心红) | 涨/错误/删除/危险 | var(--dsw-alias-state-error-primary);实心底同上,文字 var(--dsw-alias-button-contrast-fill) |
|
||
| #2e7d32(绿字/实心绿) | 跌/成功/激活/主按钮 | var(--dsw-alias-state-success-primary);实心底同上,文字 var(--dsw-alias-button-contrast-fill) |
|
||
| #fff(实心按钮上文字) | 按钮文字 | var(--dsw-alias-button-contrast-fill) |
|
||
|
||
> 实施细则:仅 inline style / 变量赋值中的颜色字面量替换;注释中的色值可保留或同步(不影响运行);个别语义不确定处保留原色并在迭代记录中列出待老师验收。
|