修复切换页标签后关闭面板会关闭所有面板的异常

This commit is contained in:
zqm
2026-01-13 16:56:27 +08:00
parent d0e45bd479
commit 4a14dc9158
4 changed files with 64 additions and 1 deletions

View File

@@ -86,6 +86,7 @@ const mainAreaConfig = ref({
showTitleBar: false,
children: {
type: 'TabPage',
id: `tabPage-${Date.now()}`,
children: []
}
})
@@ -286,6 +287,15 @@ const onPanelClose = (event) => {
// 3. 只移除指定的面板,不影响其他面板
child.children.splice(i, 1);
// 发送面板移除事件通知TabPage组件调整activeTabIndex
const tabPageId = child.id || `tabPage-${areaId}`;
eventBus.emit(EVENT_TYPES.TABPAGE_PANEL_REMOVED, {
tabPageId,
removedPanelId: panelId,
removedIndex: i,
remainingPanelCount: child.children.length
}, { componentId: 'dock-layout' });
// 4. 检查TabPage是否还有子元素
// 当child.children为空数组时认为TabPage没有子元素
if (child.children.length === 0) {
@@ -535,12 +545,28 @@ const onTabClose = async (data) => {
if (Array.isArray(targetTabPage.children)) {
targetTabPage.children.splice(panelIndex, 1);
console.log(`📌 从TabPage移除Panel后剩余Panel数量: ${targetTabPage.children.length}`);
// 发送Panel移除事件通知TabPage组件调整activeTabIndex
eventBus.emit(EVENT_TYPES.TABPAGE_PANEL_REMOVED, {
tabPageId,
removedPanelId: panelId,
removedIndex: panelIndex,
remainingPanelCount: targetTabPage.children.length
}, { componentId: 'dock-layout' });
} else {
// 当TabPage只有一个Panel时我们将children设置为null
// 这样shouldShowTabs计算属性会返回false不显示标签栏
// 但TabPage仍然存在
targetTabPage.children = null;
console.log(`📌 移除了唯一的PanelTabPage不显示标签栏`);
// 发送Panel移除事件通知TabPage组件调整activeTabIndex
eventBus.emit(EVENT_TYPES.TABPAGE_PANEL_REMOVED, {
tabPageId,
removedPanelId: panelId,
removedIndex: panelIndex,
remainingPanelCount: 0
}, { componentId: 'dock-layout' });
}
// 5. 检查TabPage是否还有子元素
@@ -874,6 +900,7 @@ const addFloatingPanel = (panel) => {
// 使用children结构以兼容Render组件的渲染逻辑
children: {
type: 'TabPage',
id: `tabPage-${areaId}`,
tabPosition: ['top', 'right', 'bottom', 'left'][Math.floor(Math.random() * 4)],
children: [
{