From 3b34f3a0dc4329fe1dc4a453d68f36c98a361c57 Mon Sep 17 00:00:00 2001 From: zqm Date: Thu, 30 Oct 2025 21:06:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DPanel=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E4=BB=A5=E6=AD=A3=E7=A1=AE=E5=93=8D=E5=BA=94=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF=E7=8A=B6=E6=80=81=E5=8F=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Windows/Robot/Web/src/DockLayout/Panel.js | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.js b/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.js index ebe8923..ff608dd 100644 --- a/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.js +++ b/AutoRobot/Windows/Robot/Web/src/DockLayout/Panel.js @@ -1,4 +1,4 @@ -import { ref, computed, defineComponent, onMounted, onUnmounted } from 'vue'; +import { ref, computed, defineComponent, onMounted, onUnmounted, watch } from 'vue'; /** * 浮动面板组件 @@ -32,6 +32,14 @@ export default defineComponent({ width: props.panel.width || 300, height: props.panel.height || 180 }); + + // 同步面板属性变化 + const syncPanelProperties = () => { + if (props.panel.x !== undefined) panelPosition.value.x = props.panel.x; + if (props.panel.y !== undefined) panelPosition.value.y = props.panel.y; + if (props.panel.width !== undefined) panelSize.value.width = props.panel.width; + if (props.panel.height !== undefined) panelSize.value.height = props.panel.height; + }; // 计算面板样式 const panelStyle = computed(() => { @@ -45,12 +53,16 @@ export default defineComponent({ border: '1px solid #e5e7eb', borderRadius: '4px', boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)', - overflow: 'hidden' + overflow: 'hidden', + zIndex: 10 }; // 最大化状态 if (props.panel.maximized) { - const host = props.hostRef?.value; + // 获取host元素 - 直接使用hostRef或者hostRef.value(如果是ref) + const host = props.hostRef && typeof props.hostRef.getBoundingClientRect === 'function' + ? props.hostRef + : props.hostRef?.value; const rect = host?.getBoundingClientRect(); if (rect) { style.top = '0px'; @@ -116,13 +128,17 @@ export default defineComponent({ isDragging.value = false; }; + // 监听面板属性变化 + watch(() => props.panel, (newPanel) => { + if (newPanel) { + syncPanelProperties(); + } + }, { deep: true }); + // 生命周期钩子 onMounted(() => { // 同步外部面板状态 - if (props.panel.x !== undefined) panelPosition.value.x = props.panel.x; - if (props.panel.y !== undefined) panelPosition.value.y = props.panel.y; - if (props.panel.width !== undefined) panelSize.value.width = props.panel.width; - if (props.panel.height !== undefined) panelSize.value.height = props.panel.height; + syncPanelProperties(); // 添加全局事件监听 document.addEventListener('mousemove', handleMouseMove);