BaseElement.vue 1014 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <template>
  2. <div
  3. class="base-element"
  4. :style="{ zIndex: elementIndex }"
  5. >
  6. <component
  7. :is="currentElementComponent"
  8. :elementInfo="elementInfo"
  9. ></component>
  10. </div>
  11. </template>
  12. <script lang="ts">
  13. import { computed, defineComponent, PropType } from 'vue'
  14. import { PPTElement } from '@/types/slides'
  15. import BaseImageElement from './ImageElement/BaseImageElement.vue'
  16. import BaseTextElement from './TextElement/BaseTextElement.vue'
  17. export default defineComponent({
  18. name: 'editable-element',
  19. props: {
  20. elementInfo: {
  21. type: Object as PropType<PPTElement>,
  22. required: true,
  23. },
  24. elementIndex: {
  25. type: Number,
  26. required: true,
  27. },
  28. },
  29. setup(props) {
  30. const currentElementComponent = computed(() => {
  31. const elementTypeMap = {
  32. 'image': BaseImageElement,
  33. 'text': BaseTextElement,
  34. }
  35. return elementTypeMap[props.elementInfo.type] || null
  36. })
  37. return {
  38. currentElementComponent,
  39. }
  40. },
  41. })
  42. </script>