import { computed, onUnmounted, unref, watchEffect } from 'vue';
|
import { useThrottleFn } from '@vueuse/core';
|
|
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 = useThrottleFn(resetCalcLockTimeout, 2000);
|
|
return computed(() => {
|
if (unref(getLockTime)) {
|
return { onKeyup: keyupFn, onMousemove: keyupFn };
|
} else {
|
clear();
|
return {};
|
}
|
});
|
}
|