ThumbnailElement.vue 2.6 KB

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