Browse Source

fix: tab处于非激活状态下 setInterval 实效问题

main
betaqi 1 month ago
parent
commit
1d2c5284e2
  1. 22
      src/stores/transferData.ts

22
src/stores/transferData.ts

@ -4,6 +4,7 @@ import type { IOnlineDevice, IUpFirmwareStatus } from '@/views/stationData/type'
import ZMQWorker from '@/composables/useZMQJsonWorker' import ZMQWorker from '@/composables/useZMQJsonWorker'
import { getSubTopic, type SubMsgData } from '@/utils/zmq' import { getSubTopic, type SubMsgData } from '@/utils/zmq'
import { getDeviceTopic } from '@/views/stationData/utils' import { getDeviceTopic } from '@/views/stationData/utils'
import dayjs from "dayjs";
export const useTransferDataStore = defineStore('transfer', () => { export const useTransferDataStore = defineStore('transfer', () => {
const subDevices = getSubTopic('client', 'status', 'transfer') const subDevices = getSubTopic('client', 'status', 'transfer')
@ -25,14 +26,17 @@ export const useTransferDataStore = defineStore('transfer', () => {
const checkDeviceStatusInterval = ref<NodeJS.Timeout>() const checkDeviceStatusInterval = ref<NodeJS.Timeout>()
function checkDeviceStatus() { function checkDeviceStatus() {
checkDeviceStatusInterval.value = setInterval(() => { checkDeviceStatusInterval.value = setInterval(checkDeviceStatusFn, 100);
const now = Date.now(); }
devicesMap.forEach((device: IOnlineDevice, sn) => {
if (now - device.lastUpdated > 5500) { const checkDeviceStatusFn = () => {
device.status = '离线'; const now = Date.now();
} devicesMap.forEach((device: IOnlineDevice, sn) => {
}); // console.log(device, dayjs(now).format('HH:mm:ss'), dayjs(device.lastUpdated).format('HH:mm:ss'), now - device.lastUpdated)
}, 1000); if (now - device.lastUpdated > 5500) {
device.status = '离线';
}
});
} }
function formatSizeFromKB(num: number): string { function formatSizeFromKB(num: number): string {
@ -88,6 +92,7 @@ export const useTransferDataStore = defineStore('transfer', () => {
onMounted(() => { onMounted(() => {
worker.subscribe(getDeviceTopic, getSubDevicesCb) worker.subscribe(getDeviceTopic, getSubDevicesCb)
checkDeviceStatus() checkDeviceStatus()
document.addEventListener('visibilitychange', checkDeviceStatusFn)
}) })
const route = useRoute() const route = useRoute()
@ -95,6 +100,7 @@ export const useTransferDataStore = defineStore('transfer', () => {
watch(() => route.path, (val) => { watch(() => route.path, (val) => {
if (!['/station/data-transfer', '/station'].includes(val)) { if (!['/station/data-transfer', '/station'].includes(val)) {
clearInterval(checkDeviceStatusInterval.value) clearInterval(checkDeviceStatusInterval.value)
document.removeEventListener('visibilitychange', checkDeviceStatusFn)
worker.unsubscribe(subDevices) worker.unsubscribe(subDevices)
} }
}) })

Loading…
Cancel
Save