From 2d12fc3f89314ef91d4fcf7b5542a56e40268436 Mon Sep 17 00:00:00 2001 From: zhanghao <774378400@qq.com> Date: Tue, 30 Jun 2026 17:32:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8B=A6=E6=88=AA=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 3 + package.json | 4 +- pnpm-lock.yaml | 130 +++++++++++++++++++++++++++++++ src/components/IPlayer/index.vue | 1 + src/router/index.js | 5 +- src/views/Address.vue | 82 +++++++++++++++++++ src/views/Home.vue | 35 +++++++-- src/views/arm/MechanicalArm.vue | 5 ++ src/views/arm/UrdfView.vue | 79 +++++++++---------- src/views/arm/config.js | 15 ++++ src/views/camera/index.vue | 14 ++++ src/views/chassis/Chassis.vue | 25 ++---- 12 files changed, 329 insertions(+), 69 deletions(-) create mode 100644 src/views/Address.vue create mode 100644 src/views/arm/config.js create mode 100644 src/views/camera/index.vue diff --git a/components.d.ts b/components.d.ts index 4fce3b1..06e1866 100644 --- a/components.d.ts +++ b/components.d.ts @@ -17,6 +17,8 @@ declare module 'vue' { ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCol: typeof import('element-plus/es')['ElCol'] ElContainer: typeof import('element-plus/es')['ElContainer'] + ElForm: typeof import('element-plus/es')['ElForm'] + ElFormItem: typeof import('element-plus/es')['ElFormItem'] ElHeader: typeof import('element-plus/es')['ElHeader'] ElIcon: typeof import('element-plus/es')['ElIcon'] ElInput: typeof import('element-plus/es')['ElInput'] @@ -34,6 +36,7 @@ declare module 'vue' { ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTag: typeof import('element-plus/es')['ElTag'] HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] + IPlayer: typeof import('./src/components/IPlayer/index.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] SvgIcon: typeof import('./src/components/SvgIcon/index.vue')['default'] diff --git a/package.json b/package.json index 0c7f507..3d9d273 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@element-plus/icons-vue": "^2.3.2", "@grpc/grpc-js": "^1.14.4", "@grpc/proto-loader": "^0.8.1", + "autofit.js": "^3.2.8", "concurrently": "^10.0.3", "cors": "^2.8.6", "dotenv": "^17.4.2", @@ -27,7 +28,8 @@ "urdf-loader": "^0.12.6", "vue": "^3.5.38", "vue-router": "^5.1.0", - "xacro-parser": "^0.3.11" + "xacro-parser": "^0.3.11", + "xgplayer": "^3.0.24" }, "devDependencies": { "@vitejs/plugin-vue": "^6.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a887fd9..28f0dc7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,6 +17,9 @@ importers: '@grpc/proto-loader': specifier: ^0.8.1 version: 0.8.1 + autofit.js: + specifier: ^3.2.8 + version: 3.2.8 concurrently: specifier: ^10.0.3 version: 10.0.3 @@ -56,6 +59,9 @@ importers: xacro-parser: specifier: ^0.3.11 version: 0.3.11 + xgplayer: + specifier: ^3.0.24 + version: 3.0.24(core-js@3.49.0) devDependencies: '@vitejs/plugin-vue': specifier: ^6.0.7 @@ -586,6 +592,9 @@ packages: engines: {node: '>= 4.5.0'} hasBin: true + autofit.js@3.2.8: + resolution: {integrity: sha512-albZNwDIXvcRneEDyZLW3uAIOH0cUQG/TnCGQ7jpfnL0gPn/+1ZNVRuEz3ZuzZvVkQ4HQRplGHjUeMRtPNxjLQ==} + available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -723,6 +732,9 @@ packages: resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} engines: {node: '>=0.10.0'} + core-js@3.49.0: + resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} + cors@2.8.6: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} @@ -769,6 +781,13 @@ packages: csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + d@1.0.2: + resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==} + engines: {node: '>=0.12'} + + danmu.js@1.2.1: + resolution: {integrity: sha512-evDEImUBo94c846fC92K//Dzll8jXnZ3zKmYlQHwMzmvw6IW2IyjWL3Ew2SqEAzuqauFnDkwJEgZauu3uW/p1Q==} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -828,6 +847,9 @@ packages: defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} + delegate@3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -943,6 +965,17 @@ packages: resolution: {integrity: sha512-CxN9N56HYfd2m/acc/NOFrZQsN9kU4eh+2kk6A707Kz1krH8tKmfrs5RnftB8WNX80T0NS7vSQsDOlg23diR2g==} engines: {node: '>= 0.4'} + es5-ext@0.10.64: + resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==} + engines: {node: '>=0.10'} + + es6-iterator@2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + + es6-symbol@3.1.4: + resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} + engines: {node: '>=0.12'} + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -958,6 +991,10 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + esniff@2.0.1: + resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==} + engines: {node: '>=0.10'} + estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -968,6 +1005,12 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-emitter@0.3.5: + resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + expand-brackets@2.1.4: resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} engines: {node: '>=0.10.0'} @@ -983,6 +1026,9 @@ packages: exsolve@1.1.0: resolution: {integrity: sha512-D+42+T12DdIlJM3uepa55qGiL3sYdLBOxIl2ifQCzCHz4c7eiolaHsi3BIqEr7JxBzxv2pYZQX9kw16ziMcEmw==} + ext@1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -1594,6 +1640,9 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} + next-tick@1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -2100,6 +2149,9 @@ packages: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} + type@2.7.3: + resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -2324,6 +2376,16 @@ packages: xacro-parser@0.3.11: resolution: {integrity: sha512-zyRzHmf6/BySLZQP77zp6iEtdryq1g7tWtfwj/28GOPyf9ijtPvouivOAeaA/yAu0/Bwh20DtA4x+BrYiV6qKQ==} + xgplayer-subtitles@3.0.24: + resolution: {integrity: sha512-yrHROepD9kTGWiTSxBjh+TGaK9orQOHQ1GUxWFOkQzO8BLl/pcIAqqJkHiAoP0j+eU8VdIhpb55oJRIkTTWPsA==} + peerDependencies: + core-js: '>=3.12.1' + + xgplayer@3.0.24: + resolution: {integrity: sha512-rK3hoJ+1Pbl9PUCHgeJv1GnOQF28BKLQFTBxdvi0pHsibJeXaDUf51SLFcgNVAPN15aDYcjJgaSf7LQ0RfEFPQ==} + peerDependencies: + core-js: '>=3.12.1' + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2811,6 +2873,8 @@ snapshots: atob@2.1.2: {} + autofit.js@3.2.8: {} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.1.0 @@ -2976,6 +3040,8 @@ snapshots: copy-descriptor@0.1.1: {} + core-js@3.49.0: {} + cors@2.8.6: dependencies: object-assign: 4.1.1 @@ -3035,6 +3101,15 @@ snapshots: csstype@3.2.3: {} + d@1.0.2: + dependencies: + es5-ext: 0.10.64 + type: 2.7.3 + + danmu.js@1.2.1: + dependencies: + event-emitter: 0.3.5 + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -3092,6 +3167,8 @@ snapshots: defu@6.1.7: {} + delegate@3.2.0: {} + depd@2.0.0: {} detect-libc@2.1.2: {} @@ -3278,6 +3355,24 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es5-ext@0.10.64: + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.4 + esniff: 2.0.1 + next-tick: 1.1.0 + + es6-iterator@2.0.3: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + es6-symbol: 3.1.4 + + es6-symbol@3.1.4: + dependencies: + d: 1.0.2 + ext: 1.7.0 + escalade@3.2.0: {} escape-html@1.0.3: {} @@ -3286,6 +3381,13 @@ snapshots: escape-string-regexp@5.0.0: {} + esniff@2.0.1: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + event-emitter: 0.3.5 + type: 2.7.3 + estree-walker@2.0.2: {} estree-walker@3.0.3: @@ -3294,6 +3396,13 @@ snapshots: etag@1.8.1: {} + event-emitter@0.3.5: + dependencies: + d: 1.0.2 + es5-ext: 0.10.64 + + eventemitter3@4.0.7: {} + expand-brackets@2.1.4: dependencies: debug: 2.6.9 @@ -3343,6 +3452,10 @@ snapshots: exsolve@1.1.0: {} + ext@1.7.0: + dependencies: + type: 2.7.3 + extend-shallow@2.0.1: dependencies: is-extendable: 0.1.1 @@ -3945,6 +4058,8 @@ snapshots: negotiator@1.0.0: {} + next-tick@1.1.0: {} + node-addon-api@7.1.1: optional: true @@ -4558,6 +4673,8 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 + type@2.7.3: {} + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -4837,6 +4954,19 @@ snapshots: yaml: 2.9.0 yargs: 17.7.3 + xgplayer-subtitles@3.0.24(core-js@3.49.0): + dependencies: + core-js: 3.49.0 + eventemitter3: 4.0.7 + + xgplayer@3.0.24(core-js@3.49.0): + dependencies: + core-js: 3.49.0 + danmu.js: 1.2.1 + delegate: 3.2.0 + eventemitter3: 4.0.7 + xgplayer-subtitles: 3.0.24(core-js@3.49.0) + y18n@5.0.8: {} yaml@2.9.0: {} diff --git a/src/components/IPlayer/index.vue b/src/components/IPlayer/index.vue index 55be899..8b14a05 100644 --- a/src/components/IPlayer/index.vue +++ b/src/components/IPlayer/index.vue @@ -56,6 +56,7 @@ const init = () => { .xgplayer { height: 100% !important; + padding-top: 0 !important; } } diff --git a/src/router/index.js b/src/router/index.js index ab3a095..7176530 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -1,11 +1,12 @@ import { createRouter, createWebHistory } from 'vue-router' // 页面组件 import Home from '@/views/Home.vue' +import Address from '@/views/Address.vue' const routes = [ { - path: '/', - redirect: '/home' + path: '/',e: 'Address', + component: Address }, { path: '/home', diff --git a/src/views/Address.vue b/src/views/Address.vue new file mode 100644 index 0000000..00b7f0e --- /dev/null +++ b/src/views/Address.vue @@ -0,0 +1,82 @@ + + + \ No newline at end of file diff --git a/src/views/Home.vue b/src/views/Home.vue index c6f7c6c..e33282e 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -1,8 +1,9 @@