|
|
904edecd90
|
refactor: Home 模块 VCHSM 三栏重构 + Services 迁回 + 右键菜单体系 + 公告修复
## Home 模块三栏 VCHSM 重组
- 按渲染归属重新分配文件:ModelSelector/TaskHistory → left/,ModelInputForm/widgets → center/,OutputPreview → right/
- BannerCarousel 移至 shared/views/(全局组件)
- controls/ → widgets/ 重命名,消除与 controllers/ 的命名歧义
- 新增 barrel 文件(left/center/right/shared 各级 index.ts)
## Services 层迁回 src/services/modules/
- 全部 API 类型定义与请求函数从 modules/*/controllers/ 迁回 services/modules/{domain}/
- 恢复原始文件名(model-api.ts → models.ts,task-api.ts → task.ts 等)
- 新增 domain 子文件夹(home/auth/announcement/account)
- 更新全局 ~70 处导入路径
## TaskHistory 提取 Controller + Hook 层
- 新建 left/controllers/task-table-config.ts(常量 + 纯工具函数,零 React 依赖)
- 新建 left/hooks/useTaskTable.tsx(状态管理 + 数据获取 + 列定义 + 滚动同步)
- TaskHistory.tsx 从 915 行精简为 265 行纯视图
## 右键菜单体系完善
- 共享 <ContextMenu> 组件(antd Dropdown 封装,防 Select 冲突)
- 四组菜单定义:任务列表 / 文本输入 / 媒体参考 / 预览区域
- 统一的 ContextMenuItems → AntD MenuProps 转换
## 公告功能修复
- useAnnouncements 增加 isLoggedIn 登录门控,避免未登录时 401 双重请求
- 抽屉打开时触发 refetch(),确保拿到最新数据
Co-Authored-By: Claude <noreply@anthropic.com>
|
2026-06-30 13:39:38 +08:00 |
|
|
|
337d6c1205
|
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>
|
2026-06-29 18:41:07 +08:00 |
|
|
|
8b697e775d
|
feat: 去除构建时版控变量 + 窗口标题动态版控 + 退出登录保留缓存 (0.0.24)
版控体系重构(13 文件):
- 移除 build.mjs --personal/--enterprise 参数和 EDITION 环境变量
- 统一安装包文件名:船长-HeiXiu-{os}-{版本号}-Setup.{ext}
- 简化 package.json 构建脚本,移除 :enterprise 变体
- scripts/*.mjs 不再接受 edition 参数
- 移除 shared/constants/app.ts 的 parseEdition()
窗口标题动态版控:
- 新格式:船长-HeiXiu-{os}-{版本号}(登录前)/ ·{版控} 后缀(登录后)
- 链路:AppProvider(account_type) → useEffect → appRuntime IPC → main process
- 移除 updater.ts 更新检查 API 的 edition 查询参数
本地存储生命周期修正:
- 退出登录不再自动清空缓存(user_id 隔离,重新登录命中缓存)
- clearUserStorage 添加 isOpen() 竞态守卫
- 移除 closeDatabase() 避免退出→重新登录后数据库不可用
- 手动「清理缓存」按钮保留
文档:
- CHANGELOG.md 新增 0.0.24 条目
- TODO.md 新增已完成项
|
2026-06-22 13:36:42 +08:00 |
|
|
|
e1c8eff946
|
feat: VIP会员开通 + 订单分类 + EnumResolver统一枚举
VIP 会员开通页面(VipPage)
- 四部分布局:激活码 / 套餐选择(双列:Radio + 权益图库) / 协议确认 / 支付跟踪
- 支付跟踪:仿照 RechargePage 模式,创建订单后进入待支付阶段,轮询 VipAPI.getVipOrder
- 页面锁定:待支付中禁止关闭容器(PAGE_LOCK),仅可通过 "X" 关闭
- 权益图库:双列布局右列展示,antd Image 组件支持点击放大预览
- Bug 修复:取消错误判断 name==='AbortError' → instanceof RequestError && type===CANCELLED
订单明细分类(OrdersPage)
- 新增订单类型切换(充值订单 / VIP订单),各自独立数据源与列定义
- startVipPolling:VIP 订单轮询(VipAPI.getVipOrder),与充值轮询对称
- handleContinuePay 统一:根据 orderType 分发到对应轮询函数
- Bug 修复:同 VipPage 的取消错误判断
EnumResolver 统一枚举(enum-resolver.ts)
- 新增 payments 模块:status.label/color + method.label
- 扩展 vip.orderStatus.color
- VipPage / OrdersPage 移除所有直接 Map 索引和本地映射函数,统一走 EnumResolver
VipAPI 扩展(vip-api.ts)
- 新增 getVipOrder(orderId):单订单查询端点 /api/v1/vip/orders/{order_id}
PageDispatcher
- /vip 路由注册 VipPage,label="VIP 会员开通",width=560
|
2026-06-16 18:29:59 +08:00 |
|
|
|
06e6486aa3
|
feat: 充值页面 + 订单明细页面 + 页面调度器增强 (0.0.20)
新增页面:
- RechargePage — 积分充值表单(预设金额/自定义金额/支付宝/协议勾选)
+ 支付状态跟踪(form/pending/paid/expired/failed 五阶段)
+ 订单状态轮询(3s 间隔,终态自动停止)
+ PAGE_LOCK 事件(待支付时禁止关闭 Modal)
- OrdersPage — 订单明细列表(状态筛选 + 分页 + 继续支付)
+ Segmented 状态 Tab(全部/待支付/已支付/已过期/失败)
+ 待支付订单"继续支付"按钮
事件总线增强:
- 新增 EVENTS.CLOSE_PAGE — 页面内部关闭容器
- 新增 EVENTS.PAGE_LOCK — 锁定/解锁容器关闭(防止操作中断)
PageDispatcher 增强:
- 注册 RechargePage(/recharge)和 OrdersPage(/orders)
- 响应 CLOSE_PAGE / PAGE_LOCK 事件
- Modal/Drawer 锁定态下禁用遮罩关闭
支付 API 模块:
- PaymentAPI.createOrder / getOrdersListInfo / getOrderInfo
- 完整类型定义(请求/响应体、状态常量、中文映射)
杂项:
- 导航栏"充值积分"→"充值"(精简)
|
2026-06-15 15:08:05 +08:00 |
|
|
|
0e6d996718
|
refactor: 重组 components/ 和 pages/ 文件结构,按职责分层
components/ 拆为三层:
- providers/ — 状态管理(App/Theme/SettingsProvider)
- shell/ — 应用外壳(Layout/NavBar/PageDispatcher)
- ui/ — 通用 UI 原子(FloatingPanel/LegalTextModal)
pages/ 重命名 + 重组:
- headers/ → panels/ NavBar 触发的面板页
- login/ → auth/ 认证模块(含注册/忘记密码)
- settings/blocks/ → sections/
- home/components/ → panels/ features/ controls/ hooks/
按职责分:panels(布局壳) + features(功能面板) + controls(表单控件) + hooks
其他清理:
- 删除空占位 Test3.tsx
- HomeContext 从 HomeContent 拆出独立文件
- uploadValidation 内联到 ImageInput
- 修复过时注释(useUI → controls)
|
2026-06-15 11:19:06 +08:00 |
|
|
|
9e8c5b7109
|
feat: 任务轮询 + Token刷新容错 + 提交防抖 + 文件上传Hook (0.0.20)
### 任务状态轮询
- 新增 useTaskPolling hook:批量轮询非终态任务,递归 setTimeout + next_poll_ms 自适应间隔
- TaskHistory 集成批量轮询,OutputPreview 移除独立轮询改为状态转换监听
- batchTaskStatus 修复数组参数序列化(GET + 逗号拼接,避免 bracket 格式)
- 统一 POLLING_STATUSES 常量管理非终态状态
### Token 刷新容错
- 双轨刷新:主动续期(JWT exp 75% 时间点 setTimeout)+ 被动兜底(handle401)
- 刷新失败分级:永久失败(throw RefreshTokenExpiredError)→清token弹登录;临时失败(return null)→仅拒绝当前请求
- AppProvider 登录/自动登录/退出 启停主动刷新定时器
### 提交按钮防抖
- 2s 节流防抖("你点击的太快了")+ 二次确认弹窗("您已提交,确认要再次提交吗?")
- 修复 useAsyncMutation.execute 返回值判空(原 try/catch 死代码)
### 文件上传 Hook
- 新增 useFileUpload hook:封装 request.upload() 为 antd Upload 兼容 customRequest
- ImageInput/ImageListInput/AudioListInput 集成 customRequest
- uploadValidation beforeUpload 返回值修正(false→true)
### 其他
- AnnouncementDrawer 接入公告 API + EnumResolver
- billing/announcement/banner 服务模块完善
- CLAUDE.md 补充架构约定文档
|
2026-06-12 19:03:36 +08:00 |
|
|
|
4237dcbaf6
|
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 不安全)
|
2026-06-11 20:08:44 +08:00 |
|
|
|
95019316b2
|
feat: 前后端联调 — 任务创建 + 账户信息 + 预估花费 (0.0.18)
- 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 对齐)
|
2026-06-10 19:38:26 +08:00 |
|
|
|
76e66a37c8
|
refactor: 消除占位页面 + 删除 barrel 导出 — 页面集中注册 + 直接导入
- 删除 8 个占位页面文件(Account/Vip/Recharge/Billing/Orders/Projects/Quota/ComplianceAssets)
- PageDispatcher: PAGE_MAP 支持无组件页面自动渲染 PlaceholderPage
- 新增页面只需在 PAGE_MAP 加一行配置,无需创建独立文件
- 删除 services/modules/index.ts barrel,13 个文件改为直接导入
- IDE 跳转到定义一步到位,import 自文档化
- TypeScript 编译零错误
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
2026-06-09 14:32:14 +08:00 |
|
|
|
59059caae7
|
feat: 重构模型列表UI + 修复后端数据格式适配
模型列表 UI 重构:
- ModelSelector 从 Menu 折叠分组改为 Tabs 标签页 + 平铺列表
- 新增「全部模型」Tab + 各分类由 MODEL_CATEGORIES 数组控制顺序
- ModelItem 新增 hover 高亮效果 + 维护中模型禁用 + toast 提示
- 新增错误态(Result + 重试按钮)
后端数据格式适配:
- param_schema 类型从 string[] 改为 ParamSchemaItem[]({id, map_to, spec, ui})
- 修复 Form.Item 重复 key 报错(item.id 作 React key,item.map_to 作表单字段名)
- ModelsListResponseBody 字段类型收紧(model_type / category_name / quota_config)
数据层重构:
- useModelList 从 4 次并行请求改为 1 次全量拉取(后端 category 参数不可用)
- 分组键从 category_name 改为 model_type
- page_size 提升至 200
类型体系增强:
- type 别名改为 as const 数组推导(MODEL_CATEGORIES 单一数据源)
- 新增 CATEGORY_SLUG_MAP + resolveCategoryLabel + toCategorySlug 映射层
- 类型重命名 ModelCategory → ModelCategoryStringEnum
|
2026-06-08 19:02:32 +08:00 |
|
|
|
7032d1c3f2
|
feat: 忘记密码/修改密码 + 设置页结构重组 + barrel cleanup + LoginPage 版本统一
新增:
- ForgotPasswordModal — 手机号+短信验证码重置密码 (AuthAPI.resetPassword)
- ChangePasswordModal — 当前密码验证后修改密码 (AuthAPI.changePassword)
- useSmsCooldown Hook — 通用短信发送冷却逻辑,供注册/忘记密码复用
- PasswordSetting — 设置页账号安全区块,双选项:修改密码 / 短信验证码重置
修改:
- LoginForm \"忘记密码?\" 链接接入 ForgotPasswordModal(替换 TODO)
- LoginPage 移除 edition 业务版本 UI 区分,登录/注册 Tab 全局统一
- 设置页 Section 组件移入 blocks/ 子目录(git mv 保留历史)
- auth.ts sendSms URL 修正: /sms/send → /send-sms
清理:
- settings/index.ts 移除 4 个未使用 re-export,精简为仅 SettingsPage
- navbar/index.ts 移除未使用 re-export,精简为仅 NavBar
文档:
- WORKLOG.md 新增 2026-06-08 工作日志
- ARCHITECTURE.md / PROJECT.md 更新设置页目录结构与新组件
- TODO.md 忘记密码流程标记已完成 + 短信人机验证列入后期优化
|
2026-06-08 11:57:35 +08:00 |
|
|
|
af85d31035
|
feat :修改文件结构
|
2026-06-05 19:24:06 +08:00 |
|
|
|
1da95eaef3
|
feat: 实现业务首页(三栏布局 + 轮播图)
## 首页整体架构
- 新增 src/pages/home/ — 完整首页模块(10 个组件)
- HomePage / HomeContent:三栏弹性布局,拖动分隔条调整列宽
- BannerCarousel:顶部轮播图(antd Carousel,2280×90 长条图片适配)
- LeftPanel:模型选择器(Menu 分组) + 任务记录(Table 分页),纵向拖拽调整比例
- CenterPanel / ModelInputForm:动态表单,根据模型 param_schema/ui_config 渲染控件
- RightPanel / OutputPreview:任务输出预览(Image/Video)
- 新增 Layout 组件:h-screen flex 布局,首页 Banner + NavBar + Outlet
## 数据层(数据与视图分离)
- 新增 src/services/modules/ — API 模块(banner/models/task/auth)
- TaskAPI 静态方法,TaskInfoItemResponseBody 判别联合类型
- ModelAPI / BannerAPI,const 断言路由常量
- 新增 src/hooks/use-async.ts — 通用异步 Hook
- useAsyncData:竞态处理、条件请求(enabled)、自动错误日志
- useAsyncMutation:数据变更,onSuccess/onError
- getErrorMessage():RequestErrorType → 可读错误信息
- 新增 src/hooks/use-api.ts — 业务 Hook
- useBannerList / useModelList / useTaskList / useTaskDetail / useSubmitTask
## 主题与交互
- 重写暗色令牌:科技感蓝紫(#080C24 底 / #0F1340 面板 / #2A3278 边框)
- 三栏分隔线:token.colorBorderSecondary 常驻 + 手柄竖线 hover 高亮
- 左面板纵向拖拽:模型区/任务区可调比例,ResizeObserver 自适应
- 暗色/亮色同步:tokens.ts + antd-theme.ts + globals.css 三处一致
## 基础设施
- EventBus 新增 TASK_SUBMITTED 事件(替代 Context 数字递增 hack)
- HomeContext 状态管理(选中模型、任务分页、折叠状态)
- 所有组件边框使用 token.colorBorderSecondary(主题自适应)
- Table 滚动高度 ResizeObserver 动态计算(修复分页器遮挡)
|
2026-06-05 16:24:17 +08:00 |
|
|
|
3becdb85d4
|
feat: 实现设置页面 + 路由系统 + JWT认证体系 + 公告优化 + 错误类型系统
## 新增功能
### 设置页面(Router + Modal 叠加)
- HashRouter 路由系统,Electron file:// 协议兼容
- 设置页以居中 Modal 叠加首页,仅 X 按钮关闭
- 主题切换 Segmented 控件(与首页 Switch 共享 Context)
- 大模型产物存储仓库路径配置(原生文件夹选择对话框)
- 企业版额外:团队创作存储仓库路径
- 系统信息展示(平台/版本/版本类型/环境)
- 版本更新检查(状态机:idle→checking→no-update/available→downloading→downloaded→error)
### JWT 认证体系
- 双 Token 机制:access_token + refresh_token
- Axios 拦截器 401 自动刷新 + 并发请求去重队列
- 启动时 refresh_token 静默续期(自动登录)
- 记住密码:Base64 编码存储,表单自动回填
- setTokenRefreshHandler 解耦模式:request.ts 不知晓 auth
### 自定义错误类型系统
- RefreshError 继承 RequestError,type = AUTH_EXPIRED
- 全局拦截器捕获 RefreshError → 自动 clearToken + AUTH_REQUIRED
- 任何位置 throw new RefreshError() 即可触发登录 Modal
### 公告卡片优化
- 长文本 Tooltip 悬浮预览
- 点击卡片弹出详情 Modal(全文保留换行)
### SettingsContext(类似 Vue Pinia)
- 集中式设置状态管理
- localStorage 持久化:ele-heixiu-output-path / ele-heixiu-team-repo-path
- useSettings() 全局消费
## 架构变更
- App.tsx → HashRouter + AppRoutes + LoginPage 弹层
- Layout.tsx = NavBar + <Outlet /> 页面壳
- HomePage.tsx 从 App.tsx 提取
- NavBar 使用 useNavigate() 真实路由导航
- useUpdater 改为模块级单例 IPC 监听器(修复 MaxListenersExceededWarning)
- electron/main.ts 新增 FILE_DIALOG IPC handler
## 依赖
- 新增 react-router-dom
|
2026-06-03 19:25:15 +08:00 |
|
|
|
767bb8b297
|
feat: 初始化船长·HeiXiu 桌面应用项目(错误是svg的问题)
Electron + React 19 + TypeScript + Ant Design 6 + Tailwind CSS 4
【核心架构】
- Electron 主进程(窗口管理、平台检测、图标适配)
- Vite 构建链(双产物 dist/ + dist-electron/)
- 共享层 shared/(类型、常量、工具函数)
- IPC 通信框架 + 安全守卫
【主题系统】
- 蓝紫渐变主题(亮色/暗色双模式)
- Ant Design ConfigProvider 适配(lightAlgorithm / darkAlgorithm)
- Tailwind CSS 4 @theme 指令 + CSS 变量
- 设计令牌三处同步(tokens.ts / globals.css / antd-theme.ts)
【导航栏】
- 自定义 H5 导航栏替代系统菜单
- 个人版/企业版双布局
- 未登录拦截 + 事件总线驱动登录弹窗
【登录注册】
- Modal 弹层(Portal)+ Tabs 切换
- 登录/注册表单动态字段渲染
- 记住密码 / 自动登录 / 用户协议
【更新系统】
- 自定义 API 版本检查(替代 electron-updater generic provider)
- 手动下载 + SHA512 校验 + spawn NSIS 安装
- 渲染进程更新状态机 Hook(useUpdater)
- 检查更新按钮 + 下载进度展示
【构建工具链】
- build.mjs 构建总管(--win/--mac/--linux --personal/--enterprise --build/--clean/--sign/--upload/--publish)
- scripts/ 自动化脚本(clean / generate-update-info / upload-oss / publish-release)
- electron-builder NSIS 安装器(可选路径、多版本打包)
- update-info.json 自动生成(fileSize/sha512/changelog/releaseDate)
【代码质量】
- ESLint + TypeScript strict + Prettier
- husky + lint-staged(提交前自动检查)
- commitlint(规范提交信息)
- Playwright E2E + Vitest 单元测试框架
- rollup-plugin-visualizer 打包体积分析
【文档】
- README.md(快速开始 + 目录结构 + 命令速查)
- UpdateA.md(发布手册:API/签名/发版流程/数据库)
- CHANGELOG.md(更新日志)
- .env.example(构建环境变量模板)
|
2026-06-03 15:00:51 +08:00 |
|