blob: efc406772115633b612bac982d48cff47d713d73 [file] [log] [blame]
wu2f28f672025-06-19 14:29:30 +08001// src/router/index.jsx
2import React from 'react'
wu70fc8c52025-06-19 15:55:03 +08003import { Routes, Route, Navigate } from 'react-router-dom'
TRM-codingd1cbf672025-06-18 15:15:08 +08004
wu70fc8c52025-06-19 15:55:03 +08005import LoginPage from '../pages/LoginPage/LoginPage'
6import RegisterPage from '../pages/RegisterPage/RegisterPage'
7import ForgotPasswordPage from '../pages/ForgotPasswordPage/ForgotPasswordPage'
8import TestDashboard from '../pages/TestDashboard/TestDashboard'
TRM-codingd1cbf672025-06-18 15:15:08 +08009
wu70fc8c52025-06-19 15:55:03 +080010import HomeFeed from '../components/HomeFeed'
11import CreatePost from '../components/CreatePost'
12import NotebookPage from '../components/NotebookPage'
13import PlaceholderPage from '../components/PlaceholderPage'
14import UserProfile from '../components/UserProfile'
95630366980c1f272025-06-20 14:08:54 +080015import PostDetailJWLLL from '../components/PostDetailJWLLL'
16import UploadPageJWLLL from '../components/UploadPageJWLLL'
TRM-codingd1cbf672025-06-18 15:15:08 +080017
wu70fc8c52025-06-19 15:55:03 +080018import AdminPage from '../components/Admin'
19import SuperAdmin from '../components/SuperAdmin'
20import UserManagement from '../components/UserManagement'
21import LogsDashboard from '../components/LogsDashboard'
22import TransactionLogs from '../components/TransactionLogs'
23import PerformanceLogs from '../components/PerformanceLogs'
24
25import {
26 RequireAuth,
27 RequireRole,
28 RequireOwnProfile,
29 RequireAdminOwn,
30 RequireSuperAdminOwn
31} from './Guards'
TRM-coding85e5c322025-06-18 19:49:21 +080032
TRM-codingd1cbf672025-06-18 15:15:08 +080033export default function AppRoutes() {
34 return (
35 <Routes>
wu70fc8c52025-06-19 15:55:03 +080036 {/* 1. 公开路由 */}
37 <Route path="/login" element={<LoginPage />} />
38 <Route path="/register" element={<RegisterPage />} />
39 <Route path="/forgot-password" element={<ForgotPasswordPage />} />
TRM-codingd1cbf672025-06-18 15:15:08 +080040
wu70fc8c52025-06-19 15:55:03 +080041 {/* 2. 受保护路由 */}
wu2f28f672025-06-19 14:29:30 +080042 <Route element={<RequireAuth />}>
wu70fc8c52025-06-19 15:55:03 +080043 {/* 2.1 任何登录用户都能看自己的主页 */}
44 <Route element={<RequireOwnProfile />}>
wu2f28f672025-06-19 14:29:30 +080045 <Route path="/user/:userId" element={<UserProfile />} />
95630366980c1f272025-06-20 14:08:54 +080046 </Route> {/* 2.2 普通用户 */}
wu70fc8c52025-06-19 15:55:03 +080047 <Route element={<RequireRole allowedRoles={['user']} />}>
48 <Route path="/home" element={<HomeFeed />} />
95630366980c1f272025-06-20 14:08:54 +080049 <Route path="/post/:id" element={<PostDetailJWLLL />} />
wu70fc8c52025-06-19 15:55:03 +080050 <Route path="/posts/new" element={<CreatePost />} />
51 <Route path="/posts/edit/:postId" element={<CreatePost />} />
95630366980c1f272025-06-20 14:08:54 +080052 <Route path="/upload-jwlll" element={<UploadPageJWLLL />} />
wu70fc8c52025-06-19 15:55:03 +080053 <Route path="/notebooks" element={<NotebookPage />} />
54 <Route path="/dashboard/*" element={<PlaceholderPage />} />
55 <Route path="/activity" element={<PlaceholderPage pageId="activity" />} />
56 <Route path="/notes" element={<PlaceholderPage pageId="notes" />} />
57 <Route path="/creator" element={<PlaceholderPage pageId="creator" />} />
58 <Route path="/journal" element={<PlaceholderPage pageId="journal" />} />
59 <Route path="/" element={<Navigate to="/home" replace />} />
60 </Route>
61
62 {/* 2.3 Admin 自己的页面 */}
63 <Route element={<RequireAdminOwn />}>
64 <Route path="/admin/:userId" element={<AdminPage />} />
65 </Route>
wu2f28f672025-06-19 14:29:30 +080066 <Route element={<RequireRole allowedRoles={['admin']} />}>
wu70fc8c52025-06-19 15:55:03 +080067 <Route path="/test-dashboard" element={<TestDashboard />} />
wu2f28f672025-06-19 14:29:30 +080068 </Route>
TRM-codingd1cbf672025-06-18 15:15:08 +080069
wu70fc8c52025-06-19 15:55:03 +080070 {/* 2.4 SuperAdmin 自己的区域 */}
71 <Route element={<RequireSuperAdminOwn />}>
72 <Route path="/superadmin/:userId/*" element={<SuperAdmin />}>
wu2f28f672025-06-19 14:29:30 +080073 <Route index element={<Navigate to="users" replace />} />
wu70fc8c52025-06-19 15:55:03 +080074 <Route path="users" element={<UserManagement />} />
75 <Route path="dashboard" element={<LogsDashboard />}>
wu2f28f672025-06-19 14:29:30 +080076 <Route index element={<Navigate to="transactions" replace />} />
wu70fc8c52025-06-19 15:55:03 +080077 <Route path="transactions" element={<TransactionLogs />} />
78 <Route path="performance" element={<PerformanceLogs />} />
wu2f28f672025-06-19 14:29:30 +080079 </Route>
80 </Route>
TRM-coding85e5c322025-06-18 19:49:21 +080081 </Route>
TRM-codingd1cbf672025-06-18 15:15:08 +080082 </Route>
TRM-coding85e5c322025-06-18 19:49:21 +080083
wu70fc8c52025-06-19 15:55:03 +080084 {/* 3. 兜底:未匹配一律回登录 */}
wu2f28f672025-06-19 14:29:30 +080085 <Route path="*" element={<Navigate to="/login" replace />} />
TRM-codingd1cbf672025-06-18 15:15:08 +080086 </Routes>
wu2f28f672025-06-19 14:29:30 +080087 )
88}