vue 封裝手機驗證登錄組件


封裝手機驗證登錄組件

簡單封裝手機驗證登錄組件,全局注冊,利用element-ui庫

如圖:

 

 

 

定義phoneLogin.vue組件

<template>
  <div>
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm">
      <el-form-item prop="phone">
        <el-input placeholder="請輸入手機號" v-model="ruleForm.phone">
          <i slot="prefix" class="el-icon-phone"></i>
        </el-input>
      </el-form-item>
      <el-form-item prop="code">
        <el-row :gutter="18">
          <el-col :span="18">
            <el-input placeholder="請輸入驗證碼" v-model="ruleForm.code">
              <i slot="prefix" class="el-icon-tickets"></i>
            </el-input>
          </el-col>
          <el-col :span="6">
            <el-button @click="sendCode" :disabled="disabled">{{
              this.btnText
            }}</el-button>
          </el-col>
        </el-row>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" style="width:100%" @click="phoneLogin">登錄</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default {
  name: "PhoneLogin",
  components: {},
  props: {
    ruleForm: {
      type: Object,
      required: true,
    },
    countDown: {
      type: Number,
      default: 60,
    },
  },
  data() {
    let checkPhone = (rule, value, callback) => {
      if (!value) {
        return callback(new Error("手機號不能為空"));
      } else {
        let reg = /^1[3|4|5|7|8][0-9]\d{8}$/;
        if (reg.test(value)) {
          callback();
        } else {
          return callback(new Error("請輸入正確的手機號"));
        }
      }
    };
    return {
      rules: {
        phone: [
          {
            validator: checkPhone,
            trigger: "change",
          },
        ],
        code: [
          {
            required: true,
            message: "驗證碼不能為空",
            trigger: "blur",
          },
        ],
      },
      disabled: false,
      btnText: "發送驗證碼",
      time: 0,
    };
  },
  methods: {
    sendCode() {
      this.$refs.ruleForm.validateField("phone", (errorMessage) => {
        if (errorMessage) {
          this.$message.error(errorMessage);
        } else {
          let timer = setInterval(() => {
            this.time--;
            this.btnText = `${this.time}s后重新發送`;
            this.disabled = true;
            if (this.time === 0) {
              this.disabled = false;
              this.btnText = "重新發送";
              this.time = this.countDown;
              clearInterval(timer);
            }
          }, 1000);
          this.$emit("send");
        }
      });
    },
    phoneLogin(){
      this.$refs.ruleForm.validate((valid)=>{
        if(valid){
          this.$emit('submit')
        }else{
          this.$emit('errHand')
        }
      })
    }
  },
  mounted() {
    this.time = this.countDown;
  },
};
</script>

  注冊公共組件

import Vue from "vue"
import PhoneLogin from "../components/PhoneLogin"
Vue.component('PhoneLogin',PhoneLogin)

  在view頁面引用

  

<template>
  <div>
    <h1>短信驗證碼登錄</h1>
    <PhoneLogin :rule-form="PhoneForm" @send="send" @submit="submit" @errHandle="errHandle"></PhoneLogin>
  </div>
</template>
<script>
export default {
  name: "LoginPage",
  components: {},
  props: {},
  data() {
    return {
      PhoneForm: {
        phone: "",
        code: "",
    };
  },
  methods: {
    submit() {
      this.$message.success("提交成功");
    },
    errHandle() {
      this.$message.error("表單錯誤");
    },
    send() {
      this.$message.info("發送驗證碼成功");
    },
  },
};
</script>

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM