• 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="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>
    

       

    集思广益,仅供学习,侵权即删!!
  • 相关阅读:
    android Animation整理
    js的console总结
    [原创]cocos2d-lua学习笔记(0)-提纲
    【转】js怎么编译成JSC
    【转】PCDuino用python读取GPIO数据
    Mysql数据库大小相关的问题
    oracle with as
    python jar
    investopedia level 2
    warning MSB3391
  • 原文地址:https://www.cnblogs.com/hudunyu/p/13529935.html
Copyright © 2020-2023  润新知