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