vue + element 实现登录注册(自定义表单验证规则)
注册页包含手机验证码登录和密码的二次验证。
效果如下:

实现代码:
<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 实现登录注册(自定义表单验证规则)的更多相关文章
- jquery.validate.js使用之自定义表单验证规则
jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...
- jquery.validate.js之自定义表单验证规则
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- Vue项目之实现登录功能的表单验证!
Vue项目之实现登录功能的表单验证! 步骤: 配置 Form表单验证; 1.必须给el-from组件绑定model 为表单数据对象 2 给需要验证的表单项 el-form-item 绑定 prop 属 ...
- Angular5+ 自定义表单验证器
Angular5+ 自定义表单验证器 Custom Validators 标签(空格分隔): Angular 首先阐述一下遇到的问题: 怎样实现"再次输入密码"的验证(两个cont ...
- layui 自定义表单验证的几个实例
*注:使用本方法请先引入layui依赖的layu.js和layui.css 1.html <input type="text" name="costbudget&q ...
- Angular自定义表单验证
前端表单验证 为年龄输入框添加了两个验证,并分情况填写了提示语 <form nz-form [formGroup]="validateForm"> <nz-for ...
- angular4 自定义表单验证Validator
表单的验证条件有时候满足不了需求就可以自定义验证 唯一要求返回是ValidatorFn export interface ValidatorFn{ (c:AbstractControl):Valida ...
- 在AngularJS中实现自定义表单验证
除了一些已经定义好了的验证(例如 必填项.最小长度.最大长度)之外,更常用的,还是需要我们自己定义表单验证,这样才能对于项目中遇到的很多非常规问题给出自己的合适的解决方案. 在表单中控制变量 表单的属 ...
- element自定义表单验证
element-ui框架下修改密码弹窗进行表单验证. 除了基础校验,密码不为空,长度不小于6字符,需求中还需校验密码由数字和字母组合. 处理代码如下: <el-dialog :visible.s ...
随机推荐
- web测试之界面测试
所谓界面测试就是指,布局是否合理.整体风格是否一致.各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性.导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观 ...
- 2.网络编程-udp
# 使用套接字发送udp数据import socket s = socket.socket(socket.AF_INET, SOCK_DGRAM) s.sendto(b"hello" ...
- [20171110]sql语句相同sql_id可以不同吗.txt
[20171110]sql语句相同sql_id可以不同吗.txt --//提一个问题,就是sql语句相同sql_id可以不同吗?--//使用dbms_shared_pool.markhot就可以做到. ...
- 关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中
select '['+title_a+','+title_b +']' from A for xml path('') SELECT *, (select '['+title_a+','+titl ...
- 转:npm安装教程
一.使用之前,我们先来掌握3个东西是用来干什么的. npm: Nodejs下的包管理器. webpack: 它主要的用途是通过CommonJS的语法把所有浏览器端需要发布的静态资源做相应的准备,比如资 ...
- Linux 小知识翻译 - 「Unix」和「兼容Unix的OS」
经常有人会问「Linux和Unix有什么区别?」,「Linux就是Unix吗?」. 回答一般都是「Linux是仿照Unix而开发的OS」,「Linux和Unix相似但不是一种OS」之类的. 关于「Li ...
- February 1st, 2018 Week 5th Thursday
The world is a fine place, and worth fighting for. 这世界是个好地方,值得为之奋斗. The world is beautiful, there ar ...
- January 29th, 2018 Week 05th Monday
Losing all hope was freedom. 彻底绝望就是真正的自由. Losing all the hopes, and we are free to challenge everyth ...
- Tensorflow基本概念
[本文摘自网络,仅供学习使用] 官网上对TensorFlow的介绍是,一个使用数据流图(data flow graphs)技术来进行数值计算的开源软件库.数据流图中的节点,代表数值运算:节点节点之间的 ...
- P2665 [USACO08FEB]连线游戏Game of Lines
本着dp的心情,结果是道水题STL set就行了 题意:看有多少种斜率(题在那里半天说多少直线(不平行的)),其实就是找斜率的种类 #include<cstdio> #include&l ...