【问题】
桌面端(Electron)切换主题时颜色变化速度不一致、明显卡顿。
根因分析(4 轮迭代):
1. 过渡时长不统一(body 0.3s / 组件 0.15s)→ 统一到 0.2s
2. antd CSS-in-JS 标签替换导致瞬间变色 → 尝试 cssVar(无效,仍走标签替换)
3. applyHtmlTheme 在 updater 回调中执行,与 antd CSS 变更不同帧 → 移入 useLayoutEffect
4. html * 全局过渡在 Electron 中为数千 DOM 节点同步插值 → 合成器掉帧
终极方案:View Transitions API(GPU 合成器 1 次 cross-fade 替代 N 个 CSS 过渡)
+ 精准 CSS 过渡覆盖 ~80 个 antd 容器类(回退方案)
【修改】
ThemeProvider.tsx — 核心重构
- applyHtmlTheme 从 setIsDark updater → useLayoutEffect([isDark])
确保自定义 CSS 变量与 antd CSS-in-JS 在同一次 React 提交中生效
- View Transitions API:document.startViewTransition + flushSync
GPU 合成器截取旧/新两帧做单次 cross-fade,消除多元素插值卡顿
- 浏览器不支持时自动回退到 CSS transition 方案
globals.css — 过渡策略
- body: 0.3s ease → 0.15s linear
- View Transitions 动画:::view-transition-old/new(root) 0.15s linear
- ~80 个 antd 容器类精准过渡(Layout/Card/Modal/Table/Input/
Select/Picker/Menu/Tabs/Tag/Alert/Empty/Result/Skeleton 等)
按功能分组:布局 → 表格 → 表单 → 导航 → 反馈
不覆盖交互组件自有 transition(Button/Switch/Slider 等)
linear 替代 ease — 匀速插值,桌面应用更利落
Layout.tsx / HomeContent.tsx / LeftPanel.tsx / ModelSelector.tsx
- 过渡参数对齐:全部 0.2s → 0.15s linear
SettingsPage.tsx — 用户体验
- Modal 取消 keyboard={false},Esc 键可关闭
- macOS:关闭按钮移至标题左侧(遵循 macOS HIG)
- afterClose 中 blur 当前焦点元素,防止聚焦跳到导航栏
【文档】
CHANGELOG.md — 新增 0.0.15 版本记录
CLAUDE.md — 新增主题系统架构章节(双轨颜色体系 / 时序 / 过渡策略)
55 lines
2.5 KiB
Markdown
55 lines
2.5 KiB
Markdown
# 更新日志
|
||
|
||
> 每次发版前修改此文件,`npm run build:win` 打包后会自动读取生成 update-info.json。
|
||
---
|
||
|
||
## 0.0.15(2026-06-09)
|
||
|
||
**主题切换性能优化 — 桌面端流畅度提升**
|
||
|
||
- View Transitions API 驱动主题切换:GPU 合成器单次 cross-fade 替代 80+ 个独立 CSS 过渡,消除 Electron 卡顿
|
||
- 主题更新时序统一:`applyHtmlTheme` 从 updater → `useLayoutEffect`,CSS 变量与 React 提交同帧
|
||
- 过渡参数对齐:全部 `0.2s ease` → `0.15s linear`,桌面应用更利落
|
||
- CSS 过渡精准覆盖:antd 容器组件(Layout/Card/Modal/Table/Input/Menu 等 ~80 个类)替代 `html *` 全局选择器
|
||
- 设置页 Esc 键关闭 + macOS 关闭按钮适配 + 关闭后焦点防跳转
|
||
|
||
---
|
||
|
||
## 0.0.14 -- 🚀更新公告
|
||
|
||
**模型选择器焕新**
|
||
|
||
- 模型列表改为标签页分组展示,新增「全部模型」Tab
|
||
- 列表项新增悬停高亮效果,维护中模型自动置灰并提示
|
||
- 修复选择模型后参数表单重复 key 报错
|
||
- 类型体系重构,支持后端分类 slug 自动映射
|
||
|
||
---
|
||
|
||
## 0.0.13(2026-06-07)
|
||
|
||
- 修复主题切换后首页状态重置问题:设置页去路由化,改为事件总线驱动的 Modal 叠加
|
||
- 首页三栏分隔条视觉对齐:移除右侧多余 margin,左右完全对称
|
||
- 轮播图新增关闭按钮:session 级别隐藏,每次启动重新展示
|
||
- 确立 QT 多窗口模型 → Web 架构映射原则:叠加层走 Modal/Drawer + 事件总线,不走路由
|
||
- 修复首页三栏布局溢出:拖拽分隔条增加最大宽度约束 + 视口缩小时自动收窄面板,防止右侧面板被挤出视口
|
||
|
||
---
|
||
|
||
## 0.0.12(2026-06-04)
|
||
|
||
- 重构更新检查流程:无更新不再抛异常,PreCheck → 直接 IPC 通知
|
||
- 新增用户决定下载流程:检查到新版本后展示更新内容,用户确认后再下载
|
||
- 设置页新增"查看详情"弹窗,Markdown 格式化展示更新日志
|
||
- 新增"下载更新"按钮,与"安装更新"分离为两个独立操作
|
||
- 修复测试服务器版本排序(字符串序 → 语义版本序,0.0.10 正确排在 0.0.9 之后)
|
||
- electron-updater Provider 增加 TTL 缓存,避免重复 API 请求
|
||
- 修复 Windows cmd `set` 命令空格导致的 Invalid URL 问题
|
||
- 修复 electron-updater 'error' 事件拦截,无更新不再爆红
|
||
|
||
---
|
||
|
||
## 格式说明
|
||
|
||
每个版本以 `## x.y.z(日期)` 开头,内容为无序列表。打包脚本会提取最新版本的日志填入 update-info.json。
|