前段
Change-Id: I718d4d07ea03c6d2b6bcbd4d426c5d1af2201bf4
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 0000000..66042bc
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,140 @@
+// src/App.jsx
+import React from 'react';
+import {
+ BrowserRouter as Router,
+ Routes,
+ Route,
+ Navigate
+} from 'react-router-dom';
+import Dashboard from './components/Dashboard';
+import Personal from './components/Personal/Personal';
+import AuthForm from './components/AuthForm';
+import AnnouncementDetail from './components/AnnouncementDetail';
+
+import TorrentDetail from './components/TorrentDetail'; // 确保路径正确
+import RequestDetail from './components/RequestDetail';
+import HelpDetail from './components/HelpDetail';
+import Favorite from './components/Personal/Favorite';
+import Upload from './components/Personal/Upload';
+import Notice from './components/Personal/Notice';
+import Setting from './components/Personal/Setting';
+
+import './App.css';
+
+function App() {
+ // 每次应用启动时强制清除 token
+ React.useEffect(() => {
+ localStorage.removeItem('token');
+ console.log('Token cleared on app startup');
+ localStorage.removeItem('username');
+ }, []); // 空依赖数组表示只在组件挂载时执行一次
+
+ const [isAuthenticated, setIsAuthenticated] = React.useState(
+ false
+ );
+
+ const handleLoginSuccess = (token) => {
+ setIsAuthenticated(true);
+ };
+
+ const handleLogout = () => {
+ localStorage.removeItem('token');
+ setIsAuthenticated(false);
+ };
+
+ return (
+ <Router>
+ <Routes>
+ {/* 修改点1:根路径强制跳转到登录页 */}
+ <Route path="/" element={<Navigate to="/login" replace />} />
+
+ {/* 登录页 */}
+ <Route path="/login" element={
+ isAuthenticated ? (
+ <Navigate to="/dashboard" replace />
+ ) : (
+ <AuthForm onLoginSuccess={handleLoginSuccess} />
+ )
+ } />
+
+ {/* 主面板 */}
+ <Route path="/dashboard/:tab?" element={
+ isAuthenticated ? (
+ <Dashboard onLogout={handleLogout} />
+ ) : (
+ <Navigate to="/login" replace />
+ )
+ } />
+
+ {/* 公告详情 */}
+ <Route path="/announcement/:id" element={
+ isAuthenticated ? (
+ <AnnouncementDetail onLogout={handleLogout} />
+ ) : (
+ <Navigate to="/login" replace />
+ )
+ } />
+
+ {/* 个人中心及子功能页面 */}
+ <Route path="/personal" element={
+ isAuthenticated ? <Personal onLogout={handleLogout} /> : <Navigate to="/login" replace />
+ } />
+ <Route path="/personal/favorite" element={
+ isAuthenticated ? <Favorite onLogout={handleLogout} /> : <Navigate to="/login" replace />
+ } />
+ <Route path="/personal/upload" element={
+ isAuthenticated ? <Upload onLogout={handleLogout} /> : <Navigate to="/login" replace />
+ } />
+ <Route path="/personal/notice" element={
+ isAuthenticated ? <Notice onLogout={handleLogout} /> : <Navigate to="/login" replace />
+ } />
+ <Route path="/personal/setting" element={
+ isAuthenticated ? <Setting onLogout={handleLogout} /> : <Navigate to="/login" replace />
+ } />
+
+
+ {/* 404 重定向 */}
+ <Route path="*" element={
+ isAuthenticated ? (
+ <Navigate to="/dashboard" replace />
+ ) : (
+ <Navigate to="/login" replace />
+ )
+ } />
+
+ {/* 求种区 */}
+ <Route path="/request/:id" element={
+ isAuthenticated ? (
+ <RequestDetail onLogout={handleLogout} />
+ ) : (
+ <Navigate to="/login" replace />
+ )
+ } />
+
+ {/* 求助区 */}
+ <Route path="/help/:id" element={
+ isAuthenticated ? (
+ <HelpDetail onLogout={handleLogout} />
+ ) : (
+ <Navigate to="/login" replace />
+ )
+ } />
+
+ <Route path="/torrent/:id" element={
+ isAuthenticated ? (
+ <TorrentDetail onLogout={handleLogout} />
+ ) : (
+ <Navigate to="/login" replace />
+ )
+ } />
+
+
+
+ </Routes>
+
+
+ </Router>
+ );
+}
+
+export default App;
\ No newline at end of file