App_20250814114751.tsx 2.6 KB

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