img-btn-evo.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. <script setup lang="ts">
  2. const props = withDefaults(defineProps<{ size?: 'large' | '110x44'; color?: 'black' }>(), {
  3. size: 'large',
  4. color: 'black',
  5. })
  6. const width = computed(() => Number(props.size.split('x')[0]) * 2 + 'rpx')
  7. const height = computed(() => Number(props.size.split('x')[1]) * 2 + 'rpx')
  8. const types = [
  9. {
  10. color: 'black',
  11. size: '110x44',
  12. src: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA1IiBoZWlnaHQ9IjQ0IiB2aWV3Qm94PSIwIDAgMTA1IDQ0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMTMuMzM1MSA1LjY4MzU2QzE0Ljk5NyAyLjIxMDQ4IDE4LjUwNTMgMCAyMi4zNTU1IDBIOTVDMTAwLjUyMyAwIDEwNSA0LjQ3NzE1IDEwNSAxMFYzNEMxMDUgMzkuNTIyOCAxMDAuNTIzIDQ0IDk1IDQ0SDkuMjg0QzIuNjYxNTYgNDQgLTEuNjkyOTMgMzcuMDg4OSAxLjE2NTYgMzEuMTE1MkwxMy4zMzUxIDUuNjgzNTZaIiBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIwLjg1Ii8+Cjwvc3ZnPgo=',
  13. },
  14. {
  15. size: 'large',
  16. color: 'black',
  17. width: 110,
  18. height: 44,
  19. src: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTA1IiBoZWlnaHQ9IjQ0IiB2aWV3Qm94PSIwIDAgMTA1IDQ0IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMTMuMzM1MSA1LjY4MzU2QzE0Ljk5NyAyLjIxMDQ4IDE4LjUwNTMgMCAyMi4zNTU1IDBIOTVDMTAwLjUyMyAwIDEwNSA0LjQ3NzE1IDEwNSAxMFYzNEMxMDUgMzkuNTIyOCAxMDAuNTIzIDQ0IDk1IDQ0SDkuMjg0QzIuNjYxNTYgNDQgLTEuNjkyOTMgMzcuMDg4OSAxLjE2NTYgMzEuMTE1MkwxMy4zMzUxIDUuNjgzNTZaIiBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIwLjg1Ii8+Cjwvc3ZnPgo=',
  20. },
  21. ]
  22. const type = computed(() =>
  23. types.find(({ size, color }) => props.size === size && props.color === color),
  24. )
  25. </script>
  26. <template>
  27. <div
  28. class="flex items-center justify-center bg-[length:100%_100%] text-white pl-4 pr-2 box-border text-white text-base font-normal font-['PingFang_SC'] leading-tight"
  29. :style="{
  30. width: type.width * 2 + 'rpx',
  31. height: type.height * 2 + 'rpx',
  32. backgroundImage: `url(${type.src})`,
  33. }"
  34. >
  35. <slot></slot>
  36. </div>
  37. </template>