import { useEffect } from 'react'; import { BrowserRouter, Routes, Route, Navigate, useNavigate, useLocation } from 'react-router-dom'; import { AnimatePresence, motion } from 'framer-motion'; import { Background } from './components/layout'; import Loader from './components/Loader'; import LoginPage from './pages/LoginPage'; import OnboardingPage from './pages/OnboardingPage'; import DashboardPage from './pages/DashboardPage'; import useStore from './store/useStore'; /** * 路由守卫组件 * 根据登录状态和注册完成状态进行路由重定向 */ const ProtectedRoute = ({ children, requireAuth = false, requireOnboarding = false }) => { const { isLoggedIn, registrationData } = useStore(); const navigate = useNavigate(); // 检查是否完成入站流程 const hasCompletedOnboarding = registrationData.nickname && registrationData.future?.vision; useEffect(() => { if (requireAuth && !isLoggedIn) { navigate('/', { replace: true }); } else if (requireOnboarding && !hasCompletedOnboarding) { navigate('/onboarding', { replace: true }); } }, [isLoggedIn, hasCompletedOnboarding, requireAuth, requireOnboarding, navigate]); if (requireAuth && !isLoggedIn) { return ; } if (requireOnboarding && !hasCompletedOnboarding) { return ; } return children; }; /** * 页面过渡动画包装器 */ const PageTransition = ({ children }) => { return ( {children} ); }; /** * 动画路由组件 */ const AnimatedRoutes = () => { const location = useLocation(); const { isLoggedIn, registrationData } = useStore(); // 检查是否完成入站流程 const hasCompletedOnboarding = registrationData.nickname && registrationData.future?.vision; return ( {/* 登录页 */} ) : ( ) ) : ( ) } /> {/* 入站流程页 */} } /> {/* 仪表盘页 */} } /> {/* 404 重定向 */} } /> ); }; /** * App 主组件 */ function App() { return ( {/* 动态背景 */} {/* 主容器 */}
); } export default App;