场景题: 20分钟页面不操作,页面失效

同一时间段,只允许一个编辑,后续编辑被拒绝
编辑功能具有默认超时机制,进入编辑状态后,停止操作20分钟后,自动退出编辑,提示“页面已失效”,回退到列表页面;如果操作了,计时会清零

解决方案:web sorker + setInterval

安装 npm i -D worker-loader
// vue.config.js 配置
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  chainWebpack: config => {
    config.module.rule('worker')
      .test(/\.worker\.js$/)
      .use('worker')
      .loader('worker-loader')
     
      config.module.rule('js').exclude.add(/\.worker\.js$/);
  },
  parallel: false,
})
// file.worker.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave:true,
  chainWebpack: config => {
    config.module.rule('worker')
      .test(/\.worker\.js$/)
      .use('worker')
      .loader('worker-loader')
     
      config.module.rule('js').exclude.add(/\.worker\.js$/);
  },
  parallel: false,
 
})

// edit.vue
<template>
  <div class="main">
    <button>编辑</button>
	<input @change='onChange'/>
  </div>
</template>

<script>
import Worker from "@/untils/file.worker.js";

export default {
  data() {
    return {
      myWorker: new Worker(),
      timeCount: 0
    }
  },
  methods: {
    // worker
    // 开启定时器
    onTimeStart() {
      this.myWorker.postMessage('start');
    },
    // 停止定时器
    onTimeEnd() {
      this.myWorker.postMessage('end')
    },
    // 重置定时器
    onTime() {
      this.onTimeEnd()
      this.onTimeStart();
    },
    // 开启worker
    playWorker() {
      this.myWorker.postMessage('start');
      // 接收消息
      this.myWorker.addEventListener('message', e => {
        console.log(e.data)
        // campaignListener(); // 发起续租
        if (e.data.sum >= 20) {
          this.onTimeEnd()

          if (document.visibilityState === 'visible') {
            this.$message({
              message: '页面失效',
              type: 'warning'
            })
            // 退出编辑
            this.$router.back()
            this.timeCount = 1
            console.log('=====-');
          }
          document.addEventListener('visibilitychange', function () {
            if (document.visibilityState == 'visible' && this.timeCount == 0) {
              this.$message({
                message: '页面失效',
                type: 'warning'
              })
              // 退出编辑
              this.$router.back()
              this.timeCount = 1;
              console.log('=====0000');
            }

          })
        }
      })
    },
    // 表单进行了操作则重置定时器
    onChange() {
      this.onTime()
    },
  	mounted() {
      this.playWorker()
  	}
}
</script>
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值