vue2之简易的pc端短信验证码的问题及处理方法

<提示语部分不要在意(非重点部分)>

简单说下布局(采用的是 vue的element ui的ui框架 )进行布局操作的

子组件模板部分如下(code部分是很基础的)

<template>
 <div class="forget">
  <el-dialog title="修改新密码" :visible.sync="dialog.visible"
  :close-on-click-modal="false"
     :close-on-press-escape="false"
  >
   <el-form :model="dialog.ruleForm" status-icon :rules="rules" :ref="dialog.ruleForms"

      label-width="100px" class="demo-ruleForm">
    <el-form-item label="手机号码" prop="phone" required>
     <el-input type="text" v-model.number="dialog.ruleForm.phone" autocomplete="off"
        :clearable="true"
     ></el-input>
    </el-form-item>
    <el-form-item label="手机验证码"prop="code" required>
     <div class="send-code">
      <el-input type="text" v-model="dialog.ruleForm.code" autocomplete="off"
         maxlength="6"
         show-word-limit
         :clearable="true"
      ></el-input>
      <el-link

        :style="{color:dialog.ruleForm.phone.toString().length===11?'#222':'#999'}"
        type="info" :underline="false"
        :disabled="getDisabled"
        @click="sendCode({
        phone:dialog.ruleForm.phone,sendCode:dialog.ruleForm.sendCode
        })"
      >{{dialog.ruleForm.sendCode}}</el-link>
     </div>
    </el-form-item>
    <el-form-item label="新密码" prop="newPwd" required>
     <el-input :clearable="true" type="password" v-model="dialog.ruleForm.newPwd"></el-input>
    </el-form-item>
   </el-form>
   <div slot="footer" class="dialog-footer">
    <el-button @click="cancel">取 消</el-button>
    <el-button type="primary" @click="determine(dialog.ruleForms)"
       :loading="dialog.ruleForm.loading"
    >{{dialog.ruleForm.loadingText}}</el-button>
   </div>
  </el-dialog>
 </div>
</template>

子组件逻辑部分如下(code部分是很基础的)

在@/utils/validate.js中的使用正则代码

