| <template> | |
| <div | |
| class="mobile-editable-element" | |
| :style="{ | |
| zIndex: elementIndex, | |
| }" | |
| > | |
| <component | |
| :is="currentElementComponent" | |
| :elementInfo="elementInfo" | |
| :selectElement="selectElement" | |
| :contextmenus="() => null" | |
| ></component> | |
| </div> | |
| </template> | |
| <script lang="ts" setup> | |
| import { computed } from 'vue' | |
| import { ElementTypes, type PPTElement } from '@/types/slides' | |
| import ImageElement from '@/views/components/element/ImageElement/index.vue' | |
| import TextElement from '@/views/components/element/TextElement/index.vue' | |
| import ShapeElement from '@/views/components/element/ShapeElement/index.vue' | |
| import LineElement from '@/views/components/element/LineElement/index.vue' | |
| import ChartElement from '@/views/components/element/ChartElement/index.vue' | |
| import TableElement from '@/views/components/element/TableElement/index.vue' | |
| import LatexElement from '@/views/components/element/LatexElement/index.vue' | |
| import VideoElement from '@/views/components/element/VideoElement/index.vue' | |
| import AudioElement from '@/views/components/element/AudioElement/index.vue' | |
| const props = defineProps<{ | |
| elementInfo: PPTElement | |
| elementIndex: number | |
| selectElement: (e: TouchEvent, element: PPTElement, canMove?: boolean) => void | |
| }>() | |
| const currentElementComponent = computed<unknown>(() => { | |
| const elementTypeMap = { | |
| [ElementTypes.IMAGE]: ImageElement, | |
| [ElementTypes.TEXT]: TextElement, | |
| [ElementTypes.SHAPE]: ShapeElement, | |
| [ElementTypes.LINE]: LineElement, | |
| [ElementTypes.CHART]: ChartElement, | |
| [ElementTypes.TABLE]: TableElement, | |
| [ElementTypes.LATEX]: LatexElement, | |
| [ElementTypes.VIDEO]: VideoElement, | |
| [ElementTypes.AUDIO]: AudioElement, | |
| } | |
| return elementTypeMap[props.elementInfo.type] || null | |
| }) | |
| </script> |