在一个浮动Area,一个tabpage,两个Panel的场景下。拖拽面板标题栏应该等同于拖拽Area标题栏

This commit is contained in:
zqm
2026-01-07 10:50:54 +08:00
parent f80da7682c
commit b1cdece5bd

View File

@@ -126,25 +126,23 @@ const dragOperationCache = new Map();
*/
const shouldOperateAreaInsteadOfPanel = (areaId) => {
try {
// 简化逻辑:直接检查区域的面板数量
// 遍历所有子元素统计Panel数量
let panelCount = 0;
// 检查区域的子元素结构
// 如果有一个TabPage和任意数量的Panel返回true
const childrenArray = Array.isArray(area.children) ? area.children : [area.children];
for (const child of childrenArray) {
if (child.type === 'TabPage' && child.children) {
const tabChildrenArray = Array.isArray(child.children) ? child.children : [child.children];
for (const tabChild of tabChildrenArray) {
if (tabChild.type === 'Panel') {
panelCount++;
}
const panelCount = tabChildrenArray.filter(tabChild => tabChild.type === 'Panel').length;
// 如果TabPage有Panel返回true
if (panelCount > 0) {
return true;
}
}
}
// 如果区域中只有一个面板返回true
return panelCount === 1;
return false;
} catch (error) {
return false;
}
@@ -152,7 +150,7 @@ const shouldOperateAreaInsteadOfPanel = (areaId) => {
/**
* 检查是否应该操作区域而非面板从GlobalEventManager.js迁移
* 当有一个面板时,操作区域而不是面板
* 当有一个TabPage和任意数量的Panel时,操作区域而不是面板
* @param {Object} data - 事件数据
* @returns {boolean} 是否应该操作区域
*/
@@ -162,15 +160,17 @@ const shouldOperateAreaInsteadOfPanelFromData = (data) => {
// 从AreaHandler获取区域状态
const areaState = areaHandler.getAreaState(areaId);
// 检查区域是否有一个面板
let panelCount = 0;
// 检查区域是否有一个TabPage和任意数量的Panel
if (areaState.children && areaState.children.type === 'TabPage') {
const tabChildren = Array.isArray(areaState.children.children) ? areaState.children.children : [areaState.children.children];
panelCount = tabChildren.filter(child => child.type === 'Panel').length;
const panelCount = tabChildren.filter(child => child.type === 'Panel').length;
// 如果TabPage有Panel返回true
return panelCount > 0;
}
// 如果区域中只有一个面板返回true
return panelCount === 1;
// 默认不是
return false;
};
const onCloseFloatingArea = (event) => {