import { Footer, AvatarDropdown, AvatarName } from '@/components'; import type { Settings as LayoutSettings } from '@ant-design/pro-components'; import { PageLoading, SettingDrawer } from '@ant-design/pro-components'; import type { RunTimeLayoutConfig } from '@umijs/max'; import { history } from '@umijs/max'; import defaultSettings from '../config/defaultSettings'; import { errorConfig } from './requestErrorConfig'; import { getMenu, currentUser as queryCurrentUser } from '@/services/user/api'; import React from 'react'; import { DesktopOutlined, MessageOutlined, SendOutlined, TeamOutlined, QrcodeOutlined, DatabaseOutlined, ReadOutlined, MobileOutlined, FundViewOutlined, RadarChartOutlined, BarChartOutlined, WechatOutlined, BookOutlined, FileImageOutlined, EyeOutlined, UserOutlined } from '@ant-design/icons'; import { ReactComponent as LaunchSvg } from '@/assets/icons/launch.svg' import { ReactComponent as AdLaunchSvg } from '@/assets/icons/adLaunch.svg' import { ReactComponent as MaterialSvg } from '@/assets/icons/material.svg' import { ReactComponent as NumberSvg } from '@/assets/icons/number.svg' import { ReactComponent as GameSvg } from '@/assets/icons/game.svg' import { ReactComponent as GameServerSvg } from '@/assets/icons/gameServer.svg' import { ReactComponent as MediaSvg } from '@/assets/icons/media.svg' import { ReactComponent as PlayerSvg } from '@/assets/icons/player.svg' import { ReactComponent as RoleManageSvg } from '@/assets/icons/roleManage.svg' import { ReactComponent as MonitorSvg } from '@/assets/icons/monitor.svg' import { ReactComponent as BarChartSvg } from '@/assets/icons/barChart.svg' import { ReactComponent as PitcherDataSvg } from '@/assets/icons/pitcherData.svg' import { ReactComponent as WeChatDataSvg } from '@/assets/icons/weChatData.svg' import { ReactComponent as BookDataSvg } from '@/assets/icons/bookData.svg' import { ReactComponent as ImageDataSvg } from '@/assets/icons/imageData.svg' import { ReactComponent as RechargeDataSvg } from '@/assets/icons/rechargeData.svg' import { ReactComponent as NovelDataSystemSvg } from '@/assets/icons/novelDataSystem.svg' import { ReactComponent as CorpChatSvg } from '@/assets/icons/corpChat.svg' import { ReactComponent as WeChatSvg } from '@/assets/icons/weChat.svg' import { ReactComponent as AdLaunchsSvg } from '@/assets/icons/adLaunchs.svg' import { ReactComponent as IaaDataSvg } from '@/assets/icons/iaaData.svg' import { ConfigProvider, Watermark } from 'antd'; const isDev = process.env.NODE_ENV === 'development'; const loginPath = '/user/login'; /** * @see https://umijs.org/zh-CN/plugins/plugin-initial-state * */ export async function getInitialState(): Promise<{ settings?: Partial; currentUser?: API.CurrentUser; loading?: boolean; menu?: any, collapsed?: string, onCollapse?: (onCollapse: boolean) => void fetchUserInfo?: () => Promise; }> { const fetchUserInfo = async () => { try { const msg = await queryCurrentUser(); return msg.data; } catch (error) { history.push(loginPath); } return undefined; }; if (localStorage.getItem('Admin-Token')) { try { sessionStorage.removeItem('IS_MES') const currentUser = await fetchUserInfo(); console.log('currentUser', currentUser) if (currentUser) { const { companyRelationInfo, userInfo: { powerLevel, nickname, userId, phone, sex }, onlineCompanyId } = currentUser const companyInfo = companyRelationInfo?.filter((item: { companyId: number }) => item.companyId !== 4 && item.companyId !== 3) localStorage.setItem('sex', sex) localStorage.setItem('userId', userId) localStorage.setItem('name', nickname) const navTheme: any = localStorage.getItem('NAVTHEME') const isNoDark = localStorage.getItem('ISNODARK') return { fetchUserInfo, currentUser: { access: 'admin', powerLevel, name: nickname || '', userId, phone, companyList: companyInfo, onlineCompanyId: onlineCompanyId }, settings: { ...defaultSettings as Partial, navTheme: navTheme || defaultSettings.navTheme, isNoDark: JSON.parse(isNoDark || 'false') } as any, loading: false, collapsed: '0', onCollapse: (collapsed: boolean) => { const v = collapsed ? '1' : '0' localStorage.setItem('collapsed', v) } }; } } catch (error) { history.push(loginPath); } } return { fetchUserInfo, settings: defaultSettings as Partial, }; } const IconMap = { desktop: , message: , send: , team: , database: , qrcode: , read: , mobile: , fundView: , radarChart: , wechat: , book: , peoples: , barChart: , 'file-image': , launch: , adLaunch: , material: , number: , game: , gameServer: , media: , player: , roleManage: , monitor: , pitcherData: , barChartNoval: , weChatData: , bookData: , imageData: , rechargeData: , novelDataSystem: , eye: }; /** 处理远程路由 */ const handleMenuData = (menuData: any[]) => { return menuData.map(item => { const data: { [x: string]: any } = { name: item.title, path: item.path, icon: item.icon && IconMap[item.icon as keyof typeof IconMap] } if (item?.component) { data.component = item.component } if (item?.children?.length) { data.routes = handleMenuData(item.children) } return data }) } // ProLayout 支持的api https://procomponents.ant.design/components/layout export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => { let isLoading = false; return { splitMenus: true,//切割菜单 className: initialState?.settings?.navTheme === 'realDark' ? 'css-realDark' : (initialState?.settings as any)?.isNoDark ? 'css-light' : 'css-dark', menu: { params: { token: initialState?.currentUser?.userId }, request: async (_, defaultMenuData) => { if (initialState?.currentUser?.userId) { isLoading = true; const menuData = await getMenu(); isLoading = false; if (menuData?.data) { const protoMenu = Object.values(menuData.data).map((item: unknown) => { if (Array.isArray(item)) { return item[0]; } return null; // 或者根据业务逻辑返回默认值 }).filter(Boolean) as any[] const { location } = history; if (location.pathname === '/') { // 如果当前路径是根路径,则重定向到第一个菜单的第一个子菜单 const firstPath = protoMenu?.[0]?.children?.[0]?.path || protoMenu?.[0]?.children?.[0]?.children?.[0]?.path; if (firstPath) { history.push(firstPath); } } const menuSync = handleMenuData(protoMenu) const menu = [ { path: '/user', layout: false, routes: [ { name: 'login', path: '/user/login', component: './User/Login', }, ], }, { path: '/', redirect: '/dataStatisticsNovel' //firStPath, }, ...menuSync.map(({ routes, ...item }) => { return { ...item, routes: [{ path: item.path, redirect: routes[0].path }, ...routes] } }), { path: '/mp', name: '运营系统', icon: }, { path: '/corpChat', name: '企微系统', icon: }, { path: '/adLaunch', name: '投放系统', icon: }, { path: '/iaaData', name: 'IAA数据系统', icon: }, ] setInitialState(s => ({ ...s, menu: menuData?.data })) return menu; } } return defaultMenuData }, loading: isLoading }, avatarProps: { src: initialState?.currentUser?.avatar || 'https://gw.alipayobjects.com/zos/rmsportal/BiazfanxmamNRoxxVxka.png', title: , render: (_, avatarChildren) => { return {avatarChildren}; }, }, footerRender: () =>