import { lazy, Suspense, useEffect, useMemo, useState } from "react"; import { Shell } from "./components/Shell"; import AuthProvider from "./auth/AuthProvider"; import { useAuth } from "./auth/useAuth"; import UnauthorizedPage from "./auth/UnauthorizedPage"; import { canAccessEnergy } from "./shared/auth/roles"; import { LoadingState, SkeletonBlock, SurfaceCard } from "./components/ui/surface"; import { buildModules } from "./app/modules"; import { normalizeBrowserPath, readBrowserRoute, } from "./app/routing"; const EleImportPage = lazy(() => import("./modules/ele/EleImportPage")); const FeedbackAdminPage = lazy(() => import("./modules/admin/FeedbackAdminPage")); normalizeBrowserPath(); function AuthGate() { const { isLoading, isAuthenticated, error, user } = useAuth(); const [route, setRoute] = useState(readBrowserRoute); const { routeKey, pathSet } = route; // 监听 hashchange / popstate,让 a href="#/..." 跳转与浏览器前进后退能即时生效 useEffect(() => { const update = () => { setRoute(readBrowserRoute()); }; window.addEventListener("hashchange", update); window.addEventListener("popstate", update); return () => { window.removeEventListener("hashchange", update); window.removeEventListener("popstate", update); }; }, []); useEffect(() => { document.title = pathSet === "energy" ? "羚牛氢能-能源BI" : "羚牛氢能-资产BI"; }, [pathSet]); const modules = useMemo( () => buildModules(pathSet, user?.roles), [pathSet, user?.roles], ); if (isLoading) { return (