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>

 

posted @ 2022-06-17 12:01  shzhq  阅读(740)  评论(0编辑  收藏  举报