LabelItem.vue 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <template>
  2. <v-image ref="pointRef" :config="getPointCurvConfig(props.shop.posType, curvImage)" />
  3. <v-image :config="getCirConfig(props.shop.posType, cirImage)" />
  4. <v-image ref="rectRef" :config="getRectCurConfig(props.shop.posType, rectImage)" />
  5. <v-text :config="getTextConfig(props.shop)" />
  6. <v-image :config="shineConfig(props.shop.posType, shineImage)" />
  7. </template>
  8. <script setup lang="ts">
  9. import { ref, onMounted, nextTick, watch } from 'vue';
  10. import rectBlock from '@/assets/test/2-rect.svg';
  11. import pointCurv from '@/assets/test/1-curv2.svg';
  12. import shine from '@/assets/test/2-shining.svg';
  13. import circle from '@/assets/test/1-cir.svg';
  14. import Konva from 'konva';
  15. import { MapWorkShopInfoItem } from '../../stores/useMapEditor';
  16. import {
  17. getRGBANum,
  18. getPointCurvConfig,
  19. getCirConfig,
  20. getRectCurConfig,
  21. getTextConfig,
  22. shineConfig,
  23. } from './labelConfig';
  24. const props = defineProps<{ shop: MapWorkShopInfoItem }>();
  25. const curvImage = ref<HTMLImageElement>(new Image());
  26. const rectImage = ref<HTMLImageElement>(new Image());
  27. const shineImage = ref<HTMLImageElement>(new Image());
  28. const cirImage = ref<HTMLImageElement>(new Image());
  29. const rectRef = ref<Konva.Image>();
  30. const pointRef = ref<Konva.Image>();
  31. const nodeUpdateFilter = (node: Konva.Node) => {
  32. node.cache();
  33. const rgba = getRGBANum(props.shop.bgColor);
  34. node.red(rgba[0]);
  35. node.green(rgba[1]);
  36. node.blue(rgba[2]);
  37. node.alpha(rgba[3]);
  38. };
  39. watch(
  40. () => props.shop,
  41. () => {
  42. nextTick(() => {
  43. nodeUpdateFilter(pointRef.value!.getNode());
  44. nodeUpdateFilter(rectRef.value!.getNode());
  45. });
  46. },
  47. { deep: true },
  48. );
  49. onMounted(() => {
  50. const svgImg = new Image();
  51. svgImg.onload = () => {
  52. curvImage.value = svgImg;
  53. nextTick(() => {
  54. nodeUpdateFilter(pointRef.value?.getNode());
  55. });
  56. };
  57. svgImg.src = pointCurv;
  58. const rectImg = new Image();
  59. rectImg.onload = () => {
  60. rectImage.value = rectImg;
  61. nextTick(() => {
  62. nodeUpdateFilter(rectRef.value?.getNode());
  63. });
  64. };
  65. rectImg.src = rectBlock;
  66. const shineImg = new Image();
  67. shineImg.onload = () => {
  68. shineImage.value = shineImg;
  69. };
  70. shineImg.src = shine;
  71. const cirImg = new Image();
  72. cirImg.onload = () => {
  73. cirImage.value = cirImg;
  74. };
  75. cirImg.src = circle;
  76. rectRef.value?.getNode().filters([Konva.Filters.RGBA]);
  77. pointRef.value?.getNode().filters([Konva.Filters.RGBA]);
  78. });
  79. </script>
  80. <style scoped></style>