-
This commit is contained in:
@@ -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'
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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>
|
||||||
@@ -738,22 +738,35 @@ class MissionExecutorV3:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def _request_manual_qr(self) -> Optional[str]:
|
def _request_manual_qr(self) -> Optional[str]:
|
||||||
"""暂停任务,等待手动输入(不超时,必须输入才能继续;stop 时解除)"""
|
"""暂停任务,等待手动输入(支持重新扫描)"""
|
||||||
self.status = MissionStatus.WAITING_QR
|
while True:
|
||||||
self.report["status"] = "waiting_qr"
|
self.status = MissionStatus.WAITING_QR
|
||||||
self.report["step"] = "等待手动输入二维码"
|
self.report["status"] = "waiting_qr"
|
||||||
self._log(" ⌨️ 弹窗等待手动输入二维码(不可跳过)...")
|
self.report["step"] = "等待手动输入二维码"
|
||||||
|
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() 触发
|
||||||
self.status = MissionStatus.RUNNING
|
|
||||||
self.report["status"] = "running"
|
if self._qr_value == 'RESCAN':
|
||||||
if self._qr_value:
|
self.status = MissionStatus.RUNNING
|
||||||
self._log(f" ✏️ 手动输入: {self._qr_value}")
|
self.report["status"] = "running"
|
||||||
return self._qr_value
|
self._log(" 🔄 用户点击重新扫描,重试...")
|
||||||
else:
|
qr = self._decode_qr_from_arm()
|
||||||
self._log(f" ⚠️ 任务已停止")
|
if qr:
|
||||||
return None
|
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):
|
def set_manual_qr(self, value: str):
|
||||||
self._qr_value = value.strip()
|
self._qr_value = value.strip()
|
||||||
|
|||||||
Reference in New Issue
Block a user