diff --git a/packages/designer/src/component-meta.ts b/packages/designer/src/component-meta.ts index 08ee11af1..b55c14d20 100644 --- a/packages/designer/src/component-meta.ts +++ b/packages/designer/src/component-meta.ts @@ -277,13 +277,21 @@ export class ComponentMeta { return true; } - checkNestingDown(my: Node, target: Node | NodeSchema) { + checkNestingDown(my: Node, target: Node | NodeSchema | NodeSchema[]) { // 检查父子关系,直接约束型,在画布中拖拽直接掠过目标容器 if (this.childWhitelist) { - if (!isNode(target)) { - target = new Node(my.document, target); + let _target: any = target; + if (!Array.isArray(_target)) { + _target = [_target]; } - return this.childWhitelist(target, my); + + return !_target.some((item: Node | NodeSchema) => { + let _item = item; + if (!isNode(_item)) { + _item = new Node(my.document, _item); + } + return this.childWhitelist && !this.childWhitelist(_item, my); + }); } return true; } diff --git a/packages/designer/src/designer/builtin-hotkey.ts b/packages/designer/src/designer/builtin-hotkey.ts index 07fa4ad56..27b33013d 100644 --- a/packages/designer/src/designer/builtin-hotkey.ts +++ b/packages/designer/src/designer/builtin-hotkey.ts @@ -151,7 +151,7 @@ hotkey.bind(['command+v', 'ctrl+v'], (e) => { } clipboard.waitPasteData(e, ({ componentsTree }) => { if (componentsTree) { - const { target, index } = designer.getSuitableInsertion() || {}; + const { target, index } = designer.getSuitableInsertion(componentsTree) || {}; if (!target) { return; } diff --git a/packages/designer/src/designer/designer.ts b/packages/designer/src/designer/designer.ts index 197bcfe67..d6fc63462 100644 --- a/packages/designer/src/designer/designer.ts +++ b/packages/designer/src/designer/designer.ts @@ -295,7 +295,7 @@ export class Designer { /** * 获得合适的插入位置 */ - getSuitableInsertion(insertNode?: Node | NodeSchema): { target: ParentalNode; index?: number } | null { + getSuitableInsertion(insertNode?: Node | NodeSchema | NodeSchema[]): { target: ParentalNode; index?: number } | null { const activedDoc = this.project.currentDocument; if (!activedDoc) { return null;