diff --git a/src/api/system/menu/types.ts b/src/api/system/menu/types.ts index 5bd4c467..0ccf66c0 100644 --- a/src/api/system/menu/types.ts +++ b/src/api/system/menu/types.ts @@ -15,7 +15,7 @@ export interface MenuForm { menuType?: 'M' | 'C' | 'F' | string; visible?: string; status?: string; - icon?: string; + icon?: string | null; activeMenu?: string; ext?: string; remark?: string; @@ -56,7 +56,7 @@ export interface MenuVO extends BaseEntity { menuType: 'M' | 'C' | 'F' | string; visible?: string; status?: string; - icon?: string; + icon?: string | null; activeMenu?: string; ext?: string; perms?: string; diff --git a/src/api/types.ts b/src/api/types.ts index e05bb51f..7b384566 100644 --- a/src/api/types.ts +++ b/src/api/types.ts @@ -63,7 +63,7 @@ export interface VerifyCodeResult { export interface RouteMeta { title?: string; - icon?: string; + icon?: string | null; noCache?: boolean; link?: string; hidden?: boolean; diff --git a/src/components/layout/TagsView.tsx b/src/components/layout/TagsView.tsx index 8070a8c4..fb57c9d6 100644 --- a/src/components/layout/TagsView.tsx +++ b/src/components/layout/TagsView.tsx @@ -17,7 +17,7 @@ import { flattenBackendRoutes, routeIcon } from '@/utils/menu'; interface RouteMetaLite { title?: string; - icon?: string; + icon?: string | null; affix?: boolean; } diff --git a/src/stores/tagsViewStore.ts b/src/stores/tagsViewStore.ts index b92501f0..2f2c7200 100644 --- a/src/stores/tagsViewStore.ts +++ b/src/stores/tagsViewStore.ts @@ -6,7 +6,7 @@ export interface TagViewItem { path: string; fullPath: string; title: string; - icon?: string; + icon?: string | null; affix?: boolean; } diff --git a/src/utils/menu.tsx b/src/utils/menu.tsx index bfaff10e..e9e2e195 100644 --- a/src/utils/menu.tsx +++ b/src/utils/menu.tsx @@ -121,9 +121,10 @@ const iconMap: Record = { fileDone: }; -export function routeIcon(icon?: string) { - if (!icon) return ; - const normalizedIcon = icon.replace(/^i-/, ''); +export function routeIcon(icon?: string | null) { + const iconValue = typeof icon === 'string' ? icon.trim() : ''; + if (!iconValue) return ; + const normalizedIcon = iconValue.replace(/^i-/, ''); if (normalizedIcon.includes(':')) return ; const svgIcon = svgIconMap[normalizedIcon] || svgIconMap[normalizedIcon.toLowerCase()]; if (svgIcon) { @@ -134,7 +135,7 @@ export function routeIcon(icon?: string) { /> ); } - return iconMap[icon] || iconMap[normalizedIcon] || iconMap[normalizedIcon.toLowerCase()] || ; + return iconMap[iconValue] || iconMap[normalizedIcon] || iconMap[normalizedIcon.toLowerCase()] || ; } function joinPath(parentPath: string, childPath: string) {