Files
my-spring/web-vue/packages/core/hooks/web/useLockPage.ts

78 lines
1.6 KiB
TypeScript
Raw Normal View History

2026-03-19 10:57:24 +08:00
import { computed, onUnmounted, unref, watchEffect } from 'vue';
import { useThrottleFn } from '@vueuse/core';
import { useAppStore } from '@jeesite/core/store/modules/app';
import { useLockStore } from '@jeesite/core/store/modules/lock';
import { useUserStore } from '@jeesite/core/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) {
if (userStore.getSessionTimeout) {
clear();
return;
}
const lockTime = appStore.getProjectConfig.lockTime;
if (!lockTime || lockTime < 1 || lockTime > 99999) {
clear();
return;
}
clear();
timeId = setTimeout(
() => {
lockPage();
},
lockTime * 60 * 1000,
);
}
function lockPage(): void {
lockStore.setLockInfo({
isLock: true,
pwd: undefined,
});
}
watchEffect((onClean) => {
// if (userStore.getToken) {
if (!userStore.getSessionTimeout) {
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 {};
}
});
}