From d98029d5e79c2579bf106d5670c74ad520c17267 Mon Sep 17 00:00:00 2001 From: Evan Wu <56573480+Little-LittleProgrammer@users.noreply.github.com> Date: Wed, 29 May 2024 20:01:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(editor):=20=E4=BF=AE=E5=A4=8Dpad=E5=A4=A7?= =?UTF-8?q?=E5=B1=8F=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=B2=98=E8=B4=B4=E4=BD=8D?= =?UTF-8?q?=E7=BD=AE=E8=AE=A1=E7=AE=97=E9=94=99=E8=AF=AF=E5=81=8F=E7=A7=BB?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#612)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: 修复moveable中custom able旋转中心错误问题 * fix: 修复修复pad大屏模式下粘贴位置偏差问题 --- packages/editor/src/services/editor.ts | 3 ++- packages/editor/src/utils/operator.ts | 12 ++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/editor/src/services/editor.ts b/packages/editor/src/services/editor.ts index aeca36e1..e79dc733 100644 --- a/packages/editor/src/services/editor.ts +++ b/packages/editor/src/services/editor.ts @@ -734,7 +734,8 @@ class Editor extends BaseService { public async doPaste(config: MNode[], position: PastePosition = {}): Promise { propsService.clearRelateId(); - const pasteConfigs = beforePaste(position, cloneDeep(config)); + const doc = this.get('stage')?.renderer.contentWindow?.document; + const pasteConfigs = beforePaste(position, cloneDeep(config), doc); return pasteConfigs; } diff --git a/packages/editor/src/utils/operator.ts b/packages/editor/src/utils/operator.ts index 2b7bb296..6fb2486a 100644 --- a/packages/editor/src/utils/operator.ts +++ b/packages/editor/src/utils/operator.ts @@ -2,7 +2,7 @@ import { toRaw } from 'vue'; import { isEmpty } from 'lodash-es'; import { Id, MContainer, MNode, NodeType } from '@tmagic/schema'; -import { isPage, isPageFragment } from '@tmagic/utils'; +import { calcValueByFontsize, isPage, isPageFragment } from '@tmagic/utils'; import editorService from '@editor/services/editor'; import propsService from '@editor/services/props'; @@ -15,7 +15,7 @@ import { generatePageNameByApp, getInitPositionStyle } from '@editor/utils/edito * @param config 待粘贴的元素配置(复制时保存的那份配置) * @returns */ -export const beforePaste = (position: PastePosition, config: MNode[]): MNode[] => { +export const beforePaste = (position: PastePosition, config: MNode[], doc?: Document): MNode[] => { if (!config[0]?.style) return config; const curNode = editorService.get('node'); // 将数组中第一个元素的坐标作为参照点 @@ -29,7 +29,7 @@ export const beforePaste = (position: PastePosition, config: MNode[]): MNode[] = if (!isEmpty(pastePosition) && curNode?.items) { // 如果没有传入粘贴坐标则可能为键盘操作,不再转换 // 如果粘贴时选中了容器,则将元素粘贴到容器内,坐标需要转换为相对于容器的坐标 - pastePosition = getPositionInContainer(pastePosition, curNode.id); + pastePosition = getPositionInContainer(pastePosition, curNode.id, doc); } // 将所有待粘贴元素坐标相对于多选第一个元素坐标重新计算,以保证多选粘贴后元素间距不变 @@ -71,12 +71,12 @@ export const beforePaste = (position: PastePosition, config: MNode[]): MNode[] = * @param id 元素id * @returns PastePosition 转换后的坐标 */ -export const getPositionInContainer = (position: PastePosition = {}, id: Id) => { +export const getPositionInContainer = (position: PastePosition = {}, id: Id, doc?: Document) => { let { left = 0, top = 0 } = position; const parentEl = editorService.get('stage')?.renderer?.contentWindow?.document.getElementById(`${id}`); const parentElRect = parentEl?.getBoundingClientRect(); - left = left - (parentElRect?.left || 0); - top = top - (parentElRect?.top || 0); + left = left - calcValueByFontsize(doc, parentElRect?.left || 0); + top = top - calcValueByFontsize(doc, parentElRect?.top || 0); return { left, top,