App_20250812151632.tsx 2.4 KB

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