tab国际化

This commit is contained in:
linxd
2025-07-14 10:13:56 +08:00
parent 89d7a8a2e1
commit 087d84a08b
2 changed files with 32 additions and 22 deletions

View File

@ -34,7 +34,12 @@ const MenuRender = (item: any, isSubMenu: boolean) => {
); );
}; };
const BreadcrumbRender = (routeBreadcrumb: any, intl: any, history: any, dynamicBreadcrumbName: string | null) => { const BreadcrumbRender = (
routeBreadcrumb: any,
intl: any,
history: any,
dynamicBreadcrumbName: string | null,
) => {
const breadcrumbRoutes = routeBreadcrumb?.routes; const breadcrumbRoutes = routeBreadcrumb?.routes;
return ( return (
<Breadcrumb> <Breadcrumb>
@ -43,22 +48,17 @@ const BreadcrumbRender = (routeBreadcrumb: any, intl: any, history: any, dynamic
history.push('/'); history.push('/');
}} }}
> >
<span style={{ cursor: 'pointer' }}> <span style={{ cursor: 'pointer' }}>{intl.formatMessage({ id: 'menu.首页' })}</span>
{intl.formatMessage({ id: 'menu.首页' })}
</span>
</Breadcrumb.Item> </Breadcrumb.Item>
{breadcrumbRoutes?.map((item: any, index: number) => { {breadcrumbRoutes?.map((item: any, index: number) => {
// 判断是否是最后一个面包屑项且存在动态名称 // 判断是否是最后一个面包屑项且存在动态名称
const isLastItem = index === (breadcrumbRoutes.length - 1); const isLastItem = index === breadcrumbRoutes.length - 1;
const displayName = (isLastItem && dynamicBreadcrumbName) const displayName =
? dynamicBreadcrumbName isLastItem && dynamicBreadcrumbName
: intl.formatMessage({ id: `menu.${item.breadcrumbName}` || '' }); ? dynamicBreadcrumbName
: intl.formatMessage({ id: `menu.${item.breadcrumbName}` || '' });
return ( return <Breadcrumb.Item key={item.path}>{displayName}</Breadcrumb.Item>;
<Breadcrumb.Item key={item.path}>
{displayName}
</Breadcrumb.Item>
);
})} })}
</Breadcrumb> </Breadcrumb>
); );
@ -77,10 +77,12 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
const intl = useIntl(); const intl = useIntl();
const history = useHistory(); const history = useHistory();
console.log('tab model state:', tab);
const handleTabChange = (key: string) => { const handleTabChange = (key: string) => {
dispatch({ dispatch({
type: 'tab/switchTab', type: 'tab/switchTab',
payload: { key } payload: { key },
}); });
}; };
@ -88,7 +90,7 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
if (action === 'remove') { if (action === 'remove') {
dispatch({ dispatch({
type: 'tab/closeTab', type: 'tab/closeTab',
payload: { key: targetKey } payload: { key: targetKey },
}); });
} }
}; };
@ -118,7 +120,11 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
// breadcrumbRender: ({ breadcrumb: routeBreadcrumb }) => // breadcrumbRender: ({ breadcrumb: routeBreadcrumb }) =>
// BreadcrumbRender(routeBreadcrumb, intl, history, breadcrumb.breadcrumbName), // BreadcrumbRender(routeBreadcrumb, intl, history, breadcrumb.breadcrumbName),
}} }}
tabList={tab.tabList} // 将tab.tabList转换为需要的格式添加国际化处理
tabList={tab.tabList.map(item => ({
...item,
tab: typeof item.tab === 'string' ? intl.formatMessage({ id: `menu.${item.tab}` }) : item.tab
}))}
tabProps={{ tabProps={{
type: 'editable-card', type: 'editable-card',
hideAdd: true, hideAdd: true,
@ -127,7 +133,9 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
onEdit: handleTabEdit, onEdit: handleTabEdit,
size: 'small', size: 'small',
tabBarGutter: 6, tabBarGutter: 6,
renderTabBar: (props, DefaultTabBar) => <DefaultTabBar {...props} className="custom-tab-bar" />, renderTabBar: (propsTab, DefaultTabBar) => (
<DefaultTabBar {...propsTab} className="custom-tab-bar" />
),
}} }}
> >
{children} {children}
@ -137,8 +145,9 @@ const BasicLayout: React.FC<BasicLayoutProps> = (props) => {
); );
}; };
export default connect(({ breadcrumb, tab }: { breadcrumb: BreadcrumbState; tab: TabModelState }) => ({ export default connect(
breadcrumb, ({ breadcrumb, tab }: { breadcrumb: BreadcrumbState; tab: TabModelState }) => ({
tab breadcrumb,
}))(BasicLayout); tab,
}),
)(BasicLayout);

View File

@ -168,6 +168,7 @@ const TabModel: TabModelType = {
payload: { payload: {
path: pathname, path: pathname,
key: pathname, key: pathname,
// 直接使用菜单名称作为国际化ID
tab: currentRoute.name || '未命名页面', tab: currentRoute.name || '未命名页面',
}, },
}); });