blob: 66042bcd9a07bf228167c079a2aace613b01e952 [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';
21
22import './App.css';
23
24function App() {
25 // 每次应用启动时强制清除 token
26 React.useEffect(() => {
27 localStorage.removeItem('token');
28 console.log('Token cleared on app startup');
29 localStorage.removeItem('username');
30 }, []); // 空依赖数组表示只在组件挂载时执行一次
31
32 const [isAuthenticated, setIsAuthenticated] = React.useState(
33 false
34 );
35
36 const handleLoginSuccess = (token) => {
37 setIsAuthenticated(true);
38 };
39
40 const handleLogout = () => {
41 localStorage.removeItem('token');
42 setIsAuthenticated(false);
43 };
44
45 return (
46 <Router>
47 <Routes>
48 {/* 修改点1:根路径强制跳转到登录页 */}
49 <Route path="/" element={<Navigate to="/login" replace />} />
50
51 {/* 登录页 */}
52 <Route path="/login" element={
53 isAuthenticated ? (
54 <Navigate to="/dashboard" replace />
55 ) : (
56 <AuthForm onLoginSuccess={handleLoginSuccess} />
57 )
58 } />
59
60 {/* 主面板 */}
61 <Route path="/dashboard/:tab?" element={
62 isAuthenticated ? (
63 <Dashboard onLogout={handleLogout} />
64 ) : (
65 <Navigate to="/login" replace />
66 )
67 } />
68
69 {/* 公告详情 */}
70 <Route path="/announcement/:id" element={
71 isAuthenticated ? (
72 <AnnouncementDetail onLogout={handleLogout} />
73 ) : (
74 <Navigate to="/login" replace />
75 )
76 } />
77
78 {/* 个人中心及子功能页面 */}
79 <Route path="/personal" element={
80 isAuthenticated ? <Personal onLogout={handleLogout} /> : <Navigate to="/login" replace />
81 } />
82 <Route path="/personal/favorite" element={
83 isAuthenticated ? <Favorite onLogout={handleLogout} /> : <Navigate to="/login" replace />
84 } />
85 <Route path="/personal/upload" element={
86 isAuthenticated ? <Upload onLogout={handleLogout} /> : <Navigate to="/login" replace />
87 } />
88 <Route path="/personal/notice" element={
89 isAuthenticated ? <Notice onLogout={handleLogout} /> : <Navigate to="/login" replace />
90 } />
91 <Route path="/personal/setting" element={
92 isAuthenticated ? <Setting onLogout={handleLogout} /> : <Navigate to="/login" replace />
93 } />
94
95
96 {/* 404 重定向 */}
97 <Route path="*" element={
98 isAuthenticated ? (
99 <Navigate to="/dashboard" replace />
100 ) : (
101 <Navigate to="/login" replace />
102 )
103 } />
104
105 {/* 求种区 */}
106 <Route path="/request/:id" element={
107 isAuthenticated ? (
108 <RequestDetail onLogout={handleLogout} />
109 ) : (
110 <Navigate to="/login" replace />
111 )
112 } />
113
114 {/* 求助区 */}
115 <Route path="/help/:id" element={
116 isAuthenticated ? (
117 <HelpDetail onLogout={handleLogout} />
118 ) : (
119 <Navigate to="/login" replace />
120 )
121 } />
122
123 <Route path="/torrent/:id" element={
124 isAuthenticated ? (
125 <TorrentDetail onLogout={handleLogout} />
126 ) : (
127 <Navigate to="/login" replace />
128 )
129 } />
130
131
132
133 </Routes>
134
135
136 </Router>
137 );
138}
139
140export default App;