App_20250813115037.tsx 2.4 KB

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