// src/layouts/BasicLayout.tsx import React from 'react'; import ProLayout, { PageContainer } from '@ant-design/pro-layout'; import { Link, useLocation, useIntl, useHistory } from 'umi'; import { connect } from 'dva'; import defaultSettings from '../../config/defaultSettings'; import routes from '../../config/router.config'; // 引入你的自定义路由结构 import { ConfigProvider, Breadcrumb } from 'antd'; import HeaderComponent from './Header'; import IconFont from '@/components/IconFont/IconFont'; import { BreadcrumbState } from '@/models/breadcrumb'; const MenuRender = (item: any, isSubMenu: boolean) => { const intl = useIntl(); return ( <> {isSubMenu ? ( {intl.formatMessage({ id: `menu.${item.name}` || '' })} ) : ( {intl.formatMessage({ id: `menu.${item.name}` || '' })} )} ); }; const BreadcrumbRender = (routeBreadcrumb: any, intl: any, history: any, dynamicBreadcrumbName: string | null) => { const breadcrumbRoutes = routeBreadcrumb?.routes; return ( { history.push('/'); }} > {intl.formatMessage({ id: 'menu.首页' })} {breadcrumbRoutes?.map((item: any, index: number) => { // 判断是否是最后一个面包屑项且存在动态名称 const isLastItem = index === (breadcrumbRoutes.length - 1); const displayName = (isLastItem && dynamicBreadcrumbName) ? dynamicBreadcrumbName : intl.formatMessage({ id: `menu.${item.breadcrumbName}` || '' }); return ( {displayName} ); })} ); }; interface BasicLayoutProps { children: React.ReactNode; breadcrumb: BreadcrumbState; } const BasicLayout: React.FC = (props) => { const { children, breadcrumb } = props; const location = useLocation(); const intl = useIntl(); const history = useHistory(); return ( { return MenuRender(menuItemProps, true); }} menuItemRender={(item, dom) => { return MenuRender(item, false); }} location={location} fixSiderbar layout="mix" headerRender={() => { return ; }} > BreadcrumbRender(routeBreadcrumb, intl, history, breadcrumb.breadcrumbName), }} > {children} ); }; export default connect(({ breadcrumb }: { breadcrumb: BreadcrumbState }) => ({ breadcrumb }))(BasicLayout);