## 架构重构
- useAsyncData 集成 AbortController:cleanup 时真正中断 HTTP 请求,
不再仅丢弃响应(解决 StrictMode 双重请求问题)
- API 模块统一 signal?: AbortSignal 参数,透传 axios config
- use-api.ts 成为数据 Hook 集中管理中心,新增 useAccountInfo、
useBillingBalance、useBillingLedger
- 页面组件改为纯渲染:const {data,loading,error,refetch} = useXxx()
## 新功能
- Mac 硬件指纹采集(electron/preload/device.ts):
ioreg(UUID) + sysctl(CPU) + system_profiler(HDD三级回退)
- 账单页面 BillingInfo(余额卡片 + 账单表格 + 分页)
- PageDispatcher 注册 /billing 页面(FloatingPanel 960×680)
- 共享工具函数 centToYuan / formatDate(src/utils/display.ts)
## Bug 修复
- Token 刷新容错:网络错误时保留 refresh_token,等网络恢复后重试;
仅 RefreshError(token 过期)时清除(auth-token.ts)
- AppProvider 自动登录时 nullable 字段默认值(email→''、admin_permissions→[])
- AccountInfo 重构消除 ~40 行手写状态管理代码
## 代码质量
- AccountInfo 消除 centToYuan/formatDate 重复定义
- BillingInfo 标题层级精简(移除冗余页面/Card标题)
- antd Table align 字面量类型修正('left' as const)
- billing.ts signal 参数位置修复(params→config)
- modelFirstFetchDone 模块级变量移除(StrictMode 不安全)
9.8 KiB
9.8 KiB
更新日志
每次发版前修改此文件,
npm run build:win打包后会自动读取生成 update-info.json。
0.0.19(2026-06-11)
数据获取架构重构 + Mac 指纹采集 + Token 刷新容错 + 账单页面
数据获取架构重构
useAsyncData集成 AbortController:cleanup 时真正中断 HTTP 请求,不再仅丢弃响应(解决 StrictMode 双重请求)- fetcher 签名变更:
() => Promise<T>→(signal: AbortSignal) => Promise<T> - API 模块统一
signal?: AbortSignal可选参数,透传 axios config(banner/auth/models/task/vip) use-api.ts成为数据 Hook 集中管理中心:- 新增
useAccountInfo—Promise.all并行获取用户信息 + VIP 等级 - 新增
useBillingBalance— 账户余额 - 新增
useBillingLedger— 账单明细(支持分页参数)
- 新增
AccountInfo.tsx重构:~40 行手写状态管理(useRef+useEffect+cancelled+retryTick)→ 1 行useAccountInfo()- 共享工具
src/utils/display.ts—centToYuan/formatDate,消除 AccountInfo/BillingInfo 重复定义 - 移除
modelFirstFetchDone模块级变量(StrictMode 不安全)
Mac 硬件指纹采集
electron/preload/device.tsMac 完整实现:- UUID:
ioreg -d2 -c IOPlatformExpertDevice→IOPlatformUUID - CPU:
sysctl -n hw.model→ 机型标识 - HDD:三级回退
system_profiler SPNVMeDataType→SPSerialATADataType→SPHardwareDataType
- UUID:
isMacOS()/runMacCommand()/getMacHddValue()辅助函数getComponentId()/fingerprintSha256()Mac 早退分支,与 Windows 共享 SHA256 管线
账单页面
BillingInfo.tsx— 余额卡片(BalanceCard)+ 账单表格(LedgerTable)+ 分页BillingAPI—getBalance/getLedger,signal参数透传PageDispatcher注册/billing页面(FloatingPanel 960×680)- 修复
billing.tssignal 参数位置 bug:get(url, {signal})→get(url, undefined, {signal}) - BillingInfo 标题精简:移除冗余页面 Title 和 Card title,仅保留 FloatingPanel 标题栏
Bug 修复
- Token 刷新容错(
auth-token.ts):网络错误/超时时保留 refresh_token,仅 RefreshError(token 过期)时清除。 解决网络短暂中断后被迫手动重新登录的问题 - AppProvider 自动登录:
email/admin_permissions等 nullable 字段默认值修复(?? ''/?? []) - antd Table align:
align: 'left'→align: 'left' as const,修复 TS2322 类型错误 - 分页器位置:显式添加
position: ['bottomRight']
文档
- CLAUDE.md 精简为 AI 行为规则,项目技术内容移入 ARCHITECTURE.md
- ARCHITECTURE.md 新增:数据获取架构、页面调度详情、Token 刷新错误分类、设备指纹
0.0.18(2026-06-10)
前后端联调 — 任务创建 + 账户信息 + 预估花费
任务创建联调
CreatTaskRequestBody.device_id改为后端必填参数,API 层Omit封装,自动注入getDeviceId()(UUID v4 持久化,与登录/注册统一)useSubmitTask泛型同步改为Omit<CreatTaskRequestBody, 'device_id'>,调用方无感submitTask移除body.device_id || getDeviceId()兜底逻辑,始终以本地生成的设备 ID 为准
预估花费计算(与 QT/Python 后端对齐)
src/utils/pricing.ts— 从 Python 后端calculate_cost完整移植六种定价模式:- 服务端:
SIMPLE·MULTI_DIMENSION·BILLING_ADAPTER(per_k_chars / rate + 条件附加费) - 客户端:
fixed·per_k_chars·rate_matrix·matrix
- 服务端:
ModelInputForm.tsx— 三层兜底预估消费展示:完整动态计价 → 配置文件兜底提取 → 模式标签- 修复 6 个定价 Bug:
- SIMPLE 浮点冗余
(x/100)*100在 IEEE 754 下不恒等 →Math.round(分子)/100 rate_matrix/matrix内联维度匹配缺少.trim().toLowerCase()+ null 跳过 → 统一matchDimensions()lookupMappingValue/matchDimensions缺 null 守卫 →Cannot use 'in' operator崩溃rate_matrix错误应用unit_scale(Python spec 无此行为)→ 移除乘法matrix模式dimensions空值提前返 null(与MULTI_DIMENSION不一致)→ 对齐处理- 矩阵维度提取
row.raw— API 实际在行顶层存储维度(如resolution),raw子对象不存在 →matrixRowData()兼容两种格式
- SIMPLE 浮点冗余
pricing_config类型修正:Record<string, unknown>→Record<string, unknown> | null(对齐 OpenAPIanyOf)- 修复 React Hooks 顺序违例 —
estimatedCostDisplayuseMemo 移至提前返回之前
账户信息联调
AccountInfo.tsx"当前套餐"从 VIP 等级列表匹配详细数据:vip_level_id→VipLevelsItem.id映射查找- 新增套餐说明、套餐周期字段,席位上限优先取 VIP 等级值
- 到期时间提取
isExpired变量复用
VipAPI.getVipLevels()与AuthAPI.getUserInfo()并行加载
模型列表缓存
- 加密持久化缓存(safe-storage):启动时
Promise.all初始化,缓存优先渲染消除 loading 闪烁 useModelListStale-while-revalidate:即时展示缓存 → 后台拉新 → 覆盖缓存
其他
- VIP API 模块(
src/services/modules/vip-api.ts)— 激活码/等级列表/订单/模拟支付 - ESLint/TS 类型修复(未使用符号清理、分号补充)
- CLAUDE.md 更新系统兼容性说明
0.0.17(2026-06-09)
修复接口重复调用 — 请求量减半
- AppProvider 自动登录 useEffect 增加 aborted 清理标志,修复 StrictMode 双重挂载导致 refreshToken/getUserInfo 各调两次
- useModelList 提升到 LeftPanel 单例调用,修复 ModelSelector 和 TaskHistory 各自独立请求全量模型列表
- 开发模式 DevTools 中"已停止"的请求即为 StrictMode 第一轮挂载被丢弃的请求
- 模型输入栏三层架构:useUI 组件体系(10 种 widget → antd 映射)+ useModelUI Hook(param_schema → UIFieldConfig[])
- constraints_config.requires 动态联动:enable_switch 开关控制依赖字段启用/禁用
- 修复模型默认值不加载(antd 外部 form 实例忽略 initialValues)+ DependentFormItem prop 透传断裂
- PageDispatcher 统一页面调度:Modal/Drawer/FloatingPanel 三容器,全局互斥,动态视口尺寸
- 账户信息页:AuthAPI.getUserInfo() 驱动,积分/套餐/统计三卡片布局
- 代码去重:runFieldChecks 校验运行器 + createImageBeforeUpload 上传校验工厂
- 主题切换性能优化 — View Transitions API + 0.15s 统一过渡 + 设置页增强(0.0.15 延续)
- 目录调整:wechat-work/ → headers/
0.0.16(2026-06-09)
模型输入栏重构 + 统一页面调度 + 依赖联动
- 模型输入栏三层架构:useUI 组件体系(10 种 widget → antd 映射)+ useModelUI Hook(param_schema → UIFieldConfig[])
- constraints_config.requires 动态联动:enable_switch 开关控制依赖字段启用/禁用
- 修复模型默认值不加载(antd 外部 form 实例忽略 initialValues)+ DependentFormItem prop 透传断裂
- PageDispatcher 统一页面调度:Modal/Drawer/FloatingPanel 三容器,全局互斥,动态视口尺寸
- 账户信息页:AuthAPI.getUserInfo() 驱动,积分/套餐/统计三卡片布局
- 代码去重:runFieldChecks 校验运行器 + createImageBeforeUpload 上传校验工厂
- 主题切换性能优化 — View Transitions API + 0.15s 统一过渡 + 设置页增强(0.0.15 延续)
- 目录调整:wechat-work/ → headers/
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。