This commit is contained in:
ywb
2026-06-05 20:50:38 +08:00
parent 4126e01bba
commit 696bf2ef6e
3 changed files with 42 additions and 16 deletions
+12
View File
@@ -244,6 +244,18 @@ createApp({
body: JSON.stringify({ qr: 'SKIP' }) body: JSON.stringify({ qr: 'SKIP' })
}) })
}, },
async rescanQr() {
this.showQrModal = false
this.qrValue = ''
this.qrSubmitting = true
await fetch(API + '/api/mission/manual-qr', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ qr: 'RESCAN' })
})
// 4秒后允许弹窗重新出现(后端重试扫码约3秒)
setTimeout(() => { this.qrSubmitting = false }, 4000)
},
onAgvPreviewError(e) { onAgvPreviewError(e) {
e.target.style.display = 'none' e.target.style.display = 'none'
}, },
+2 -1
View File
@@ -204,6 +204,7 @@
<p>所有姿态均未识别到二维码,请手动输入:</p> <p>所有姿态均未识别到二维码,请手动输入:</p>
<input type="text" v-model="qrValue" placeholder="输入二维码内容" autofocus @keyup.enter="submitQr"> <input type="text" v-model="qrValue" placeholder="输入二维码内容" autofocus @keyup.enter="submitQr">
<div class="modal-actions"> <div class="modal-actions">
<button class="btn btn-success" @click="rescanQr" style="margin-right:auto">🔄 重新扫描</button>
<button class="btn btn-primary" @click="submitQr">确认</button> <button class="btn btn-primary" @click="submitQr">确认</button>
<button class="btn" @click="cancelQr">跳过</button> <button class="btn" @click="cancelQr">跳过</button>
</div> </div>
@@ -239,6 +240,6 @@
</div> </div>
<script src="/static/js/vue3.global.prod.js"></script> <script src="/static/js/vue3.global.prod.js"></script>
<script src="/static/js/running.js?v=20260529a"></script> <script src="/static/js/running.js?v=20260605b"></script>
</body> </body>
</html> </html>
+15 -2
View File
@@ -738,14 +738,27 @@ class MissionExecutorV3:
return None return None
def _request_manual_qr(self) -> Optional[str]: def _request_manual_qr(self) -> Optional[str]:
"""暂停任务,等待手动输入(不超时,必须输入才能继续;stop 时解除""" """暂停任务,等待手动输入(支持重新扫描"""
while True:
self.status = MissionStatus.WAITING_QR self.status = MissionStatus.WAITING_QR
self.report["status"] = "waiting_qr" self.report["status"] = "waiting_qr"
self.report["step"] = "等待手动输入二维码" self.report["step"] = "等待手动输入二维码"
self._log(" ⌨️ 弹窗等待手动输入二维码(不可跳过)...") self._log(" ⌨️ 弹窗等待手动输入二维码...")
self._qr_event.clear() self._qr_event.clear()
self._qr_event.wait() # 无限等待,直到 set_manual_qr 或 stop() 触发 self._qr_event.wait() # 无限等待,直到 set_manual_qr 或 stop() 触发
if self._qr_value == 'RESCAN':
self.status = MissionStatus.RUNNING
self.report["status"] = "running"
self._log(" 🔄 用户点击重新扫描,重试...")
qr = self._decode_qr_from_arm()
if qr:
self._log(f" ✅ 重新扫描成功: {qr}")
return qr
self._log(" ❌ 重新扫描仍未识别到二维码")
continue # 继续弹窗
self.status = MissionStatus.RUNNING self.status = MissionStatus.RUNNING
self.report["status"] = "running" self.report["status"] = "running"
if self._qr_value: if self._qr_value: