MobileEditableElement.vue 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <div
  3. class="mobile-editable-element"
  4. :style="{
  5. zIndex: elementIndex
  6. }"
  7. >
  8. <component :is="currentElementComponent" :elementInfo="elementInfo" :selectElement="selectElement" :contextmenus="() => null"></component>
  9. </div>
  10. </template>
  11. <script lang="ts" setup>
  12. import { computed } from "vue"
  13. import { ElementTypes, ElementSubtypeTypes, type PPTElement } from "@/types/slides"
  14. import ImageElement from "@/views/components/element/ImageElement/index.vue"
  15. import TextElement from "@/views/components/element/TextElement/index.vue"
  16. import ShapeElement from "@/views/components/element/ShapeElement/index.vue"
  17. import LineElement from "@/views/components/element/LineElement/index.vue"
  18. import ChartElement from "@/views/components/element/ChartElement/index.vue"
  19. import TableElement from "@/views/components/element/TableElement/index.vue"
  20. import LatexElement from "@/views/components/element/LatexElement/index.vue"
  21. import VideoElement from "@/views/components/element/VideoElement/index.vue"
  22. import AudioElement from "@/views/components/element/AudioElement/index.vue"
  23. import cloudCoachElement from "@/views/components/element/cloudCoachElement"
  24. import enjoyElement from "@/views/components/element/enjoyElement"
  25. import listeningPracticeElement from "@/views/components/element/listeningPracticeElement"
  26. import rhythmPracticeElement from "@/views/components/element/rhythmPracticeElement"
  27. const props = defineProps<{
  28. elementInfo: PPTElement
  29. elementIndex: number
  30. selectElement: (e: TouchEvent, element: PPTElement, canMove?: boolean) => void
  31. }>()
  32. const currentElementComponent = computed<unknown>(() => {
  33. const elementTypeMap = {
  34. [ElementTypes.IMAGE]: ImageElement,
  35. [ElementTypes.TEXT]: TextElement,
  36. [ElementTypes.SHAPE]: ShapeElement,
  37. [ElementTypes.LINE]: LineElement,
  38. [ElementTypes.CHART]: ChartElement,
  39. [ElementTypes.TABLE]: TableElement,
  40. [ElementTypes.LATEX]: LatexElement,
  41. [ElementTypes.ELF]: null
  42. }
  43. const elementSubtypeMap = {
  44. [ElementSubtypeTypes.AUDIO]: AudioElement,
  45. [ElementSubtypeTypes.VIDEO]: VideoElement,
  46. [ElementSubtypeTypes.SING_PLAY]: cloudCoachElement,
  47. [ElementSubtypeTypes.ENJOY]: enjoyElement,
  48. [ElementSubtypeTypes.LISTENING_PRACTICE]: listeningPracticeElement,
  49. [ElementSubtypeTypes.RHYTHM_PRACTICE]: rhythmPracticeElement
  50. }
  51. return elementTypeMap[props.elementInfo.type] || elementSubtypeMap[props.elementInfo.subtype] || null
  52. })
  53. </script>