/**
* 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