feat: 数据获取架构重构 + Mac指纹采集 + Token刷新容错 + 账单页面 (0.0.19)
## 架构重构
- 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 不安全)
This commit is contained in:
49
CHANGELOG.md
49
CHANGELOG.md
@@ -3,6 +3,55 @@
|
||||
> 每次发版前修改此文件,`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.ts` Mac 完整实现:
|
||||
- UUID:`ioreg -d2 -c IOPlatformExpertDevice` → `IOPlatformUUID`
|
||||
- CPU:`sysctl -n hw.model` → 机型标识
|
||||
- HDD:三级回退 `system_profiler SPNVMeDataType` → `SPSerialATADataType` → `SPHardwareDataType`
|
||||
- `isMacOS()` / `runMacCommand()` / `getMacHddValue()` 辅助函数
|
||||
- `getComponentId()` / `fingerprintSha256()` Mac 早退分支,与 Windows 共享 SHA256 管线
|
||||
|
||||
### 账单页面
|
||||
|
||||
- `BillingInfo.tsx` — 余额卡片(BalanceCard)+ 账单表格(LedgerTable)+ 分页
|
||||
- `BillingAPI` — `getBalance` / `getLedger`,`signal` 参数透传
|
||||
- `PageDispatcher` 注册 `/billing` 页面(FloatingPanel 960×680)
|
||||
- 修复 `billing.ts` signal 参数位置 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)
|
||||
|
||||
**前后端联调 — 任务创建 + 账户信息 + 预估花费**
|
||||
|
||||
Reference in New Issue
Block a user