You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.5 KiB
72 lines
1.5 KiB
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.getAccessToken) { |
|
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.getAccessToken) { |
|
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 {} |
|
} |
|
}) |
|
}
|
|
|