From 29a99128203a34a67fd6963c007662f60f4c9a68 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Sat, 2 Apr 2022 19:10:57 +0800 Subject: [PATCH] =?UTF-8?q?fix(stage):=20canSelect=E5=A2=9E=E5=8A=A0event?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor/src/layouts/workspace/Stage.vue | 4 ++-- packages/stage/src/StageCore.ts | 2 +- packages/stage/src/types.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/editor/src/layouts/workspace/Stage.vue b/packages/editor/src/layouts/workspace/Stage.vue index c4c0b3a4..81ad9ee7 100644 --- a/packages/editor/src/layouts/workspace/Stage.vue +++ b/packages/editor/src/layouts/workspace/Stage.vue @@ -138,10 +138,10 @@ export default defineComponent({ render: props.render, runtimeUrl: props.runtimeUrl, zoom: zoom.value, - canSelect: (el, stop) => { + canSelect: (el, event, stop) => { const elCanSelect = props.canSelect(el); // 在组件联动过程中不能再往下选择,返回并触发 ui-select - if (uiSelectMode.value && elCanSelect) { + if (uiSelectMode.value && elCanSelect && event.type === 'mousedown') { document.dispatchEvent(new CustomEvent('ui-select', { detail: el })); return stop(); } diff --git a/packages/stage/src/StageCore.ts b/packages/stage/src/StageCore.ts index 646b8a50..b0ea5ea7 100644 --- a/packages/stage/src/StageCore.ts +++ b/packages/stage/src/StageCore.ts @@ -120,7 +120,7 @@ export default class StageCore extends EventEmitter { let stopped = false; const stop = () => (stopped = true); for (const el of els) { - if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.canSelect(el, stop))) { + if (!el.id.startsWith(GHOST_EL_ID_PREFIX) && (await this.canSelect(el, event, stop))) { if (stopped) break; if (event.type === 'mousemove') { this.highlight(el); diff --git a/packages/stage/src/types.ts b/packages/stage/src/types.ts index 9a871d04..62419510 100644 --- a/packages/stage/src/types.ts +++ b/packages/stage/src/types.ts @@ -23,7 +23,7 @@ import { Id, MApp, MNode } from '@tmagic/schema'; import { GuidesType } from './const'; import StageCore from './StageCore'; -export type CanSelect = (el: HTMLElement, stop: () => boolean) => boolean | Promise; +export type CanSelect = (el: HTMLElement, event: MouseEvent, stop: () => boolean) => boolean | Promise; export type StageCoreConfig = { /** 需要对齐的dom节点的CSS选择器字符串 */