最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue頁面鎖屏的完美解決方法記錄

 更新時間:2022年06月06日 15:58:01   作者:呵呵的牛  
鎖屏是指用戶暫時離開時點擊鎖屏,用戶無法跳轉到其他頁面,回來輸入密碼點擊解鎖,下面這篇文章主要給大家介紹了關于vue頁面鎖屏的完美解決方法,需要的朋友可以參考下

vue實現(xiàn)頁面鎖屏完美解決

最新寫項目 客戶要求寫一個鎖屏功能。靜下心來,慢慢看 ,相信你會有收獲的。

功能點

1.禁止瀏覽器返回按鈕。

2.手動輸入路由會強制跳到鎖屏頁面。

3.必須輸入正確密碼或者重新登錄該系統(tǒng)。

思路:鎖屏的思路從 登錄開始在登錄的時候 拿到密碼 使用md5對密碼加密, 然后存到vuex或者瀏覽器本地存儲,然后新建鎖屏頁面,如下圖。 在鎖屏頁面 輸入密碼 對鎖屏頁面輸入的密碼進行MD5加密,加密后把登錄的時候存到本地存儲的密碼對比 。兩個密碼一樣的話就成功了可以跳到首頁,反之則密碼錯誤,仍然在鎖屏頁面。

上面圖片為對登錄的密碼進行md5加密

附:md5加密方法

安裝插件 js-md5

npm install js-md5 -S

使用

一、全局掛載

第一步在main.js中引入md5,并掛載到vue的原型上

import md5 from 'js-md5'
Vue.prototype.$md5 = md5

第二步使用

this.$md5('這里是需要進行md5加密的內容')

二 、局部,某個頁面使用

直接在js中引入md5,直接使用即可

import md5 from 'js-md5'
console.log(md5('這里是需要進行md5加密的內容'))

 

 <div class="right-menu-item" style="cursor: pointer"  @click="lockScreen">
          <i class="el-icon-lock" style="font-weight:700;"></i>
        </div>
	  // 鎖屏:
    lockScreen() {
      this.$router.push('/screen')
    },

上面的代碼就是點擊鎖屏按鈕 跳轉路由 到鎖屏頁面。

1.禁止瀏覽器返回按鈕

在main.js里面加上下面的代碼

	//禁止瀏覽器上一步下一步
window.addEventListener('popstate', function() {
  history.pushState(null, null, document.URL)
 })

在 router/index.js里面加上 scrollBehavior: () => {
history.pushState(null, null, document.URL)
}這個代碼

export default new Router({
  mode: 'history', // 去掉url中的#
  // scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes,
  scrollBehavior: () => {
    history.pushState(null, null, document.URL)
  }
})

2.書寫鎖屏頁面和相關路由

下面代碼為screen/index.js 為鎖屏的頁面 首先進入這個頁面 默認執(zhí)行一次 unlock方法里面的localStorage.setItem(“newlockPassword”, md5(this.userForm.newPw));

把解鎖的密碼存到本都對象存儲里面,這樣路由就好做處理。

	<template>
  <div class="app">
    <el-form class="userInfo">
      <div class="body-icon">
      </div>
      <div class="title-icon">
      </div>
      <div class="box">
        <img src="../../assets/logo/logo.png" class="lock-avatar" />
      </div>
      <el-form-item>
        <el-row style="margin-left: 100px">
          <el-col :span="2">
          </el-col>
          <el-col :span="12" class="lock-nickName">{{ nickName }}</el-col>
        </el-row>
      </el-form-item>
      <el-form-item>
        <el-input
          v-model="userForm.newPw"
          placeholder="請輸入登陸密碼"
          type="password"
          auto-complete="off"
          @keyup.enter.native="unLock()"
          show-password
        >
          <div slot="prefix" style="margin-left: 3px">
            <i class="el-icon-lock"></i></div
        ></el-input>
      </el-form-item>
      <el-form-item>
        <div style="text-align: center; color: #1890ff">
          <a @click="logout">退屏重新登錄</a>
        </div>
      </el-form-item>
      <el-form-item>
        <el-button
          :loading="loading"
          size="medium"
          type="primary"
          style="width: 100%"
          @click="unLock"
          ><i class="el-icon-unlock"></i>解鎖</el-button
        >
        <!-- <el-button
          circle
          type="primary"
          plain
          icon="el-icon-unlock"
          @click="unLock"
        ></el-button> -->
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
import md5 from "js-md5";
export default {
  data() {
    return {
      userForm: {
        newPw: "",
        user: "",
      },
      loading: false,
    };
  },
  methods: {
    unLock() {
      let oldAuct = localStorage.getItem("lockPassword");
      localStorage.setItem("newlockPassword", md5(this.userForm.newPw));
      console.log(oldAuct, localStorage.getItem("newlockPassword"), "999990");
      if (this.userForm.newPw === "" || this.userForm.newPw === undefined) {
        return;
      } else if (md5(this.userForm.newPw) != oldAuct) {
        this.userForm.newPw = "";
        this.$notify.error({
          title: "錯誤",
          message: "解鎖密碼錯誤,請輸入登陸密碼解鎖",
          duration: 1500,
        });
        return;
      } else {
        setTimeout(() => {
          this.$notify.success({
            title: "解鎖成功",
            duration: 1500,
          });
          this.$router.push("/index");
          this.userForm.newPw = "";
        }, 500);
      }
    },
    async logout() {
      this.$confirm("確定注銷并退出系統(tǒng)嗎?", "提示", {
        confirmButtonText: "確定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        let password = localStorage.getItem("lockPassword");
        localStorage.setItem("newlockPassword", password);
        this.$store.dispatch("LogOut").then(() => {
          location.href = "/login";
        });
      });
    },
  },
  mounted() {
    this.unLock();
  },
};
</script>

