feat: 构建系统重构 + VCHSM 架构迁移 + 右键菜单修复 + 尺寸参数统一

## 构建、打包与分发系统重构 (build/)

- 构建系统收敛至 build/ 目录:build.mjs + electron-builder.js + 6 个脚本

- electron-builder 配置从 package.json 提取为 build/electron-builder.js

- 新增 --edition (personal/enterprise) 和 --channel (stable/beta/alpha) 参数

- OSS 路径按渠道隔离

- 新增 pre-build-check.mjs:Git/CHANGELOG/版本/环境变量校验

- 新增 bump-version.mjs:版本号管理 + CHANGELOG 自动生成

- updater.ts 发送 channel/edition/deviceFingerprint

- 新增 src/shared/utils/rollout.ts 灰度测试工具

- 新增 10 条 NPM 脚本

## VCHSM 五层架构迁移

- 7 个业务模块 + ~500 处导入路径同步

## 修复

- MediaCardContextMenu 改用共享 ContextMenu 组件

- ComboBox 尺寸参数显示统一 (size-format.ts)

## 文档

- UpdateA.md / build/README.md / README.md / .env.example 更新

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-29 18:41:07 +08:00
parent e0d91335c7
commit 337d6c1205
187 changed files with 5252 additions and 1702 deletions

View File

