import { Route, Routes, useNavigate } from "react-router-dom"; import { useEffect } from "react"; import IndexPage from "@/pages/index"; import ChangePasswordPage from "@/pages/change-password"; import DashboardPage from "@/pages/dashboard"; import ForwardPage from "@/pages/forward"; import TunnelPage from "@/pages/tunnel"; import NodePage from "@/pages/node"; import UserPage from "@/pages/user"; import GroupPage from "@/pages/group"; import ProfilePage from "@/pages/profile"; import LimitPage from "@/pages/limit"; import ConfigPage from "@/pages/config"; import PanelSharingPage from "@/pages/panel-sharing"; import { SettingsPage } from "@/pages/settings"; import AdminLayout from "@/layouts/admin"; import H5Layout from "@/layouts/h5"; import H5SimpleLayout from "@/layouts/h5-simple"; import { isLoggedIn } from "@/utils/auth"; import { siteConfig } from "@/config/site"; import { useH5Mode } from "@/hooks/useH5Mode"; // 简化的路由保护组件 - 使用 React Router 导航避免循环 const ProtectedRoute = ({ children, useSimpleLayout = false, skipLayout = false, }: { children: React.ReactNode; useSimpleLayout?: boolean; skipLayout?: boolean; }) => { const authenticated = isLoggedIn(); const isH5 = useH5Mode(); const navigate = useNavigate(); useEffect(() => { if (!authenticated) { // 使用 React Router 导航,避免无限跳转 navigate("/", { replace: true }); } }, [authenticated, navigate]); if (!authenticated) { return (
); } // 如果跳过布局,直接返回子组件 if (skipLayout) { return <>{children}; } // 根据模式和页面类型选择布局 const Layout = isH5 && useSimpleLayout ? H5SimpleLayout : isH5 ? H5Layout : AdminLayout; return {children}; }; // 登录页面路由组件 - 已登录则重定向到dashboard const LoginRoute = () => { const authenticated = isLoggedIn(); const navigate = useNavigate(); useEffect(() => { if (authenticated) { // 使用 React Router 导航,避免无限跳转 navigate("/dashboard", { replace: true }); } }, [authenticated, navigate]); if (authenticated) { return (
); } return ; }; function App() { // 立即设置页面标题(使用已从缓存读取的配置) useEffect(() => { document.title = siteConfig.name; // 异步检查是否有配置更新 const checkTitleUpdate = async () => { try { // 引入必要的函数 const { getCachedConfig } = await import("@/config/site"); const cachedAppName = await getCachedConfig("app_name"); if (cachedAppName && cachedAppName !== document.title) { document.title = cachedAppName; } } catch {} }; // 延迟检查,避免阻塞初始渲染 const timer = setTimeout(checkTitleUpdate, 100); return () => clearTimeout(timer); }, []); return ( } path="/" /> } path="/change-password" /> } path="/dashboard" /> } path="/forward" /> } path="/tunnel" /> } path="/node" /> } path="/user" /> } path="/group" /> } path="/profile" /> } path="/limit" /> } path="/config" /> } path="/panel-sharing" /> } path="/settings" /> ); } export default App;