index.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <component :is="iconComponent" class="svg-icon" :fill="fill"></component>
  3. </template>
  4. <script setup lang="ts">
  5. import { snakeToHump } from '@/utils/utils';
  6. import { computed } from 'vue';
  7. import IconHome from '../../assets/svgs/icon-home.svg?component';
  8. import IconLogout from '../../assets/svgs/icon-logout.svg?component';
  9. import IconOrg from '../../assets/svgs/icon-org.svg?component';
  10. import IconSystem from '../../assets/svgs/icon-system.svg?component';
  11. import IconUser from '../../assets/svgs/icon-user.svg?component';
  12. import IconImport from '../../assets/svgs/icon-import.svg?component';
  13. import IconAdd from '../../assets/svgs/icon-add.svg?component';
  14. import IconDelete from '../../assets/svgs/icon-delete.svg?component';
  15. import IconApply from '../../assets/svgs/icon-apply.svg?component';
  16. import IconAssign from '../../assets/svgs/icon-assign.svg?component';
  17. import IconPrint from '../../assets/svgs/icon-print.svg?component';
  18. import IconFile from '../../assets/svgs/icon-file.svg?component';
  19. import IconSuccess from '../../assets/svgs/icon-success.svg?component';
  20. import IconError from '../../assets/svgs/icon-error.svg?component';
  21. import IconBase from '../../assets/svgs/icon-base.svg?component';
  22. defineOptions({
  23. name: 'SvgIcon',
  24. });
  25. const props = withDefaults(
  26. defineProps<{
  27. name: string;
  28. fill?: string;
  29. }>(),
  30. {
  31. fill: 'currentColor',
  32. }
  33. );
  34. const icons = {
  35. IconHome,
  36. IconLogout,
  37. IconOrg,
  38. IconSystem,
  39. IconUser,
  40. IconImport,
  41. IconAdd,
  42. IconDelete,
  43. IconApply,
  44. IconAssign,
  45. IconPrint,
  46. IconFile,
  47. IconSuccess,
  48. IconError,
  49. IconBase,
  50. };
  51. const iconName = snakeToHump(props.name) as keyof typeof icons;
  52. const iconComponent = computed(() => icons[iconName]);
  53. </script>