@@ -38,7 +38,7 @@
- 事件驱动EDA
1. 主进程与渲染进程通信基于 Electron IPCipcMain/ipcRenderer定义明确的事件通道与载荷类型。
2. 渲染进程内跨组件通信优先使用 Context需要解耦的场景使用自定义事件总线src/utils/event-bus.ts
2. 渲染进程内跨组件通信优先使用 Context需要解耦的场景使用自定义事件总线src/shared/utils/bus.ts
所有 emit 调用自动记录到日志文件用于审计追踪。
3. 自定义错误体系RequestError / RefreshError通过事件总线解耦请求拦截器抛出自定义错误 →
@@ -56,157 +56,123 @@
# 目录结构
> 每个文件夹下均有 `README.md` 说明该目录的职责与代码边界(自动生成,不进 Git
> 2026-06-29 重构:业务模块从 `pages/` + `services/modules/` 分散模式统一为 `modules/` 下的
> VCHSM 五层架构Views → Controllers → Hooks → Settings → Model
```md
├── electron/ # Electron 主进程 + 预加载
│ ├── main.ts # 入口编排:窗口创建 / IPC 注册 / 生命周期
│ ├── preload.ts # contextBridge向渲染进程暴露安全 API
│ ├── electron-env.d.ts # 类型声明APP_ROOT、Window 扩展)
│ └── main/ # 主进程核心模块
│ │ ├── load-env.ts # .env.{mode} + .env.local 加载器
│ │ ├── logger.ts # 日志核心JSON Lines / 每日轮转 / 批量冲刷
│ │ ├── net-request.ts # Electron net.request 的 axios 风格封装
│ │ ├── updater.ts # 自动更新:自定义 Provider + 平台 Updater
│ │ ├── menu/index.ts # 系统菜单macOS Edit / Win 无菜单)
│ │ ├── ipc/ # IPC handler 集合
│ │ │ ├── log-ipc.ts # 渲染进程日志 → 主进程日志桥接
│ │ │ ├── safe-storage-ipc.ts # safeStorage 加密/解密 IPC handler
│ │ │ ── storage-ipc.ts # 沙箱文件存储 IPC handlerheixiu-data/
│ │ └── utils/ # 平台判断 / 图标路径
│ └── preload/ # 预加载脚本contextBridge 桥接层)
├── device.ts # 硬件指纹采集wmic/powershell | ioreg/sysctl
── device_service.ts # 设备信息缓存层(机器码/IP/MAC
├── src/ # 渲染进程React 19 + Vite + TypeScript
├── main.tsx # React 挂载 + Provider 嵌套 + 全局错误捕获
├── App.tsx # 根组件:叠加层编排(登录/设置/页面调度
├── vite-env.d.ts # Vite 类型声明
│ ├── components/ # 通用组件层
│ │ ├── providers/ # 全局 Context Provider
│ │ ├── AppProvider.tsx # 认证状态login/logout/Token 刷新)
│ │ ├── ThemeProvider.tsx # 亮/暗主题切换 + antd ConfigProvider
│ │ │ ── SettingsProvider.tsx # 本地持久化设置(存储路径等
│ │ ├── frame/ # 应用框架(外层结构 + 页面调度)
│ │ │ ── Layout.tsx # 全高 flex 列布局壳
│ │ │ ├── PageDispatcher.tsx # 通用页面调度器Modal/Drawer/FloatingPanel
│ │ │ └── navbar/ # 导航栏nav-config → NavBar → NavItem
│ │ └── ui/ # 通用 UI 原子组件
│ │ ├── FloatingPanel.tsx # 可拖拽非模态浮动面板
│ ├── LegalTextModal.tsx # 法律/协议文本 Modal
│ │ ├── FormField.tsx # 通用表单字段渲染器(数据驱动,从 auth/components 提升)
│ │ └── types.ts # FieldConfig / FieldRule / InputType 通用类型
│ ├── hooks/ # 自定义 Hooks
│ │ ├── use-async.ts # 通用异步基础设施(竞态/取消/门控
│ │ ├── use-api.ts # 业务 API HooksBanner/模型/任务/账户/财务)
│ │ ── use-updater.ts # 更新状态机(单例 IPC 监听
│ ├── infrastructure/ # 基础设施层
│ │ └── storage/ # 本地加密数据库core/ + stores/ + services/
│ │ ├── index.ts # 统一入口init/clear/stats + 全部 re-export
│ │ ├── ipc-file.ts # 渲染进程端文件操作桥接
│ │ ├── core/ # 数据库核心4 文件)
│ │ │ ├── db-core.ts # sql.js WASM 初始化 + 通用 CRUD
│ │ │ ├── db-encrypt.ts # 序列化 → safeStorage 加密 → IPC 写磁盘
│ │ ── schema.ts # 6 张业务表 DDL含索引
│ │ │ └── types.ts # 实体类型定义
│ │ ├── stores/ # 实体 CRUD Store5 文件)
│ │ │ ├── task-store.ts # 任务记录
│ │ │ ├── order-store.ts # 订单记录(充值 + VIP
│ │ │ ├── param-store.ts # 参数历史快照
│ │ ── media-store.ts # 媒体缓存元数据
│ │ ── settings-store.ts # 应用设置 key-value
│ │ └── services/ # 高级服务4 文件)
│ │ ├── media-loader.ts # 媒体下载与三级缓存
│ │ ├── sync-manager.ts # 分页同步游标
│ │ ├── data-sync.ts # 数据同步辅助(从 settings/sections 归位
│ │ └── user-scope.ts # 用户作用域隔离JWT user_id
├── pages/ # 业务页面(按功能模块组织)
│ │ ├── auth/ # 认证模块
│ │ │ ├── index.tsx # LoginPage Modal登录/注册 Tabs
│ │ │ ├── components/ # 表单组件LoginForm/RegisterForm/FormField/改密/忘记密码)
│ │ │ ├── config/ # 字段配置login-fields/register-fields+ 校验函数库
│ │ │ └── hooks/ # use-auth-state偏好/ use-sms-cooldown短信冷却
│ │ ├── home/ # 首页主工作区
│ │ │ ├── HomePage.tsx # 首页入口
│ │ │ ├── HomeContent.tsx # 三列可拖拽面板 + HomeContext.Provider
│ │ │ ── HomeContext.tsx # 共享状态(选中模型/任务/分页)
│ │ │ ├── panels/ # 三列面板容器Left/Center/Right
│ │ ├── features/ # 功能模块Banner/ModelSelector/ModelInputForm/TaskHistory/OutputPreview
│ │ │ ├── controls/ # Widget 控件体系6 种 Qt→React 映射 + WIDGET_MAP
│ │ │ │ ├── types.ts # WidgetProps 统一接口
│ │ │ ├── index.ts # WIDGET_MAP 注册表
│ │ ├── simple-widgets.tsx # 6 个简单控件Checkbox/LineInput/TextInput/ComboBox/SpinBox/DoubleSpinBox
│ │ ├── upload-widgets.tsx # 单文件上传ImageInput/VideoInput共享 enable_switch
│ │ ├── list-upload-widgets.tsx # 多文件拖拽上传ImageListInput/AudioListInput
│ │ │ └── SeedanceContent.tsx # 复合内容编排
│ │ └── hooks/ # useModelUIparam_schema → UIFieldConfig
│ │ ├── panels/ # NavBar 触发的功能面板页
│ ├── AccountInfo.tsx # 账户信息(用户/积分/套餐/统计)
── BillingInfo.tsx # 财务信息(余额 + 账单流水)
│ │ ├── OrdersPage.tsx # 订单明细(充值/VIP 双 Tab + 轮询
│ │ ├── RechargePage.tsx # 积分充值(预设/自定义金额 + 支付追踪)
│ │ │ ├── VipPage.tsx # VIP 开通(激活码/套餐选购/权益预览
│ │ └── WechatWorkPage.tsx # 企业微信二维码
│ └── settings/ # 设置页面
│ ├── SettingsPage.tsx # 设置 Modal 主页面
│ └── sections/ # 6 个设置分区(主题/系统/更新/路径/密码/数据)
├── services/ # 服务层HTTP 请求封装)
│ │ ├── request.ts # Axios 实例:拦截器 + Token 注入 + 401 刷新队列
│ │ ├── auth-token.ts # Token 生命周期refresh_token 持久化/主动刷新)
│ │ ├── auth-persistence.ts # 登录表单偏好(用户名回填/记住密码/自动登录)
│ │ ├── types.ts # 通用 API 类型ApiResponse/RequestError/RefreshError
│ │ ├── cache/ # 客户端缓存
│ │ │ └── model-cache.ts # 模型列表加密本地缓存
│ │ └── modules/ # API 模块(按业务域拆分)
│ │ ├── auth.ts # 认证 API登录/注册/刷新/用户/改密/短信)
│ │ ├── models.ts # 模型 API + 分类常量
│ │ ├── task.ts # 任务 APICRUD + 批量状态 + CSV + 轮询常量)
│ │ ├── banner.ts # Banner/轮播图 API
│ │ ├── billing.ts # 财务 API余额/账单/导出)
│ │ ├── payments.ts # 支付 API订单 CRUD + 状态映射)
│ │ ├── vip-api.ts # VIP API激活/等级/订单)
│ │ └── announcement.ts # 公告 API + 类型标签颜色
│ ├── theme/ # 主题系统
│ │ ├── tokens.ts # TypeScript 设计令牌
│ │ ├── tokens.css # CSS 设计令牌Tailwind @theme + CSS 变量亮/暗)
│ │ ├── antd-theme.ts # Ant Design ConfigProvider 主题配置(亮/暗)
│ │ ├── transitions.css # 主题切换过渡View Transitions API + CSS fallback
│ │ ├── base.css # 全局重置(盒模型/滚动条/聚焦环/拖拽区域)
│ │ └── globals.css # 入口文件(按序导入以上 CSS
│ └── utils/ # 渲染进程工具函数7 文件,已按功能合并)
│ ├── env.ts # 运行时环境:平台检测 + 设备 ID← platform + device
│ ├── bus.ts # 通信层:事件总线 + IPC 守卫 + 日志(← event-bus + ipc + logger
│ ├── display.ts # 展示/格式化金额、日期、Logo、Nullable<T>(← display + logo + type
│ ├── enum-resolver.ts # 枚举外观模式7 模块标签/颜色统一解析)
│ ├── pricing.ts # 成本计算Python 六种定价模式移植)
│ ├── safe-storage.ts # 加密 localStorage 封装safeStorage 桥接)
│ └── media-upload.ts # 媒体上传共享工具(← controls/media-upload-utils
├── shared/ # 主进程 & 渲染进程共享
│ ├── constants/
│ │ ├── app.ts # 应用名称/版本类型/窗口标题
│ │ ├── ipc-channels.ts # 全部 IPC 通道名称(三类命名空间)
│ │ └── version.ts # 从 package.json 读取版本号
│ ├── types/
│ │ ├── index.ts # 通用类型Platform/Theme/Edition/Update/Window
│ │ └── logging.ts # 日志类型LogLevel/LogCategory/LogEntry
│ └── utils/
│ ├── index.ts # 纯工具函数debounce/throttle/compareVersions/deepClone
│ └── sanitize.ts # 日志脱敏token/密码/邮箱/手机/ID/金额)
├── scripts/ # 构建与发布脚本
│ ├── clean.mjs # 清理构建产物
│ ├── generate-update-info.mjs # 生成 update-info.jsonSHA512 + CHANGELOG
│ ├── upload-oss.mjs # 上传安装包到阿里云 OSS
│ └── publish-release.mjs # 发布版本到后端 API
├── build.mjs # electron-builder 构建总管
├── vite.config.ts # Vite 构建配置
├── package.json # 含 electron-builder 打包配置
├── electron/ # Electron 主进程 + 预加载
│ ├── main.ts # 入口编排:窗口创建 / IPC 注册 / 生命周期
│ ├── preload.ts # contextBridge向渲染进程暴露安全 API
│ ├── electron-env.d.ts # 类型声明APP_ROOT、Window 扩展)
│ └── main/ # 主进程核心模块
│ │ ├── load-env.ts # .env.{mode} + .env.local 加载器
│ │ ├── logger.ts # 日志核心JSON Lines / 每日轮转 / 批量冲刷
│ │ ├── net-request.ts # Electron net.request 的 axios 风格封装
│ │ ├── updater.ts # 自动更新:自定义 Provider + 平台 Updater
│ │ ├── menu/index.ts # 系统菜单macOS Edit / Win 无菜单)
│ │ ├── ipc/ # IPC handler 集合
│ │ │ ├── log-ipc.ts # 渲染进程日志 → 主进程日志桥接
│ │ │ ├── safe-storage-ipc.ts # safeStorage 加密/解密 IPC handler
│ │ │ ── storage-ipc.ts # 沙箱文件存储 IPC handlerheixiu-data/
│ │ └── canvas-ipc.ts # 画布文件操作 IPC handler
│ └── utils/ # 平台判断 / 图标路径
└── preload/ # 预加载脚本contextBridge 桥接层
── device.ts # 硬件指纹采集
│ └── device_service.ts # 设备信息缓存层
├── src/ # 渲染进程React 19 + Vite + TypeScript
│ ├── app/ # ═══ 应用壳 ═══
│ │ ├── App.tsx # 根组件:叠加层编排(登录/设置/页面调度)
│ │ ├── main.tsx # React 挂载 + Provider 嵌套 + 全局错误捕获
│ │ ├── providers/ # 全局 Context Provider
│ │ │ ── AppProvider.tsx # 认证状态login/logout/Token 刷新
│ │ ├── ThemeProvider.tsx # 亮/暗主题切换 + antd ConfigProvider
│ │ │ ── SettingsProvider.tsx # 本地持久化设置(存储路径等)
│ │ └── layout/ # 布局框架
│ │ ├── Layout.tsx # 全高 flex 列布局壳NavBar + 内容区
│ │ └── PageDispatcher.tsx # 通用页面调度器Modal/Drawer/FloatingPanel
│ │
├── modules/ # ═══ 业务模块VCHSM 五层架构)═══
│ │ │ # V=views C=controllers H=hooks S=settings M=model
│ │ ├── navbar/ V+C+S+M # 导航栏 UI 壳
│ │ │ ├── views/ # NavBar.tsx / NavItem.tsx
│ │ ├── settings/ # nav-config.ts左右导航项注册表
│ │ │ └── model/ # 导航类型定义
│ │ ── announcement/ V+C # 公告Badge 角标 + 15 分钟轮询缓存
│ │ │ ├── views/ # AnnouncementDrawer.tsx
│ │ └── controllers/ # announcement-api.ts
│ │ ├── auth/ V+C+H+S+M # 认证模块14 文件)
│ │ ├── views/ # AuthPage.tsx + components/LoginForm/RegisterForm/改密/忘记密码)
│ │ ├── controllers/ # auth-api.ts / token-manager.ts / auth-persistence.ts
│ │ │ ├── hooks/ # use-auth-state.ts / use-sms-cooldown.ts
│ │ │ ├── settings/ # login-fields.ts / register-fields.ts / validators.ts
│ │ │ ── model/ # 类型定义
│ │ ├── home/ V+C+H+S+M # 主工作区(三栏布局 → VCHSM 嵌套)
│ │ ├── views/
│ │ │ ├── HomePage.tsx / HomeContent.tsx
│ │ │ ├── left/ # 左侧栏 — 输入控件LeftPanel + controls/
│ │ │ ├── center/ # 中央栏 — 预览区CenterPanel
│ │ ── right/ # 右侧栏 — 模型/任务/输出/Banner
│ │ │ ── controllers/ # task-api.ts / model-api.ts / banner-api.ts / menus/
│ │ │ ├── hooks/ # useModelUI.ts
│ │ ├── stores/ # HomeContext.tsx页面级状态
│ │ │ └── model/ # 类型定义
│ │ ├── account/ V+C # 账户与支付6 子功能独立子目录
│ │ │ ├── views/ # info/ vip/ recharge/ billing/ orders/ wechat-work/
│ │ └── controllers/ # vip-api.ts / payment-api.ts / billing-api.ts
│ │ ├── canvas/ V+C+H+M+S # 无限画布 + 项目管理
│ │ │ ├── views/ # CanvasApp.tsx / CanvasPage.tsx
│ │ │ ├── core/ # CanvasViewport / LODImage / MediaCard / MediaPreview
│ │ │ ├── navigation/ # CanvasSidebar / ProjectSelector / EpisodeSelector / ShotList
│ │ │ └── toolbar/ # CanvasToolbar / CanvasFilterBar / CategoryTabs / StageTabs
│ │ ├── controllers/ # menus/(右键菜单注册)
│ │ │ ├── hooks/ # useCanvasInteraction / useDirectoryScan / useSidecarSync
│ │ │ ├── stores/ # useCanvasStore.tsZustand store
│ │ │ ── utils/ # scanner.ts / layout.ts / LocalFileDataSource.ts
│ │ └── settings/ V+C # 应用设置
│ │ ├── views/ # SettingsPage.tsx + sections/6 个设置分区
│ │ ── controllers/ # settings-actions.ts
│ │
└── shared/ # ═══ 跨模块共享 ═══
├── components/ # 通用 UIFloatingPanel / FormField / LegalTextModal / ContextMenu
├── hooks/ # 全局 HooksuseAnnouncements / useApi / useAsync / useUpdater
├── services/ # HTTP 客户端 http.ts + API 类型
├── utils/ # 工具函数bus / env / enum-resolver / display / pricing / safe-storage
├── infrastructure/storage/ # 本地加密数据库sql.js + safeStorage
│ ├── core/ # db-core.ts / db-encrypt.ts / schema.ts
│ ├── stores/ # task-store / order-store / media-store / settings-store
── services/ # media-loader / sync-manager / data-sync / user-scope
└── theme/ # 主题系统tokens / antd-theme / CSS 过渡
├── shared/ # 主进程 & 渲染进程共享(根级 @shared 别名
├── constants/ # app.ts / ipc-channels.ts / version.ts / keyboard.ts
├── types/ # index.tsPlatform/Theme/Edition/ logging.ts
└── utils/ # sanitize.ts日志脱敏+ index.ts通用工具
├── scripts/ # 构建与发布脚本
├── vite.config.ts # Vite 构建配置
├── package.json # 含 electron-builder 打包配置
└── pnpm-workspace.yaml
```
### VCHSM 五层架构说明
| 层 | 目录 | 职责 | 示例 |
|----|------|------|------|
| **V** views | `views/` | 页面组件,纯 JSX 结构 | `NavBar.tsx`, `VipPage.tsx`, `CanvasViewport.tsx` |
| **C** controllers | `controllers/` | 交互逻辑 + API 请求 + 菜单注册 | `auth-api.ts`, `task-api.ts`, `menus/` |
| **H** hooks | `hooks/` | 组件间复用逻辑(状态/副作用/数据流) | `use-auth-state.ts`, `useCanvasInteraction.ts` |
| **S** settings | `settings/` | 配置常量、字段映射、验证规则、注册表 | `nav-config.ts`, `login-fields.ts` |
| **M** model | `model/` | 纯 TS 类型/接口/枚举(编译时) | `types.ts` |
模块按需建层navbar 只用 V+S+Mauth 用 V+C+H+S+Mcanvas 额外有 stores/ + utils/。
# 多窗口与平台判定
- 窗口管理由 `electron/main.ts` 统一负责:`createMainWindow()` 创建主窗口,`BrowserWindow` 通过 `contextIsolation: true` + `nodeIntegration: false` 运行沙箱化渲染进程。辅助窗口通过 `RENDERER_TO_MAIN.OPEN_SUB_WINDOW` IPC 通道按需创建。
- 平台判定双端各有一份:`electron/main/utils/platform.ts`(主进程,直接使用 `process.platform`)和 `src/utils/platform.ts`(渲染进程,优先 `process.platform`,降级 `navigator.userAgent`)。
- 平台判定双端各有一份:`electron/main/utils/platform.ts`(主进程,直接使用 `process.platform`)和 `src/shared/utils/env.ts`(渲染进程,优先 `process.platform`,降级 `navigator.userAgent`)。
- 打包配置 (`package.json` build 字段) 须针对平台设置不同的图标、签名策略、安装包格式。
@@ -238,7 +204,7 @@
## 状态管理
- 使用 React Context + Provider 模式管理全局状态按领域拆分AppContext平台/登录、ThemeContext主题
SettingsContext设置项。各 Context 定义与 Provider 合并在 `components/providers/` 目录下,避免引入 Redux 等重量级方案。
SettingsContext设置项。各 Context 定义与 Provider 合并在 `app/providers/` 目录下,避免引入 Redux 等重量级方案。
- Provider 在 main.tsx 中按层级嵌套挂载:
AppProvider → ThemeProvider → SettingsProvider → AntdApp → App
@@ -249,7 +215,7 @@
## 日志系统
- 双端日志主进程直接写文件electron/main/logger.ts渲染进程通过 IPC send 上报src/utils/logger.ts
- 双端日志主进程直接写文件electron/main/logger.ts渲染进程通过 IPC send 上报src/shared/utils/bus.ts
两端暴露一致的 API`logger.debug / info / warn / error(category, message, error?, context?)`
- 文件存储JSON Lines 格式(每行一个 JSON路径 `{userData}/logs/app-YYYY-MM-DD.log`
@@ -275,9 +241,9 @@
- Linux → libsecret
- 实现文件:
- `electron/main/safe-storage-ipc.ts` — 主进程加密/解密 IPC 处理(`BIDIRECTIONAL.SAFESTORAGE_ENCRYPT / DECRYPT`
- `src/utils/safe-storage.ts` — 渲染进程桥接层(`initSafeStore / getSafeStore / setSafeStore / clearSafeStore`
- `src/services/request.ts` — token 存取通过 `getSafeStore / setSafeStore`,无需感知加密细节
- `src/services/auth-token.ts` — refresh_token 同理通过 safeStorage 存取
- `src/shared/utils/safe-storage.ts` — 渲染进程桥接层(`initSafeStore / getSafeStore / setSafeStore / clearSafeStore`
- `src/shared/services/http.ts` — token 存取通过 `getSafeStore / setSafeStore`,无需感知加密细节
- `src/modules/auth/controllers/token-manager.ts` — refresh_token 同理通过 safeStorage 存取
## 双 Token 机制
@@ -293,15 +259,15 @@
- `shared/utils/sanitize.ts` 在日志写入前自动脱敏处理
- 覆盖字段:用户 IDSHA256 哈希)、邮箱(`***@domain`、手机号掩码、用户名称、Token截断
- 主进程 `electron/main/logger.ts` 和渲染进程 `src/utils/logger.ts` 均写入前调用 `sanitizeLogEntry()`
- 主进程 `electron/main/logger.ts` 和渲染进程 `src/shared/utils/bus.ts` 均写入前调用 `sanitizeLogEntry()`
# 样式与主题
- 优先使用 Tailwind 工具类完成布局与常规样式。自定义设计令牌在 `src/theme/tokens.css``@theme` 块中定义Tailwind v4 语法),自动生成 `bg-primary-500``text-secondary` 等工具类。
- 优先使用 Tailwind 工具类完成布局与常规样式。自定义设计令牌在 `src/shared/theme/tokens.css``@theme` 块中定义Tailwind v4 语法),自动生成 `bg-primary-500``text-secondary` 等工具类。
- Ant Design 组件样式通过 ConfigProvider 的 theme 属性覆盖,确保与 Tailwind 主题令牌同步。
`ConfigProvider` 同时配置 `locale={zhCN}` 实现全局中文(分页器"条/页"等无需逐个组件设置)。
在 src/theme/ 中创建 antd-theme.ts导出主题配置对象引用 tokens.ts 中的设计变量。
在 src/shared/theme/ 中创建 antd-theme.ts导出主题配置对象引用 tokens.ts 中的设计变量。
组件级 token如 Pagination.itemActiveColor / itemActiveBg在 sharedComponents 中统一管理,
亮色/暗色主题共享,避免 CSS !important hack。
@@ -314,7 +280,7 @@
- 所有 IPC 通道名称定义在 shared/constants/ipc-channels.ts 中,分为三类:
MAIN_TO_RENDERER / RENDERER_TO_MAIN / BIDIRECTIONAL。
- 渲染进程通过 src/utils/ipc.ts 中的安全守卫访问 IPChasIpc 检查 → safeIpcOn / send / invoke
- 渲染进程通过 src/shared/utils/bus.ts 中的安全守卫访问 IPChasIpc 检查 → safeIpcOn / send / invoke
非 Electron 环境下静默跳过,保证浏览器预览不崩溃。
- 主进程事件处理函数需做好错误捕获与日志记录,渲染进程调用 IPC 时使用 try-catch 并处理超时。
@@ -355,8 +321,8 @@
| `checkForUpdates` | `electron/main/updater.ts` | 预检版本 → 无更新直发 IPC / 有更新交 electron-updater |
| `downloadUpdate` | `electron/main/updater.ts` | 用户确认后触发下载(从 checkForUpdates 分离) |
| `netRequest` | `electron/main/net-request.ts` | Electron net.request 的 axios 风格封装 |
| `useUpdater` | `src/hooks/use-updater.ts` | 渲染进程更新状态 Hook单例 IPC 监听) |
| `UpdateSetting` | `src/pages/settings/blocks/UpdateSetting.tsx` | 设置页更新区块(含"查看详情"弹窗) |
| `useUpdater` | `src/shared/hooks/use-updater.ts` | 渲染进程更新状态 Hook单例 IPC 监听) |
| `UpdateSetting` | `src/modules/settings/views/sections/UpdateSetting.tsx` | 设置页更新区块(含"查看详情"弹窗) |
| `server.py` | `test-server/server.py` | 本地测试服务器,扫描 release/ 目录,语义版本排序 |
## 增量更新(差分下载)