index.vue 1010 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <template>
  2. <svg aria-hidden="true" class="svg-icon" :style="`width: ${size}px;height: ${size}px;transform: rotate(${rotate}deg);`">
  3. <use :xlink:href="symbolId" :fill="color" />
  4. </svg>
  5. </template>
  6. <script lang="ts">
  7. import {
  8. defineComponent,
  9. computed,
  10. } from "vue";
  11. export default defineComponent({
  12. name: "SvgIcon",
  13. components: {},
  14. props: {
  15. prefix: {
  16. type: String,
  17. default: 'icon'
  18. },
  19. name: {
  20. type: String,
  21. required: true
  22. },
  23. color: {
  24. type: String,
  25. default: ''
  26. },
  27. size: {
  28. type: [Number, String],
  29. default: '18'
  30. },
  31. rotate: {
  32. type: [Number, String],
  33. default: 0
  34. }
  35. },
  36. setup(props, { emit }) {
  37. const symbolId = computed(() => `#${props.prefix}-${props.name}`)
  38. return {
  39. symbolId
  40. }
  41. }
  42. })
  43. </script>
  44. <style scoped>
  45. .svg-icon {
  46. vertical-align: -0.15em;
  47. overflow: hidden;
  48. fill: currentColor;
  49. }
  50. </style>