blob: f4b7942ecbc73e39b8ab64124f64764f48c23c00 [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';
ybtbac75f22025-06-08 22:31:15 +080017import PostDetailPage from '../features/forum/pages/PostDetailPage';
ybtda5978b2025-05-31 15:58:05 +080018import PTPage from '../features/pt/pages/PTPage';
19import TorrentListPage from '../features/torrents/pages/TorrentListPage';
20import UploadTorrentPage from '../features/torrents/pages/UploadTorrentPage';
21import ToolsPage from '../features/tools/pages/ToolsPage';
22import ProfilePage from '../features/profile/pages/ProfilePage';
23
24// 导入路由守卫
25import ProtectedRoute from './ProtectedRoute';
ybt02e716d2025-04-15 17:19:32 +080026import PermissionRoute from './PermissionRoute';
27
ybtda5978b2025-05-31 15:58:05 +080028const AppRoutes = () => {
29 return (
30 <Routes>
31 {/* 公共路由 */}
32 <Route path="/login" element={<LoginPage />} />
33 <Route path="/register" element={<RegisterPage />} />
34 <Route path="/unauthorized" element={<UnauthorizedPage />} />
yyyang3bd72f02025-06-03 16:35:11 +080035 <Route path="*" element={<NotFoundPage />} />
ybt02e716d2025-04-15 17:19:32 +080036
ybtda5978b2025-05-31 15:58:05 +080037 {/* 受保护的路由 (需要登录) */}
38 <Route
39 path="/"
40 element={
41 <ProtectedRoute>
42 <MainLayout>
43 <HomePage />
44 </MainLayout>
45 </ProtectedRoute>
46 }
47 />
48
49 <Route
50 path="/forum"
51 element={
52 <ProtectedRoute>
53 <MainLayout>
54 <ForumPage />
55 </MainLayout>
56 </ProtectedRoute>
57 }
58 />
59
60 <Route
ybtbac75f22025-06-08 22:31:15 +080061 path="/post/:postId"
62 element={
63 <ProtectedRoute>
64 <MainLayout>
65 <PostDetailPage />
66 </MainLayout>
67 </ProtectedRoute>
68 }
69 />
70
71 <Route
ybtda5978b2025-05-31 15:58:05 +080072 path="/pt"
73 element={
74 <ProtectedRoute>
75 <MainLayout>
76 <PTPage />
77 </MainLayout>
78 </ProtectedRoute>
79 }
80 />
81
82 <Route
83 path="/torrents"
84 element={
85 <ProtectedRoute>
86 <MainLayout>
87 <TorrentListPage />
88 </MainLayout>
89 </ProtectedRoute>
90 }
91 />
92
93 <Route
94 path="/upload"
95 element={
96 <ProtectedRoute>
97 <MainLayout>
98 <UploadTorrentPage />
99 </MainLayout>
100 </ProtectedRoute>
101 }
102 />
103
104 <Route
105 path="/tools"
106 element={
107 <ProtectedRoute>
108 <MainLayout>
109 <ToolsPage />
110 </MainLayout>
111 </ProtectedRoute>
112 }
113 />
114
115 <Route
116 path="/profile"
117 element={
118 <ProtectedRoute>
119 <MainLayout>
120 <ProfilePage />
121 </MainLayout>
122 </ProtectedRoute>
123 }
124 />
125
126 <Route
127 path="/admin"
128 element={
129 <ProtectedRoute>
130 <PermissionRoute requiredRoles={['admin']}>
131 <MainLayout>
132 <AdminPanel />
133 </MainLayout>
134 </PermissionRoute>
135 </ProtectedRoute>
136 }
137 />
ybtda5978b2025-05-31 15:58:05 +0800138 </Routes>
139 );
140};
141
142export default AppRoutes;