import { onBeforeUnmount } from 'vue'; interface UseTableRefresh { reload: Function; props: Recordable; } export function useTableRefresh({ props, reload }: UseTableRefresh) { let refreshInterval: NodeJS.Timer; /** * 页面自动刷新函数,第一次触发为请求时候 * @param immediate */ function delayFetch(immediate = false) { const { refreshTime } = props; if (refreshTime > 0) { console.log(`页面自动刷新开启,间隔${refreshTime}秒`); refreshInterval && clearInterval(refreshInterval); refreshInterval = setInterval(reload.bind(undefined, false), refreshTime * 1000); immediate && reload.bind(undefined, false)(); } } /** * 清除定时器 */ function clearRefreshInterval() { const { refreshTime } = props; if (refreshTime > 0) { console.log(`页面自动刷新停止`); refreshInterval && clearInterval(refreshInterval); } } /** * 页面切换事件 */ function visibilitychange() { if (document.visibilityState === 'visible') { delayFetch(true); } else { console.log(`转入后台`); clearRefreshInterval(); } } document.addEventListener('visibilitychange', visibilitychange); onBeforeUnmount(() => { console.log(`页面退出`); clearRefreshInterval(); document.removeEventListener('visibilitychange', visibilitychange); }); return { delayFetch, }; }