## 新增功能 ### 设置页面(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
35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
import React from 'react';
|
||
import ReactDOM from 'react-dom/client';
|
||
import { App as AntdApp } from 'antd';
|
||
|
||
import App from './App';
|
||
import { ThemeProvider } from './components/ThemeProvider';
|
||
import { AppProvider } from './components/AppProvider';
|
||
import { SettingsProvider } from './components/SettingsProvider';
|
||
// 全局样式(包含 Tailwind 指令 + 主题扩展 + 重置)
|
||
import './theme/globals.css';
|
||
|
||
ReactDOM.createRoot(document.getElementById('root')!).render(
|
||
<React.StrictMode>
|
||
{/* AppProvider — 全局应用状态(平台/版本/登录态) */}
|
||
<AppProvider>
|
||
{/* ThemeProvider 内部管理 ConfigProvider(亮色/暗色切换) */}
|
||
<ThemeProvider>
|
||
{/* SettingsProvider — 集中管理设置项(存储路径等) */}
|
||
<SettingsProvider>
|
||
{/* AntdApp 提供 message / notification / modal 的静态方法上下文 */}
|
||
<AntdApp>
|
||
<App />
|
||
</AntdApp>
|
||
</SettingsProvider>
|
||
</ThemeProvider>
|
||
</AppProvider>
|
||
</React.StrictMode>,
|
||
);
|
||
|
||
// 仅在 Electron 环境中监听主进程消息(浏览器预览时跳过)
|
||
import { safeIpcOn } from './utils/ipc';
|
||
safeIpcOn('main-process-message', (_event: unknown, message: unknown) => {
|
||
console.log('[Main Process Message]:', message);
|
||
});
|