|
|
@@ -42,6 +42,7 @@ export default function usePhotography() {
|
|
|
|
|
|
// ==================== 演示模式 ====================
|
|
|
const isDemoMode = ref(false) // 是否处于演示模式
|
|
|
+ const demoStopping = ref(false)
|
|
|
const demoGoodsArtNo = ref('演示货号1') // 演示货号
|
|
|
const demoProgramType = ref('执行左脚程序') // 演示程序类型
|
|
|
const demoConfigList = ref<{id: number, mode_name: string}[]>([]) // 演示配置列表
|
|
|
@@ -833,8 +834,8 @@ const onRemoteControl = async (type) => {
|
|
|
scheduleSegment(runAction.value.goods_art_no)
|
|
|
}
|
|
|
|
|
|
- // 演示模式:拍摄完成后自动删除货号
|
|
|
- if (isDemoMode.value) {
|
|
|
+ // 演示模式:拍摄完成后自动删除货号(正在手动停止时不再自动删)
|
|
|
+ if (isDemoMode.value && !demoStopping.value) {
|
|
|
const demoGoodsNo = demoGoodsArtNo.value
|
|
|
setTimeout(async () => {
|
|
|
try {
|
|
|
@@ -1108,41 +1109,58 @@ const onRemoteControl = async (type) => {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ function waitForMcuStop(timeoutMs = 10000) {
|
|
|
+ return new Promise<void>((resolve) => {
|
|
|
+ const channel = icpList.socket.message + '_run_mcu_stop'
|
|
|
+ let settled = false
|
|
|
+ const finish = () => {
|
|
|
+ if (settled) return
|
|
|
+ settled = true
|
|
|
+ clearTimeout(timer)
|
|
|
+ if (clientStore.ipc?.removeListener) {
|
|
|
+ clientStore.ipc.removeListener(channel, onStop)
|
|
|
+ }
|
|
|
+ resolve()
|
|
|
+ }
|
|
|
+ const onStop = () => finish()
|
|
|
+ const timer = setTimeout(finish, timeoutMs)
|
|
|
+ clientStore.ipc.on(channel, onStop)
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 演示模式:停止演示
|
|
|
- * 执行完成后删除货号,然后退出演示模式
|
|
|
+ * 先停止拍摄,再删除货号,然后退出演示模式
|
|
|
*/
|
|
|
const stopDemoMode = async () => {
|
|
|
- if (!isDemoMode.value) return
|
|
|
-
|
|
|
- // 停止当前运行
|
|
|
- if (runLoading.value || takePictureLoading.value) {
|
|
|
- socketStore.sendMessage({
|
|
|
- type: 'stop_action',
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- // 等待拍摄停止,然后删除货号
|
|
|
+ if (!isDemoMode.value || demoStopping.value) return
|
|
|
+ demoStopping.value = true
|
|
|
const demoGoodsNo = demoGoodsArtNo.value
|
|
|
|
|
|
- // 延迟等待设备停止
|
|
|
- setTimeout(async () => {
|
|
|
- // 重置状态
|
|
|
+ try {
|
|
|
+ if (runLoading.value || takePictureLoading.value) {
|
|
|
+ const stopWait = waitForMcuStop()
|
|
|
+ socketStore.sendMessage({
|
|
|
+ type: 'stop_action',
|
|
|
+ })
|
|
|
+ await stopWait
|
|
|
+ }
|
|
|
+
|
|
|
resetStatus()
|
|
|
|
|
|
- // 删除演示货号
|
|
|
try {
|
|
|
await del({ goods_art_nos: [demoGoodsNo] })
|
|
|
} catch (e) {
|
|
|
console.error('删除演示货号失败:', e)
|
|
|
}
|
|
|
|
|
|
- // 退出演示模式
|
|
|
isDemoMode.value = false
|
|
|
goods_art_no.value = ''
|
|
|
goods_art_no_tpl.value = ''
|
|
|
ElMessage.success('已退出演示模式')
|
|
|
- }, 500)
|
|
|
+ } finally {
|
|
|
+ demoStopping.value = false
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1217,6 +1235,7 @@ const onRemoteControl = async (type) => {
|
|
|
resetStatus,
|
|
|
// 演示模式
|
|
|
isDemoMode,
|
|
|
+ demoStopping,
|
|
|
demoGoodsArtNo,
|
|
|
demoProgramType,
|
|
|
demoConfigList,
|