ToggleButton.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <div
  3. class="button custom-button"
  4. :data-element="dataElement"
  5. :class="{
  6. active: isActive,
  7. [type]: type,
  8. disabled,
  9. [className]: className
  10. }"
  11. @click="disabled || !onClick ? NOOP() : onClick($event)"
  12. :disabled="disabled"
  13. :title="title"
  14. >
  15. <template v-if="img">
  16. <div v-if="isSVG" v-html="img" class="img"></div>
  17. <img v-else :src="img" alt="" class="img">
  18. </template>
  19. </div>
  20. </template>
  21. <script setup>
  22. import { ref, onMounted, onUnmounted } from 'vue';
  23. import { useViewerStore } from '@/stores/modules/viewer'
  24. import { useDocumentStore } from '@/stores/modules/document'
  25. import { computed } from 'vue'
  26. import core from '@/core'
  27. const useViewer = useViewerStore()
  28. const useDocument = useDocumentStore()
  29. const { item } = defineProps(['item'])
  30. const {
  31. type,
  32. img,
  33. dataElement,
  34. title,
  35. disabled,
  36. className,
  37. element
  38. } = item
  39. const isSVG = img?.trim().toLowerCase().startsWith('<svg');
  40. const NOOP = (e) => {
  41. e?.stopPropagation()
  42. e?.preventDefault()
  43. }
  44. const isActive = computed(() => {
  45. return useViewer.isElementOpen(element)
  46. })
  47. const onClick = () => {
  48. useViewer.toggleElement(element)
  49. }
  50. </script>
  51. <style lang="scss">
  52. </style>