/** * Ant Design Pro v4 use `@ant-design/pro-layout` to handle Layout. * You can view component api by: * https://github.com/ant-design/ant-design-pro-layout */ import ProLayout from '@ant-design/pro-layout' import React, { useEffect, useMemo, useRef } from 'react' import { Link, useIntl, connect, history } from 'umi' import { Result, Button } from 'antd' import Authorized from '@/utils/Authorized' import RightContent from '@/components/GlobalHeader/RightContent' import { getMatchMenu } from '@umijs/route-utils' import logo from '../assets/logo.svg' import styles from './BasicLayout.less' const noMatch = ( Go Login } /> ) /** * use Authorized check all menu item */ const menuDataRender = menuList => menuList.map(item => { const localItem = { ...item, children: item.children ? menuDataRender(item.children) : undefined } return Authorized.check(item.authority, localItem, null) }) // const defaultFooterDom = ( // , // href: 'https://github.com/ant-design/ant-design-pro', // blankTarget: true, // }, // { // key: 'Ant Design', // title: 'Ant Design', // href: 'https://ant.design', // blankTarget: true, // }, // ]} // /> // ); const BasicLayout = props => { const { dispatch, children, settings, location = { pathname: '/' } } = props const menuDataRef = useRef([]) useEffect(() => { if (dispatch) { dispatch({ type: 'user/fetchCurrent' }) } }, [ dispatch ]) /** * init variables */ const handleMenuCollapse = payload => { if (dispatch) { dispatch({ type: 'global/changeLayoutCollapsed', payload }) } } // get children authority const authorized = useMemo( () => getMatchMenu(location.pathname || '/', menuDataRef.current).pop() || { authority: undefined }, [ location.pathname ] ) const { formatMessage } = useIntl() return ( history.push('/')} menuItemRender={(menuItemProps, defaultDom) => { if (menuItemProps.isUrl || !menuItemProps.path) { return defaultDom } return {defaultDom} }} breadcrumbRender={(routers = []) => [ { path: '/', breadcrumbName: formatMessage({ id: 'menu.home' }) }, ...routers ]} itemRender={(route, params, routes, paths) => { const first = routes.indexOf(route) === 0 return first ? ( {route.breadcrumbName} ) : ( {route.breadcrumbName} ) }} // footerRender={() => defaultFooterDom} menuDataRender={menuDataRender} rightContentRender={() => } postMenuData={menuData => { menuDataRef.current = menuData || [] return menuData || [] }}> {children} ) } export default connect(({ global, settings }) => ({ collapsed: global.collapsed, settings }))(BasicLayout)