|
|
|
@ -3,6 +3,8 @@ |
|
|
|
import React from 'react'; |
|
|
|
import { Layout } from 'antd'; |
|
|
|
import DocumentTitle from 'react-document-title'; |
|
|
|
import { injectIntl } from 'react-intl'; |
|
|
|
import memoizeOne from 'memoize-one'; |
|
|
|
import { connect } from 'dva'; |
|
|
|
// import { Route, Redirect, Switch } from 'dva/router';
|
|
|
|
import { ContainerQuery } from 'react-container-query'; |
|
|
|
@ -26,7 +28,7 @@ const { AuthorizedRoute, check } = Authorized; |
|
|
|
* @param {Object} menuData 菜单配置 |
|
|
|
* @param {Object} routerData 路由配置 |
|
|
|
*/ |
|
|
|
const getBreadcrumbNameMap = (meun, router) => { |
|
|
|
const getBreadcrumbNameMap = memoizeOne((meun, router) => { |
|
|
|
const routerMap = {}; |
|
|
|
const mergeMeunAndRouter = meunData => { |
|
|
|
meunData.forEach(meunItem => { |
|
|
|
@ -38,7 +40,7 @@ const getBreadcrumbNameMap = (meun, router) => { |
|
|
|
}; |
|
|
|
mergeMeunAndRouter(meun); |
|
|
|
return routerMap; |
|
|
|
}; |
|
|
|
}); |
|
|
|
|
|
|
|
const query = { |
|
|
|
'screen-xs': { |
|
|
|
@ -66,31 +68,38 @@ const query = { |
|
|
|
}; |
|
|
|
|
|
|
|
class BasicLayout extends React.PureComponent { |
|
|
|
constructor(props) { |
|
|
|
super(props); |
|
|
|
const { routerData, menuData } = this.props; |
|
|
|
this.breadcrumbNameMap = getBreadcrumbNameMap(menuData, routerData); |
|
|
|
} |
|
|
|
|
|
|
|
getContext() { |
|
|
|
const { location, routerData, menuData } = this.props; |
|
|
|
console.log(getBreadcrumbNameMap(menuData, routerData)); |
|
|
|
const { location } = this.props; |
|
|
|
return { |
|
|
|
location, |
|
|
|
breadcrumbNameMap: getBreadcrumbNameMap(menuData, routerData), |
|
|
|
breadcrumbNameMap: this.breadcrumbNameMap, |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
getPageTitle() { |
|
|
|
const { routerData, location } = this.props; |
|
|
|
const { pathname } = location; |
|
|
|
let title = 'Ant Design Pro'; |
|
|
|
getPageTitle = pathname => { |
|
|
|
let currRouterData = null; |
|
|
|
const { intl } = this.props; |
|
|
|
// match params path
|
|
|
|
Object.keys(routerData).forEach(key => { |
|
|
|
Object.keys(this.breadcrumbNameMap).forEach(key => { |
|
|
|
if (pathToRegexp(key).test(pathname)) { |
|
|
|
currRouterData = routerData[key]; |
|
|
|
currRouterData = this.breadcrumbNameMap[key]; |
|
|
|
} |
|
|
|
}); |
|
|
|
if (currRouterData && currRouterData.name) { |
|
|
|
title = `${currRouterData.name} - Ant Design Pro`; |
|
|
|
if (!currRouterData) { |
|
|
|
return 'Ant Design Pro'; |
|
|
|
} |
|
|
|
return title; |
|
|
|
} |
|
|
|
const message = intl.formatMessage({ |
|
|
|
id: currRouterData.locale || currRouterData.name, |
|
|
|
defaultMessage: currRouterData.name, |
|
|
|
}); |
|
|
|
return `${message} - Ant Design Pro`; |
|
|
|
}; |
|
|
|
|
|
|
|
getLayoutStyle = () => { |
|
|
|
const { fixSiderbar, collapsed, layout } = this.props; |
|
|
|
@ -148,7 +157,7 @@ class BasicLayout extends React.PureComponent { |
|
|
|
silderTheme, |
|
|
|
layout: PropsLayout, |
|
|
|
children, |
|
|
|
// match,
|
|
|
|
location: { pathname }, |
|
|
|
} = this.props; |
|
|
|
const isTop = PropsLayout === 'topmenu'; |
|
|
|
// const bashRedirect = this.getBashRedirect();
|
|
|
|
@ -190,9 +199,9 @@ class BasicLayout extends React.PureComponent { |
|
|
|
</Layout> |
|
|
|
</Layout> |
|
|
|
); |
|
|
|
|
|
|
|
const getPageTitle = memoizeOne(this.getPageTitle); |
|
|
|
return ( |
|
|
|
<DocumentTitle title={this.getPageTitle()}> |
|
|
|
<DocumentTitle title={getPageTitle(pathname)}> |
|
|
|
<ContainerQuery query={query}> |
|
|
|
{params => ( |
|
|
|
<Context.Provider value={this.getContext()}> |
|
|
|
@ -212,4 +221,4 @@ export default connect(({ global, setting }) => ({ |
|
|
|
collapsed: global.collapsed, |
|
|
|
layout: setting.layout, |
|
|
|
...setting, |
|
|
|
}))(BasicLayout); |
|
|
|
}))(injectIntl(BasicLayout)); |
|
|
|
|