vue+axios+element+ui实现手机发送验证码及校验验证码功能

Posted 老张在线敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue+axios+element+ui实现手机发送验证码及校验验证码功能相关的知识,希望对你有一定的参考价值。

配合express拿到官网接口

1.首先布局,使用element表单输入框,标签上面相应的绑定了一些事件以及校验规则,下面逻辑代码中有注释

<div class="wrap">
    <el-form class="loginForm" :model="loginForm" :rules="loginFormRules" ref="loginFormRef"
label-position="top" v-show=showPhone>
    <el-form-item label="手机号" prop="phone">
    	<el-input v-model="loginForm.phone"></el-input>
 	</el-form-item>
    <el-form-item label="手机验证码" prop="captcha">
        <el-input v-model=" loginForm.captcha">
     <template slot="append">
                                            <!--  -->
        <el-button v-if="loginForm.showloginCode" type="primary"
                                                @click="getloginPhoneCode">获取验证码</el-button>
        <div v-else>{{ loginForm.count }}</div>
      </template>
      </el-input>
   </el-form-item>
   <el-form-item class="btns">
         <el-button type="primary" @click="handleLogin">登录</el-button>

         <el-button v-on:click="ToCode" type="button">切换为扫码登陆</el-button>
         <!-- <span @click="isCaptcha">111</span> -->
         </el-form-item>
      </el-form>
 </div>

2.data下面写入对手机号以及验证码校验,验证是否合法

 // 正则验证手机号是否合法
   var checkMobile = (rules, value, callback) => {
   const regMobile = /^(0|86|17951)?(13[0-9]|15[0123456789]|17[678]|18[0-9]|14[57])[0-9]{8}$/;
   if (regMobile.test(value) == true) {
      return callback();
    } else {
        callback(new Error("请输入合法的手机号"));
      }
   };
   
 // 验证输入的手机号验证码是否和手机接收到的验证码相同
    var checkPhoneCode = (rules, value, callback) => {
     if (value == this.loginForm.captcha) {
  return callback();
      } else {
  callback(new Error("验证码错误"));
      }
    };

3.return下面设置校验规则以及初始值

 			loginForm: {
                    phone: "", //手机号
                    captcha: "", //验证码
                    timer: null, //定时器的开关
                    showloginCode: true, //获取成功验证码后倒计时跟获取不成功后没有倒计时按钮的开关
                    count: "", //倒计时
                },
                // 验证规则
                loginFormRules: {
                    phone: [{
                            required: true,
                            message: "请输入手机号",
                            trigger: "blur"
                        },
                        {
                            validator: checkMobile,
                            trigger: "blur"
                        },
                    ],
                    captcha: [{
                            required: true,
                            message: "请输入手机验证码",
                            trigger: "blur"
                        },
                        {
                            validator: checkPhoneCode,
                            trigger: "blur"
                        },
                    ],
                },

4.methods中开始写事件

    	getloginPhoneCode() {

                // 如果没有输入手机号,则不往下执行
                if (this.loginForm.phone == "") {
                    return false;
                }

                let phone = this.loginForm.phone
                axios.get("http://localhost:3000/captcha/sent?phone=" + phone).then((res) => {
                    if (res.status != 200) {
                        return this.$message.error("验证码发送失败!");
                    } else {
                        // 当验证码发送成功,开始60秒倒计时
                        const time = 60;
                        if (!this.loginForm.timer) {
                            this.loginForm.showloginCode = false;
                            this.loginForm.count = time;
                            this.loginForm.timer = setInterval(() => {
                                if (
                                    this.loginForm.count > 0 &&
                                    this.loginForm.count <= time
                                ) {
                                    this.loginForm.count -= 1;
                                } else {
                                    this.loginForm.showloginCode = true;
                                    clearInterval(this.loginForm.timer);
                                    this.loginForm.timer = null;
                                }
                            }, 1000);
                        }
                    }
                });
            },
            handleLogin() {
                //点击登录
                axios.get('http://localhost:3000/captcha/verify', {
                    params: {

                        phone: this.loginForm.phone,
                        captcha: this.loginForm.captcha
                    }
                }).then(res => {
                    console.log(res);
                    localStorage.setItem('ele_login', true)
                    alert("成功")

                }).catch(error => {
                    console.log(error + "验证码输入错误")
                })
            },

以上是关于vue+axios+element+ui实现手机发送验证码及校验验证码功能的主要内容,如果未能解决你的问题,请参考以下文章

vue axios+element 全局的loading

vue 借用element-ui实现头像上传 axios发送请求

学习笔记Vue+Element UI+axios 实现简单的登录页面

vue-cli axios封装(element-ui)

Vue + Element UI 实现权限管理系统 前端篇:工具模块封装

vue 引入Element-ui和axios