diff --git a/web/frontend/src/App.tsx b/web/frontend/src/App.tsx index c4361fc..d27a68a 100644 --- a/web/frontend/src/App.tsx +++ b/web/frontend/src/App.tsx @@ -1,22 +1,35 @@ -import { useState, useCallback } from 'react'; +import { lazy, Suspense, useState, useCallback, type ReactNode } from 'react'; import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom'; -import { ConfigProvider, theme } from 'antd'; +import { ConfigProvider, Spin, theme } from 'antd'; import zhCN from 'antd/locale/zh_CN'; -import LoginPage from './pages/LoginPage'; -import MainLayout from './layouts/MainLayout'; -import DashboardPage from './pages/DashboardPage'; -import AccountsPage from './pages/AccountsPage'; -import AssignmentsPage from './pages/AssignmentsPage'; -import LoginTasksPage from './pages/LoginTasksPage'; -import ProxyPage from './pages/ProxyPage'; -import UsersPage from './pages/UsersPage'; -import CookiePage from './pages/CookiePage'; -import HuyaAccountsPage from './pages/HuyaAccountsPage'; -import HuyaTasksPage from './pages/HuyaTasksPage'; import { getUser } from './store/auth'; import { ThemeProvider } from './store/theme'; import { useTheme } from './store/useTheme'; +const LoginPage = lazy(() => import('./pages/LoginPage')); +const MainLayout = lazy(() => import('./layouts/MainLayout')); +const DashboardPage = lazy(() => import('./pages/DashboardPage')); +const AccountsPage = lazy(() => import('./pages/AccountsPage')); +const AssignmentsPage = lazy(() => import('./pages/AssignmentsPage')); +const LoginTasksPage = lazy(() => import('./pages/LoginTasksPage')); +const ProxyPage = lazy(() => import('./pages/ProxyPage')); +const UsersPage = lazy(() => import('./pages/UsersPage')); +const CookiePage = lazy(() => import('./pages/CookiePage')); +const HuyaAccountsPage = lazy(() => import('./pages/HuyaAccountsPage')); +const HuyaTasksPage = lazy(() => import('./pages/HuyaTasksPage')); + +function RouteFallback() { + return ( +
+ +
+ ); +} + +function lazyRoute(element: ReactNode) { + return }>{element}; +} + function AppContent() { // 用 state 驱动重渲染,登录/登出时调 refreshAuth() const [authVersion, setAuthVersion] = useState(0); @@ -36,20 +49,24 @@ function AppContent() { > - } /> + )} /> : } + element={ + isLoggedIn + ? lazyRoute() + : + } > - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> + )} /> + )} /> + )} /> + )} /> + )} /> + )} /> + )} /> + )} /> + )} /> } />