App_20250812134440.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // entrypoints/popup/App.tsx
  2. import { useState, useEffect } from 'react';
  3. import { HashRouter as Router, Routes, Route, Navigate } from 'react-router-dom';
  4. import { Link, useNavigate } from 'react-router-dom';
  5. import '@alifd/next/dist/next.css'; // 将 Fusion Design 样式放在最前面
  6. import './App.css';
  7. import '../../assets/tailwind.css'
  8. import Login from './pages/Login'
  9. // 创建一个保护路由组件
  10. function ProtectedRoute({ children }: { children: React.ReactNode }) {
  11. const isLoggedIn = localStorage.getItem('isLoggedIn');
  12. return isLoggedIn ? <>{children}</> : <Navigate to="/login" replace />;
  13. }
  14. // 创建带登出功能的导航组件
  15. function Navigation({ onLogout }: { onLogout: () => void }) {
  16. const navigate = useNavigate();
  17. const handleLogout = () => {
  18. onLogout();
  19. navigate('/login');
  20. };
  21. return (
  22. <nav className="flex gap-4 p-4 items-center">
  23. <Link to="/" className="text-blue-500 hover:underline">首页</Link>
  24. {/* <Link to="/about" className="text-blue-500 hover:underline">关于</Link>
  25. <Link to="/home" className="text-blue-500 hover:underline">主页</Link> */}
  26. <button
  27. onClick={handleLogout}
  28. className="ml-auto text-red-500 hover:underline"
  29. >
  30. 退出登录
  31. </button>
  32. </nav>
  33. );
  34. }
  35. function App() {
  36. const [count, setCount] = useState(0);
  37. const [isLoggedIn, setIsLoggedIn] = useState(false);
  38. // 检查登录状态
  39. useEffect(() => {
  40. const loggedIn = localStorage.getItem('isLoggedIn') === 'true';
  41. setIsLoggedIn(loggedIn);
  42. }, []);
  43. // 处理登出逻辑
  44. const handleLogout = () => {
  45. localStorage.removeItem('isLoggedIn');
  46. localStorage.removeItem('access_token');
  47. setIsLoggedIn(false);
  48. };
  49. return (
  50. <Router>
  51. {/* 只在登录后显示导航栏 */}
  52. {isLoggedIn && <Navigation onLogout={handleLogout} />}
  53. <Routes>
  54. <Route path="/login" element={<Login setIsLoggedIn={setIsLoggedIn} />} />
  55. <Route path="/" element={
  56. <ProtectedRoute>
  57. <div>
  58. <button className='text-red-300'>按钮</button>
  59. </div>
  60. </ProtectedRoute>
  61. } />
  62. {/* <Route path="/about" element={
  63. <ProtectedRoute>
  64. <About />
  65. </ProtectedRoute>
  66. } />
  67. <Route path="/home" element={
  68. <ProtectedRoute>
  69. <Home />
  70. </ProtectedRoute>
  71. } /> */}
  72. </Routes>
  73. </Router>
  74. );
  75. }
  76. export default App;