- task: device_id 改为必填参数,API 层 Omit 封装 + getDeviceId() 自动注入 - pricing.ts: Python 后端 calculate_cost 完整移植,六种定价模式 + 6 个 Bug 修复 (浮点冗余/维度匹配不一致/null 守卫/matrix 数据提取/unit_scale 等) - ModelInputForm: 三层兜底预估消费展示 + React Hooks 顺序修复 - AccountInfo: VIP 等级列表匹配,套餐详情展示(说明/周期/席位/到期) - 模型列表加密缓存 (safe-storage, stale-while-revalidate) - VIP API 模块 (激活码/等级/订单/模拟支付) - device_id 统一使用 UUID v4 持久化 (与 login/register 对齐)
29 lines
1.4 KiB
Markdown
29 lines
1.4 KiB
Markdown
# 回答语言
|
||
|
||
- 所有交互、解释、代码注释与生成内容均使用简体中文,专有技术名词可保留英文,但需附带中文说明
|
||
- 进行任务时都需要考虑安全、性能、主题切换、业务自定义错误、事件总线驱动方式以及日志记录
|
||
- 进行系统级别的操作时,需要考虑系统差异,并处理兼容性。如WINDOWS、MAC OS。
|
||
- 有需要请自己调用MCP服务
|
||
|
||
# 主题系统架构
|
||
|
||
## 双轨颜色体系
|
||
|
||
1. **自定义 CSS 变量**(`globals.css`):`data-theme="light|dark"` → `var(--color-bg-base)` 等,用于 body 和自定义组件
|
||
2. **antd 令牌**(`antd-theme.ts`):`ConfigProvider theme={algorithm}` → `useToken()` → inline style,用于 antd 组件
|
||
|
||
## 主题切换时序(关键)
|
||
|
||
```
|
||
ThemeProvider.useLayoutEffect([isDark])
|
||
→ applyHtmlTheme(isDark) ← data-theme 属性变更
|
||
(与 ConfigProvider 的 useInsertionEffect 同帧执行)
|
||
→ 浏览器绘制 ← 所有颜色变更在同一帧生效
|
||
```
|
||
|
||
## 过渡策略
|
||
|
||
- **Electron/Chromium**:View Transitions API(`document.startViewTransition` + `flushSync`),GPU 合成器单次 cross-fade
|
||
- **其他浏览器**:CSS `transition: color/bg/border/shadow 0.15s linear`,精准覆盖 ~80 个 antd 容器类(不覆盖交互组件自有
|
||
transition)
|
||
- **不启用 antd cssVar**:经实测 cssVar 模式下 CSS-in-JS 仍走标签替换路径,过渡无效 |