<style lang="scss" scoped>
.app {
  // background-image: url("../../assets/images/back.png");
  background-size: 100%; // 背景圖片大小最大
  height: 100%; //寬、高也最大
  width: 100%;
  background-repeat: no-repeat;
  background-attachment: fixed;
  background-position: center;
  background-color: skyblue; //一定要設置背景顏色
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: auto;
  margin: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1500;
  .userInfo {
    // display: flex;
    background: #ffffff;
    // height: 300px;
    width: 400px;
    padding: 25px 25px 5px 25px;
    .title-icon {
      width: 120px;
      height: 20px;
      margin-bottom: 22px;
    }
    .body-icon {
      width: 500px;
      height: 120px;
      position: absolute;
      margin-left: -152px;
      margin-top: -166px;
    }
    .box {
      display: flex;
      justify-content: center;
      align-items: center;
      .lock-avatar {
        width: 100px;
        height: 100px;
        border-radius: 100px;
      
      }
    }

    .lock-nickName {
      margin-top: -2px;
      font-size: 14px;
      font-weight: 560;
      text-align: center;
    }
    .el-input {
      height: 38px;
      input {
        height: 38px;
      }
    }
  }
}
</style>

下面圖片為router/index.js 新增 鎖屏路由

3.在router.beforeEach()路由首首位加上以下代碼

下面的代碼意思是對開始登錄的MD5加密密碼鎖屏頁面的MD5密碼 不相等 并且 將要去的路由不是screen 則直接跳到 screen這個頁面。

這樣的話 只要點擊鎖屏按鈕進入 screen鎖屏頁面 返回禁止了,路由里面輸入路由也不會生效。

	 /**
	 * 判斷鎖屏
	 */
	 //登錄的時候存的md5加密的密碼
  let oldPasswordld = localStorage.getItem("lockPassword");
  //鎖屏頁面的md5加密密碼
  let newlockPassword = localStorage.getItem("newlockPassword");
  console.log(oldPasswordld,newlockPassword)
	if (newlockPassword !== oldPasswordld && to.path !== '/screen') {
    next('/screen')
	}

4.實現(xiàn)退出鎖屏重新登錄

下面代碼在screen/index.js里面 退出鎖屏重新登錄

let password = localStorage.getItem(“lockPassword”);
localStorage.setItem(“newlockPassword”, password);

注意:退出鎖屏的時候需要 把本地的首次登錄的密碼 賦值給鎖屏界面的密碼 否則退出不了 鎖屏頁面。

 <el-form-item>
        <div style="text-align: center; color: #1890ff">
          <a @click="logout">退屏重新登錄</a>
        </div>
      </el-form-item>
	 async logout() {
      this.$confirm("確定注銷并退出系統(tǒng)嗎?", "提示", {
        confirmButtonText: "確定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
      //退出鎖屏的時候需要 把本地的首次登錄的密碼 賦值給鎖屏界面的密碼 否則退出不了 鎖屏頁面。然后調用vuex退出方法
        let password = localStorage.getItem("lockPassword");
        localStorage.setItem("newlockPassword", password);
        this.$store.dispatch("LogOut").then(() => {
          location.href = "/login";
        });
      });
    },

