用户长时间无操作返回登录页

main.ts

1.定义定时器

const timeout = 3000;
let timer: any;

const resetTimer = () => {
  if (timer) clearTimeout(timer);
  timer = setTimeout(() => {
    showLogoutWarning();
  }, timeout);
};

2.监听事件,触发定时器

const events = [
  "load", // 资源加载完成
  "mousemove", // 移动鼠标
  "mousedown", // 按下鼠标
  "click", // 点击鼠标
  "scroll", // 页面滚动
  "keypress", // 键盘按下
];

// 导航守卫
router.beforeEach((to, _, next) => {
  if (to.path !== "/login") {
    resetTimer(); // 仅在非登录页时启动计时器
    events.forEach((event) => window.addEventListener(event, resetTimer));
  } else {
    clearTimeout(timer); // 登录页不启动计时器
    events.forEach((event) => window.removeEventListener(event, resetTimer));
  }
  next();
});

3.提示信息

const showLogoutWarning = () => {
  ElNotification({
    title: "提示",
    message: "您已超过3秒钟无操作,将被强制登出",
    type: "warning",
    duration: 1000, // 1秒
    onClose: () => {
      logoutUser();
    },
  });
};

4.返回登录页

const logoutUser = () => {
  // 清除用户状态,例如本地存储的token
  localStorage.removeItem("userToken");
  // 其他登出逻辑
  router.push("/login"); // 重定向到登录页面
};

5.完成

完整代码

import { createApp } from "vue";
import App from "./App.vue";
import ElementPlus, { ElNotification } from "element-plus";
import "element-plus/dist/index.css";
import router from "./router";

const app = createApp(App);
const timeout = 3000;
let timer: any;

const resetTimer = () => {
  if (timer) clearTimeout(timer);
  timer = setTimeout(() => {
    showLogoutWarning();
  }, timeout);
};

const events = [
  "load", // 资源加载完成
  "mousemove", // 移动鼠标
  "mousedown", // 按下鼠标
  "click", // 点击鼠标
  "scroll", // 页面滚动
  "keypress", // 键盘按下
];

const showLogoutWarning = () => {
  ElNotification({
    title: "提示",
    message: "您已超过3秒钟无操作,将被强制登出",
    type: "warning",
    duration: 1000, // 1秒
    onClose: () => {
      logoutUser();
    },
  });
};

const logoutUser = () => {
  // 清除用户状态,例如本地存储的token
  localStorage.removeItem("userToken");
  // 其他登出逻辑
  router.push("/login"); // 重定向到登录页面
};

// 导航守卫
router.beforeEach((to, _, next) => {
  if (to.path !== "/login") {
    resetTimer(); // 仅在非登录页时启动计时器
    events.forEach((event) => window.addEventListener(event, resetTimer));
  } else {
    clearTimeout(timer); // 登录页不启动计时器
    events.forEach((event) => window.removeEventListener(event, resetTimer));
  }
  next();
});

app.use(ElementPlus);
app.use(router);
app.mount("#app");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值