import React, { useMemo, useEffect, Suspense } from "react"; import { App, Layout } from "antd"; import { useSelector } from "react-redux"; import { Route, Routes, useNavigate, Navigate } from "react-router-dom"; import { Content } from "antd/es/layout/layout"; import { hasToken, getTokenInfo, DageLoading } from "@dage/pc-components"; import store from "@/store"; import { LayoutMenu, LayoutHeader } from "./components"; import { RootState } from "@/store"; import LogoImage from "@/assets/images/logo.png"; import { DEFAULT_ADMIN_MENU, DEFAULT_MENU, DageRouteItem } from "@/router"; import "./index.scss"; const NotFound = React.lazy(() => import("@/components/NotFound")); export default function CustomLayout() { const navigate = useNavigate(); const baseStore = useSelector( (state) => state.base ); const menuList = useMemo(() => { return baseStore.userInfo?.user.isAdmin ? [...DEFAULT_MENU, ...DEFAULT_ADMIN_MENU] : [...DEFAULT_MENU]; }, [baseStore.userInfo]); useEffect(() => { if (!hasToken()) { navigate("/login", { replace: true, }); } else { store.dispatch({ type: "setUserInfo", payload: getTokenInfo() }); } }, [navigate]); return ( {/* 菜单 */}
logo
{/* 头部 */} {/* 主体 */} }> {menuList.length && ( } /> {renderRoutes(menuList).map((menu) => menu.redirect ? ( } /> ) : ( ) )} )}
); } function renderRoutes(routes: DageRouteItem[]) { function deep(v: DageRouteItem[]) { const stack: DageRouteItem[] = []; v.forEach((item) => { const { children = [], ...rest } = item; stack.push(rest); if (!!children.length) { stack.push(...deep(children)); } }); return stack; } return deep(routes); }