49 lines
1.3 KiB
Vue
49 lines
1.3 KiB
Vue
<script lang="ts">
|
|
import { createVNode } from 'vue'
|
|
import { ElIcon } from 'element-plus'
|
|
import { EL_ICON_PREFIX, LOCAL_ICON_PREFIX } from './index'
|
|
import svgIcon from './svg-icon.vue'
|
|
export default defineComponent({
|
|
name: 'Icon',
|
|
props: {
|
|
name: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
size: {
|
|
type: [String, Number],
|
|
default: '14px'
|
|
},
|
|
color: {
|
|
type: String,
|
|
default: 'inherit'
|
|
}
|
|
},
|
|
setup(props) {
|
|
if (props.name.indexOf(EL_ICON_PREFIX) === 0) {
|
|
// el-icon
|
|
return () =>
|
|
createVNode(
|
|
ElIcon,
|
|
{
|
|
size: props.size,
|
|
color: props.color
|
|
},
|
|
() => [createVNode(resolveComponent(props.name.replace(EL_ICON_PREFIX, '')))]
|
|
)
|
|
}
|
|
if (props.name.indexOf(LOCAL_ICON_PREFIX) === 0) {
|
|
// 本地icon
|
|
return () =>
|
|
h(
|
|
'i',
|
|
{
|
|
class: ['local-icon']
|
|
},
|
|
createVNode(svgIcon, { ...props })
|
|
)
|
|
}
|
|
}
|
|
})
|
|
</script>
|