vue+element实现输入密码锁屏

vue+element实现输入密码锁屏

本文实例为大家分享了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.webp");         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'         })     } });

推荐阅读