vue

element-ui 手机号验证 & 获取验证码倒数60秒

2020-07-27  本文已影响0人  Peter_2B


<template>
 <div id="login">
    <div class="login">
       <div class="img-box"></div>
       <div class="box-login">
            <el-form ref="loginForm" :model="form" :rules="rules" label-width="40px" class="login-box">
                    <h1 class="login-title">学聪后台</h1>
                    <h6 class="login-subtitle">欢迎回来</h6>
                    <el-form-item label="" prop="phone">=
                        <el-input type="text" maxlength="11" suffix-icon="el-icon-mobile-phone" placeholder="手机号" v-model="form.phone"/>
                    </el-form-item>
                    <el-form-item label="" prop="code">
                         <div class="verify-wrapper">
                              <el-input type="text" maxlength="6" suffix-icon="el-icon-lock" placeholder="验证码" v-model="form.code"/>
                              <el-button class="btn-orange" :disabled="disabled" @click="getCode">{{valiBtn}}</el-button>
                          </div>
                    </el-form-item>
                    <el-form-item>
                               <button class="d-btn-orange" @click.prevent="onSubmit('loginForm')">登录</button>
                    </el-form-item>
              </el-form>
        </div>
      </div>
    </div>
</template>

data(){
      var checkPhone = (rule, value, callback) => {
              const reg = /^0?(13[0-9]|15[012356789]|18[0-9]|14[578]|16[6]|17[035768]|19[19])[0-9]{8}$/
              if ( reg.test(value) ) {
                      return callback();
               }
               callback('请输入合法的手机号');
               };
        return{
           form: {
              phone: '',
              code: ''
           },
           autoLogin:false,
           rules: {
                 phone: [{validator: checkPhone, required: true, trigger: 'blur' } ],
                 code:[{required: true, message: '请输入验证码', trigger: 'blur' } ]
            },
            dialogVisible: false,     // 对话框显示和隐藏
            valiBtn:'获取验证码',
            disabled:false,
           }
    },

 methods:{
        //获取验证码    
        //获取验证码 并只验证手机号 是否正确
        getCode(){
           this.$refs['loginForm'].validateField('phone', (err) =>{
                if(err){
                    console.log('未通过')
                    return;
                }else{
                    console.log('已通过')
                    this.tackBtn();   //验证码倒数60秒
                    let fd = new FormData();  //POST 请求需要 转化为Form
                        fd.append('PhoneNumber', this.form.phone);
                        fd.append('NeedCheck', 2);
                    this.$axios({
                            method: 'POST', data: fd, url:'/api/sgsaccount/vcodeget',
                     }).then( res => {
                            console.log(res);
                        })
                    }
                })
        },
        tackBtn(){       //验证码倒数60秒
              let time = 60;
              let timer = setInterval(() => {
                  if(time == 0){
                      clearInterval(timer);
                      this.valiBtn = '获取验证码';
                      this.disabled = false;
                  }else{
                      this.disabled = true;
                      this.valiBtn = time + '秒后重试';
                      time--;
                  }
              }, 1000);
        },
        onSubmit(formName) {  //点击登录 验证手机& 验证码是否符合条件
            this.$refs[formName].validate((valid) => {    // 为表单绑定验证功能
                if (valid) {
                    let fd = new FormData();
                        fd.append('PhoneNumber', this.form.phone);
                        fd.append('VCode', this.form.code);
                    this.$axios({
                        method: 'POST', data: fd, url: `/api/sgsaccount/adminlogin`,
                    }).then(res => {
                        console.log(res);
                        if (res.data.EID == 0) {
                            var token = res.data.Data[0].token;
                            localStorage.setItem('token',token);
                            this.$message({showClose: true,message: '登录成功',type: 'success'})
                            this.$router.push({path:'/indexx'});
                        } else {
                            this.$message({showClose: true,message: res.data.Err,type: 'warning'})
                        }
                    });
                 } else {
                    this.dialogVisible = true;
                    return false;
                }
            });
        },
}
上一篇 下一篇

猜你喜欢

热点阅读