面板关闭事件接入总线
This commit is contained in:
@@ -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`)
|
||||
|
||||
Reference in New Issue
Block a user