import { h, defineComponent } from 'vue';
|
import {
|
Icon as IconifyIcon,
|
addIcon,
|
IconifyIcon as IconifyIconType,
|
} from '@iconify/vue/dist/offline';
|
import type { PropType } from 'vue';
|
|
// element-plus icon
|
import Tickets from '@iconify-icons/ep/tickets';
|
import RefreshRight from '@iconify-icons/ep/refresh-right';
|
import ArrowDown from '@iconify-icons/ep/arrow-down';
|
import CloseBold from '@iconify-icons/ep/close-bold';
|
import Delete from '@iconify-icons/ep/delete';
|
import Search from '@iconify-icons/ep/search';
|
import UserFilled from '@iconify-icons/ep/user-filled';
|
import Lock from '@iconify-icons/ep/lock';
|
import Plus from '@iconify-icons/ep/plus';
|
|
// remixicon
|
import arrowRightSLine from '@iconify-icons/ri/arrow-right-s-line';
|
import arrowLeftSLine from '@iconify-icons/ri/arrow-left-s-line';
|
import logoutCircleRLine from '@iconify-icons/ri/logout-circle-r-line';
|
|
const IconMap: Record<string, IconifyIconType> = {
|
tickets: Tickets,
|
'refresh-right': RefreshRight,
|
'arrow-down': ArrowDown,
|
'close-bold': CloseBold,
|
delete: Delete,
|
search: Search,
|
'arrow-right-s-line': arrowRightSLine,
|
'arrow-left-s-line': arrowLeftSLine,
|
'logout-circle-r-line': logoutCircleRLine,
|
userFilled: UserFilled,
|
lock: Lock,
|
plus: Plus,
|
};
|
|
for (const iconName in IconMap) {
|
addIcon(iconName, IconMap[iconName]);
|
}
|
|
// Iconify Icon在Vue里离线使用(用于内网环境)https://docs.iconify.design/icon-components/vue/offline.html
|
export default defineComponent({
|
name: 'IconifyIcon',
|
components: { IconifyIcon },
|
props: {
|
icon: {
|
type: String as PropType<keyof typeof IconMap>,
|
required: true,
|
},
|
},
|
render() {
|
const attrs = this.$attrs;
|
return h(
|
IconifyIcon,
|
{
|
icon: `${this.icon}`,
|
...attrs,
|
},
|
{
|
default: () => [],
|
}
|
);
|
},
|
});
|