修改外框layout布局
This commit is contained in:
136
src/models/breadcrumb.ts
Normal file
136
src/models/breadcrumb.ts
Normal file
@ -0,0 +1,136 @@
|
||||
import { Effect, Reducer } from 'umi';
|
||||
|
||||
export interface BreadcrumbItem {
|
||||
path: string;
|
||||
breadcrumbName: string;
|
||||
}
|
||||
|
||||
export interface BreadcrumbModelState {
|
||||
breadcrumbs: BreadcrumbItem[];
|
||||
}
|
||||
|
||||
export interface BreadcrumbModelType {
|
||||
namespace: 'breadcrumb';
|
||||
state: BreadcrumbModelState;
|
||||
effects: {
|
||||
updateBreadcrumbs: Effect;
|
||||
};
|
||||
reducers: {
|
||||
saveBreadcrumbs: Reducer<BreadcrumbModelState>;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成面包屑数据
|
||||
* @param pathname 当前路径
|
||||
* @param intl 国际化对象
|
||||
*/
|
||||
const generateBreadcrumbs = (pathname: string, intl: any): BreadcrumbItem[] => {
|
||||
// 如果是首页,直接返回首页
|
||||
if (pathname === '/' || pathname === '/index') {
|
||||
return [
|
||||
{
|
||||
path: '/',
|
||||
breadcrumbName: intl.formatMessage({ id: 'menu.首页' }, { defaultMessage: '首页' }),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
// 构建面包屑数据
|
||||
const breadcrumbs = [
|
||||
{
|
||||
path: '/',
|
||||
breadcrumbName: intl.formatMessage({ id: 'menu.首页' }, { defaultMessage: '首页' }),
|
||||
},
|
||||
];
|
||||
|
||||
// 按照斜杠分割路径
|
||||
const pathSegments = pathname.split('/').filter(segment => segment);
|
||||
let currentPath = '';
|
||||
|
||||
// 构建每一级的路径和对应的面包屑名称
|
||||
for (let i = 0; i < pathSegments.length; i++) {
|
||||
const segment = pathSegments[i];
|
||||
currentPath += `/${segment}`;
|
||||
|
||||
// 尝试使用多语言配置
|
||||
// 先尝试完整路径的多语言配置
|
||||
let menuKey = `menu.${pathSegments.slice(0, i + 1).join('/')}`;
|
||||
let menuName = intl.formatMessage({ id: menuKey }, { defaultMessage: '' });
|
||||
|
||||
// 如果完整路径没有对应的多语言,则尝试使用当前段的多语言
|
||||
if (!menuName) {
|
||||
menuKey = `menu.${segment}`;
|
||||
menuName = intl.formatMessage({ id: menuKey }, { defaultMessage: '' });
|
||||
}
|
||||
|
||||
// 如果仍然没有找到多语言配置,尝试使用特定页面的多语言配置
|
||||
if (!menuName) {
|
||||
// 处理特殊情况,如数据统计下的子页面
|
||||
if (pathSegments[0] === 'dataStatistics') {
|
||||
switch (segment) {
|
||||
case 'supplierEvaluateStatistics':
|
||||
menuName = intl.formatMessage({ id: 'menu.供应商评价情况统计' }, { defaultMessage: '供应商评价情况统计' });
|
||||
break;
|
||||
case 'supplierAnnualStatistics':
|
||||
menuName = intl.formatMessage({ id: 'menu.供应商年审情况统计' }, { defaultMessage: '供应商年审情况统计' });
|
||||
break;
|
||||
case 'supplierQualificationWarningStatistics':
|
||||
menuName = intl.formatMessage({ id: 'menu.供应商资质预警统计' }, { defaultMessage: '供应商资质预警统计' });
|
||||
break;
|
||||
case 'supplierExitStatistics':
|
||||
menuName = intl.formatMessage({ id: 'menu.供应商清退情况统计' }, { defaultMessage: '供应商清退情况统计' });
|
||||
break;
|
||||
default:
|
||||
menuName = segment;
|
||||
}
|
||||
} else if (pathSegments[0] === 'supplierEvaluate') {
|
||||
// 处理供应商评价模块
|
||||
menuName = intl.formatMessage({ id: `menu.${segment}` }, { defaultMessage: segment });
|
||||
} else if (pathSegments[0] === 'supplierAnnual') {
|
||||
// 处理供应商年审模块
|
||||
menuName = intl.formatMessage({ id: `menu.${segment}` }, { defaultMessage: segment });
|
||||
} else {
|
||||
menuName = segment;
|
||||
}
|
||||
}
|
||||
|
||||
breadcrumbs.push({
|
||||
path: currentPath,
|
||||
breadcrumbName: menuName || segment,
|
||||
});
|
||||
}
|
||||
|
||||
return breadcrumbs;
|
||||
};
|
||||
|
||||
const BreadcrumbModel: BreadcrumbModelType = {
|
||||
namespace: 'breadcrumb',
|
||||
|
||||
state: {
|
||||
breadcrumbs: [],
|
||||
},
|
||||
|
||||
effects: {
|
||||
*updateBreadcrumbs({ payload }, { put }) {
|
||||
const { pathname, intl } = payload;
|
||||
console.log(pathname)
|
||||
const breadcrumbs = generateBreadcrumbs(pathname, intl);
|
||||
yield put({
|
||||
type: 'saveBreadcrumbs',
|
||||
payload: breadcrumbs,
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
reducers: {
|
||||
saveBreadcrumbs(state, { payload }) {
|
||||
return {
|
||||
...state,
|
||||
breadcrumbs: payload,
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default BreadcrumbModel;
|
Reference in New Issue
Block a user