Vue + Elementui 實現登錄頁 手機驗證碼、倒計時等功能

来源:https://www.cnblogs.com/mochenxiya/archive/2022/08/31/16642063.html
-Advertisement-
Play Games

Vue + Elementui 實現登錄頁 手機驗證碼、倒計時等功能 點擊打開視頻講解 更加詳細 <template> <div id="app"> <div class="left">用代碼改變世界</div> <el-form class="content" ref="refForm" :rul ...


Vue + Elementui 實現登錄頁 手機驗證碼、倒計時等功能

點擊打開視頻講解 更加詳細

<template>
  <div id="app">
    <div class="left">用代碼改變世界</div>
    <el-form
      class="content"
      ref="refForm"
      :rules="rules"
      :model="passwordResetForm"
      label-width="85px"
    >
      <el-form-item prop="accout" label="賬 號:">
        <el-input
          size="small"
          clearable
          v-model="passwordResetForm.accout"
          placeholder="輸入賬號"
          prefix-icon="el-icon-user"
        >
        </el-input>
      </el-form-item>
      <el-form-item prop="password" label="密 碼:">
        <el-input
          size="small"
          type="password"
          maxlength="16"
          clearable
          v-model="passwordResetForm.password"
          prefix-icon="el-icon-lock"
          placeholder="輸入密碼"
        ></el-input>
      </el-form-item>
      <el-form-item prop="checkCode" label="驗證碼:" class="checkCode">
        <el-input
          size="small"
          clearable
          v-model="passwordResetForm.checkCode"
          placeholder="輸入驗證碼"
        ></el-input>
        <el-button
          @click.stop="sendVerificationCode"
          size="mini"
          type="primary"
          style="margin-left: 10px"
          v-if="show"
          >發送驗證碼</el-button
        >
        <el-button
          size="mini"
          type="primary"
          style="margin-left: 10px"
          v-if="!show"
          disabled
          >{{ count }}秒後重發</el-button
        >
      </el-form-item>
      <div class="sign">
        <el-button @click.stop="sign" type="primary">登 錄</el-button>
      </div>
    </el-form>
    <div class="right">用歌曲祭奠青春</div>
  </div>
</template>
<script>
import axios from "axios";
export default {
  name: "home",
  data() {
    return {
      passwordResetForm: {
        accout: "",
        password: "",
        checkCode: "",
      },
      rules: {
        accout: [{ required: true, message: "賬號不能為空", trigger: "blur" }],
        password: [
          { required: true, message: "密碼不能為空", trigger: "blur" },
          {
            trigger: "blur",
            validator: (rule, value, callback) => {
              let passwordreg =
                /(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9]).{8,16}/;
              if (!passwordreg.test(value)) {
                callback(
                  new Error("密碼必須由數字、字母、特殊字元組合,請輸入8-16位")
                );
              } else {
                callback();
              }
            },
          },
        ],
        checkCode: [
          { required: true, message: "驗證碼不能為空", trigger: "blur" },
          { max: 4, message: "驗證碼為4位數字", trigger: "blur" },
        ],
      },
      show: true,
      count: "",
      timer: null,
    };
  },
  mounted() {},
  methods: {
    //驗證碼 倒計時
    sendVerificationCode() {
      let TIME_COUNT = 60;
      if (!this.timer) {
        this.count = TIME_COUNT;
        this.show = false;
        this.timer = setInterval(() => {
          if (this.count > 0 && this.count <= TIME_COUNT) {
            this.count--;
          } else {
            this.show = true;
            clearInterval(this.timer);
            this.timer = null;
          }
        }, 1000);
        this.getCode();
      }
    },
    //驗證碼
    getCode() {
      axios.get("/verificationCode.json").then((res) => {
        if (res.status == 200) {
          setTimeout(() => {
            this.passwordResetForm.checkCode = res.data.code;
            this.show = true;
            clearInterval(this.timer);
            this.timer = null;
          }, 3000);
        }
      });
    },
    //登錄
    sign() {
      this.$refs["refForm"].validate((valid) => {
        if (valid) {
          this.$message({
            type: "success",
            message: "登錄成功了哎!",
          });
        } else {
          console.log("error submit!!");
          return false;
        }
      });
    },
  },
};
</script>

