useLockPage.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { computed, onUnmounted, unref, watchEffect } from 'vue';
  2. import { useThrottle } from '/@/hooks/core/useThrottle';
  3. import { appStore } from '/@/store/modules/app';
  4. import { lockStore } from '/@/store/modules/lock';
  5. import { userStore } from '/@/store/modules/user';
  6. import { useRootSetting } from '../setting/useRootSetting';
  7. export function useLockPage() {
  8. const { getLockTime } = useRootSetting();
  9. let timeId: TimeoutHandle;
  10. function clear(): void {
  11. window.clearTimeout(timeId);
  12. }
  13. function resetCalcLockTimeout(): void {
  14. // not login
  15. if (!userStore.getTokenState) {
  16. clear();
  17. return;
  18. }
  19. const lockTime = appStore.getProjectConfig.lockTime;
  20. if (!lockTime || lockTime < 1) {
  21. clear();
  22. return;
  23. }
  24. clear();
  25. timeId = setTimeout(() => {
  26. lockPage();
  27. }, lockTime * 60 * 1000);
  28. }
  29. function lockPage(): void {
  30. lockStore.commitLockInfoState({
  31. isLock: true,
  32. pwd: undefined,
  33. });
  34. }
  35. watchEffect((onClean) => {
  36. if (userStore.getTokenState) {
  37. resetCalcLockTimeout();
  38. } else {
  39. clear();
  40. }
  41. onClean(() => {
  42. clear();
  43. });
  44. });
  45. onUnmounted(() => {
  46. clear();
  47. });
  48. const [keyupFn] = useThrottle(resetCalcLockTimeout, 2000);
  49. return computed(() => {
  50. if (unref(getLockTime)) {
  51. return { onKeyup: keyupFn, onMousemove: keyupFn };
  52. } else {
  53. clear();
  54. return {};
  55. }
  56. });
  57. }