55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
|
|
// 运行时配置
|
|||
|
|
import * as AntdIcons from '@ant-design/icons';
|
|||
|
|
import React from 'react';
|
|||
|
|
|
|||
|
|
type MenuItem = {
|
|||
|
|
icon?: string | React.ReactNode;
|
|||
|
|
[key: string]: unknown;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
type AntdIconComponent = React.ComponentType;
|
|||
|
|
|
|||
|
|
// 临时屏蔽 React findDOMNode 警告,通常来自第三方库
|
|||
|
|
const originalWarn = console.error;
|
|||
|
|
console.error = (...args: Parameters<typeof console.error>) => {
|
|||
|
|
if (
|
|||
|
|
typeof args[0] === 'string' &&
|
|||
|
|
args[0].includes('findDOMNode is deprecated')
|
|||
|
|
) {
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
originalWarn(...args);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 全局初始化数据配置,用于 Layout 用户信息和权限初始化
|
|||
|
|
// 更多信息见文档:https://umijs.org/docs/api/runtime-config#getinitialstate
|
|||
|
|
export async function getInitialState(): Promise<{ name: string }> {
|
|||
|
|
return { name: '@umijs/max' };
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
export const layout = () => {
|
|||
|
|
return {
|
|||
|
|
logo: 'https://img.alicdn.com/tfs/TB1YHEpwUT1gK0jSZFhXXaAtVXa-28-27.svg',
|
|||
|
|
menuDataRender: (menuData: MenuItem[]) => {
|
|||
|
|
return menuData.map((item) => {
|
|||
|
|
const iconName = typeof item.icon === 'string' ? item.icon : undefined;
|
|||
|
|
const isIconName = iconName
|
|||
|
|
? /(Outlined|Filled|TwoTone)$/.test(iconName)
|
|||
|
|
: false;
|
|||
|
|
const IconComponent = isIconName
|
|||
|
|
? (AntdIcons[iconName as keyof typeof AntdIcons] as AntdIconComponent)
|
|||
|
|
: undefined;
|
|||
|
|
return {
|
|||
|
|
...item,
|
|||
|
|
icon: IconComponent ? React.createElement(IconComponent) : item.icon,
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
},
|
|||
|
|
token: {
|
|||
|
|
layout: {
|
|||
|
|
bgLayout: 'none', // Remove gradients and glows
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
};
|
|||
|
|
};
|