| import React from 'react'; | |
| import { BrowserRouter as Router, Route, Routes, Navigate } from 'react-router-dom'; | |
| import { AuthProvider } from './contexts/AuthContext'; | |
| import { ToastProvider } from './contexts/ToastContext'; | |
| import { ThemeProvider } from './contexts/ThemeContext'; | |
| import MainLayout from './layouts/MainLayout'; | |
| import ProtectedRoute from './components/ProtectedRoute'; | |
| import LoginPage from './pages/LoginPage'; | |
| import DashboardPage from './pages/Dashboard'; | |
| import ServersPage from './pages/ServersPage'; | |
| import GroupsPage from './pages/GroupsPage'; | |
| import SettingsPage from './pages/SettingsPage'; | |
| import MarketPage from './pages/MarketPage'; | |
| import LogsPage from './pages/LogsPage'; | |
| import { getBasePath } from './utils/runtime'; | |
| function App() { | |
| const basename = getBasePath(); | |
| return ( | |
| <ThemeProvider> | |
| <AuthProvider> | |
| <ToastProvider> | |
| <Router basename={basename}> | |
| <Routes> | |
| {/* 公共路由 */} | |
| <Route path="/login" element={<LoginPage />} /> | |
| {/* 受保护的路由,使用 MainLayout 作为布局容器 */} | |
| <Route element={<ProtectedRoute />}> | |
| <Route element={<MainLayout />}> | |
| <Route path="/" element={<DashboardPage />} /> | |
| <Route path="/servers" element={<ServersPage />} /> | |
| <Route path="/groups" element={<GroupsPage />} /> | |
| <Route path="/market" element={<MarketPage />} /> | |
| <Route path="/market/:serverName" element={<MarketPage />} /> | |
| <Route path="/logs" element={<LogsPage />} /> | |
| <Route path="/settings" element={<SettingsPage />} /> | |
| </Route> | |
| </Route> | |
| {/* 未匹配的路由重定向到首页 */} | |
| <Route path="*" element={<Navigate to="/" />} /> | |
| </Routes> | |
| </Router> | |
| </ToastProvider> | |
| </AuthProvider> | |
| </ThemeProvider> | |
| ); | |
| } | |
| export default App; |