<script lang="ts"> import { createVNode, resolveComponent, defineComponent } from 'vue' export default defineComponent({ name: 'Icon', props: { name: { type: String, required: true }, color: { type: String, default: 'var(--color)' }, class: { type: [String, Object], default: '' }, size: { type: String, default: '16px' }, }, setup(props) { let [type, name] = props.name.split(/-(.*)/) let style = { color: props.color, fontSize: props.size } switch (type) { case 'element': return () => createVNode('el-icon', { class: ['icon el-icon', props.class], style: style }, [createVNode(resolveComponent(name))]) break; case 'iconfont': return () => createVNode('i', { class: [name, 'iconfont', props.class], style: style }) break; } } }) </script>