From 8a8a5972080d75880eaa7a1417b91b0c2546a453 Mon Sep 17 00:00:00 2001 From: pipipi-pikachu Date: Sat, 20 Nov 2021 16:05:58 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=B8=BA=E7=BA=BF=E6=9D=A1?= =?UTF-8?q?=E4=BB=A5=E5=A4=96=E7=9A=84=E5=85=83=E7=B4=A0=E9=83=BD=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E6=97=8B=E8=BD=AC=E8=A7=92=E5=BA=A6=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useCreateElement.ts | 4 ++ src/types/slides.ts | 14 ++--- .../Canvas/Operate/CommonElementOperate.vue | 22 +++++-- .../Canvas/Operate/ImageElementOperate.vue | 8 +-- .../Canvas/Operate/LineElementOperate.vue | 8 +-- .../Canvas/Operate/ShapeElementOperate.vue | 8 +-- .../Canvas/Operate/TableElementOperate.vue | 16 +++-- .../Canvas/Operate/TextElementOperate.vue | 8 +-- src/views/Editor/Canvas/Operate/index.vue | 3 +- .../Editor/Canvas/hooks/useDragLineElement.ts | 2 +- .../Editor/Toolbar/ElementPositionPanel.vue | 2 +- .../element/ChartElement/BaseChartElement.vue | 53 ++++++++++------- .../components/element/ChartElement/index.vue | 58 +++++++++++-------- .../element/TableElement/BaseTableElement.vue | 26 ++++++--- .../components/element/TableElement/index.vue | 52 ++++++++++------- .../element/VideoElement/BaseVideoElement.vue | 18 ++++-- .../VideoElement/ScreenVideoElement.vue | 30 ++++++---- .../components/element/VideoElement/index.vue | 48 ++++++++------- tsconfig.json | 1 - 19 files changed, 218 insertions(+), 163 deletions(-) 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" /> -