ybt | 02e716d | 2025-04-15 17:19:32 +0800 | [diff] [blame^] | 1 | import { Navigate } from 'react-router-dom'; |
| 2 | import { useEffect, useState } from 'react'; |
| 3 | import { Spin } from 'antd'; |
| 4 | |
| 5 | const ProtectedRoute = ({ children }) => { |
| 6 | const [loading, setLoading] = useState(true); |
| 7 | const [isAuthenticated, setIsAuthenticated] = useState(false); |
| 8 | |
| 9 | useEffect(() => { |
| 10 | // 简单检查是否有token |
| 11 | const token = localStorage.getItem('token'); |
| 12 | if (token) { |
| 13 | setIsAuthenticated(true); |
| 14 | } |
| 15 | setLoading(false); |
| 16 | }, []); |
| 17 | |
| 18 | if (loading) { |
| 19 | return ( |
| 20 | <div className="flex justify-center items-center h-screen"> |
| 21 | <Spin spinning={loading} fullScreen tip="加载中..."> |
| 22 | {children} |
| 23 | </Spin> |
| 24 | </div> |
| 25 | ); |
| 26 | } |
| 27 | |
| 28 | if (!isAuthenticated) { |
| 29 | return <Navigate to="/login" replace />; |
| 30 | } |
| 31 | |
| 32 | return children; |
| 33 | }; |
| 34 | |
| 35 | export default ProtectedRoute; |