vue+element实现输入密码锁屏
更新时间:2022年3月7日 16:52 点击:986 作者:小聪聪� �
本文实例为大家分享了vue+element实现输入密码锁屏的具体代码,供大家参考,具体内容如下
1.页面中个的点击事件
通过vuex来存在状态
/** * 锁屏功能 */ lock() { console.log('锁屏') const that = this this.$prompt('请输入锁屏密码', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', inputPattern: /\S/, //判断不为空正则 inputErrorMessage: '锁屏密码不能为空' }).then(({ value }) => { that.isLock = !that.isLock that.$store.commit('SET_LOCK_PASSWD', value) that.elementTips("success", "锁屏成功"); this.handleLock() }).catch(() => { that.elementTips("info", "锁屏失败"); }); }, //判断输入框是否有内容,有内容就跳转,设置状态 handleLock() { const that = this if (util.validatenull(this.lockPasswd)) { this.box = true return } that.$store.commit('SET_LOCK') setTimeout(() => { that.go('/lock') }, 100) },
2.在vuex中设置状态
import util from '@/utils' import store from '../' import cookie from '@/utils/cookie.js' const mutations = { SET_IM(state, userInfo) { console.log('user:', userInfo) state.userInfo = userInfo }, SET_LOCK(state, action) { state.isLock = true util.setStore('isLock', state.isLock) // console.log('util.setStore',util.getStore('isLock')) }, SET_LOCK_PASSWD(state, lockPasswd) { state.lockPasswd = lockPasswd util.setStore('lockPasswd', state.lockPasswd) // console.log('util.setStore',util.getStore('lockPasswd')) }, CLEAR_LOCK(state, action) { state.isLock = false state.lockPasswd = '' util.removeStore('lockPasswd') util.removeStore('isLock') // console.log('state.isLock',state.isLock) }, } export default mutations /** * * @author getters */ const getters = { isLock: state => state.isLock, lockPasswd: state => state.lockPasswd, } export default getters /** * @desc 状态表 * @author Vman * @time 2019/9/6 */ import { getStore } from '@/utils' export default { userInfo: {}, //im 实例 nim: null, name: '', isLock: false, lockPasswd: '', userUID: '', sdktoken: '', }
3.解锁页面
<template> <div class="lock-container pull-height"> <div class="lock-form animated bounceInDown"> <div class="animated" :class="{'shake':passwdError,'bounceOut':pass}"> <h3 class="text-white">{{name}}</h3> <el-input placeholder="请输入登录密码" type="password" class="input-with-select animated" v-model="passwd" @keyup.enter.native="handleLogin"> <!-- <el-button slot="append" @click="handleLogin" style="padding-right:36px;"><svg-icon class-name='international-icon' icon-class="deblocking"/></el-button> --> <!-- <el-button slot="append" @click="handleLogout"><svg-icon class-name='international-icon' icon-class="lockOut"/></el-button> --> <el-button slot="append" @click="handleLogin" style="padding-right:36px;"><i class="el-icon-unlock"></i></el-button> <el-button slot="append" @click="handleLogout"><i class="el-icon-switch-button"></i></el-button> </el-input> </div> </div> </div> </template> <script> import util from '@/utils' import { mapGetters, mapState } from 'vuex' export default { name: 'lock', data() { return { passwd: '', passwdError: false, pass: false } }, created() {}, mounted() {}, computed: { ...mapState({ name: state => state.name }), ...mapGetters(['tag', 'lockPasswd']) }, props: [], methods: { handleLogout() { this.$confirm('是否退出系统, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { //删除vuex状态表 this.$store.commit('CLEAR_LOCK') //删除user_token util.removeStore('user_token') this.$router.push({ path: '/login' }) console.log('555') }).catch(() => { return false }) }, handleLogin() { console.log('this.lockPasswd', this.lockPasswd) if (this.passwd !== this.lockPasswd) { this.passwd = '' this.$message({ message: '解锁密码错误,请重新输入', type: 'error' }) this.passwdError = true setTimeout(() => { this.passwdError = false }, 1000) return } this.pass = true setTimeout(() => { //输入密码正确后删除vuex中状态值 this.$store.commit('CLEAR_LOCK') this.$router.go(-1); //返回上一层 }, 1000) } }, components: {} } </script> <style lang="scss"> .lock-container { height: 100%; display: flex; align-items: center; justify-content: center; position: relative; } .lock-container::before { z-index: -999; content: ""; position: absolute; left: 0; top: 0; width: 100%; height: 100%; background-image: url("../../assets/images/lockLogin.png"); background-size: cover; } .lock-form { width: 300px; } </style>
4.在路由中利用路由钩子函数
import Vue from 'vue' import Router from 'vue-router' import util from '@/utils' import store from '@/store' router.beforeEach((to, form, next) => { let user_token = util.getStore('user_token'); let toPath = to.path console.log('toPath:', toPath) console.log('在白名单中:', whiteList.indexOf(toPath)); console.log('user_token:', user_token) document.body.scrollTop = 0 // firefox document.documentElement.scrollTop = 0 // safari window.pageYOffset = 0 if (whiteList.indexOf(toPath) == -1 && (!user_token && user_token !== undefined && user_token != null)) { //不在白名单,并且user_token没有 router.push({ path: '/login' }) } else if (whiteList.indexOf(toPath) != -1) { //去登录页 // util.removeStore('user_token') next(); } else if (whiteList.indexOf(toPath) == -1 && user_token) { //不在白名单,并且user_token存在 next() } /** * 判断锁屏 */ if (store.getters.isLock && to.path !== '/lock') { next({ path: '/lock' }) } });
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/weixin_44745330/article/details/100779
相关文章
- 这篇文章主要介绍了vue中activated的用法,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2021-01-03
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
这篇文章主要介绍了基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
- 这篇文章主要介绍了vue 监听 Treeselect 选择项的改变操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
- 这篇文章主要介绍了Vue组件跨层级获取组件操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-28
- 这篇文章主要介绍了Vue基于localStorage存储信息代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-16
解决Element-ui el-table合计行 show-summary 不显示的问题
有时候需要在table的底部有合计,这时候官方给的是在table里设置,show-summary就可以了但是给table加了一个固定高度的话,就不显示了,打开控制台可以看到这个合计是存在的那么需...2020-12-11- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
这篇文章主要介绍了antdesign-vue结合sortablejs实现两个table相互拖拽排序功能,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-09vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
这篇文章主要介绍了vuejs element table 表格添加行,修改,单独删除行,批量删除行操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-18vue项目页面嵌入代码块vue-prism-editor的实现
这篇文章主要介绍了vue项目页面嵌入代码块vue-prism-editor的实现,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-10-30- 最常见的多环境配置,就是开发环境配置,和生产环境配置,本文主要介绍了vue项目多环境配置的实现,感兴趣的可以了解一下...2021-07-20
- 这篇文章主要介绍了vue treeselect获取当前选中项的label实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01
- 这篇文章主要给大家介绍了关于Vue中slot-scope的深入理解,这个教程非常适合初学者,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-17
- 这篇文章主要介绍了Vue 3.0 中 jsx 语法使用,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2020-11-13
解决vue的router组件component在import时不能使用变量问题
这篇文章主要介绍了解决vue的router组件component在import时不能使用变量问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27- 这篇文章主要为大家详细介绍了vue实现同时设置多个倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-05-20
vue Treeselect下拉树只能选择第N级元素实现代码
这篇文章主要介绍了vue Treeselect下拉树只能选择第N级元素实现代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-01- 这篇文章主要为大家详细介绍了vue实现div单选多选功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-07-16