blob: e0858016387b32c4c2f976014590cece2583fdfb [file] [log] [blame]
ybtda5978b2025-05-31 15:58:05 +08001import React from 'react';
2import { Routes, Route, Navigate } from 'react-router-dom';
3
4// 导入布局
5import MainLayout from '../layouts/MainLayout';
6
7// 导入页面
8import LoginPage from '../features/auth/pages/LoginPage';
9import RegisterPage from '../features/auth/pages/RegisterPage';
10import AdminPanel from '../features/admin/pages/AdminPanel';
11import NotFoundPage from '../pages/NotFoundPage';
12import UnauthorizedPage from '../pages/UnauthorizedPage';
13
14// 导入新创建的页面组件
15import HomePage from '../features/home/pages/HomePage';
16import ForumPage from '../features/forum/pages/ForumPage';
17import PTPage from '../features/pt/pages/PTPage';
18import TorrentListPage from '../features/torrents/pages/TorrentListPage';
19import UploadTorrentPage from '../features/torrents/pages/UploadTorrentPage';
20import ToolsPage from '../features/tools/pages/ToolsPage';
21import ProfilePage from '../features/profile/pages/ProfilePage';
22
23// 导入路由守卫
24import ProtectedRoute from './ProtectedRoute';
ybt02e716d2025-04-15 17:19:32 +080025import PermissionRoute from './PermissionRoute';
26
ybtda5978b2025-05-31 15:58:05 +080027const AppRoutes = () => {
28 return (
29 <Routes>
30 {/* 公共路由 */}
31 <Route path="/login" element={<LoginPage />} />
32 <Route path="/register" element={<RegisterPage />} />
33 <Route path="/unauthorized" element={<UnauthorizedPage />} />
yyyang3bd72f02025-06-03 16:35:11 +080034 <Route path="*" element={<NotFoundPage />} />
ybt02e716d2025-04-15 17:19:32 +080035
ybtda5978b2025-05-31 15:58:05 +080036 {/* 受保护的路由 (需要登录) */}
37 <Route
38 path="/"
39 element={
40 <ProtectedRoute>
41 <MainLayout>
42 <HomePage />
43 </MainLayout>
44 </ProtectedRoute>
45 }
46 />
47
48 <Route
49 path="/forum"
50 element={
51 <ProtectedRoute>
52 <MainLayout>
53 <ForumPage />
54 </MainLayout>
55 </ProtectedRoute>
56 }
57 />
58
59 <Route
60 path="/pt"
61 element={
62 <ProtectedRoute>
63 <MainLayout>
64 <PTPage />
65 </MainLayout>
66 </ProtectedRoute>
67 }
68 />
69
70 <Route
71 path="/torrents"
72 element={
73 <ProtectedRoute>
74 <MainLayout>
75 <TorrentListPage />
76 </MainLayout>
77 </ProtectedRoute>
78 }
79 />
80
81 <Route
82 path="/upload"
83 element={
84 <ProtectedRoute>
85 <MainLayout>
86 <UploadTorrentPage />
87 </MainLayout>
88 </ProtectedRoute>
89 }
90 />
91
92 <Route
93 path="/tools"
94 element={
95 <ProtectedRoute>
96 <MainLayout>
97 <ToolsPage />
98 </MainLayout>
99 </ProtectedRoute>
100 }
101 />
102
103 <Route
104 path="/profile"
105 element={
106 <ProtectedRoute>
107 <MainLayout>
108 <ProfilePage />
109 </MainLayout>
110 </ProtectedRoute>
111 }
112 />
113
114 <Route
115 path="/admin"
116 element={
117 <ProtectedRoute>
118 <PermissionRoute requiredRoles={['admin']}>
119 <MainLayout>
120 <AdminPanel />
121 </MainLayout>
122 </PermissionRoute>
123 </ProtectedRoute>
124 }
125 />
ybtda5978b2025-05-31 15:58:05 +0800126 </Routes>
127 );
128};
129
130export default AppRoutes;