diff --git a/packages/designer/src/builtin-simulator/host.ts b/packages/designer/src/builtin-simulator/host.ts index 76e6a9e6d..3010430b7 100644 --- a/packages/designer/src/builtin-simulator/host.ts +++ b/packages/designer/src/builtin-simulator/host.ts @@ -1,5 +1,5 @@ import { obx, autorun, computed, getPublicPath, hotkey, focusTracker } from '@ali/lowcode-editor-core'; -import { ISimulatorHost, Component, NodeInstance, ComponentInstance } from '../simulator'; +import { ISimulatorHost, Component, NodeInstance, ComponentInstance, DropContainer } from '../simulator'; import Viewport from './viewport'; import { createSimulator } from './create-simulator'; import { Node, ParentalNode, isNode, contains, isRootNode } from '../document'; @@ -1085,7 +1085,7 @@ export class BuiltinSimulatorHost implements ISimulatorHost, selector: string): Element } return firstQueried; } - -interface DropContainer { - container: ParentalNode; - instance: ComponentInstance; -} diff --git a/packages/designer/src/designer/drag-ghost/index.tsx b/packages/designer/src/designer/drag-ghost/index.tsx index d54dd9bb0..021dee612 100644 --- a/packages/designer/src/designer/drag-ghost/index.tsx +++ b/packages/designer/src/designer/drag-ghost/index.tsx @@ -2,6 +2,7 @@ import { Component } from 'react'; import { observer, obx, Title } from '@ali/lowcode-editor-core'; import { Designer } from '../designer'; import { DragObject, isDragNodeObject, isDragNodeDataObject } from '../dragon'; +import { isSimulatorHost } from '../../simulator'; import './ghost.less'; type offBinding = () => any; @@ -16,6 +17,8 @@ export default class DragGhost extends Component<{ designer: Designer }> { @obx.ref private y = 0; + @obx private isAbsoluteLayoutContainer = false; + private dragon = this.props.designer.dragon; constructor(props: any) { @@ -32,6 +35,14 @@ export default class DragGhost extends Component<{ designer: Designer }> { this.dragon.onDrag(e => { this.x = e.globalX; this.y = e.globalY; + if (isSimulatorHost(e.sensor)) { + const container = e.sensor.getDropContainer(e); + if (container.container.componentMeta.getMetadata().experimental?.isAbsoluteLayoutContainer) { + this.isAbsoluteLayoutContainer = true; + return; + } + } + this.isAbsoluteLayoutContainer = false; }), this.dragon.onDragend(() => { this.dragObject = null; @@ -84,6 +95,10 @@ export default class DragGhost extends Component<{ designer: Designer }> { return null; } + if (this.isAbsoluteLayoutContainer) { + return null; + } + return (
extends ISensor { findDOMNodes(instance: ComponentInstance, selector?: string): Array | null; + getDropContainer(e: LocateEvent): DropContainer | null; + /** * 销毁 */