Vue登錄驗證碼

Vue登錄驗證碼

最近在開發PC端Vue項目,配合element-ui使用,這裏分享下在登錄頁面登錄驗證碼邏輯,言歸正傳。

1.效果圖如 :

vue登錄圖

2.邏輯分析:

點擊登錄,首先判斷驗當前input框和生成的證碼是否正確,如果正確發送請求,如果錯誤,提醒用戶不在繼續執行。

3.代碼如下:

核心代碼

createCode() {
		const code = "";
		const codeLength = 4; //驗證碼的長度  
		const random = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
			'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); //隨機數  
		for(let i = 0; i < codeLength; i++) { //循環操作  
			let index = Math.floor(Math.random() * 36); //取得隨機數的索引(0~35)  
			code += random[index]; //根據索引取得隨機數加到code上  
		}
		this.checkCode = code; //把code值賦給驗證碼  
	}

html 代碼

<template>
  <div class="login">
    <el-form ref="form":model="form":rules="rules" class="form">
      <el-form-item prop="username">
        <el-input
          class="log-input"
          v-model="form.username"
          placeholder="用戶名"
          prefix-icon="icon-login_user">
        </el-input>
      </el-form-item>
      <el-form-item prop="password">
        <el-input
          class="log-input"
          v-model="form.password"
          placeholder="密碼"
          type="password"
          prefix-icon="icon-login_pwd"
        >
        </el-input>
      </el-form-item>
      <el-form-item
        prop="seccode"
        class="inputbar"
      >
        <el-input
          class="log-input"
          v-model="form.seccode"
          placeholder="驗證碼"
          prefix-icon="icon-login_auth"
          @keydown.enter.native="login('form')"
        >
        </el-input>
        <span class="checkCode" @click="createCode">{{ checkCode}}</span>
      </el-form-item>
      <el-form-item>
        <el-button
          type="primary"
          class="btn"
          @click="login('form')"
        >登錄</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

js 代碼

export default {
  data() {
    return {
      form: {
        username: "",
        password: "",
        seccode:""
      },
      checkCode:'',
      rules: {
        username: [{ required: true, message: "請輸入用戶名", trigger: "blur" }],
        password: [{ required: true, message: "請輸入密碼", trigger: "blur" }]
        seccode: [{ required: true, message: "請輸驗證碼", trigger: "blur" }]
      },  
    };
  },
 mounted () {
    this.createCode();
  },
  methods: {
   createCode() {
		const code = "";
		const codeLength = 4; //驗證碼的長度  
		const random = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
			'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'); //隨機數  
		for(let i = 0; i < codeLength; i++) { //循環操作  
			let index = Math.floor(Math.random() * 36); //取得隨機數的索引(0~35)  
			code += random[index]; //根據索引取得隨機數加到code上  
		}
		this.checkCode = code; //把code值賦給驗證碼  
	},
	login() {
      if(this.form.seccode != this.checkCode) {
         this.$message({
              message: "驗證碼錯誤,注意大寫字母",
              type: "warning"
        });
        this.createCode();
        return false;
      };
      var fd = new FormData();
      fd.append("username", this.form.username);
      fd.append("password", this.form.password);
      loginPost(fd).then(res => {
          console.log(res);
          if (res.code == 200) {
            localStorage.setItem("myToken", res.obj.token);
            localStorage.setItem("username", res.obj.userName);
            this.$message({
              message: "登錄成功",
              type: "success"
            });
            this.$router.push("/");
            // this.setUserName(res.obj.userName);
          } else {
            this.$message({
              message: res.content,
              type: "warning"
            });
          }
        })
        .catch(res => {
          console.log(res);
        });
     }

希望能幫到你!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章