<style scoped>
#app {
  width: 100%;
  height: calc(100vh - 0px);
  background-image: url(../assets/moment.jpg);
  /* 設置圖片寬、高 */
  background-size: 100% 100%;
  /*按比例縮放*/
  background-repeat: no-repeat;
}
.content {
  width: 300px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 22px 30px;
  box-shadow: 0 0 10px 5px #19a2d0 inset;
}
.checkCode ::v-deep .el-form-item__content {
  display: flex;
  align-items: center;
  justify-content: space-around;
}
::v-deep .el-form-item__label {
  font-size: 18px;
  font-weight: bold;
  padding: 0 0 0 0;
  color: #fff;
  text-align: left;
}
.sign > button {
  width: 100%;
  font-size: 18px;
}
.left {
  width: 10px;
  font-size: 40px;
  font-weight: bold;
  color: #fff;
  position: absolute;
  top: 50%;
  left: 25%;
  transform: translate(-50%, -50%);
}
.right {
  width: 10px;
  font-size: 40px;
  font-weight: bold;
  color: #fff;
  position: absolute;
  top: 50%;
  left: 75%;
  transform: translate(-50%, -50%);
}
</style>

效果圖:

若對您有幫助,請點擊跳轉到B站一鍵三連哦!感謝支持!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引言 在實際中,當多專業設計協助時,遇到圖紙更新後,要對比圖紙找出圖紙的不同處,一直是一個比較耗時費力的事情,也是業內的一大痛點。一般CAD新舊圖紙的內容對比,包括增加新的圖形元素、減少原有的圖形元素以及對原有的圖形進行修改。傳統的方式一般是在PC端CAD環境中實現對圖紙比較的功能,然後隨著互聯網移 ...
  • 雙指針解“鏈表”題也太香了叭! 同步雙指針 1 查找鏈表中倒數第 k 個節點 劍指Offer22.鏈表中倒數第k個節點 思路: 假設鏈表的長度為n,不難得出倒數第k個節點即為整數第n + 1 - k。 如果一個指針從頭節點開始走k步(頭節點算作第1步),則還需n + 1 - k步才能走完鏈表(到達尾 ...
  • <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="wi ...
  • 1 鏈接地址 1.1 資料地址與鏈接 視頻鏈接(P77~P96): 黑馬程式員Node.js全套入門教程,nodejs最新教程含es6模塊化+npm+expre... 資料鏈接: 鏈接:https://pan.baidu.com/s/1SLBluoHqhtr5r6h3Xb1Dsw 提取碼:60kb ...
  • JavaScript中的數組 數組的概念 ==數組==是指一組數據的集合,其中每個數據被稱作元素,在數組中可以存放任意類型的元素。數組是一種將一組數據存儲在單個變數名下的優雅方式。 創建數組 1.利用new創建數組 var 數組名 = new Array() ; var arr = new Arra ...
  • 1 以下代碼執行後,控制臺中的輸出內容為? for (let i = 0; i < 3; i++) { setTimeout(() => { console.log(i); }); } for (var j = 0; j < 3; j++) { setTimeout(() => { console. ...
  • 實現了自動生成和插槽兩個方式,主要把 el-table 和 el-pagination 封裝在一起 效果圖: 使用組件,啟用自動生成 :auto="true" 自動生成-編輯 (包括請求已經實現了)新增和刪除也是一樣 ps:如有額外的按鈕可以用插槽實現 查詢的時候,只需要多返回下麵數據,就可以自動生 ...
  • 問題: this.$refs[formName].validate((valid) =>{} 無效的問題,當驗證通過的時候點確定按鈕沒有報錯,也沒有任何反應。 背景: ruoyi前後端分離新項目,前端vue。 解決: 參考: this.$refs[formName].validate((valid) ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...