feat: 添加图标库,更新菜单与页面标签中的icon相关功能与样式
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import { h, type VNode } from 'vue';
|
||||
import type { IconType } from 'vue-icons-plus/lib';
|
||||
import {
|
||||
AiOutlineAudit,
|
||||
AiOutlineBarChart,
|
||||
AiOutlineHistory,
|
||||
AiOutlineMoneyCollect,
|
||||
AiOutlinePayCircle,
|
||||
AiOutlinePicture,
|
||||
AiOutlineSafetyCertificate,
|
||||
AiOutlineSetting,
|
||||
AiOutlineShoppingCart,
|
||||
AiOutlineTeam,
|
||||
AiOutlineTransaction,
|
||||
AiOutlineTrophy,
|
||||
AiOutlineUnorderedList,
|
||||
AiOutlineUser,
|
||||
AiOutlineWallet,
|
||||
} from 'vue-icons-plus/ai';
|
||||
|
||||
/** 路由 / 菜单 / 标签页使用的图标名 → vue-icons-plus 组件 */
|
||||
const ROUTE_ICON_MAP: Record<string, IconType> = {
|
||||
AiOutlineTrophy,
|
||||
AiOutlineUnorderedList,
|
||||
AiOutlineShoppingCart,
|
||||
AiOutlineTeam,
|
||||
AiOutlinePicture,
|
||||
AiOutlineHistory,
|
||||
AiOutlineTransaction,
|
||||
AiOutlineMoneyCollect,
|
||||
AiOutlineWallet,
|
||||
AiOutlinePayCircle,
|
||||
AiOutlineBarChart,
|
||||
AiOutlineSetting,
|
||||
AiOutlineUser,
|
||||
AiOutlineSafetyCertificate,
|
||||
AiOutlineAudit,
|
||||
};
|
||||
|
||||
export type RouteIconName = keyof typeof ROUTE_ICON_MAP;
|
||||
|
||||
export interface RouteIconOptions {
|
||||
size?: number | string;
|
||||
class?: string;
|
||||
color?: string;
|
||||
}
|
||||
|
||||
/** 将路由 meta.icon 字符串渲染为图标 VNode */
|
||||
export function renderRouteIcon(iconName?: string, options: RouteIconOptions = {}): VNode | null {
|
||||
if (!iconName) return null;
|
||||
|
||||
const Icon = ROUTE_ICON_MAP[iconName];
|
||||
if (!Icon) {
|
||||
console.warn(`[RouteIcon] 未注册的图标: ${iconName}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const { size = 14, class: className, color } = options;
|
||||
return h(Icon, {
|
||||
size,
|
||||
class: className,
|
||||
...(color ? { color } : {}),
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user