vue 十分钟后自动返回首页登录页操作

vue 十分钟后自动返回首页/登录页操作

​ 该上线了,产品经理提出一个 新需求,要求所有页面,在无任何操作停留10分钟后,自动返回首页。这让我想到了 导航守卫 做 一段时间后登陆过期,返回登录页的 需求。 我看了文档 afterEach 全局后置钩子 是导航后置守卫 跟咱常用的 beforeEach 前置守卫 基本用法 一直 就是没有next 方法。 说实话我对它不太熟,文档介绍的 也就一句话,没敢乱用,这里想借鉴其他方法。

闲话不多说 代码贴上

1.下面这一种方法 是 十分钟 无操作后 再次点击页面 才会 返回首页,而且有不少的 bug,大家可以借鉴一下:

<template>
    <div id="app" @click="isDo()">
        <router-view></router-view>
    </div>
</template>

<script>
  import * as log from 'loglevel'
  import 'normalize.css'
  import 'animate.css'
  import 'element-ui/lib/theme-chalk/index.css'
  import '../style/font-awesome.css'
  import '../style/iconfont.css'
  import '../style/style.scss'

  export default {
    name: 'app',
      data() {
            return {
                lastTime: null, //最后一次点击的时间
                currentTime: null, //当前点击的时间
                timeOut: 1 * 10 * 1000 //设置超时时间: 10分钟
            };
        },

      created(){
          this.lastTime = new Date().getTime();   //网页第一次打开时,记录当前时间
      },

      methods: {
          isDo() {
              this.currentTime = new Date().getTime(); //记录这次点击的时间
              if(this.currentTime - this.lastTime > this.timeOut) {  //判断上次最后一次点击的时间和这次点击的时间间隔是否大于10分钟
               log.info('0000000000000000000000000000000000000======>超时')
                  // 这里写状态已过期后执行的操作
                  this.lastTime = new Date().getTime();
                  return this.$router.push('/')
                 
              } else {
                  this.lastTime = new Date().getTime(); //如果在10分钟内点击,则把这次点击的时间记录覆盖掉之前存的最后一次点击的时间
              }
          }
      },

  }
</script>

<style scoped>
    #app {
        display: flex;
        flex-direction: column;
        width: 100%;
        height: 100%;
    }
</style>

下面是 长时间 不操作页面后 自动返回 的js逻辑:

<template>
    <div id="app" >
        <router-view></router-view>
    </div>
</template>

<script>
  import * as log from 'loglevel'
  import 'normalize.css'
  import 'animate.css'
  import 'element-ui/lib/theme-chalk/index.css'
  import '../style/font-awesome.css'
  import '../style/iconfont.css'
  import '../style/style.scss'

  export default {
    name: 'app',
    data() {
      return {
        timeOut: '',
      };
    },
    created(){
      this.isTimeOut();
    },
    methods: {    
        throttle(fn, wait) {   // 节流throttle代码(时间戳+定时器)
          var timer = null;     // 定义一个变量来 储存定时器
          var startTime = Date.now();     // 存开始时间
          return function() {            
            var curTime = Date.now();     // 存现在时间       
            var remaining = wait - (curTime - startTime);             
            var context = this;             
            var args = arguments;             
            clearTimeout(timer);              
            if (remaining <= 0) {                    
                fn.apply(context, args);                    
                startTime = Date.now();              
            } else {                    
                timer = setTimeout(fn, remaining);              
            }      
          }
        },
        handle() {    
          clearInterval(this.timeOut); 
          // console.log(Math.random()); 
          log.info('========>','我清除了吗?')
          if (this.$route.path == '/frame/home') {
            return
          }
          let This = this
          this.timeOut = setInterval(()=>{
            log.info('this.$route.path',this.$route.path)
            this.$message.success('长时间未操作,请重新登录')
            this.$router.push('/')
            return clearInterval(this.timeOut);
          },1000*10*1)
          // },10000)
        },
        isTimeOut() {
          document.body.onmouseup = this.throttle(this.handle, 1000);
          document.body.onmousemove = this.throttle(this.handle, 1000);
          document.body.onkeyup  = this.throttle(this.handle, 1000);
          document.body.onclick  = this.throttle(this.handle, 1000);
          document.body.ontouchend  = this.throttle(this.handle, 1000);
          window.addEventListener('resize', this.throttle(this.handle, 1000));
          window.addEventListener('scroll', this.throttle(this.handle, 1000));
        },
    }
  }
</script>

<style scoped>
    #app {
        display: flex;
        flex-direction: column;
        width: 100%;
        height: 100%;
    }
</style>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在Vue登录页面点击登录按钮时,会跳转至首页。具体的实现步骤如下: 1. 首先,需要在Vue登录页面组件中,创建一个表单用于接收用户输入的登录信息,包括用户名和密码。 2. 在Vue组件的data属性中,定义用户名和密码的变量,并初始化为空字符串。 3. 在登录按钮上添加一个点击事件的监听器,并指定一个处理函数。 4. 在处理函数中,可以通过Vue框架提供的方法,获取用户在输入框中输入的用户名和密码。 5. 对用户输入的用户名和密码进行一些必要的验证,例如判空、度等。如果验证不通过,可以在页面上显示错误信息。 6. 如果验证通过,可以将用户名和密码发送给后台服务器进行登录验证。可以通过Vue的Axios库等工具,发送一个POST请求,将输入的用户名和密码作为请求参数发送到服务器的登录接口。 7. 在服务器端进行登录验证,如果用户名和密码正确,返回一个登录成功的状态码(例如200),否则返回一个登录失败的状态码(例如401)。 8. 在Vue登录页面组件中,根据服务器返回的状态码进行判断。如果登录成功,可以使用Vue的router库跳转至首页组件。 9. 在Vue的路由配置中,保证首页组件与登录页面组件的路径匹配。可以使用Vue的router-link标签进行页面跳转。 10. 当成功跳转至首页组件时,用户就可以访问到该页面的内容,实现从登录页面跳转至首页的功能。 总结起来,通过在Vue登录页面组件中监听登录按钮的点击事件,获取用户的登录信息并发送至服务器进行验证,并根据验证结果跳转至首页组件,就可以实现从登录页面点击登录按钮进入首页的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值