diff --git a/src/assets/images/robot.png b/src/assets/images/robot.png index 3d8bae6..21d510f 100644 Binary files a/src/assets/images/robot.png and b/src/assets/images/robot.png differ diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue index 888da01..e3204de 100644 --- a/src/layout/components/AppMain.vue +++ b/src/layout/components/AppMain.vue @@ -37,7 +37,7 @@ function addIframe() { @import "@/assets/styles/variables.module"; .app-main { /* 50= navbar 50 */ - min-height: calc(100vh - 50px); + height: calc(100vh - 84px); padding: 20px; width: 100%; position: relative; @@ -54,7 +54,7 @@ function addIframe() { .hasTagsView { .app-main { /* 84 = navbar + tags-view = 50 + 34 */ - min-height: calc(100vh - 84px); + height: calc(100vh - 84px); } .fixed-header + .app-main { diff --git a/src/router/index.js b/src/router/index.js index 348234e..48aba8c 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -57,12 +57,20 @@ export const constantRoutes = [ component: () => import('@/views/error/401'), hidden: true }, - { - //机械臂路由 - path: '/mechanical_arm/:id', - component: () => import('@/views/device/register/components/MechanicalArm/index.vue'), - hidden: true + { + path: '/device', + component: Layout, + children: [ + { + path: 'mechanical_arm/:id', + component: () => import('@/views/device/register/components/MechanicalArm/index.vue'), + name: '机械臂示教', + meta: { title: '机械臂详情' }, + hidden: true + } + ] }, + // router/index.js { path: '/device', diff --git a/src/views/device/register/components/DexHand/LeftBottomHand.vue b/src/views/device/register/components/DexHand/LeftBottomHand.vue index 77b36ea..62cf533 100644 --- a/src/views/device/register/components/DexHand/LeftBottomHand.vue +++ b/src/views/device/register/components/DexHand/LeftBottomHand.vue @@ -21,6 +21,7 @@ const terminalId = ref('25449ff3fcc7b27da5f69462c5efcec2'); // 待您修改 const deviceId = ref('hand1'); // 待您修改 const frameData = ref({ count: 0, lastTime: 0 }); const isHandSeries = ref(false); +const containerRef = ref(null) // 矩形定义 const rectangle = [ @@ -362,15 +363,39 @@ onMounted(async () => { await nextTick(); initializeRectangleData(); // 初始化数据 initCanvas(); // 初始化 Canvas + +// 使用 ResizeObserver 监听父容器尺寸变化 + const container = containerRef.value || handCanvas.value?.parentElement; + if (container) { + const resizeObserver = new ResizeObserver(debounce(updateCanvas, 10)); + resizeObserver.observe(container); + // 保存 ResizeObserver 实例以便清理 + data.resizeObserver = resizeObserver; + } else { + console.error('Failed to find container for ResizeObserver'); + } + const debouncedResize = debounce(updateCanvas, 10); window.addEventListener('resize', debouncedResize); + data.debouncedResize = debouncedResize; // 保存以便清理 + + + }); onUnmounted(() => { - window.removeEventListener('resize', debounce(updateCanvas, 10)); - // 如果流正在启动 + // 清理 ResizeObserver + if (data.resizeObserver) { + data.resizeObserver.disconnect(); + delete data.resizeObserver; + } + // 清理 window 的 resize 事件 + if (data.debouncedResize) { + window.removeEventListener('resize', data.debouncedResize); + delete data.debouncedResize; + } + // 清理 WebSocket 订阅 if (isHandSeries.value) { - // 关闭 WebSocket 通道 subscribeSensorData(false); } }); diff --git a/src/views/device/register/components/DexHand/LeftTopHand.vue b/src/views/device/register/components/DexHand/LeftTopHand.vue index f8d6c62..afcb7e7 100644 --- a/src/views/device/register/components/DexHand/LeftTopHand.vue +++ b/src/views/device/register/components/DexHand/LeftTopHand.vue @@ -32,6 +32,7 @@ const emit = defineEmits(['update:topSeriesData']); const loading = ref(false); const handImage = ref(null); +const containerRef = ref(null); // 新增:引用父容器 const defaultHandImageInfo = { width: 891, height: 981 }; const imageAspectRatio = defaultHandImageInfo.width / defaultHandImageInfo.height; @@ -114,16 +115,39 @@ const updateToSeriesData = () => { emit('update:topSeriesData', newTopSeriesData); }); }; - +const data = ref({ + debouncedResize: null, + resizeObserver: null, +}); onMounted(() => { updateSliderPositions(); + // 使用 ResizeObserver 监听父容器尺寸变化 + const container = containerRef.value || handImage.value?.parentElement; + if (container) { + const resizeObserver = new ResizeObserver(debounce(updateSliderPositions, 10)); + resizeObserver.observe(container); + data.value.resizeObserver = resizeObserver; + } else { + console.error('Failed to find container for ResizeObserver'); + } + const debouncedResize = debounce(updateSliderPositions, 0); window.addEventListener('resize', debouncedResize); + data.value.debouncedResize = debouncedResize; updateToSeriesData(); }); onUnmounted(() => { - window.removeEventListener('resize', debounce(updateSliderPositions, 0)); + // 清理 ResizeObserver + if (data.value.resizeObserver) { + data.value.resizeObserver.disconnect(); + data.value.resizeObserver = null; + } + // 清理 window 的 resize 事件 + if (data.value.debouncedResize) { + window.removeEventListener('resize', data.value.debouncedResize); + data.value.debouncedResize = null; + } }); diff --git a/src/views/device/register/components/DexHand/RightBottomCharts.vue b/src/views/device/register/components/DexHand/RightBottomCharts.vue index 72d54bb..bc42122 100644 --- a/src/views/device/register/components/DexHand/RightBottomCharts.vue +++ b/src/views/device/register/components/DexHand/RightBottomCharts.vue @@ -1,5 +1,5 @@