From 5629018e55338cc9a197ac7311eefbd0f6278a75 Mon Sep 17 00:00:00 2001 From: zqm Date: Tue, 4 Nov 2025 15:26:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84Area=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9A=E4=BC=98=E5=8C=96=E5=B1=85=E4=B8=AD?= =?UTF-8?q?=E5=AE=9A=E4=BD=8D=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A1=AE=E4=BF=9D?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E6=97=B6=E5=90=8C=E6=AD=A5=E7=A7=BB=E9=99=A4?= =?UTF-8?q?Panel=EF=BC=8C=E6=BB=A1=E8=B6=B3=E6=89=80=E6=9C=89=E9=9C=80?= =?UTF-8?q?=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Windows/Robot/Web/src/DockLayout/Area.vue | 38 ++++++++++++------- .../Robot/Web/src/DockLayout/DockLayout.vue | 15 +++++++- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue index 727a39e..ae11d3d 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/Area.vue @@ -262,21 +262,33 @@ onMounted(() => { // 如果没有指定left或top,自动居中定位 if (originalPosition.value.left === undefined || originalPosition.value.top === undefined) { - if (parentContainer.value && parentContainer.value !== window) { + let parentWidth, parentHeight + + if (parentContainer.value === window) { + parentWidth = window.innerWidth + parentHeight = window.innerHeight + } else if (parentContainer.value) { const parentRect = parentContainer.value.getBoundingClientRect() - const areaWidth = originalPosition.value.width - const areaHeight = originalPosition.value.height - - // 计算居中位置 - originalPosition.value.left = Math.floor((parentRect.width - areaWidth) / 2) - originalPosition.value.top = Math.floor((parentRect.height - areaHeight) / 2) - - // 通知父组件位置变化 - emit('update:position', { - left: originalPosition.value.left, - top: originalPosition.value.top - }) + parentWidth = parentRect.width + parentHeight = parentRect.height + } else { + // 默认值,防止出错 + parentWidth = 800 + parentHeight = 600 } + + const areaWidth = originalPosition.value.width || 300 + const areaHeight = originalPosition.value.height || 250 + + // 计算居中位置 + originalPosition.value.left = Math.floor((parentWidth - areaWidth) / 2) + originalPosition.value.top = Math.floor((parentHeight - areaHeight) / 2) + + // 通知父组件位置变化 + emit('update:position', { + left: originalPosition.value.left, + top: originalPosition.value.top + }) } }) diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue b/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue index 3522fc0..91333e6 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/DockLayout.vue @@ -158,11 +158,24 @@ const onMaximize = (panelId) => { } } -// 关闭浮动区域 +// 关闭浮动区域 - 同时移除内容区的Panel const onCloseFloatingArea = (id) => { const index = floatingAreas.value.findIndex(a => a.id === id) if (index !== -1) { + // 获取要移除的Area + const areaToRemove = floatingAreas.value[index] + + // 清理Panel引用,确保Panel被正确移除 + if (areaToRemove.panels) { + // 这里可以添加任何需要的Panel清理逻辑 + console.log('移除Area时同步移除Panel:', areaToRemove.panels.map(p => p.id)) + // 清空panels数组,确保Panel被正确移除 + areaToRemove.panels = [] + } + + // 从数组中移除Area floatingAreas.value.splice(index, 1) + console.log('成功关闭Area:', id) } }