diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue index 2e3cb06..00e69f1 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue @@ -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(`📌 移除了唯一的Panel,TabPage不显示标签栏`); + + // 发送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: [ { diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/TabPage.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/TabPage.vue index a0202e1..c8b1d4a 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/TabPage.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/TabPage.vue @@ -133,7 +133,7 @@