diff --git a/packages/designer/src/designer/designer.ts b/packages/designer/src/designer/designer.ts
index 4ec376510..379da3875 100644
--- a/packages/designer/src/designer/designer.ts
+++ b/packages/designer/src/designer/designer.ts
@@ -143,26 +143,26 @@ export class Designer {
parent?.componentMeta?.componentName ||
'';
// eslint-disable-next-line no-unused-expressions
- this.postEvent('drag', {
- time: (endTime - startTime).toFixed(2),
- selected: nodes
- ?.map((n) => {
- if (!n) {
- return;
- }
- // eslint-disable-next-line no-shadow
- const npm = n?.componentMeta?.npm;
- return (
- [npm?.package, npm?.componentName].filter((item) => !!item).join('-') ||
- n?.componentMeta?.componentName
- );
- })
- .join('&'),
- align: loc?.detail?.near?.align || '',
- pos: loc?.detail?.near?.pos || '',
- src,
- dest,
- });
+ // this.postEvent('drag', {
+ // time: (endTime - startTime).toFixed(2),
+ // selected: nodes
+ // ?.map((n) => {
+ // if (!n) {
+ // return;
+ // }
+ // // eslint-disable-next-line no-shadow
+ // const npm = n?.componentMeta?.npm;
+ // return (
+ // [npm?.package, npm?.componentName].filter((item) => !!item).join('-') ||
+ // n?.componentMeta?.componentName
+ // );
+ // })
+ // .join('&'),
+ // align: loc?.detail?.near?.align || '',
+ // pos: loc?.detail?.near?.pos || '',
+ // src,
+ // dest,
+ // });
}
}
}
diff --git a/packages/designer/src/designer/dragon.ts b/packages/designer/src/designer/dragon.ts
index 8e2e2a8da..cbefed8f2 100644
--- a/packages/designer/src/designer/dragon.ts
+++ b/packages/designer/src/designer/dragon.ts
@@ -543,7 +543,7 @@ export class Dragon {
/* istanbul ignore next */
const chooseSensor = (e: LocateEvent) => {
// this.sensors will change on dragstart
- const sensors: ISensor[] = (masterSensors as ISensor[]).concat(this.sensors);
+ const sensors: ISensor[] = this.sensors.concat(masterSensors as ISensor[]);
let sensor =
e.sensor && e.sensor.isEnter(e)
? e.sensor
diff --git a/packages/editor-skeleton/src/components/widget-views/index.tsx b/packages/editor-skeleton/src/components/widget-views/index.tsx
index b420bd545..87280fbfc 100644
--- a/packages/editor-skeleton/src/components/widget-views/index.tsx
+++ b/packages/editor-skeleton/src/components/widget-views/index.tsx
@@ -197,6 +197,7 @@ export class TitledPanelView extends Component<{ panel: Panel; area?: string }>
hidden: !panel.visible,
})}
id={panelName}
+ data-keep-visible-while-dragging={panel.config.props?.keepVisibleWhileDragging}
>
@@ -258,6 +259,7 @@ export class PanelView extends Component<{
hidden: !panel.visible,
})}
id={panelName}
+ data-keep-visible-while-dragging={panel.config.props?.keepVisibleWhileDragging}
>
{!hideOperationRow && }
{panel.body}
diff --git a/packages/editor-skeleton/src/layouts/left-float-pane.tsx b/packages/editor-skeleton/src/layouts/left-float-pane.tsx
index 4c5fd6d5d..eebac23e2 100644
--- a/packages/editor-skeleton/src/layouts/left-float-pane.tsx
+++ b/packages/editor-skeleton/src/layouts/left-float-pane.tsx
@@ -14,11 +14,18 @@ export default class LeftFloatPane extends Component<{ area: Area }>
componentDidMount() {
const { area } = this.props;
- const triggerClose = () => area.setVisible(false);
- area.skeleton.editor.on('designer.dragstart', triggerClose);
+ const triggerClose = (e: any) => {
+ if (!area.visible) return;
+ // 假如当前操作 target 祖先节点中有属性 data-keep-visible-while-dragging="true" 代表该 target 所属 panel
+ // 不希望 target 在 panel 范围内拖拽时关闭 panel
+ const panelElem = e.originalEvent?.target.closest('div[data-keep-visible-while-dragging="true"]');
+ if (panelElem) return;
+ area.setVisible(false);
+ };
+ area.skeleton.editor.on('designer.drag', triggerClose);
this.dispose = () => {
- area.skeleton.editor.removeListener('designer.dragstart', triggerClose);
+ area.skeleton.editor.removeListener('designer.drag', triggerClose);
};
this.focusing = focusTracker.create({
diff --git a/packages/editor-skeleton/src/types.ts b/packages/editor-skeleton/src/types.ts
index c6485f2cd..521b008a6 100644
--- a/packages/editor-skeleton/src/types.ts
+++ b/packages/editor-skeleton/src/types.ts
@@ -104,6 +104,7 @@ export interface PanelProps {
onDestroy?: () => any;
shortcut?: string; // 只有在特定位置,可触发 toggle show
enableDrag?: boolean; // 是否开启通过 drag 调整 宽度
+ keepVisibleWhileDragging?: boolean; // 是否在该 panel 范围内拖拽时保持 visible 状态
}
export interface PanelDockConfig extends IDockBaseConfig {
diff --git a/packages/engine/src/engine-core.ts b/packages/engine/src/engine-core.ts
index 7ab0b5077..65849dcfe 100644
--- a/packages/engine/src/engine-core.ts
+++ b/packages/engine/src/engine-core.ts
@@ -159,6 +159,7 @@ plugins.register((ctx: ILowCodePluginContext) => {
content: Outline,
panelProps: {
area: 'leftFloatArea',
+ keepVisibleWhileDragging: true,
},
});
skeleton.add({