diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue index defb9e7..70e12a6 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue @@ -586,9 +586,27 @@ const mergeAreaContent = (sourceArea) => { // 4.2.1 如果目标Area内容区为空,将源Area内容区的子组件添加到目标Area内容区 // console.log('[Area] 目标Area为空,添加源Area的子组件') - // 处理源Area的所有tabPages - if (sourceArea.tabPages && sourceArea.tabPages.length > 0) { - sourceArea.tabPages.forEach((tabPage, tabIndex) => { + // 处理源Area的所有tabPages(支持两种模式:tabPages和children) + let tabPagesData = [] + + if (sourceArea.tabPages && Array.isArray(sourceArea.tabPages)) { + // 模式1:直接tabPages结构 + tabPagesData = sourceArea.tabPages + } else if (sourceArea.children && Array.isArray(sourceArea.children)) { + // 模式2:children结构,需要遍历查找TabPage类型 + for (const child of sourceArea.children) { + if (child.type === 'TabPage' && child.children && child.children.type === 'Panel') { + tabPagesData.push({ + id: child.id, + title: child.title, + panels: child.children.items || [] + }) + } + } + } + + if (tabPagesData.length > 0) { + tabPagesData.forEach((tabPage, tabIndex) => { // 保持原有的tabPage ID,确保Vue组件状态连续性 const tabPageId = `merged-tabpage-${tabPage.id}` const newPanels = (tabPage.panels || []).map((panel, panelIndex) => { @@ -637,9 +655,27 @@ const mergeAreaContent = (sourceArea) => { return false } - // 处理源Area的所有tabPages - if (sourceArea.tabPages && sourceArea.tabPages.length > 0) { - sourceArea.tabPages.forEach((sourceTabPage, tabIndex) => { + // 处理源Area的所有tabPages(支持两种模式:tabPages和children) + let tabPagesData = [] + + if (sourceArea.tabPages && Array.isArray(sourceArea.tabPages)) { + // 模式1:直接tabPages结构 + tabPagesData = sourceArea.tabPages + } else if (sourceArea.children && Array.isArray(sourceArea.children)) { + // 模式2:children结构,需要遍历查找TabPage类型 + for (const child of sourceArea.children) { + if (child.type === 'TabPage' && child.children && child.children.type === 'Panel') { + tabPagesData.push({ + id: child.id, + title: child.title, + panels: child.children.items || [] + }) + } + } + } + + if (tabPagesData.length > 0) { + tabPagesData.forEach((sourceTabPage, tabIndex) => { if (sourceTabPage && sourceTabPage.panels) { // 保持原有Panel ID不变,避免Vue组件重新创建和状态丢失 const newPanels = sourceTabPage.panels.map((panel, panelIndex) => { @@ -664,7 +700,7 @@ const mergeAreaContent = (sourceArea) => { targetAreaId: props.id, targetAreaHasContent: true, // 目标Area已有内容 operation: 'merge-tabpages', - sourceTabPages: sourceArea.tabPages || [] + sourceTabPages: tabPagesData }) // 更新完成 // // console.log(`[Area] 合并完成,现有TabPage共有 ${existingTabPage.tabPage.panels.length} 个Panel`) diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.vue index 991b60b..40fffdd 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.vue @@ -1,6 +1,7 @@