// 验证手机号码
export const validatPhone = /^(^(([0\+]\d{2,3}-)?(0\d{2,3})-)(\d{7,8})(-(\d{3,}))?$)|(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$/
//验证密码
export const validatePassword = /^(?=.*\d)(?=.*[a-zA-Z]).{5,20}$/
<script>
 import {validatPhone,validatePassword} from '@/utils/validate'
 export default {
  props:{
   dialog:{
    type:Object,
    default: {}
   },
  },
  name: "Forget",
  data(){
  // 使用正则进行验证手机号码
   const validatePhone = (rule, value, callback) => {
    if (!value) {
     return callback(new Error('请输入手机号码'));
    }
    else {
     if (!validatPhone.test(value)) {
      callback(new Error('请输入手机号码'));
      return
     }
     callback();
    }
   };
   // 使用进行验证手机验证码
   const validateCode = (rule, value, callback) => {
    if (value === '') {
     return callback(new Error('请输入验证码'));
    } else {
    //真正环境请修改成自己的逻辑即可
     if (this.dialog.ruleForm.code !== '123456') {
      callback(new Error('验证码失误,请重新输入'))
      // this.dialog.ruleForm.code = ''
      return
     }
     callback();
    }
   };
   // 使用正则进行验证密码
   const validatenewPwd = (rule, value, callback) => {
    if (value === '') {
     callback(new Error('请输入密码'));
     return
    } else if (!validatePassword.test(value)) {
     return callback(new Error('新密码不合法'));
    } else {
     callback();
    }
   };
   return {
    rules:{ //验证表单元素中的规则
     phone:[
      { validator: validatePhone, trigger: ['blur','change'] }
     ],
     code:[
      { validator: validateCode, trigger: ['blur','change'] }
     ],
     newPwd:[
      { validator: validatenewPwd, trigger: ['blur','change'] }
     ],
    },
    timer: null//操作定时器

   }
  },
  computed:{
   //getDisabled() 当手机号码的长度等于11位和点击验证码状态为false时,则可以进行倒计时操作
   getDisabled(){
    let phone= this.dialog.ruleForm.phone
    const isChick = this.dialog.ruleForm.isChick
    if(phone.toString().length === 11 && isChick ===false){
     return false
    }
    else {
     // this.dialog.ruleForm.disabled = true
     return true
    }

   }
  },
  methods:{
   // 发送验证码
   sendCode(opt){
    this.$emit('sendCode',opt)
   },
   // 点击取消按钮时触发
   cancel(){
    this.$emit('cancel')
   },
   // 点击确定按钮时触发
   determine(resf){

    this.$refs[resf].validate((valid) => {
     if (valid) {
      this.$emit('determine',resf)
     } else {
      console.log('error submit!!');
      return false;
     }
    });

   },
  }
 }
</script>

子组件逻辑部分如下(code部分是很基础的)

<style scoped lang="scss">
 .forget{
  /deep/ .el-dialog__wrapper{
   .el-dialog{
    max-width: 500px;
    .el-dialog__header{
     text-align: center;
    }
   }
   .demo-ruleForm{
    .el-form-item__content{
     max-width:100%
    }
   }
   .el-dialog__body{
    .el-form-item{
     text-align: center;
    }
   }
  }
  .send-code{
   display: flex;flex: 1;justify-content: space-evenly;
   /deep/ .el-input{
    margin-right: 12px
   }
   /deep/ .el-link{
    white-space: nowrap;
    display: inline-block;
    line-height: 1;
    cursor: pointer;
    background: #fff;
    border: 1px solid #dcdfe6;
    color: #606266;
    -webkit-appearance: none;
    text-align: center;
    box-sizing: border-box;
    outline: none;
    margin: 0;
    transition: .1s;
    font-weight: 500;
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    padding: 12px 10px;
    font-size: 14px;
    border-radius: 4px;
   }
  }
  .dialog-footer{
   display: flex;
   flex: 1;
   justify-content: center;
   /deep/ .el-button{
    flex: 0 0 40%;
   }
  }
 }
</style>

父组件中的模板部分

<template>  <forget :dialog="dialog"@cancel="dialog.visible= false" @determine="determine" @sendCode="sendCode"></forget>
</template>

为什么需要使用set这个api方法呢

如下截图

可以学习下这个链接的使用set的例子

全局变量globals.js文件

[vue-set]的文档( cn.vuejs.org/v2/api/#Vue… )

说明(*****向响应式对象中添加一个属性,并确保这个新属性同样是响应式的,且触发视图更新。)

export default {
 //判断是否点击了
 isChick(data,key='disabled',count=0){
  data[key] =true
  if(count<=0){
   data[key] =false
  }
 },
 //此处是重点 使用的vue官网给的api方法
 [vue-set](https://cn.vuejs.org/v2/api/#Vue-set)
 sendCode(self,name,k,v){
  self.$set(name,k,v)
 }
}

父组件中的逻辑部分

<script>
 export default {
  data() {
   return {
   // 显示子组件修改密码的对象变量
      dialog: {
     visible: false, //是否显示
     ruleForms: 'ruleForms', //点击按钮后,需要操作的refs(也就是dom元素)
     ruleForm: { //所需要进行在表单中操作的部分
      phone: '',
      newPwd: '',
      code: '',
      sendCode: '发送验证码',
      disabled: false,
      isChick:false,
      loading: false,
      loadingText: '确 定'
     },

    },
    //倒计时60秒
     timeCount:60
   }

  },
  methods:{
   //重点部分
   sendCode60s(self,opt){
    let count=self.timeCount;
    const ruleForm = self[opt.dialog][opt.ruleForm]
    self.timer = setInterval(()=>{
     //这个按钮是
     self.$globals.isChick(ruleForm,'disabled',count)
     let code = count<10?`0${count}s后重新发送`: `${count}s后重新发送`
     self.$globals.sendCode(self,ruleForm,opt.sendCode,code)
     self.$globals.isChick(ruleForm,'isChick',count)
     if(count<=0){
      ruleForm.disabled = false
      self.$globals.isChick(ruleForm,'disabled')
      code = '发送验证码'
      clearInterval(self.timer)
      count =self.timeCount
      self.$globals.sendCode(self,ruleForm,opt.sendCode,code)
      self.$globals.isChick(ruleForm,'isChick')
     }
     count --
    },1000)

   },
   //发送验证码sendCode
   sendCode(opt){
    const phone = opt.phone
    //判断手机号码第1位是否是数字1开头
    if(phone.slice(0,1)!=='1'){
     this.$message({
      showClose: true,
      message: '请输入正确的手机号码',
      type: 'error'
     });
     return
    }
    this.$confirm(`向${phone}发送短信验证码?`, '提示', {
     confirmButtonText: '确定',
     cancelButtonText: '取消',
     type: 'warning'
    }).then(() => {
     this.$message({
      type: 'success',
      message: '发送短信验证码成功!'
     });
     const opt ={
      dialog: 'dialog',
      ruleForm: 'ruleForm',
      sendCode:'sendCode'
     }
     this.sendCode60s(this,opt)
    }).catch(() => {
     this.$message({
      type: 'info',
      message: '发送短信验证码失败'
     });
    });
   },
   //新的密码
   determine(formName){
    console.log(formName)
    // this.$refs[formName].validate((valid) => {
    //  if (valid) {
    //   this.dialog.ruleForm.loading = true
    //   this.dialog.ruleForm.loadingText ='发送中...'
    //  } else {
    //   return false;
    //  }
    // });
   },

  }
 }
</script>

总结

以上所述是小编给大家介绍的vue2之简易的pc端短信验证码的问题及处理方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

(0)

相关推荐

  • 简单实现vue验证码60秒倒计时功能

    本文实例为大家分享了vue验证码倒计时60秒的具体代码,供大家参考,具体内容如下 html <span v-show="show" @click="getCode">获取验证码</span> <span v-show="!show" class="count">{{count}} s</span> js data(){ return { show: true, count: ''

  • Vue中添加手机验证码组件功能操作方法

    什么是组件: 组件是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义的元素,Vue.js的编译器为它添加特殊功能.在有些情况下,组件也可以是原生HTML元素的形式,以is特性扩展. 写在前面: 今天要实现的功能是在 完善个人信息页面(vue)中添加手机验证码组件,当用户点击 手机选项时,弹出获取验证码组件,完成验证手机的功能: 这里考虑到功能的复用,我把当前弹出手机验证码的操作放在了单独的组件中: <template > <div>

  • Vue 短信验证码组件开发详解

    Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的库.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue.js 自身不是一个全能框架--它只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.另一方面,在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动复杂的单页应用. 摘要: 1.该组件基于Vue 2.1.X版本: 1. Vue 组件代码如下: Vue.component('timerBtn

  • vue实现验证码按钮倒计时功能

    本人最近开始尝试学习vue.js.想使用vue写一个小例子,就选择做验证码按钮倒计时功能. 上网上搜了一下,也把他们的代码试了一下,自己出了很多问题.所以,需要写一篇基础入门的文章,避免后面人采坑. 这是按照网上写的HTML页面 <div class="register-pannel" id ="register-pannel"> <div class="register-l" align="center"&

  • vue实现验证码输入框组件

    先来看波完成效果图 需求 输入4位或6位短信验证码,输入完成后收起键盘 实现步骤 第一步 布局排版 <div class="security-code-wrap"> <label for="code"> <ul class="security-code-container"> <li class="field-wrap" v-for="(item, index) in num

  • vue中手机号,邮箱正则验证以及60s发送验证码的实例

    今天写了一个简单的验证,本来前面用的组件,但是感觉写的组件在此项目不是很好用,由于用到的地方比较少,所以直接写在了页面中. <div> <p class="fl"> <input name="phone" type="number" placeholder="手机号" v-model="phone"/> <button type="button"

  • vue 实现通过手机发送短信验证码注册功能

    效果如下: 代码如下: template代码: <el-main> <el-form :model="ReginForm" ref="ReginForm" :rules="rule" class="regform" label-width="0"> <h3 class="login-text">手机注册</h3> <el-form-i

  • vue生成随机验证码的示例代码

    本文介绍了vue生成随机验证码的示例代码,分享给大家,具体如下: 样式自调,最终效果如图: 实现效果: 点击右边input框会自动切换,如果输入的值与字不同,则清空换一串随机数 HTML <input type="text" placeholder="请输入验证码" class="yanzhengma_input" @blur="checkLpicma" v-model="picLyanzhengma"

  • 在Vue项目中引入腾讯验证码服务的教程

    什么是腾讯验证码?它长这个样子--:point_down: 最近公司项目要求引入腾讯云验证,要求是这样的: 为了防止别人恶意刷短信验证码,当用户短时间内多次获取验证码的时候,需要调用腾讯验证码,验证成功后会继续自动发送验证码 ,刚开始的我听的一脸蒙蔽,网上搜索也没有多少相关的文章,然而现在我接通啦,发现是很简单点事(或许就是因为太简单了所以没有人写2333-) 不多BB,开始吧! 先看文档的接口调用流程: (文档地址: cloud.tencent.com/document/pr- ) 总共分成几

  • vue2之简易的pc端短信验证码的问题及处理方法

    <提示语部分不要在意(非重点部分)> 简单说下布局(采用的是 vue的element ui的ui框架 )进行布局操作的 子组件模板部分如下(code部分是很基础的) <template> <div class="forget"> <el-dialog title="修改新密码" :visible.sync="dialog.visible" :close-on-click-modal="false

  • Vue.js实现移动端短信验证码功能

    现在的短信验证码一般为4位或6位,则页面中会相应的显示4个或6个文本框,如图所示 当点击注册进入到输入验证码页面的时候,第一个框自动获取光标,依次输入,不可直接输入第三个或第四个框的值, input输入框是循环出来的,代码如下: <div class="sms_input"> <div v-for="n in sms.numbers-1"><input v-if="sms.show[n-1]" disabled=&q

  • vue实现短信验证码登录功能(流程详解)

    无论是移动端还是pc端登录或者注册界面都会见到手机验证码登录这个功能,输入手机号,得到验证码,最后先服务器发送请求,保存登录的信息,一个必不可少的功能 思路 1,先判断手机号和验证是否为空, 2,点击发送验证码,得到验证码 3,输入的验证码是否为空和是否正确, 4,最后向服务发送请求 界面展示 1.准备工作 这个会对input进行封装处理 <template> <div class="text_group"> <div class="input_

  • Android注册登录实时自动获取短信验证码

    android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码. 主要就是实时获取短信信息. android上获取短信信息主要有BroadcastReceiver方式与数据库方式,要实时的话就BroadcastReceiver比较方便,分享一篇文章大家可以查看一下,点击. public class SMSReceiver extends BroadcastReceiver{ private String ver

  • nodejs接入阿里大鱼短信验证码的方法

    之前做过nodejs接入阿里大鱼短信验证码的方法,最近需要回顾,就顺便发到随笔上了 1. 阿里云上申请accessKey 如果已经申请过了,则可以直接使用.否则,首先点击右上角个人信息下拉菜单中的accessKeys进行申请. 2. 阿里云上开通短信服务 阿里大于的短信验证码服务已经并入阿里云中,通过阿里云的控制台->产品与服务->短信服务(在D字头中)进入. 按照阿里云提示的步骤操作,申请短信签名和短信模板,等待审核通过.记录下模板的id. 3. 使用apis-aliyun发送验证码 ```

  • IOS开发中如何设计短信验证码防刷机制

    最近遇到一个关于防止短信验证码被刷的产品设计问题,后来在面试一个前来应聘JAVA开发的程序员的时候,他也提到了他以前公司的系统也遭遇过这个被刷短信的问题.因此,就"如何设计短信验证码防刷机制"作一个总结和分享. 1.时间限制:60秒后才能再次发送 从发送验证码开始,前端(客户端)会进行一个60秒的倒数,在这一分钟之内,用户是无法提交多次发送信息的请求的.这种方法虽然使用得比较普遍,但是却不是非常有用,技术稍微好点的人完全可以绕过这个限制,直接发送短信验证码. 2.手机号限制:同一个手机

  • java短信验证码获取次数限制实例

    现在不管什么项目,用到短信验证功能,都会在程序上设计一个短信验证码的获取次数限制,这样主要是避免短信验证码接口被刷. 前一段正好做一个项目的用户短信验证码登录功能,就研究了以下,下面贴出来分享一下. 这里涉及到的短信接口,用的第三方短信接口-动力思维思维乐信的(http://www.lx598.com/),如果想了解短信接口接入,可以到他们官网,查看下短信接口API文档说明,参考下面的代码应该就能弄明白. 用户注册部分,主要代码如下: //主要js方法: //获取手机验证码: function

  • Flask项目中实现短信验证码和邮箱验证码功能

    Flask是一个用Python编写的Web应用程序框架,Flask是python的web框架,最大的特征是轻便,让开发者自由灵活的兼容要开发的feature. 它由 Armin Ronacher 开发,他领导一个名为Pocco的国际Python爱好者团队. Flask基于Werkzeug WSGI工具包和Jinja2模板引擎.两者都是Pocco项目. 这篇文章给大家介绍Flask项目中实现短信验证码和邮箱验证码功能,具体内容如下所示: 一.发送邮箱验证码 1.使用QQ邮箱发送验证码 ①配置 开启

  • java 随机生成6位短信验证码实例代码

    生成6位随机数字其实很简单,只需一行代码,具体如下: String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000); 具体实现发送短信验证码功能,以注册为例,其实现代码如下: 这里需要用到第三方短信验证码接口,这里用到的是乐信短信验证码接口,乐信接口API文档说明(http://www.lx598.com/apitext.html),乐信java调用短信验证码接口 demo(http://www.lx598.c

  • 基于 antd pro 的短信验证码登录功能(流程分析)

    概要 最近使用 antd pro 开发项目时遇到个新的需求, 就是在登录界面通过短信验证码来登录, 不使用之前的用户名密码之类登录方式. 这种方式虽然增加了额外的短信费用, 但是对于安全性确实提高了不少. antd 中并没有自带能够倒计时的按钮, 但是 antd pro 的 ProForm components 中倒是提供了针对短信验证码相关的组件. 组件说明可参见: https://procomponents.ant.design/components/form 整体流程 通过短信验证码登录的

随机推荐