import React from 'react'; import * as AntdIcons from '@ant-design/icons'; import type { ReactNode } from 'react'; // 图标名称映射配置 export const iconMap: Record = { 'setting': 'SettingOutlined', 'user': 'UserOutlined', 'tree-table': 'TableOutlined', 'tree': 'ApartmentOutlined', 'api': 'ApiOutlined', 'menu': 'MenuOutlined', 'department': 'TeamOutlined', 'role': 'UserSwitchOutlined', 'external': 'ApiOutlined', 'system': 'SettingOutlined' }; // 获取图标组件的通用函数 export const getIconComponent = (iconName: string | undefined): ReactNode => { if (!iconName) return null; // 如果在映射中存在,使用映射的名称 const mappedName = iconMap[iconName] || iconName; // 确保首字母大写并添加Outlined后缀(如果需要) const iconKey = mappedName.endsWith('Outlined') ? mappedName.charAt(0).toUpperCase() + mappedName.slice(1) : `${mappedName.charAt(0).toUpperCase() + mappedName.slice(1)}Outlined`; const Icon = (AntdIcons as any)[iconKey]; return Icon ? : null; }; // 获取所有可用的图标列表 export const getAvailableIcons = () => { return Object.keys(AntdIcons) .filter(key => key.endsWith('Outlined')) .map(key => ({ name: key, component: (AntdIcons as any)[key] })); };