import React from 'react'; import { BasicLayoutProps, Settings as LayoutSettings, MenuDataItem } from '@ant-design/pro-layout'; import { Button, notification, Result } from 'antd'; import { history, RequestConfig } from 'umi'; import RightContent from '@/components/RightContent'; import { ResponseError } from 'umi-request'; import { queryCurrent, getMenu } from './services/user'; import defaultSettings from '../config/defaultSettings'; import { DesktopOutlined, MessageOutlined, SendOutlined, TeamOutlined, QrcodeOutlined, DatabaseOutlined, ReadOutlined, MobileOutlined, FundViewOutlined, RadarChartOutlined, BarChartOutlined, WechatOutlined, BookOutlined, FileImageOutlined, EyeOutlined, UserOutlined, UserSwitchOutlined } from '@ant-design/icons'; import { getMyMenu, headrRouter } from '../config/routerConfig'; import { ReactComponent as LaunchSvg } from '@/assets/launch.svg' import { ReactComponent as AdLaunchSvg } from '@/assets/adLaunch.svg' import { ReactComponent as MaterialSvg } from '@/assets/material.svg' import { ReactComponent as GdtSvg } from '@/assets/gdt.svg' import { ReactComponent as MonitorSvg } from '@/assets/monitor.svg' import { ReactComponent as AssetSvg } from '@/assets/asset.svg' import { ReactComponent as AssetLibrarySvg } from '@/assets/assetLibrary.svg' import versions from './utils/versions'; interface CurrentUser { avatar?: string; name?: string; title?: string; group?: string; signature?: string; tags?: { key: string; label: string; }[]; userId?: string; powerLevel?: number; access?: 'user' | 'guest' | 'admin' | any; unreadCount?: number; companyList?: any[], onlineCompanyId?: number } export async function getInitialState(): Promise<{ currentUser?: CurrentUser; settings?: LayoutSettings; menu?: any, loading?: boolean, collapsed?: string, onCollapse?: (onCollapse: boolean) => void }> { // 如果是登录页面,不执行 if (sessionStorage.getItem('Admin-Token')) { //开始版本号对比 versions() try { sessionStorage.removeItem('msg') let currentUser = {} let userInfo: any = await queryCurrent();//用户信息 let companyInfo = userInfo?.data?.companyRelationInfo?.filter((item: { companyId: number }) => item.companyId !== 4 && item.companyId !== 3) currentUser = { access: 'admin', powerLevel: userInfo?.data?.userInfo?.powerLevel, name: userInfo?.data?.userInfo?.nickname || '', userId: userInfo?.data?.userInfo?.userId, phone: userInfo?.data?.userInfo?.phone || '', companyList: companyInfo, onlineCompanyId: userInfo?.data?.onlineCompanyId }//处理个人信息 let menu: any = await getMenu().then(async (res: any) => {//获取菜单并处理 let { code, data } = res let path = getMyMenu(code, data) if (userInfo?.data?.userInfo?.account === 'admin' && path.length > 0) {//假如是ADMIN加入api测试 path[0].routes.push({ key: 0, path: '/operatePage/apitest', name: 'api测试', icon: '', component: './operatePage/apitest', roles: 'admin' }) } return { data: path.reverse() } }); localStorage.setItem('sex', userInfo?.data?.userInfo?.sex) localStorage.setItem('userId', userInfo?.data?.userInfo?.userId) localStorage.setItem('name', userInfo?.data?.userInfo?.nickname) return { currentUser, settings: { ...defaultSettings }, loading: false, menu, collapsed: '0', onCollapse: (collapsed: boolean) => { let v = collapsed ? '1' : '0' localStorage.setItem('collapsed', v) } }; } catch (error) { console.log(111111, error) history.push('/user/login'); } } return { settings: defaultSettings, }; } // 枚举转译服务端菜单icon const IconMap = { desktop: , message: , send: , team: , database: , qrcode: , read: , mobile: , fundView: , radarChart: , barChart: , wechat: , book: , peoples: , 'file-image': , launch: , adLaunch: , material: , gdt: , monitor: , eye: , user: , asset: , assetLibrary: , }; //处理菜单 const loopMenuItem = (menus: MenuDataItem[],): MenuDataItem[] => { let menu = menus?.map(({ icon, routes, roles, ...item }) => { let newItem = JSON.parse(JSON.stringify(item)) newItem.key = item?.path || item?.key return { ...newItem, hideInMenu: false,//校验隐藏菜单 icon: icon && IconMap[icon as keyof typeof IconMap], children: routes && loopMenuItem(routes), } }) return menu } export const layout = ({ initialState }: { initialState: { settings?: LayoutSettings; currentUser?: CurrentUser; menu?: any; loading: boolean, collapsed: string, onCollapse: any }; }): BasicLayoutProps => { return { menuDataRender: () => { return loopMenuItem(initialState?.menu?.data || []) },//解析服务端菜单 rightContentRender: () => , disableContentMargin: false, collapsed: localStorage.collapsed === '1', onCollapse: initialState.onCollapse, breakpoint: false, // footerRender: () =>