mirror of
https://github.com/pipipi-pikachu/PPTist.git
synced 2025-04-15 02:20:00 +08:00
51 lines
1.7 KiB
Vue
51 lines
1.7 KiB
Vue
<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, 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> |