面板关闭事件接入总线

This commit is contained in:
zqm
2025-11-20 09:44:51 +08:00
parent f978a42990
commit f92d3ca474
4 changed files with 202 additions and 30 deletions

View File

@@ -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)) {
// 模式2children结构需要遍历查找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)) {
// 模式2children结构需要遍历查找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`)