SvgIcon.vue 778 B

1234567891011121314151617181920212223242526272829303132333435
  1. <script setup lang="ts">
  2. import { computed } from 'vue';
  3. import { addUnit } from '@/utils';
  4. import { IconfontPrefix } from '@/icons/fonts/iconfont';
  5. import type { CSSProperties } from 'vue';
  6. import type { IconObject } from '@/types';
  7. interface Props extends IconObject {
  8. marginTop?: number;
  9. }
  10. const props = defineProps<Props>();
  11. defineEmits<{
  12. click: [e: MouseEvent];
  13. }>();
  14. const iconClass = computed(() => {
  15. return IconfontPrefix + props.name;
  16. });
  17. const iconStyle = computed<CSSProperties>(() => {
  18. return {
  19. fontSize: props.size && addUnit(props.size),
  20. color: props.color,
  21. marginTop: props.marginTop && addUnit(props.marginTop),
  22. };
  23. });
  24. </script>
  25. <template>
  26. <i :class="iconClass" :style="iconStyle" @click="$emit('click', $event)"></i>
  27. </template>