-
This commit is contained in:
@@ -244,6 +244,18 @@ createApp({
|
||||
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) {
|
||||
e.target.style.display = 'none'
|
||||
},
|
||||
|
||||
@@ -204,6 +204,7 @@
|
||||
<p>所有姿态均未识别到二维码,请手动输入:</p>
|
||||
<input type="text" v-model="qrValue" placeholder="输入二维码内容" autofocus @keyup.enter="submitQr">
|
||||
<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" @click="cancelQr">跳过</button>
|
||||
</div>
|
||||
@@ -239,6 +240,6 @@
|
||||
</div>
|
||||
|
||||
<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>
|
||||
</html>
|
||||
@@ -738,22 +738,35 @@ class MissionExecutorV3:
|
||||
return None
|
||||
|
||||
def _request_manual_qr(self) -> Optional[str]:
|
||||
"""暂停任务,等待手动输入(不超时,必须输入才能继续;stop 时解除)"""
|
||||
self.status = MissionStatus.WAITING_QR
|
||||
self.report["status"] = "waiting_qr"
|
||||
self.report["step"] = "等待手动输入二维码"
|
||||
self._log(" ⌨️ 弹窗等待手动输入二维码(不可跳过)...")
|
||||
"""暂停任务,等待手动输入(支持重新扫描)"""
|
||||
while True:
|
||||
self.status = MissionStatus.WAITING_QR
|
||||
self.report["status"] = "waiting_qr"
|
||||
self.report["step"] = "等待手动输入二维码"
|
||||
self._log(" ⌨️ 弹窗等待手动输入二维码...")
|
||||
|
||||
self._qr_event.clear()
|
||||
self._qr_event.wait() # 无限等待,直到 set_manual_qr 或 stop() 触发
|
||||
self.status = MissionStatus.RUNNING
|
||||
self.report["status"] = "running"
|
||||
if self._qr_value:
|
||||
self._log(f" ✏️ 手动输入: {self._qr_value}")
|
||||
return self._qr_value
|
||||
else:
|
||||
self._log(f" ⚠️ 任务已停止")
|
||||
return None
|
||||
self._qr_event.clear()
|
||||
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.report["status"] = "running"
|
||||
if self._qr_value:
|
||||
self._log(f" ✏️ 手动输入: {self._qr_value}")
|
||||
return self._qr_value
|
||||
else:
|
||||
self._log(f" ⚠️ 任务已停止")
|
||||
return None
|
||||
|
||||
def set_manual_qr(self, value: str):
|
||||
self._qr_value = value.strip()
|
||||
|
||||
Reference in New Issue
Block a user