From 4a14dc915853d927c38c742888061b8917d23150 Mon Sep 17 00:00:00 2001 From: zqm Date: Tue, 13 Jan 2026 16:56:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=88=87=E6=8D=A2=E9=A1=B5?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=90=8E=E5=85=B3=E9=97=AD=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E4=BC=9A=E5=85=B3=E9=97=AD=E6=89=80=E6=9C=89=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=E7=9A=84=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Robot/Web/src/DockLayout/DockLayout.vue | 27 +++++++++++++++ .../Robot/Web/src/DockLayout/TabPage.vue | 33 ++++++++++++++++++- .../Robot/Web/src/DockLayout/eventBus.js | 3 ++ .../src/DockLayout/handlers/PanelHandler.js | 2 ++ 4 files changed, 64 insertions(+), 1 deletion(-) 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 @@