注册页包含手机验证码登录和密码的二次验证。

效果如下:

实现代码:

<template>
<div>
<div class="register-wrapper">
<div id="register">
<p class="title">注册</p>
<el-form
:model="ruleForm2"
status-icon
:rules="rules2"
ref="ruleForm2"
label-width="0"
class="demo-ruleForm"
>
<el-form-item prop="tel">
<el-input v-model="ruleForm2.tel" auto-complete="off" placeholder="请输入手机号"></el-input>
</el-form-item>
<el-form-item prop="smscode" class="code">
<el-input v-model="ruleForm2.smscode" placeholder="验证码"></el-input>
<el-button type="primary" :disabled='isDisabled' @click="sendCode">{{buttonText}}</el-button>
</el-form-item>
<el-form-item prop="pass">
<el-input type="password" v-model="ruleForm2.pass" auto-complete="off" placeholder="输入密码"></el-input>
</el-form-item>
<el-form-item prop="checkPass">
<el-input type="password" v-model="ruleForm2.checkPass" auto-complete="off" placeholder="确认密码"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('ruleForm2')" style="width:100%;">注册</el-button>
<p class="login" @click="gotoLogin">已有账号?立即登录</p>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
export default {
name: "Register",
data() {
// <!--验证手机号是否合法-->
let checkTel = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入手机号码'))
} else if (!this.checkMobile(value)) {
callback(new Error('手机号码不合法'))
} else {
callback()
}
}
// <!--验证码是否为空-->
let checkSmscode = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入手机验证码'))
} else {
callback()
}
}
// <!--验证密码-->
let validatePass = (rule, value, callback) => {
if (value === "") {
callback(new Error("请输入密码"))
} else {
if (this.ruleForm2.checkPass !== "") {
this.$refs.ruleForm2.validateField("checkPass");
}
callback()
}
}
// <!--二次验证密码-->
let validatePass2 = (rule, value, callback) => {
if (value === "") {
callback(new Error("请再次输入密码"));
} else if (value !== this.ruleForm2.pass) {
callback(new Error("两次输入密码不一致!"));
} else {
callback();
}
};
return {
ruleForm2: {
pass: "",
checkPass: "",
tel: "",
smscode: ""
},
rules2: {
pass: [{ validator: validatePass, trigger: 'change' }],
checkPass: [{ validator: validatePass2, trigger: 'change' }],
tel: [{ validator: checkTel, trigger: 'change' }],
smscode: [{ validator: checkSmscode, trigger: 'change' }],
},
buttonText: '发送验证码',
isDisabled: false, // 是否禁止点击发送验证码按钮
flag: true
}
},
methods: {
// <!--发送验证码-->
sendCode () {
let tel = this.ruleForm2.tel
if (this.checkMobile(tel)) {
console.log(tel)
let time = 60
this.buttonText = '已发送'
this.isDisabled = true
if (this.flag) {
this.flag = false;
let timer = setInterval(() => {
time--;
this.buttonText = time + ' 秒'
if (time === 0) {
clearInterval(timer);
this.buttonText = '重新获取'
this.isDisabled = false
this.flag = true;
}
}, 1000)
}
}
},
// <!--提交注册-->
submitForm(formName) {
this.$refs[formName].validate(valid => {
if (valid) {
setTimeout(() => {
alert('注册成功')
}, 400);
} else {
console.log("error submit!!");
return false;
}
})
},
// <!--进入登录页-->
gotoLogin() {
this.$router.push({
path: "/login"
});
},
// 验证手机号
checkMobile(str) {
let re = /^1\d{10}$/
if (re.test(str)) {
return true;
} else {
return false;
}
}
}
};
</script> <style scoped>
.loading-wrapper {
position: fixed;
top: 0;
right: 0;
left: 0;
bottom: 0;
background: #aedff8;
display: flex;
align-items: center;
justify-content: center;
}
.register-wrapper img {
position: absolute;
z-index: 1;
}
.register-wrapper {
position: fixed;
top: 0;
right: 0;
left: 0;
bottom: 0;
}
#register {
max-width: 340px;
margin: 60px auto;
background: #fff;
padding: 20px 40px;
border-radius: 10px;
position: relative;
z-index: 9;
}
.title {
font-size: 26px;
line-height: 50px;
font-weight: bold;
margin: 10px;
text-align: center;
}
.el-form-item {
text-align: center;
}
.login {
margin-top: 10px;
font-size: 14px;
line-height: 22px;
color: #1ab2ff;
cursor: pointer;
text-align: left;
text-indent: 8px;
width: 160px;
}
.login:hover {
color: #2c2fd6;
}
.code >>> .el-form-item__content {
display: flex;
align-items: center;
justify-content: space-between;
}
.code button {
margin-left: 20px;
width: 140px;
text-align: center;
}
.el-button--primary:focus {
background: #409EFF;
border-color: #409EFF;
color: #fff;
}
</style>

