vuecli3实现全局公用组件,定时下线功能(下)

vuecli3实现全局公用弹窗

实现功能:用户登录的时候,根据轮班设置会产生一个用户的轮班结束时间,就是下线时间,到了时间点要弹窗提示用户轮班时间到了,如果不操作倒计时五分钟自动注销,如果点击继续值班,每十分钟再弹窗提醒
用户登录后 不管用户在操作哪一个页面 ,到达轮班时间点 ,都显示"轮班时间已到"提示框 ,提示用户进行下一步的操作, 用vuex管理全局弹窗框的显隐

效果图:

轮班界面弹窗
1、首先定义好一个轮班弹窗的页面样式 logout.vue
2、用vuex管理全局弹窗框的显隐,项目目录store的app.js

const state = {
 //弹窗的显隐
  logoutDis: false
}
const mutations = {
  SET_LOGOUTDIS: (state, logoutDis) => {
    state.logoutDis = logoutDis
  },
  }
  const actions = {
  setDialog({ commit }, logoutDis) {
    commit('SET_LOGOUTDIS', logoutDis)
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}

这里也可以用const app={} 包含这些项目 我一开始这么写了 就没有动它 要保持前后的统一
3、getters.js

import store from "@/store/index";
const getters = {
     logoutDis: state => state.app.logoutDis
}
export default getters;

4、store里index.js

import store from "@/store/index";
const store = new Vuex.Store({
  modules,
  getters
})

export default store

5、项目的main.js
在这里插入图片描述
到这里vuex的内容就结束了 store的相关内容可以查看官方文档
最后现在要在app.vue引入我们定义的弹窗logout.vue 只是v-if换成store定义值了

<logOut v-if="this.$store.getters.logoutDis" />

终于到了最后的最后 ,需要设置在当前时间等于轮班时间的时候设置弹窗显示 permission.js
store.dispatch(‘app/setDialog’, true)

import store from "@/store/index";
 var size = window.setInterval(function () {
        let endTime = sessionStorage.getItem('logoutTime')
        var a = endTime.split(':')
        var s = new Date()
        if (s.getHours() === parseInt(a[0]) && s.getMinutes() === parseInt(a[1]) && s.getSeconds() === parseInt(a[2])) {
          // window.clearInterval(size)
          // 调用全局弹出框
          store.dispatch('app/setDialog', true)
        }
      }, 1000)
 在子组件中或其他任意页面要控制弹窗的显隐   this.$store.dispatch('app/setDialog', true)

总结:

1、因为下线时间是可变的,由子组件传出 ,所以不要清除定时器 ,获取下线时间也放在定时器内获取
2、vuex unknown action type: setDialog 报错解决 , store.dispatch(‘setDialog’, true)换成store.dispatch(‘app/setDialog’, true)加上文件名,页面里的也一样

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值