blob: 5caee9e8397b82f73f59e4b5bc03948b070bc97b [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';
21import UploadTorrentPage from '../features/torrents/pages/UploadTorrentPage';
ybtda5978b2025-05-31 15:58:05 +080022import 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 />} />
ybt0d010e52025-06-09 00:29:36 +080033 <Route path="/admin/login" element={<AdminLoginPage />} />
ybtda5978b2025-05-31 15:58:05 +080034 <Route path="/register" element={<RegisterPage />} />
35 <Route path="/unauthorized" element={<UnauthorizedPage />} />
yyyang3bd72f02025-06-03 16:35:11 +080036 <Route path="*" element={<NotFoundPage />} />
ybt02e716d2025-04-15 17:19:32 +080037
ybtda5978b2025-05-31 15:58:05 +080038 {/* 受保护的路由 (需要登录) */}
39 <Route
40 path="/"
41 element={
42 <ProtectedRoute>
43 <MainLayout>
44 <HomePage />
45 </MainLayout>
46 </ProtectedRoute>
47 }
48 />
49
50 <Route
51 path="/forum"
52 element={
53 <ProtectedRoute>
54 <MainLayout>
55 <ForumPage />
56 </MainLayout>
57 </ProtectedRoute>
58 }
59 />
60
61 <Route
ybtbac75f22025-06-08 22:31:15 +080062 path="/post/:postId"
63 element={
64 <ProtectedRoute>
65 <MainLayout>
66 <PostDetailPage />
67 </MainLayout>
68 </ProtectedRoute>
69 }
70 />
71
72 <Route
ybtda5978b2025-05-31 15:58:05 +080073 path="/pt"
74 element={
75 <ProtectedRoute>
76 <MainLayout>
77 <PTPage />
78 </MainLayout>
79 </ProtectedRoute>
80 }
81 />
82
83 <Route
84 path="/torrents"
85 element={
86 <ProtectedRoute>
87 <MainLayout>
88 <TorrentListPage />
89 </MainLayout>
90 </ProtectedRoute>
91 }
92 />
93
94 <Route
95 path="/upload"
96 element={
97 <ProtectedRoute>
98 <MainLayout>
99 <UploadTorrentPage />
100 </MainLayout>
101 </ProtectedRoute>
102 }
103 />
104
105 <Route
ybtda5978b2025-05-31 15:58:05 +0800106 path="/profile"
107 element={
108 <ProtectedRoute>
109 <MainLayout>
110 <ProfilePage />
111 </MainLayout>
112 </ProtectedRoute>
113 }
114 />
115
116 <Route
117 path="/admin"
118 element={
119 <ProtectedRoute>
120 <PermissionRoute requiredRoles={['admin']}>
121 <MainLayout>
122 <AdminPanel />
123 </MainLayout>
124 </PermissionRoute>
125 </ProtectedRoute>
126 }
127 />
ybtda5978b2025-05-31 15:58:05 +0800128 </Routes>
129 );
130};
131
132export default AppRoutes;