| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- <template>
- <div
- class="base-element-text"
- :style="{
- top: elementInfo.top + 'px',
- left: elementInfo.left + 'px',
- width: elementInfo.width + 'px',
- transform: `rotate(${elementInfo.rotate}deg)`,
- }"
- >
- <div
- class="element-content"
- :style="{
- backgroundColor: elementInfo.fill,
- opacity: elementInfo.opacity,
- textShadow: shadowStyle,
- }"
- >
- <ElementOutline
- :width="elementInfo.width"
- :height="elementInfo.height"
- :outline="elementInfo.outline"
- />
- <div class="text ProseMirror-static" v-html="elementInfo.content"></div>
- </div>
- </div>
- </template>
- <script lang="ts">
- import { defineComponent, PropType, computed } from 'vue'
- import { PPTTextElement } from '@/types/slides'
- import ElementOutline from '@/views/components/element/ElementOutline.vue'
- import useElementShadow from '@/views/components/element/hooks/useElementShadow'
- export default defineComponent({
- name: 'base-element-text',
- components: {
- ElementOutline,
- },
- props: {
- elementInfo: {
- type: Object as PropType<PPTTextElement>,
- required: true,
- },
- },
- setup(props) {
- const shadow = computed(() => props.elementInfo.shadow)
- const { shadowStyle } = useElementShadow(shadow)
- return {
- shadowStyle,
- }
- },
- })
- </script>
- <style lang="scss" scoped>
- .base-element-text {
- position: absolute;
- }
- .element-content {
- position: relative;
- padding: 10px;
- line-height: 1.5;
- .text {
- position: relative;
- }
- }
- </style>
|