/** * element-ui 字体图标 → @element-plus/icons-vue 组件映射。 * * element-plus 不再内置图标字体,业务代码里 300+ 处 `el-icon-xxx` 因此失效。 * 这里把用到的旧图标名统一映射到 EP 的 SVG 图标组件,供: * - 模板里 `:icon="$icon('el-icon-search')"` * - ``(替换 ``) * 两处使用。 * * key 同时接受带前缀(`el-icon-plus`)与不带前缀(`plus`)两种写法。 */ import { Plus, Delete, DeleteFilled, Search, Edit, FolderOpened, Folder, Upload, UploadFilled, Picture, Tickets, QuestionFilled, Download, Close, FullScreen, RefreshRight, RefreshLeft, Refresh, Loading, CaretRight, CaretLeft, CaretBottom, CaretTop, View, CircleClose, CircleCheck, CircleCheckFilled, CircleCloseFilled, CirclePlus, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Minus, Document, DocumentCopy, CopyDocument, Pointer, Sort, SortUp, SortDown, Paperclip, Monitor, Menu, Key, InfoFilled, WarningFilled, Warning, SuccessFilled, DArrowRight, DArrowLeft, User, UserFilled, Unlock, Lock, Clock, Timer, AlarmClock, Tools, Operation, HomeFilled, Coin, Flag, ChatDotRound, Goods, Shop, Promotion, Management, Select, Ticket, HelpFilled, List, Platform, Setting, Right, Back, Top, Bottom, Remove, RemoveFilled, Box, PieChart, Odometer, Cellphone, Link, Cpu, Collection, CollectionTag, Coffee, Bell, Message, Comment, Notebook, Files, FolderDelete, FolderAdd, PriceTag, Discount, ShoppingCart, ShoppingCartFull, ShoppingBag, Sell, SoldOut, Present, TakeawayBox, Refrigerator, Dish, Food, IceCream, Apple, Goblet, Calendar, Position, Location, Connection, Guide, Star, VideoCamera, Camera, DataLine, TrendCharts, Histogram, Rank, Film, Headset, Microphone, Printer, ScaleToOriginal, Compass, Coordinate, Crop, Brush, MagicStick, Stamp } from '@element-plus/icons-vue' const ICON_MAP = { // 基础操作 plus: Plus, delete: Delete, 'delete-solid': DeleteFilled, search: Search, edit: Edit, close: Close, minus: Minus, remove: RemoveFilled, 'remove-outline': Remove, check: Select, refresh: Refresh, 'refresh-right': RefreshRight, 'refresh-left': RefreshLeft, loading: Loading, sort: Sort, 'sort-up': SortUp, 'sort-down': SortDown, 'full-screen': FullScreen, // 文件夹 / 文档 folder: Folder, 'folder-opened': FolderOpened, 'folder-add': FolderAdd, 'folder-delete': FolderDelete, tickets: Tickets, document: Document, 'document-copy': DocumentCopy, 'copy-document': CopyDocument, notebook: Notebook, files: Files, collection: Collection, 'collection-tag': CollectionTag, paperclip: Paperclip, // 上传 / 下载 / 图片 upload: UploadFilled, upload2: Upload, download: Download, 'picture-outline': Picture, picture: Picture, camera: Camera, 'video-camera': VideoCamera, 'scale-to-original': ScaleToOriginal, // 方向 'arrow-up': ArrowUp, 'arrow-down': ArrowDown, 'arrow-left': ArrowLeft, 'arrow-right': ArrowRight, 'caret-top': CaretTop, 'caret-bottom': CaretBottom, 'caret-left': CaretLeft, 'caret-right': CaretRight, 'd-arrow-left': DArrowLeft, 'd-arrow-right': DArrowRight, top: Top, bottom: Bottom, back: Back, right: Right, // 状态 / 提示 info: InfoFilled, question: QuestionFilled, warning: WarningFilled, 'warning-outline': Warning, success: SuccessFilled, 'circle-check': CircleCheck, 'circle-check-outline': CircleCheckFilled, 'circle-close': CircleClose, 'circle-close-outline': CircleCloseFilled, 'circle-plus': CirclePlus, 'circle-plus-outline': CirclePlus, // 用户 / 权限 user: User, 'user-solid': UserFilled, view: View, unlock: Unlock, lock: Lock, key: Key, // 时间 time: Clock, clock: Clock, timer: Timer, 'alarm-clock': AlarmClock, calendar: Calendar, date: Calendar, // 系统 / 工具 setting: Setting, 's-tools': Tools, 's-operation': Operation, 's-home': HomeFilled, 's-data': Coin, 's-flag': Flag, 's-comment': ChatDotRound, 's-goods': Goods, 's-shop': Shop, 's-marketing': Promotion, 's-promotion': Promotion, 's-management': Management, 's-check': Select, 's-claim': Ticket, 's-help': HelpFilled, 's-order': List, 's-platform': Platform, 's-release': Promotion, 's-ticket': Ticket, 's-custom': Setting, monitor: Monitor, menu: Menu, link: Link, cpu: Cpu, mobile: Cellphone, headset: Headset, microphone: Microphone, printer: Printer, bell: Bell, message: Message, comment: Comment, guide: Guide, compass: Compass, coordinate: Coordinate, crop: Crop, brush: Brush, 'magic-stick': MagicStick, stamp: Stamp, connection: Connection, position: Position, location: Location, 'map-location': Location, // 图表 'pie-chart': PieChart, 'data-line': DataLine, 'trend-charts': TrendCharts, histogram: Histogram, rank: Rank, odometer: Odometer, film: Film, // 业务 / 商品 goods: Goods, 'shopping-cart': ShoppingCart, 'shopping-cart-full': ShoppingCartFull, 'shopping-bag': ShoppingBag, sell: Sell, 'sold-out': SoldOut, present: Present, 'price-tag': PriceTag, discount: Discount, box: Box, 'takeaway-box': TakeawayBox, refrigerator: Refrigerator, dish: Dish, food: Food, 'ice-cream': IceCream, apple: Apple, goblet: Goblet, coffee: Coffee, 'coffee-cup': Coffee, receiving: TakeawayBox, thumb: Pointer, star: Star } /** * 按旧图标名取 EP 图标组件,取不到返回 null(渲染为空,不抛错)。 * @param {string} name 例如 'el-icon-search' 或 'search' * @returns {Object|null} EP 图标组件 */ export function getLimsIcon(name) { if (!name) return null const key = String(name).replace(/^el-icon-/, '') const icon = ICON_MAP[key] if (!icon && import.meta.env.DEV) { console.warn(`[lims-icon] 未映射的图标:${name},请在 src/utils/lims-icon.js 中补充`) } return icon || null } export { ICON_MAP } export default getLimsIcon