【手机号验证/前端】Vue2+elementUI编写一个手机号验证码登录页面,路由式开发(附完整代码)

article/2025/10/13 1:10:47

目录

效果图:

一、template部分

二、style样式

三、script部分

1.先对手机号的格式进行一个判断

2.接下来就是表单验证规则rules

3.最后就是methods了

(1)首先我们给获取验证码绑定一个方法

(2)然后封装一个axios接口,方便后面测试联调(这部分每个人封装的都不一样)

(3)然后是倒计时的方法

(4)最后的登录按钮

四、完整代码


效果图:

一、template部分

这里不是重点,自行对照,并不需要与之完全相同

<div><el-formref="form"label-width="70px":inline="true"class="login-container":model="form":rules="rules"><h3 class="login_title"> 手 机 验 证 登 录 </h3><el-form-itemlabel="手机号"prop="CellPhone"ref="phone"><el-input v-model="form.CellPhone" placeholder="请输入手机号"><el-select placeholder="+86"></el-select></el-input></el-form-item><el-form-itemlabel="验证码"prop="VerificationCode"><el-input v-model="form.VerificationCode" placeholder="请输入验证码"><el-button slot="suffix" :disabled="disabled" @click="getCode"><span class="Time">{{btnTxt}}</span></el-button></el-input></el-form-item><el-form-item><el-button @click="submit" class="login_button" type="primary"> 登 录 </el-button></el-form-item></el-form></div>

二、style样式

样式我是用less写的,编写之前需要安装lessless-loader

npm i less
npm i less-loader

值得注意的是,要注意版本,太新或者太久都可能导致无法运行

剩下的就是样式了:

<style lang="less" scoped>
.login-container {width: 450px;border:1px solid #eaeaea;margin: 180px auto;padding: 35px 35px 15px 35px;border-radius: 15px;box-shadow: 0 0 25px #cac6c6;background-color: #ffffff;box-sizing: border-box;//修改element的样式的方法有多种,/deep/只是其中一种/deep/ .el-input__inner {width: 120%;border: 0px;border-bottom: 1px solid;}.el-button {border: 0px;margin: -80px;.span {margin-left: 50px;}}.login_title {text-align: center;margin-bottom: 40px;color: #505458;}.el-input {width: 198px;}.login_button {margin-left: 105px;margin-top: 10px;}.time {width: 50px;}
}</style>

