blob: dba8f843b774c8686b24dfb06187a47c436adf67 [file] [log] [blame]
Akane121765b61a72025-05-17 13:52:25 +08001// src/App.jsx
2import React from 'react';
3import {
4 BrowserRouter as Router,
5 Routes,
6 Route,
7 Navigate
8} from 'react-router-dom';
9import Dashboard from './components/Dashboard';
10import Personal from './components/Personal/Personal';
11import AuthForm from './components/AuthForm';
12import AnnouncementDetail from './components/AnnouncementDetail';
13
14import TorrentDetail from './components/TorrentDetail'; // 确保路径正确
15import RequestDetail from './components/RequestDetail';
16import HelpDetail from './components/HelpDetail';
17import Favorite from './components/Personal/Favorite';
18import Upload from './components/Personal/Upload';
19import Notice from './components/Personal/Notice';
20import Setting from './components/Personal/Setting';
22301080a93bebb2025-05-27 19:48:11 +080021import Administer from './components/Administer';
Akane121765b61a72025-05-17 13:52:25 +080022
23import './App.css';
24
25function App() {
26 // 每次应用启动时强制清除 token
27 React.useEffect(() => {
28 localStorage.removeItem('token');
29 console.log('Token cleared on app startup');
30 localStorage.removeItem('username');
31 }, []); // 空依赖数组表示只在组件挂载时执行一次
32
33 const [isAuthenticated, setIsAuthenticated] = React.useState(
34 false
35 );
36
37 const handleLoginSuccess = (token) => {
38 setIsAuthenticated(true);
39 };
40
41 const handleLogout = () => {
42 localStorage.removeItem('token');
43 setIsAuthenticated(false);
44 };
45
46 return (
47 <Router>
48 <Routes>
49 {/* 修改点1:根路径强制跳转到登录页 */}
50 <Route path="/" element={<Navigate to="/login" replace />} />
51
52 {/* 登录页 */}
53 <Route path="/login" element={
54 isAuthenticated ? (
55 <Navigate to="/dashboard" replace />
56 ) : (
57 <AuthForm onLoginSuccess={handleLoginSuccess} />
58 )
59 } />
60
61 {/* 主面板 */}
62 <Route path="/dashboard/:tab?" element={
63 isAuthenticated ? (
64 <Dashboard onLogout={handleLogout} />
65 ) : (
66 <Navigate to="/login" replace />
67 )
68 } />
69
70 {/* 公告详情 */}
71 <Route path="/announcement/:id" element={
72 isAuthenticated ? (
73 <AnnouncementDetail onLogout={handleLogout} />
74 ) : (
75 <Navigate to="/login" replace />
76 )
77 } />
78
79 {/* 个人中心及子功能页面 */}
80 <Route path="/personal" element={
81 isAuthenticated ? <Personal onLogout={handleLogout} /> : <Navigate to="/login" replace />
82 } />
83 <Route path="/personal/favorite" element={
84 isAuthenticated ? <Favorite onLogout={handleLogout} /> : <Navigate to="/login" replace />
85 } />
86 <Route path="/personal/upload" element={
87 isAuthenticated ? <Upload onLogout={handleLogout} /> : <Navigate to="/login" replace />
88 } />
89 <Route path="/personal/notice" element={
90 isAuthenticated ? <Notice onLogout={handleLogout} /> : <Navigate to="/login" replace />
91 } />
92 <Route path="/personal/setting" element={
93 isAuthenticated ? <Setting onLogout={handleLogout} /> : <Navigate to="/login" replace />
94 } />
95
96
97 {/* 404 重定向 */}
98 <Route path="*" element={
99 isAuthenticated ? (
100 <Navigate to="/dashboard" replace />
101 ) : (
102 <Navigate to="/login" replace />
103 )
104 } />
105
22301080a93bebb2025-05-27 19:48:11 +0800106 {/* 新增管理员中心路由 */}
107 <Route path="/administer" element={
108 isAuthenticated ? (
109 <Administer onLogout={handleLogout} />
110 ) : (
111 <Navigate to="/login" replace />
112 )
113 } />
114
Akane121765b61a72025-05-17 13:52:25 +0800115 {/* 求种区 */}
116 <Route path="/request/:id" element={
117 isAuthenticated ? (
118 <RequestDetail onLogout={handleLogout} />
119 ) : (
120 <Navigate to="/login" replace />
121 )
122 } />
123
124 {/* 求助区 */}
125 <Route path="/help/:id" element={
126 isAuthenticated ? (
127 <HelpDetail onLogout={handleLogout} />
128 ) : (
129 <Navigate to="/login" replace />
130 )
131 } />
132
133 <Route path="/torrent/:id" element={
134 isAuthenticated ? (
135 <TorrentDetail onLogout={handleLogout} />
136 ) : (
137 <Navigate to="/login" replace />
138 )
139 } />
140
141
142
143 </Routes>
144
145
146 </Router>
147 );
148}
149
150export default App;