Vue.js框架:超出配置登出时间就会退出登陆(前端设置)
1、login.vue
在登陆时候记下点击登陆的时间;
sessionStorage.setItem("lastClickTime", new Date().getTime());
methods:{ login(){ this.$api.commn.login(this.loginForm.username, this.loginForm.password).then((result) => { let res = result.data; let token = "Bearer " + res.token; this.$storage.token.set(token); this.$storage.user.set(res); //记录点击时间 sessionStorage.setItem("lastClickTime", new Date().getTime()); }) .catch((error) => { console.log("error"); }); } }
2、home.vue
代码精简了,html只剩下左边菜单栏,展示定时器写在哪个页面,各个项目不同,对应的不一定是home.vue,函数只写了定时器的,仅供参考;
1. data先定义timer
2.钩子函数:methods里写定时器实现函数,created里捕获记录每次点击的时间,mounted里执行定时器,destroyed里销毁定时器。
<template>
<div class="sidebar" style="background-color: rgb(50, 65, 87)">
<!--左侧菜单 start *********************************************************************-->
<el-menu
class="sidebar-el-menu"
:collapse="collapse"
router=""
:default-active="onRoutes">
<template v-for="menu in menus">
<template v-if="menu.subs && menu.subs.length > 0">
<el-submenu :index="menu.id + ''">
<template slot="title">
<i :class="menu.icon"></i>
<span>{{ $t(menu.name) }}</span>
</template>
</el-submenu>
</template>
</el-menu>
<!--左侧菜单 end *********************************************************************-->
</div>
<div class="content-box" :class="{ 'content-collapse': collapse }">
<v-tags></v-tags>
<!--内容 start *********************************************************************-->
<!--内容 end *********************************************************************-->
</div>
</template>
<script>
export default {
name: "home",
data() {
return {
timer: null,
};
},
methods: {
isTimeOut() {
// 使⽤定时器之前,要清除⼀下定时器
clearInterval(this.timer);
// 定时器
this.timer = setInterval(() => {
let times = 10 * 60 * 1000;//配置的是10min
let lastClickTime = sessionStorage.getItem("lastClickTime") * 1; // 把上次点击时候的字符串时间转换成数字时间
let nowTime = new Date().getTime(); // 获取当前时间
// 当前时间减去上次点击时间超出配置的登出时间,就提⽰登录退出
if (nowTime - lastClickTime > times) {
// 提⽰⼀下⽤户
this.$message({ type: "warning", message: "超时了,已退出登录" });
// 这⾥要清除定时器,结束任务
clearInterval(this.timer);
// 最后返回到登录页
this.$router.push({ path: "/login" });
}
}, 1000);
},
},
mounted() {
//在这执行定时器
this.isTimeOut()
},
created() {
window.addEventListener("click",() => {
// 为了⽅便,我们把点击事件的时间直接存到sessionStorage中去,这样⽅便获取⽐较
sessionStorage.setItem("lastClickTime", new Date().getTime());
},
//true 捕获点击事件
true
);
},
destroyed: function () {
clearInterval(this.timer);
window.removeEventListener("click", () => {}, true);
},
};
</script>

浙公网安备 33010602011771号