index.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. <script lang="ts">
  2. import { createVNode, resolveComponent, defineComponent } from 'vue'
  3. export default defineComponent({
  4. name: 'Icon',
  5. props: {
  6. name: {
  7. type: String,
  8. required: true
  9. },
  10. color: {
  11. type: String,
  12. default: 'var(--color)'
  13. },
  14. class: {
  15. type: [String, Object],
  16. default: ''
  17. },
  18. size: {
  19. type: String,
  20. default: '16px'
  21. },
  22. },
  23. setup(props) {
  24. let [type, name] = props.name.split(/-(.*)/)
  25. let style = {
  26. color: props.color,
  27. fontSize: props.size
  28. }
  29. switch (type) {
  30. case 'element':
  31. return () => createVNode('el-icon', { class: ['icon el-icon', props.class], style: style }, [createVNode(resolveComponent(name))])
  32. break;
  33. case 'iconfont':
  34. return () => createVNode('i', { class: [name, 'iconfont', props.class], style: style })
  35. break;
  36. }
  37. }
  38. })
  39. </script>