diff --git a/src/hooks/useCreateElement.ts b/src/hooks/useCreateElement.ts index d1221991..70a2380b 100644 --- a/src/hooks/useCreateElement.ts +++ b/src/hooks/useCreateElement.ts @@ -90,6 +90,7 @@ export default () => { top: 81.25, width: 400, height: 400, + rotate: 0, themeColor: [themeColor.value], gridColor: fontColor.value, data: { @@ -135,6 +136,7 @@ export default () => { width, height, colWidths, + rotate: 0, data, left: (VIEWPORT_SIZE - width) / 2, top: (VIEWPORT_SIZE * viewportRatio.value - height) / 2, @@ -233,6 +235,7 @@ export default () => { id: createRandomCode(), width: data.w, height: data.h, + rotate: 0, left: (VIEWPORT_SIZE - data.w) / 2, top: (VIEWPORT_SIZE * viewportRatio.value - data.h) / 2, path: data.path, @@ -254,6 +257,7 @@ export default () => { id: createRandomCode(), width: 500, height: 300, + rotate: 0, left: (VIEWPORT_SIZE - 500) / 2, top: (VIEWPORT_SIZE * viewportRatio.value - 300) / 2, src, diff --git a/src/types/slides.ts b/src/types/slides.ts index afd41900..55a15699 100644 --- a/src/types/slides.ts +++ b/src/types/slides.ts @@ -62,6 +62,8 @@ export interface PPTElementOutline { * * height: 元素高度 * + * rotate: 旋转角度 + * * link?: 超链接地址 */ interface PPTBaseElement { @@ -72,6 +74,7 @@ interface PPTBaseElement { groupId?: string; width: number; height: number; + rotate: number; link?: string; } @@ -83,8 +86,6 @@ interface PPTBaseElement { * * content: 文本内容(HTML字符串) * - * rotate: 旋转角度 - * * defaultFontName: 默认字体(会被文本内容中的HTML内联样式覆盖) * * defaultColor: 默认颜色(会被文本内容中的HTML内联样式覆盖) @@ -104,7 +105,6 @@ interface PPTBaseElement { export interface PPTTextElement extends PPTBaseElement { type: 'text'; content: string; - rotate: number; defaultFontName: string; defaultColor: string; outline?: PPTElementOutline; @@ -178,8 +178,6 @@ export interface ImageElementClip { * * src: 图片地址 * - * rotate: 旋转角度 - * * outline?: 边框 * * filters?: 图片滤镜 @@ -196,7 +194,6 @@ export interface PPTImageElement extends PPTBaseElement { type: 'image'; fixedRatio: boolean; src: string; - rotate: number; outline?: PPTElementOutline; filters?: ImageElementFilters; clip?: ImageElementClip; @@ -254,8 +251,6 @@ export interface ShapeText { * * gradient?: 渐变,该属性存在时将优先作为填充 * - * rotate: 旋转角度 - * * outline?: 边框 * * opacity?: 不透明度 @@ -277,7 +272,6 @@ export interface PPTShapeElement extends PPTBaseElement { fixedRatio: boolean; fill: string; gradient?: ShapeGradient; - rotate: number; outline?: PPTElementOutline; opacity?: number; flipH?: boolean; @@ -311,7 +305,7 @@ export type LinePoint = '' | 'arrow' | 'dot' * * curve?: 曲线中点位置([x, y]) */ -export interface PPTLineElement extends Omit { +export interface PPTLineElement extends Omit { type: 'line'; start: [number, number]; end: [number, number]; diff --git a/src/views/Editor/Canvas/Operate/CommonElementOperate.vue b/src/views/Editor/Canvas/Operate/CommonElementOperate.vue index 31d2d9bc..6e22d4e7 100644 --- a/src/views/Editor/Canvas/Operate/CommonElementOperate.vue +++ b/src/views/Editor/Canvas/Operate/CommonElementOperate.vue @@ -7,15 +7,21 @@ :type="line.type" :style="line.style" /> - @@ -28,31 +34,35 @@ import { PPTShapeElement, PPTVideoElement, PPTLatexElement } from '@/types/slide import { OperateResizeHandler } from '@/types/edit' import useCommonOperate from '../hooks/useCommonOperate' +import RotateHandler from './RotateHandler.vue' import ResizeHandler from './ResizeHandler.vue' import BorderLine from './BorderLine.vue' +type PPTElement = PPTShapeElement | PPTVideoElement | PPTLatexElement + export default defineComponent({ name: 'common-element-operate', inheritAttrs: false, components: { + RotateHandler, ResizeHandler, BorderLine, }, props: { elementInfo: { - type: Object as PropType, + type: Object as PropType, required: true, }, - isActiveGroupElement: { + handlerVisible: { type: Boolean, required: true, }, - isMultiSelect: { - type: Boolean, + rotateElement: { + type: Function as PropType<(element: PPTElement) => void>, required: true, }, scaleElement: { - type: Function as PropType<(e: MouseEvent, element: PPTShapeElement, command: OperateResizeHandler) => void>, + type: Function as PropType<(e: MouseEvent, element: PPTElement, command: OperateResizeHandler) => void>, required: true, }, }, diff --git a/src/views/Editor/Canvas/Operate/ImageElementOperate.vue b/src/views/Editor/Canvas/Operate/ImageElementOperate.vue index 9c550ed4..9375e485 100644 --- a/src/views/Editor/Canvas/Operate/ImageElementOperate.vue +++ b/src/views/Editor/Canvas/Operate/ImageElementOperate.vue @@ -7,7 +7,7 @@ :type="line.type" :style="line.style" /> -