import { computed, watch, onUnmounted, ref } from 'vue'
|
import { defineStore } from 'pinia'
|
import { getProductProgress } from '@/api'
|
import type { ProductProgressParams } from '@/api'
|
import { useRequest } from 'vue-hooks-plus'
|
import { useTasksStore } from '@/stores/tasks'
|
import type { PLCResponse } from '@/api/plc'
|
import { PLC_POLLING_DURATION } from '@/common/constants'
|
|
// 全局 watcher ref 防止多次调用 usePLCStore 时重复注册侦听器
|
const unwatch = ref()
|
|
export const usePLCStore = defineStore('plc', () => {
|
const taskStore = useTasksStore()
|
|
const plcInfo = ref()
|
|
/**
|
* 如果任务状态是进行中, 则轮询 plc 取进度
|
*/
|
// const {
|
// data: plcRes,
|
// run: startPLCPolling,
|
// cancel: cancelPLCPolling
|
// } = useRequest(
|
// () =>
|
// getProductProgress({
|
// channel: taskStore.activeChannel ?? 0,
|
// procedureId: taskStore.activeTask?.Procedure.ID ?? undefined
|
// } as ProductProgressParams),
|
// {
|
// manual: true,
|
// pollingInterval: PLC_POLLING_DURATION,
|
// pollingWhenHidden: false
|
// }
|
// )
|
|
if (!unwatch.value) {
|
/**
|
* 如果切换到其他通道的任务,则重新轮询plc
|
*/
|
unwatch.value = watch(
|
() => taskStore.activeChannel,
|
() => {
|
// cancelPLCPolling()
|
// startPLCPolling()
|
}
|
)
|
}
|
|
function startPollingPLC() {
|
// cancelPLCPolling()
|
// startPLCPolling()
|
}
|
|
onUnmounted(() => {
|
// cancelPLCPolling()
|
})
|
|
return { plcInfo, startPollingPLC }
|
})
|