样式里有的一行代码能写完的东西用了多行,可自行修改(别问我为什么不改

三、script部分

1.先对手机号的格式进行一个判断

const validatePhone = (rule, value, callback) => {// console.log(rule)// console.log(value)// console.log(callback)// 判断输入框中是否输入手机号if (!value) {callback(new Error('手机号不能为空'))}//正则表达式进行验证手机号,从1开始,第二位是35789中的任意一位,以9数字结尾if (!/^1[35789]\d{9}$/.test(value)) {callback(new Error('手机号格式不正确'))}callback()}

2.接下来就是表单验证规则rules

rules: {CellPhone: [{ required: true, trigger: 'blur', message: '请输入11位手机号'},{ required: true, trigger: 'blur', min: 11, max: 11, message: '长度不符合'},{ required: true, trigger: 'blur', validator: validatePhone}],VerificationCode: [{ required: true, trigger: 'blur', message: '请输入4位验证码'},{ required: true, trigger: 'blur', min: 6, max: 6,message: '验证码错误'}],}
required是否必填,如不设置,则会根据校验规则自动生成booleanfalse
trigger触发方式Stringclick/focus/hover/manualclick
blur在 Input 失去焦点时触发(event: Event)
validate对整个表单进行校验的方法,参数为一个回调函数。该回调函数会在校验结束后被调用,并传入两个参数:是否校验成功和未通过校验的字段。若不传入回调函数,则会返回一个 promiseFunction(callback: Function(boolean, object))

3.最后就是methods了

(1)首先我们给获取验证码绑定一个方法

//获取手机验证码方法getCode() {// 校验手机号码if (!this.form.CellPhone) {//号码校验不通过this.$message({message: '请输入手机号',type:'warning',});//正则判断 从1开始,第二位是35789中的任意一位,以9数字结尾} else if (!/1[35789]\d{9}/.test(this.form.CellPhone)) {// 失去焦点后自动触发校验手机号规则} else {this.time = 60;this.disabled = true;//调用倒计时方法this.timer();}
}

(2)然后封装一个axios接口,方便后面测试联调(这部分每个人封装的都不一样)

GetPhone({CellPhone: this.form.CellPhone,}) .then(({data}) => {if (data.code === 200) {this.$message({message: '验证成功',type: 'success',})} else {this.$message({message: '发送失败',type: 'warning',})}})

(3)然后是倒计时的方法

timer() {if (this.time > 0) {this.time--;// console.log(this.time);this.btnTxt = this.time + "s后重新获取验证码";setTimeout(this.timer, 1000);} else {this.time = 0;this.btnTxt = "获取验证码";this.disabled = false;}},

(4)最后的登录按钮

submit() {this.getCode(({data}) => {if (data.code === 200) {this.$router.push('/')} else {this.$message.error(data.data.rules.message)}})}

四、完整代码

<template><div><el-formref="form"label-width="70px":inline="true"class="login-container":model="form":rules="rules"><h3 class="login_title"> 手 机 验 证 登 录 </h3><el-form-itemlabel="手机号"prop="CellPhone"ref="phone"><el-input v-model="form.CellPhone" placeholder="请输入手机号"><el-select placeholder="+86"></el-select></el-input></el-form-item><el-form-itemlabel="验证码"prop="VerificationCode"><el-input v-model="form.VerificationCode" placeholder="请输入验证码"><el-button slot="suffix" :disabled="disabled" @click="getCode"><span class="Time">{{btnTxt}}</span></el-button></el-input></el-form-item><el-form-item><el-button @click="submit" class="login_button" type="primary"> 登 录 </el-button></el-form-item></el-form></div>
</template><script>
import {GetPhone} from "@/Api/api";export default {name: "AppPhone",data() {const validatePhone = (rule, value, callback) => {// console.log(rule)// console.log(value)// console.log(callback)// 判断输入框中是否输入手机号if (!value) {callback(new Error('手机号不能为空'))}//正则表达式进行验证手机号,从1开始,第二位是35789中的任意一位,以9数字结尾if (!/^1[35789]\d{9}$/.test(value)) {callback(new Error('手机号格式不正确'))}callback()}return {btnTxt: "获取验证码",// 是否禁用  即点击之后一段时间内无法再点击disabled: false,time: 0,form: {CellPhone: '',VerificationCode: '',},rules: {CellPhone: [{ required: true, trigger: 'blur', message: '请输入11位手机号'},{ required: true, trigger: 'blur', min: 11, max: 11, message: '长度不符合'},{ required: true, trigger: 'blur', validator: validatePhone}],VerificationCode: [{ required: true, trigger: 'blur', message: '请输入4位验证码'},{ required: true, trigger: 'blur', min: 6, max: 6,message: '验证码错误'}],}}},methods: {//获取手机验证码方法getCode() {// 校验手机号码if (!this.form.CellPhone) {//号码校验不通过this.$message({message: '请输入手机号',type:'warning',});//正则判断 从1开始,第二位是35789中的任意一位,以9数字结尾} else if (!/1[35789]\d{9}/.test(this.form.CellPhone)) {// 失去焦点后自动触发校验手机号规则} else {this.time = 60;this.disabled = true;//调用倒计时方法this.timer();// 封装的axios接口GetPhone({CellPhone: this.form.CellPhone,}) .then(({data}) => {if (data.code === 200) {this.$message({message: '验证成功',type: 'success',})} else {this.$message({message: '发送失败',type: 'warning',})}})}},// 倒计时方法timer() {if (this.time > 0) {this.time--;// console.log(this.time);this.btnTxt = this.time + "s后重新获取验证码";setTimeout(this.timer, 1000);} else {this.time = 0;this.btnTxt = "获取验证码";this.disabled = false;}},// 提交按钮submit() {this.getCode(({data}) => {if (data.code === 200) {this.$router.push('/')} else {this.$message.error(data.data.rules.message)}})}}
}
</script><style lang="less" scoped>
.login-container {width: 450px;border:1px solid #eaeaea;margin: 180px auto;padding: 35px 35px 15px 35px;border-radius: 15px;box-shadow: 0 0 25px #cac6c6;background-color: #ffffff;box-sizing: border-box;/deep/ .el-input__inner {width: 120%;border: 0px;border-bottom: 1px solid;}.el-button {border: 0px;margin: -80px;.span {margin-left: 50px;}}.login_title {text-align: center;margin-bottom: 40px;color: #505458;}.el-input {width: 198px;}.login_button {margin-left: 105px;margin-top: 10px;}.time {width: 50px;}
}</style>

 若有不足或错误之处,欢迎指点


http://chatgpt.dhexx.cn/article/aIMWBCx4.shtml

相关文章

浅谈手机验证码登录

注册和登录&#xff0c;是互联网产品的最基本功能&#xff0c;这里涉及到很多安全问题和用户便捷问题。今天&#xff0c;我们来简要聊一下手机验证码登录。 在之前的文章中&#xff0c;我们聊了注册登录原理及密码安全问题&#xff0c;这种方式是基于账号密码登录的。 然而&…

2022.9.13 手机验证码登录功能

总结一下今天在项目中完成的功能 手机验证码登录功能 用到的前端技术&#xff1a;vue、vuex、axios&#xff0c;element-ui组件库 功能实现总体思路&#xff1a; 一. 用户在登录界面输入手机号&#xff0c;通过表单验证后&#xff0c;点击按钮获取验证码 二. 用户输入手机验证…

【从零开始分析项目实战】12-阿里云手机验证码登录功能的实现

注&#xff1a;本文章基于黑马程序员相关视频及资料进行编写&#xff0c;代码简单&#xff0c;较容易理解&#xff0c;若有问题或者源码资料获取可以在评论区留言或者联系作者&#xff01; 文章目录 开篇一、短信发送&#xff08;1&#xff09;短信服务介绍&#xff08;2&#…

手机验证码登录

手机验证码登录 符号说明&#xff1a; []&#xff1a;表示可选或某些条件下流程。 需求说明&#xff1a; 用户可在登录页面使用手机验证码登录&#xff0c;若该手机号未绑定则输入验证码后还需输入用户账号密码进行绑定&#xff0c;绑定后则成功使用验证码登录。 用户可在…

登录模块(手机验证码)

本人为实习生,第一次写博客,写的不好的大家多多谅解 应公司近期需求,需要单独开发一个后台管理系统。 自己按实际业务写了一个登录接口已经实现,时序图如下 源码牵扯业务量太大,这里只放出部分关键实现源码,整合思路可以配合时序图去理解。 Controller层 package com…

java十大排序算法

十大排序算法在面试java过程中想必或多或少都会有。尤其是在笔试题上&#xff0c;有些大厂就让你现场写个十大排序。是不是一下子整懵了。。。 目录 一、首先先介绍下十大排序算法&#xff1a; 1、算法分类 2 、算法复杂度 3、 相关概念 二、详细分析各个算法 1、冒泡排…

Go语言十大排序算法

文章目录 Go语言十大排序算法0x01 冒泡排序0x02 选择排序0x03 插入排序0x04 希尔排序0x05 归并排序0x06 快速排序0x07 堆排序0x08 计数排序0x09 桶排序0x10 基数排序总结按时间复杂度分类&#xff1a;按稳定性分类按排序方式 Go语言十大排序算法 稳定&#xff1a;如果a原本在b前…

排序算法——十大排序算法总结与对比

一、十大排序算法复杂度对比 二、关于排序算法的总结 1、基数排序仅仅适用于整型数的排序&#xff0c;一般不与另外的排序方法一起比较。 2、关于算法的稳定性&#xff1a;不稳定的算法有 “快希选堆”——快速排序&#xff0c;希尔排序&#xff0c;选择排序和堆排序。 3、关…

十大排序算法(面试必备)

目录 简单排序 1、冒泡排序 2、选择排序 3、插入排序 高级排序 4、希尔排序&#xff08;缩小增量排序&#xff09; 5、归并排序 6、快速排序 7、计数排序 8、堆排序 9、桶排序 10、基数排序 总结&#xff1a; 1、十大排序算法对比 2、基数排序、计数排序、桶排序…

十大排序算法学习

Sort 排序类算法是非常常见的算法&#xff0c;包括了比较类排序与非比较类排序 排序能够解决很多问题&#xff0c;有的编程语言也提供了一些排序算法函数&#xff08;比如C的sort&#xff09;但是掌握基本的排序算法原理以及写法仍然是很重要的&#xff0c;并且排序也是面试常…

十大排序算法(Java)

目录 1.冒泡排序 2.快速排序 3.插入排序 4.希尔排序 5.选择排序 6.堆排序 7.归并排序 8.计数排序&#xff1a;速度快&#xff0c;一般用于整数排序 9.桶排序 10.基数排序 1.冒泡排序 冒泡排序思路&#xff1a;&#xff08;两层for循环&#xff09; 比较相邻的元素。…

十大排序算法(C++)

十大排序算法Sorting algorithm(C) 百度百科&#xff1a; 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。排序算法&#xff0c;就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地…

十大排序算法——C语言实现

1.冒泡排序 ​ 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换&#xff0c;也就是说该数…

Python实现十大排序算法

1.排序算法概述 非线性时间比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此称为非线性时间比较类排序。 线性时间非比较类排序&#xff1a;不通过比较来决定元素间的相对次序&#xff0c;它可以突破基于比…

Java实现十大排序算法

Java实现十大排序算法 十大排序算法分别为&#xff1a;选择排序、冒泡排序、插入排序、快速排序、归并排序、堆排序、希尔排序、桶排序、计数排序、基数排序。 本篇只是为了方便我在代码中直接复制调用&#xff0c;因此原理和思想解释的并不清楚&#xff0c;想看原理的朋友可…

十大排序算法(C++版)

十大排序算法 前言一、插入排序二、希尔排序三、冒泡排序四、快速排序五、选择排序六、归并排序七、堆排序八、计数排序九、桶排序十、基数排序总结 前言 什么是排序&#xff1f; 排序&#xff1a;将一组杂乱无章的数据按一定规律顺次排列起来。即&#xff0c;将无序序列排成一…

十大排序算法详解

十大排序算法详解 参考程序员必知必会的十大排序算法详解 引言 对于排序的分类&#xff0c;可以将排序算法分为两大类&#xff1a;基于比较和非比较的算法。 基于比较的排序算法可以细分为&#xff1a; 基于交换类&#xff1a;冒泡排序、快速排序基于插入类&#xff1a;直接插入…

JS 实现十大排序算法

文章目录 前言零、十大排序一、冒泡排序&#xff08;bubbleSort&#xff09;二、选择排序&#xff08;selectionSort&#xff09;三、插入排序&#xff08;insertSort&#xff09;四、希尔排序&#xff08;shellSort&#xff09;五、归并排序&#xff08;mergeSort&#xff09;…

十大经典排序算法Java版(动图演示)

文章目录 0 排序算法说明0.1 内部排序和外部排序0.2 比较类排序和非比较类排序0.3 关于时间复杂度0.4 关于稳定性0.5 名词解释&#xff1a; 1 交换排序——冒泡排序&#xff08;Bubble Sort&#xff09;1.1 什么时候最快1.2 什么时候最慢1.3 算法步骤1.4 动图演示1.5 Java实现 …

html之如何让button按钮居中

解决措施&#xff1a;使用center或者div的align属性 示例代码&#xff1a; <html> <body><center><button onClick"clickme()">hit me</button></center><script>function clickme(){alert("123");} </scr…