總結

到此這篇關于vue頁面鎖屏完美解決的文章就介紹到這了,更多相關vue頁面鎖屏內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 關于Vue項目使用scss終端發(fā)出警告解決方法

    關于Vue項目使用scss終端發(fā)出警告解決方法

    這篇文章主要介紹了關于Vue項目使用scss終端發(fā)出警告的解決方法,出現(xiàn)這個問題的原因是項目中使用了DartSass舊版的JavaScriptAPI,這些API已被棄用,文章將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2025-04-04
  • vue項目打包以及優(yōu)化的實現(xiàn)步驟

    vue項目打包以及優(yōu)化的實現(xiàn)步驟

    項目完成,我們會將項目進行上線,為了提升性能,我們往往會進行一些優(yōu)化處理,本文主要介紹了vue項目打包以及優(yōu)化的實現(xiàn)步驟,感興趣的可以了解一下
    2021-07-07
  • vue使用Google地圖的實現(xiàn)示例代碼

    vue使用Google地圖的實現(xiàn)示例代碼

    這篇文章主要介紹了vue使用Google地圖的實現(xiàn)示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • vue3中setup語法糖下通用的分頁插件實例詳解

    vue3中setup語法糖下通用的分頁插件實例詳解

    這篇文章主要介紹了vue3中setup語法糖下通用的分頁插件,實例代碼介紹了自定義分頁插件:PagePlugin.vue,文中提到了vue3中setup語法糖下父子組件之間的通信,需要的朋友可以參考下
    2022-10-10
  • vue iview實現(xiàn)動態(tài)新增和刪除

    vue iview實現(xiàn)動態(tài)新增和刪除

    這篇文章主要為大家詳細介紹了vue iview實現(xiàn)動態(tài)新增和刪除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Vue導出el-table表格為Excel文件的兩種方式

    Vue導出el-table表格為Excel文件的兩種方式

    在開發(fā)過程中,我們經(jīng)常需要將表格數(shù)據(jù)導出為 Excel 文件,大多數(shù)情況下,由后端處理即可,但是當數(shù)據(jù)量不大、需要快速響應用戶操作、或者數(shù)據(jù)已經(jīng)在前端進行處理和展示時,前端該如何實現(xiàn)呢,本文將介紹兩種方法,需要的朋友可以參考下
    2024-09-09
  • vue 中的 v-model詳解

    vue 中的 v-model詳解

    文章介紹了Vue中的v-model實現(xiàn)原理,包括數(shù)據(jù)監(jiān)聽和UI通知,通過綁定props.modelValue和使用update:modelValue,子組件可以實現(xiàn)數(shù)據(jù)變更通知父組件,Vue3提供了defineModel來簡化v-model的定義,并支持自定義v-model變量名,感興趣的朋友一起看看吧
    2025-01-01
  • 在Vue中實現(xiàn)拖拽功能的實例

    在Vue中實現(xiàn)拖拽功能的實例

    Vue實現(xiàn)拖拽功能的基本原理是監(jiān)聽鼠標事件,實時更新拖拽元素的位置,最后在合適的時機停止拖拽并更新元素位置,在Vue中,我們可以通過綁定相關事件來實現(xiàn)這一功能
    2025-02-02
  • vue調用攝像頭進行拍照并能保存到本地的方法

    vue調用攝像頭進行拍照并能保存到本地的方法

    本文主要介紹了vue調用攝像頭進行拍照并能保存到本地的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue導出excel多層表頭的實現(xiàn)方案詳解

    vue導出excel多層表頭的實現(xiàn)方案詳解

    這篇文章主要為大家詳細介紹了vue導出excel多層表頭的實現(xiàn)方案,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學習一下
    2025-04-04

最新評論

哈巴河县| 许昌市| 兴国县| 天柱县| 元谋县| 华容县| 通山县| 巫山县| 佳木斯市| 革吉县| 丹阳市| 长泰县| 峨眉山市| 十堰市| 青川县| 临洮县| 芒康县| 南充市| 澄迈县| 登封市| 东辽县| 莒南县| 镇坪县| 渭源县| 平塘县| 乐业县| 南乐县| 陆良县| 宁阳县| 土默特右旗| 克山县| 高邑县| 伊春市| 安远县| 通城县| 本溪市| 界首市| 安阳县| 英山县| 嘉兴市| 宝兴县|