From 1e516414d7806c8495a26fbdbb5e3ad78d14dd5f Mon Sep 17 00:00:00 2001 From: mmc <1556375442@qq.com> Date: Mon, 21 Sep 2026 15:13:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=20=E7=95=8C=E9=9D=A2=20=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E5=92=8C=E5=AE=9E=E6=97=B6=E7=BB=8F=E7=BA=AC=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 26 ++++++ src/components/devices/RobotTaskPage.tsx | 10 +-- src/components/devices/deviceController.js | 16 +++- vite.config.ts | 94 +++++++++++----------- 4 files changed, 93 insertions(+), 53 deletions(-) diff --git a/index.html b/index.html index 3d2f26f..1741dfd 100644 --- a/index.html +++ b/index.html @@ -12,6 +12,8 @@ + + @@ -74,6 +76,30 @@ + diff --git a/src/components/devices/RobotTaskPage.tsx b/src/components/devices/RobotTaskPage.tsx index 5e02cf1..0701a74 100644 --- a/src/components/devices/RobotTaskPage.tsx +++ b/src/components/devices/RobotTaskPage.tsx @@ -265,7 +265,7 @@ export default function RobotTaskPage() { setExecutingRobot(targetDevice); setClearNavLine(v => v + 1); // 清空地图轨迹 if (isFirstConnect.current) { isFirstConnect.current = false; controllerRef.current?.connectDevice(targetDevice); } else { controllerRef.current?.switchDevice(targetDevice); } - setShowVideo(true); + //setShowVideo(true); }; @@ -336,7 +336,7 @@ export default function RobotTaskPage() { console.log('🔄 检测到正在执行任务的新设备,开始连接', targetDevice); if (isFirstConnect.current) { isFirstConnect.current = false; controllerRef.current?.connectDevice(targetDevice); } else { controllerRef.current?.switchDevice(targetDevice); } - setShowVideo(true); + //setShowVideo(true); }, [devices, taskPoolList, executingRobot, runningPoolTask]); useEffect(() => { @@ -540,7 +540,7 @@ export default function RobotTaskPage() { setExecutingRobot(targetDevice); setClearNavLine(v => v + 1); // 清空地图轨迹 if (isFirstConnect.current) { isFirstConnect.current = false; controllerRef.current?.connectDevice(targetDevice); } else { controllerRef.current?.switchDevice(targetDevice); } - setShowVideo(true); + //setShowVideo(true); } } @@ -1879,7 +1879,7 @@ export default function RobotTaskPage() { - {showVideo && executingRobot && execute && taskPoolList.length > 0 && ( + {/*{showVideo && executingRobot && execute && taskPoolList.length > 0 && ( - )} + )}*/} ); } diff --git a/src/components/devices/deviceController.js b/src/components/devices/deviceController.js index 00640f9..99bfe29 100644 --- a/src/components/devices/deviceController.js +++ b/src/components/devices/deviceController.js @@ -279,12 +279,15 @@ export default class DeviceController { this.isControlled = false; this.onControlStatusChange?.(false); + // 切换任务/设备:先清掉上一个设备的实时坐标,避免轨迹残留到新设备 + this.onLocationInfoUpdate?.(null); + wsManager.close(); try { console.log('Connecting to', this.wsUrl); - wsManager.connect(sn, this.wsUrl); this.connectedDeviceSn = sn; + wsManager.connect(sn, this.wsUrl); await this.getControl(sn); } catch (err) { @@ -313,6 +316,9 @@ export default class DeviceController { this.isControlled = false; this.onControlStatusChange?.(false); + // 切换设备:清掉上一个设备的实时坐标,避免轨迹残留 + this.onLocationInfoUpdate?.(null); + wsManager.send({ type: 'AUTH', token: this.userInfo.token, @@ -392,6 +398,10 @@ export default class DeviceController { msg.data.forEach((item) => { data[item.name] = item.value; }); + // 切换任务/切换设备时,忽略上一个设备遗留的实时数据 + if (data?.deviceId && data.deviceId !== this.connectedDeviceSn) { + break; + } this.wsDeviceInfo = data; this.onDeviceInfoUpdate?.(data); break; @@ -401,6 +411,10 @@ export default class DeviceController { msg.data.forEach((item) => { data[item.name] = item.value; }); + // 切换任务/切换设备时,忽略上一个设备遗留的实时经纬度,只显示当前连接设备的实时轨迹 + if (data?.deviceId && data.deviceId !== this.connectedDeviceSn) { + break; + } this.locationInfo = data; this.onLocationInfoUpdate?.(data); break; diff --git a/vite.config.ts b/vite.config.ts index 719d335..3052d1d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -52,59 +52,59 @@ export default defineConfig(({ mode }) => { output: { // ---- 手动分包策略 ---- // 将第三方库按类型拆分,利于浏览器并行加载与长期缓存 - manualChunks(id) { - if (!id.includes('node_modules')) return; + //manualChunks(id) { + // if (!id.includes('node_modules')) return; - // 1. React 生态 - if ( - id.includes('node_modules/react') || - id.includes('node_modules/react-dom') || - id.includes('node_modules/react-router') || - id.includes('node_modules/react-redux') || - id.includes('node_modules/@reduxjs') || - id.includes('node_modules/scheduler') - ) { - return 'react-vendor'; - } + // // 1. React 生态 + // if ( + // id.includes('node_modules/react') || + // id.includes('node_modules/react-dom') || + // id.includes('node_modules/react-router') || + // id.includes('node_modules/react-redux') || + // id.includes('node_modules/@reduxjs') || + // id.includes('node_modules/scheduler') + // ) { + // return 'react-vendor'; + // } - // 2. Ant Design 组件库 - if ( - id.includes('node_modules/antd') || - id.includes('node_modules/@ant-design') || - id.includes('node_modules/@rc-component') || - id.includes('node_modules/rc-') - ) { - return 'antd-vendor'; - } + // // 2. Ant Design 组件库 + // if ( + // id.includes('node_modules/antd') || + // id.includes('node_modules/@ant-design') || + // id.includes('node_modules/@rc-component') || + // id.includes('node_modules/rc-') + // ) { + // return 'antd-vendor'; + // } - // 3. 图表库(echarts / recharts 体积较大) - if ( - id.includes('node_modules/echarts') || - id.includes('node_modules/recharts') || - id.includes('node_modules/zrender') - ) { - return 'charts-vendor'; - } + // // 3. 图表库(echarts / recharts 体积较大) + // if ( + // id.includes('node_modules/echarts') || + // id.includes('node_modules/recharts') || + // id.includes('node_modules/zrender') + // ) { + // return 'charts-vendor'; + // } - // 4. 实时音视频 SDK - if ( - id.includes('node_modules/agora-rtc-sdk-ng') || - id.includes('node_modules/@volcengine/rtc') - ) { - return 'rtc-vendor'; - } + // // 4. 实时音视频 SDK + // if ( + // id.includes('node_modules/agora-rtc-sdk-ng') || + // id.includes('node_modules/@volcengine/rtc') + // ) { + // return 'rtc-vendor'; + // } - // 5. 仅在特定页面使用的重库,单独拆分按需加载(不进首屏 vendor) - if (id.includes('node_modules/mqtt')) return 'mqtt-vendor'; - if (id.includes('node_modules/socket.io-client')) return 'socket-vendor'; - if (id.includes('node_modules/docx')) return 'docx-vendor'; - if (id.includes('node_modules/qrcode')) return 'qrcode-vendor'; - if (id.includes('node_modules/country-state-city')) return 'csc-vendor'; - if (id.includes('node_modules/flv.js')) return 'flv-vendor'; + // // 5. 仅在特定页面使用的重库,单独拆分按需加载(不进首屏 vendor) + // if (id.includes('node_modules/mqtt')) return 'mqtt-vendor'; + // if (id.includes('node_modules/socket.io-client')) return 'socket-vendor'; + // if (id.includes('node_modules/docx')) return 'docx-vendor'; + // if (id.includes('node_modules/qrcode')) return 'qrcode-vendor'; + // if (id.includes('node_modules/country-state-city')) return 'csc-vendor'; + // if (id.includes('node_modules/flv.js')) return 'flv-vendor'; - // 6. 其他 node_modules(首屏通用依赖:axios、i18next、lodash 等) - return 'vendor'; - }, + // // 6. 其他 node_modules(首屏通用依赖:axios、i18next、lodash 等) + // return 'vendor'; + //}, }, }, },