-
This commit is contained in:
@@ -45,6 +45,9 @@ createApp({
|
||||
agvMoveInterval: null,
|
||||
agvCameraUrl: API + '/api/camera/refresh',
|
||||
agvCameraTimer: null,
|
||||
// 机型展开
|
||||
expandedModelId: null,
|
||||
showAddModelModal: false,
|
||||
// QR
|
||||
qrScanning: false,
|
||||
qrConfigs: [],
|
||||
@@ -810,6 +813,21 @@ createApp({
|
||||
} catch (e) { alert('扫描失败: ' + e.message) }
|
||||
this.qrScanningId = null
|
||||
},
|
||||
async applyQrAngles(qrId) {
|
||||
if (!this.armConnected) { alert('机械臂未连接'); return }
|
||||
const q = this.qrConfigs.find(x => x.id === qrId)
|
||||
if (!q || !q.joint_angles || !Array.isArray(q.joint_angles)) { alert('无效的姿态数据'); return }
|
||||
try {
|
||||
const res = await fetch(API + '/api/arm/set_angles', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type':'application/json'},
|
||||
body: JSON.stringify({ angles: q.joint_angles, speed: 50 })
|
||||
})
|
||||
const data = await res.json()
|
||||
if (data.ok) { alert('姿态已应用到机械臂')
|
||||
} else { alert('应用失败: ' + (data.error || '未知错误')) }
|
||||
} catch (e) { alert('应用姿态失败: ' + e.message) }
|
||||
},
|
||||
onArmPreviewError() {
|
||||
// 机械臂摄像头预览失败,静默处理
|
||||
},
|
||||
|
||||
@@ -45,6 +45,9 @@ createApp({
|
||||
agvMoveInterval: null,
|
||||
agvCameraUrl: API + '/api/camera/refresh',
|
||||
agvCameraTimer: null,
|
||||
// 机型展开
|
||||
expandedModelId: null,
|
||||
showAddModelModal: false,
|
||||
// QR
|
||||
qrScanning: false,
|
||||
qrConfigs: [],
|
||||
@@ -810,6 +813,21 @@ createApp({
|
||||
} catch (e) { alert('扫描失败: ' + e.message) }
|
||||
this.qrScanningId = null
|
||||
},
|
||||
async applyQrAngles(qrId) {
|
||||
if (!this.armConnected) { alert('机械臂未连接'); return }
|
||||
const q = this.qrConfigs.find(x => x.id === qrId)
|
||||
if (!q || !q.joint_angles || !Array.isArray(q.joint_angles)) { alert('无效的姿态数据'); return }
|
||||
try {
|
||||
const res = await fetch(API + '/api/arm/set_angles', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type':'application/json'},
|
||||
body: JSON.stringify({ angles: q.joint_angles, speed: 50 })
|
||||
})
|
||||
const data = await res.json()
|
||||
if (data.ok) { alert('姿态已应用到机械臂')
|
||||
} else { alert('应用失败: ' + (data.error || '未知错误')) }
|
||||
} catch (e) { alert('应用姿态失败: ' + e.message) }
|
||||
},
|
||||
onArmPreviewError() {
|
||||
// 机械臂摄像头预览失败,静默处理
|
||||
},
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>设置 - AGV 拍摄系统</title>
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=20260520g">
|
||||
<link rel="stylesheet" href="/static/css/style.css?v=20260520h">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app">
|
||||
@@ -566,7 +566,8 @@
|
||||
<td style="padding:10px 8px;color:#4fc3f7;font-size:12px;max-width:120px;overflow:hidden;text-overflow:ellipsis">{% raw %}{{ q.qr_value || '—' }}{% endraw %}</td>
|
||||
<td style="padding:10px 8px;color:#9aa0a6;font-size:12px">{% raw %}{{ getQrModelName(q.model_id) }}{% endraw %}</td>
|
||||
<td style="padding:10px 8px;text-align:center;white-space:nowrap">
|
||||
<button class="btn btn-secondary btn-small" @click="readQrAngles(q.id)" :disabled="!armConnected" title="读取当前机械臂角度">📐</button>
|
||||
<button class="btn btn-secondary btn-small" @click="readQrAngles(q.id)" :disabled="!armConnected" title="读取当前机械臂关节角度">📋 加载姿态</button>
|
||||
<button class="btn btn-primary btn-small" @click="applyQrAngles(q.id)" :disabled="!armConnected" style="margin-left:3px" title="将姿态应用到机械臂">🤖 应用姿态</button>
|
||||
<button class="btn btn-success btn-small" @click="scanQrEntry(q.id)" :disabled="qrScanningId === q.id" style="margin-left:3px" title="扫描二维码">📷</button>
|
||||
<button class="btn btn-danger btn-small" @click="deleteQrConfig(q.id)" style="margin-left:3px" title="删除">🗑️</button>
|
||||
</td>
|
||||
@@ -585,7 +586,7 @@
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="camera-preview">
|
||||
<img :src="previewUrl" @error="onPreviewError">
|
||||
<img :src="armCameraUrl" @error="onArmPreviewError">
|
||||
</div>
|
||||
<div class="joints-panel">
|
||||
<h3>关节角度控制</h3>
|
||||
@@ -675,7 +676,7 @@
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script src="/static/js/vue3.global.prod.js?v=20260520g"></script>
|
||||
<script src="/static/js/setting.js?v=20260520g"></script>
|
||||
<script src="/static/js/vue3.global.prod.js?v=20260520h"></script>
|
||||
<script src="/static/js/setting.js?v=20260520h"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user