From 8fe7b266f3be5ddeb4171444fdf7f05ac1fd837c Mon Sep 17 00:00:00 2001 From: pipipi-pikachu <1171051090@qq.com> Date: Sat, 26 Dec 2020 20:42:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BD=A2=E7=8A=B6=E5=85=83?= =?UTF-8?q?=E7=B4=A0=E7=9A=84=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/useCreateElement.ts | 5 +- src/mocks/index.ts | 15 +++ src/types/slides.ts | 3 +- src/views/Editor/Canvas/EditableElement.vue | 2 + .../Canvas/Operate/ImageElementOperate.vue | 42 +------ .../Canvas/Operate/ShapeElementOperate.vue | 85 +++++++++++++ .../Canvas/Operate/TextElementOperate.vue | 41 +------ src/views/Editor/Canvas/Operate/index.vue | 13 +- .../ThumbnailSlide/ThumbnailElement.vue | 2 + .../element/ShapeElement/BaseShapeElement.vue | 92 ++++++++++++++ .../components/element/ShapeElement/index.vue | 116 ++++++++++++++++++ 11 files changed, 330 insertions(+), 86 deletions(-) create mode 100644 src/views/Editor/Canvas/Operate/ShapeElementOperate.vue create mode 100644 src/views/components/element/ShapeElement/BaseShapeElement.vue create mode 100644 src/views/components/element/ShapeElement/index.vue diff --git a/src/hooks/useCreateElement.ts b/src/hooks/useCreateElement.ts index 7342f3c1..58ecdc5c 100644 --- a/src/hooks/useCreateElement.ts +++ b/src/hooks/useCreateElement.ts @@ -109,7 +109,7 @@ export default () => { }) } - const createShapeElement = (position: CommonElementPosition, svgCode: string) => { + const createShapeElement = (position: CommonElementPosition, path: string, viewBox: number) => { const { left, top, width, height } = position createElement({ ...DEFAULT_SHAPE, @@ -119,7 +119,8 @@ export default () => { top, width, height, - svgCode, + viewBox, + path, }) } diff --git a/src/mocks/index.ts b/src/mocks/index.ts index ca598ec2..4461eb83 100644 --- a/src/mocks/index.ts +++ b/src/mocks/index.ts @@ -88,6 +88,21 @@ export const slides: Slide[] = [ lock: false, content: '
😀 😐 😶 😜 🔔 ⭐ ⚡ 🔥 👍 💡 🔰 🎀 🎁 🥇 🏅 🏆 🎈 🎉 💎 🚧 ⛔ 📢 ⌛ ⏰ 🕒 🧩 🎵 📎 🔒 🔑 ⛳ 📌 📍 💬 📅 📈 📋 📜 📁 📱 💻 💾 🌏 🚚 🚡 🚢💧 🌐 🧭 💰 💳 🛒
', }, + { + id: 'xxx7', + type: 'shape', + left: 130, + top: 50, + width: 150, + height: 150, + rotate: 0, + fill: '#eebc29', + opacity: 0.9, + fixedRatio: false, + lock: false, + viewBox: 1024, + path: 'M721.35111111 475.59111111H302.64888889c-5.00622222 0-9.10222222 4.096-9.10222222 9.10222222v54.61333334c0 5.00622222 4.096 9.10222222 9.10222222 9.10222222h418.70222222c5.00622222 0 9.10222222-4.096 9.10222222-9.10222222v-54.61333334c0-5.00622222-4.096-9.10222222-9.10222222-9.10222222z M512 2.27555555C230.51377778 2.27555555 2.27555555 230.51377778 2.27555555 512s228.23822222 509.72444445 509.72444445 509.72444445 509.72444445-228.23822222 509.72444445-509.72444445S793.48622222 2.27555555 512 2.27555555z m0 932.97777778c-233.69955555 0-423.25333333-189.55377778-423.25333333-423.25333333s189.55377778-423.25333333 423.25333333-423.25333333 423.25333333 189.55377778 423.25333333 423.25333333-189.55377778 423.25333333-423.25333333 423.25333333z', + } ], animations: [ { diff --git a/src/types/slides.ts b/src/types/slides.ts index fff51f5e..206f3c0d 100644 --- a/src/types/slides.ts +++ b/src/types/slides.ts @@ -70,7 +70,8 @@ export interface PPTShapeElement extends PPTElementBaseProps { type: 'shape'; width: number; height: number; - svgCode: string; + viewBox: number; + path: string; fixedRatio: boolean; fill: string; rotate?: number; diff --git a/src/views/Editor/Canvas/EditableElement.vue b/src/views/Editor/Canvas/EditableElement.vue index 1e84b443..a18ee526 100644 --- a/src/views/Editor/Canvas/EditableElement.vue +++ b/src/views/Editor/Canvas/EditableElement.vue @@ -30,6 +30,7 @@ import { ElementOrderCommands, ElementAlignCommands } from '@/types/edit' 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' export default defineComponent({ name: 'editable-element', @@ -56,6 +57,7 @@ export default defineComponent({ const elementTypeMap = { 'image': ImageElement, 'text': TextElement, + 'shape': ShapeElement, } return elementTypeMap[props.elementInfo.type] || null }) diff --git a/src/views/Editor/Canvas/Operate/ImageElementOperate.vue b/src/views/Editor/Canvas/Operate/ImageElementOperate.vue index b9ddd238..8b5dfea0 100644 --- a/src/views/Editor/Canvas/Operate/ImageElementOperate.vue +++ b/src/views/Editor/Canvas/Operate/ImageElementOperate.vue @@ -11,15 +11,7 @@ :clipPath="clipShape.style" @clip="range => clip(range)" /> -
+
, required: true, }, - isSelected: { - type: Boolean, - required: true, - }, - isActive: { - type: Boolean, - required: true, - }, isActiveGroupElement: { type: Boolean, required: true, @@ -136,26 +120,4 @@ export default defineComponent({ } }, }) - - - \ No newline at end of file + \ No newline at end of file diff --git a/src/views/Editor/Canvas/Operate/ShapeElementOperate.vue b/src/views/Editor/Canvas/Operate/ShapeElementOperate.vue new file mode 100644 index 00000000..048c3c2c --- /dev/null +++ b/src/views/Editor/Canvas/Operate/ShapeElementOperate.vue @@ -0,0 +1,85 @@ + + + \ No newline at end of file diff --git a/src/views/Editor/Canvas/Operate/TextElementOperate.vue b/src/views/Editor/Canvas/Operate/TextElementOperate.vue index 1dc14814..73009029 100644 --- a/src/views/Editor/Canvas/Operate/TextElementOperate.vue +++ b/src/views/Editor/Canvas/Operate/TextElementOperate.vue @@ -1,12 +1,5 @@