vue + element 实现登录注册(自定义表单验证规则)的更多相关文章

  1. jquery.validate.js使用之自定义表单验证规则

    jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...

  2. jquery.validate.js之自定义表单验证规则

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  3. Vue项目之实现登录功能的表单验证!

    Vue项目之实现登录功能的表单验证! 步骤: 配置 Form表单验证; 1.必须给el-from组件绑定model 为表单数据对象 2 给需要验证的表单项 el-form-item 绑定 prop 属 ...

  4. Angular5+ 自定义表单验证器

    Angular5+ 自定义表单验证器 Custom Validators 标签(空格分隔): Angular 首先阐述一下遇到的问题: 怎样实现"再次输入密码"的验证(两个cont ...

  5. layui 自定义表单验证的几个实例

    *注:使用本方法请先引入layui依赖的layu.js和layui.css 1.html <input type="text" name="costbudget&q ...

  6. Angular自定义表单验证

    前端表单验证 为年龄输入框添加了两个验证,并分情况填写了提示语 <form nz-form [formGroup]="validateForm"> <nz-for ...

  7. angular4 自定义表单验证Validator

    表单的验证条件有时候满足不了需求就可以自定义验证 唯一要求返回是ValidatorFn export interface ValidatorFn{ (c:AbstractControl):Valida ...

  8. 在AngularJS中实现自定义表单验证

    除了一些已经定义好了的验证(例如 必填项.最小长度.最大长度)之外,更常用的,还是需要我们自己定义表单验证,这样才能对于项目中遇到的很多非常规问题给出自己的合适的解决方案. 在表单中控制变量 表单的属 ...

  9. element自定义表单验证

    element-ui框架下修改密码弹窗进行表单验证. 除了基础校验,密码不为空,长度不小于6字符,需求中还需校验密码由数字和字母组合. 处理代码如下: <el-dialog :visible.s ...

随机推荐

  1. [Hadoop] Windows 下的 Hadoop 2.7.5 环境搭建

    原文地址:https://www.cnblogs.com/memento/p/9148721.html 准备说明: jdk:jdk-8u161-windows-x64.exe hadoop:hadoo ...

  2. linux 下的ssh

    ssh服务 1.检查是否有被安装,命令 rpm -qa|grep "ssh" 2.检查ssh有没有在运行,命令 rpm -qa|grep "ssh" 3.如何启 ...

  3. [20171120]关于find 软连接问题.txt

    [20171120]关于find 软连接问题.txt --//上个星期为了测试oracle参数filesystemio_options,将数据库做了一次移动.但是我使用find对软链接目录查询时--/ ...

  4. The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured

    springboot 8080端口被占用报错:The Tomcat connector configured to listen on port 8080 failed to start. The p ...

  5. vue中对axios进行封装

    在刚结束的项目中对axios进行了实践(好不容易碰上一个不是jsonp的项目), 以下为在项目中对axios的封装,仅封装了post方法,因为项目中只用到了post,如有需要请自行进行修改 src/c ...

  6. Linux下内存查看命令

    在Linux下面,我们常用top命令来查看系统进程,top也能显示系统内存.我们常用的Linux下查看内容的专用工具是free命令. Linux下内存查看命令free详解: 在Linux下查看内存我们 ...

  7. Spring MVC 的工作原理

    引自:https://www.cnblogs.com/xiaoxi/p/6164383.html SpringMVC的工作原理图: SpringMVC流程 1.  用户发送请求至前端控制器Dispat ...

  8. zabbix监控磁盘IO

    我这里有两种方法,感觉都不错.我这里主要是写一下监控的脚本. 1.使用iostat命令监控 1)首先打开配置文件的自定义脚本功能,然后编写脚本. #!/bin/bash ];then echo &qu ...

  9. [转]mysql和redis的区别

    转自https://www.cnblogs.com/zxh1297/p/9394108.html 1.mysql和redis的数据库类型 mysql是关系型数据库,主要用于存放持久化数据,将数据存储在 ...

  10. Django复习之ORM

    QuerySet数据类型:                        1.可切片,可迭代      [obj,....]                    2.惰性查询:            ...