import { computed, onUnmounted, unref, watchEffect } from 'vue'; import { useThrottle } from '/@/hooks/core/useThrottle'; import { useAppStore } from '/@/store/modules/app'; import { useLockStore } from '/@/store/modules/lock'; import { useUserStore } from '/@/store/modules/user'; import { useRootSetting } from '../setting/useRootSetting'; export function useLockPage() { const { getLockTime } = useRootSetting(); const lockStore = useLockStore(); const userStore = useUserStore(); const appStore = useAppStore(); let timeId: TimeoutHandle; function clear(): void { window.clearTimeout(timeId); } function resetCalcLockTimeout(): void { // not login if (!userStore.getToken) { clear(); return; } const lockTime = appStore.getProjectConfig.lockTime; if (!lockTime || lockTime < 1) { clear(); return; } clear(); timeId = setTimeout(() => { lockPage(); }, lockTime * 60 * 1000); } function lockPage(): void { lockStore.setLockInfo({ isLock: true, pwd: undefined, }); } watchEffect((onClean) => { if (userStore.getToken) { resetCalcLockTimeout(); } else { clear(); } onClean(() => { clear(); }); }); onUnmounted(() => { clear(); }); const [keyupFn] = useThrottle(resetCalcLockTimeout, 2000); return computed(() => { if (unref(getLockTime)) { return { onKeyup: keyupFn, onMousemove: keyupFn }; } else { clear(); return {}; } }); }