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 @@
+
+
+
设备连接登录
+
请输入IP和端口连接后进入上位机页面
+
+
+
+
+
+ ➡
+
+
+
+
+
+
+
+
+
+
\ 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 @@
-
-