App_20250814102425.tsx 2.5 KB

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