blob: 4420097e43525fd1215850a35d1dc026d6d05f2a [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';
ybt0d010e52025-06-09 00:29:36 +08009import AdminLoginPage from '../features/auth/pages/AdminLoginPage';
ybtda5978b2025-05-31 15:58:05 +080010import RegisterPage from '../features/auth/pages/RegisterPage';
11import AdminPanel from '../features/admin/pages/AdminPanel';
12import NotFoundPage from '../pages/NotFoundPage';
13import UnauthorizedPage from '../pages/UnauthorizedPage';
14
15// 导入新创建的页面组件
16import HomePage from '../features/home/pages/HomePage';
17import ForumPage from '../features/forum/pages/ForumPage';
ybtbac75f22025-06-08 22:31:15 +080018import PostDetailPage from '../features/forum/pages/PostDetailPage';
ybtda5978b2025-05-31 15:58:05 +080019import PTPage from '../features/pt/pages/PTPage';
20import TorrentListPage from '../features/torrents/pages/TorrentListPage';
ybt3ec62e42025-06-11 22:46:22 +080021import TorrentInfo from '../features/torrents/pages/TorrentInfo';
ybtda5978b2025-05-31 15:58:05 +080022import UploadTorrentPage from '../features/torrents/pages/UploadTorrentPage';
ybtda5978b2025-05-31 15:58:05 +080023import ProfilePage from '../features/profile/pages/ProfilePage';
24
25// 导入路由守卫
26import ProtectedRoute from './ProtectedRoute';
ybt02e716d2025-04-15 17:19:32 +080027import PermissionRoute from './PermissionRoute';
28
ybtda5978b2025-05-31 15:58:05 +080029const AppRoutes = () => {
30 return (
31 <Routes>
32 {/* 公共路由 */}
33 <Route path="/login" element={<LoginPage />} />
ybt0d010e52025-06-09 00:29:36 +080034 <Route path="/admin/login" element={<AdminLoginPage />} />
ybtda5978b2025-05-31 15:58:05 +080035 <Route path="/register" element={<RegisterPage />} />
36 <Route path="/unauthorized" element={<UnauthorizedPage />} />
yyyang3bd72f02025-06-03 16:35:11 +080037 <Route path="*" element={<NotFoundPage />} />
ybt02e716d2025-04-15 17:19:32 +080038
ybtda5978b2025-05-31 15:58:05 +080039 {/* 受保护的路由 (需要登录) */}
40 <Route
41 path="/"
42 element={
43 <ProtectedRoute>
44 <MainLayout>
45 <HomePage />
46 </MainLayout>
47 </ProtectedRoute>
48 }
49 />
50
51 <Route
52 path="/forum"
53 element={
54 <ProtectedRoute>
55 <MainLayout>
56 <ForumPage />
57 </MainLayout>
58 </ProtectedRoute>
59 }
60 />
61
62 <Route
ybtbac75f22025-06-08 22:31:15 +080063 path="/post/:postId"
64 element={
65 <ProtectedRoute>
66 <MainLayout>
67 <PostDetailPage />
68 </MainLayout>
69 </ProtectedRoute>
70 }
71 />
72
73 <Route
ybtda5978b2025-05-31 15:58:05 +080074 path="/pt"
75 element={
76 <ProtectedRoute>
77 <MainLayout>
78 <PTPage />
79 </MainLayout>
80 </ProtectedRoute>
81 }
82 />
83
84 <Route
ybt3ec62e42025-06-11 22:46:22 +080085 path="/torrent/:id"
86 element={
87 <ProtectedRoute>
88 <MainLayout>
89 <TorrentInfo />
90 </MainLayout>
91 </ProtectedRoute>
92 }
93 />
94
95 <Route
ybtda5978b2025-05-31 15:58:05 +080096 path="/torrents"
97 element={
98 <ProtectedRoute>
99 <MainLayout>
100 <TorrentListPage />
101 </MainLayout>
102 </ProtectedRoute>
103 }
104 />
105
106 <Route
107 path="/upload"
108 element={
109 <ProtectedRoute>
110 <MainLayout>
111 <UploadTorrentPage />
112 </MainLayout>
113 </ProtectedRoute>
114 }
115 />
116
117 <Route
ybtda5978b2025-05-31 15:58:05 +0800118 path="/profile"
119 element={
120 <ProtectedRoute>
121 <MainLayout>
122 <ProfilePage />
123 </MainLayout>
124 </ProtectedRoute>
125 }
126 />
127
128 <Route
129 path="/admin"
130 element={
131 <ProtectedRoute>
132 <PermissionRoute requiredRoles={['admin']}>
133 <MainLayout>
134 <AdminPanel />
135 </MainLayout>
136 </PermissionRoute>
137 </ProtectedRoute>
138 }
139 />
ybtda5978b2025-05-31 15:58:05 +0800140 </Routes>
141 );
142};
143
144export default AppRoutes;