-
This commit is contained in:
@@ -45,6 +45,9 @@ createApp({
|
|||||||
agvMoveInterval: null,
|
agvMoveInterval: null,
|
||||||
agvCameraUrl: API + '/api/camera/refresh',
|
agvCameraUrl: API + '/api/camera/refresh',
|
||||||
agvCameraTimer: null,
|
agvCameraTimer: null,
|
||||||
|
// 机型展开
|
||||||
|
expandedModelId: null,
|
||||||
|
showAddModelModal: false,
|
||||||
// QR
|
// QR
|
||||||
qrScanning: false,
|
qrScanning: false,
|
||||||
qrConfigs: [],
|
qrConfigs: [],
|
||||||
@@ -810,6 +813,21 @@ createApp({
|
|||||||
} catch (e) { alert('扫描失败: ' + e.message) }
|
} catch (e) { alert('扫描失败: ' + e.message) }
|
||||||
this.qrScanningId = null
|
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() {
|
onArmPreviewError() {
|
||||||
// 机械臂摄像头预览失败,静默处理
|
// 机械臂摄像头预览失败,静默处理
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -45,6 +45,9 @@ createApp({
|
|||||||
agvMoveInterval: null,
|
agvMoveInterval: null,
|
||||||
agvCameraUrl: API + '/api/camera/refresh',
|
agvCameraUrl: API + '/api/camera/refresh',
|
||||||
agvCameraTimer: null,
|
agvCameraTimer: null,
|
||||||
|
// 机型展开
|
||||||
|
expandedModelId: null,
|
||||||
|
showAddModelModal: false,
|
||||||
// QR
|
// QR
|
||||||
qrScanning: false,
|
qrScanning: false,
|
||||||
qrConfigs: [],
|
qrConfigs: [],
|
||||||
@@ -810,6 +813,21 @@ createApp({
|
|||||||
} catch (e) { alert('扫描失败: ' + e.message) }
|
} catch (e) { alert('扫描失败: ' + e.message) }
|
||||||
this.qrScanningId = null
|
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() {
|
onArmPreviewError() {
|
||||||
// 机械臂摄像头预览失败,静默处理
|
// 机械臂摄像头预览失败,静默处理
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>设置 - AGV 拍摄系统</title>
|
<title>设置 - AGV 拍摄系统</title>
|
||||||
<link rel="stylesheet" href="/static/css/style.css?v=20260520g">
|
<link rel="stylesheet" href="/static/css/style.css?v=20260520h">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<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:#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;color:#9aa0a6;font-size:12px">{% raw %}{{ getQrModelName(q.model_id) }}{% endraw %}</td>
|
||||||
<td style="padding:10px 8px;text-align:center;white-space:nowrap">
|
<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-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>
|
<button class="btn btn-danger btn-small" @click="deleteQrConfig(q.id)" style="margin-left:3px" title="删除">🗑️</button>
|
||||||
</td>
|
</td>
|
||||||
@@ -585,7 +586,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div class="camera-preview">
|
<div class="camera-preview">
|
||||||
<img :src="previewUrl" @error="onPreviewError">
|
<img :src="armCameraUrl" @error="onArmPreviewError">
|
||||||
</div>
|
</div>
|
||||||
<div class="joints-panel">
|
<div class="joints-panel">
|
||||||
<h3>关节角度控制</h3>
|
<h3>关节角度控制</h3>
|
||||||
@@ -675,7 +676,7 @@
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/vue3.global.prod.js?v=20260520g"></script>
|
<script src="/static/js/vue3.global.prod.js?v=20260520h"></script>
|
||||||
<script src="/static/js/setting.js?v=20260520g"></script>
|
<script src="/static/js/setting.js?v=20260520h"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user