diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue index 245a27f..e89fc76 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue @@ -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) => {