Files
ele-HeiXiu/src/main.tsx
YoungestSongMo 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

54 lines
2.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import React from 'react';
import ReactDOM from 'react-dom/client';
import {App as AntdApp} from 'antd';
import App from './App';
import {ThemeProvider} from './components/providers/ThemeProvider';
import {AppProvider} from './components/providers/AppProvider';
import {SettingsProvider} from './components/providers/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);
});
// 渲染进程全局未捕获错误(兜底记录到日志文件)
import {logger} from './utils/logger';
window.addEventListener('error', (event) => {
logger.error('ui', 'Uncaught error (renderer)', event.error, {
filename: event.filename,
lineno: event.lineno,
colno: event.colno,
});
});
window.addEventListener('unhandledrejection', (event) => {
const error =
event.reason instanceof Error
? event.reason
: new Error(String(event.reason));
logger.error('ui', 'Unhandled promise rejection (renderer)', error);
});