Files
tashow-manager/src/utils/menuUtils.tsx
2026-02-27 10:34:49 +08:00

48 lines
1.4 KiB
TypeScript

import { Spin } from 'antd';
import React from 'react';
import type { MenuVO } from '@/services/system/menu';
export const loopMenuItem = (
menus: MenuVO[],
pId: number | string = '/',
): any[] => {
return menus.map((item) => {
let Component: React.ComponentType<any> | null = null;
if (item.component && item.component.trim().length > 0) {
// 防止配置了路由,但本地暂未添加对应的页面,产生的错误
Component = React.lazy(() => {
const importComponent = () => import(`@/pages/${item.component}`);
const import404 = () => import('@/pages/404');
return importComponent().catch(import404);
});
}
const routeItem: any = {
path: item.path,
name: item.name,
icon: '',
id: item.id,
parentId: pId,
hideInMenu: !item.visible,
children: [],
};
// 只有当 Component 存在时才添加 element 属性
if (Component) {
routeItem.element = (
<React.Suspense
fallback={<Spin style={{ width: '100%', height: '100%' }} />}
>
<Component />
</React.Suspense>
);
} else if (item.children && item.children.length > 0) {
}
// 处理子菜单
if (item.children && item.children.length > 0) {
routeItem.children = loopMenuItem(item.children, item.id);
}
return routeItem;
});
};