vee-validate校验demo

时间:2023-03-10 01:53:03
vee-validate校验demo
vee-validate校验demo

//太长了,把异步校验放到前面吧;

VeeValidate.Validator.extend('checkLoginName',{
getMessage:function () {
return "用户名已存在";
},
validate: value => {
//后台url
let havaurl = [[@{/user/checkLoginName}]]+'?loginName='+value,
val
const promise = new Promise(function(resolve, reject) {
$.get(havaurl,data=>{
console.log(data)
var boo=false;
if(data.code=='000'){
boo=false;
}else {
boo=true;
}
//此处data返回一个布尔值,false为已存在,true为不存在
resolve(boo)
})
})
//必须返回一个promise对象,否则报错
return promise.then((val)=>{
return !val //val值取反
})
}
});
<!DOCTYPE html>
<html xmlns:th="http://www.w3.org/1999/xhtml" xmlns:v-on="http://www.w3.org/1999/xhtml"
xmlns:v-bind="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<title>注册</title>
<div th:replace="head"></div>
<style>
img {
width: 5em;
}
/*校验样式*/
.is-danger {
border: 1px solid red;
}
.is-danger>span{
display: block;
}
.is-danger+span{
display: block;
}
</style>
</head>
<body>
<div id="form">
<div th:include="top :: html"></div>
<div class="register-box">
<div class="register-container">
<div class="register-choose-btn clear">
<div class="fl register-choose-person">
<span class="register-choose-person-blue" v-on:click="clickTitle(1)">个人</span>
</div>
<div class="fr register-choose-work">
<span class="register-choose-person-gray" v-on:click="clickTitle(2)">单位</span>
</div>
</div> <div class="register-person-container">
<!-- 单位 -->
<div class="register-work-container" v-show="workShow">
<div class="register-person-tatol clear">
<span class="fl register-person-cue">单位名称:</span>
<div class="fl register-person-input">
<input type="text" :class="{'is-danger': errors.has('unitName') }" v-validate="{required: workShow==true,unitName:workShow==true}" name="unitName" v-model="unitName" placeholder="请填写单位全称">
<span v-show="errors.has('unitName')" style="display:none;color: red;font-size: 12px;">{{ errors.first('unitName') }}</span>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">证照类型:</span>
<div class="fl register-person-input">
<select v-model="unitCardType" name="unitCardType" :class="{'is-danger': errors.has('unitCardType') }" v-validate="{required: workShow==true,unitCardType:workShow==true}" class="register-person-256">
<option v-for="item in unitCardTypes" v-bind:value="item.value">{{item.text}}</option>
</select>
<span v-show="errors.has('unitCardType')" style="display:none;color: red;font-size: 12px;">{{ errors.first('unitCardType') }}</span>
<!--<input class="register-person-256" type="text" name="unitCardType" v-model="unitCardType" placeholder="选择证照类型">-->
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">证照编号:</span>
<div class="fl register-person-input">
<input type="text" :class="{'is-danger': errors.has('unitCardId') }" v-validate="{required: workShow==true,unitCardId:workShow==true}" name="unitCardId" v-model="unitCardId" placeholder="请填写证件照编号">
<span v-show="errors.has('unitCardId')" style="display:none;color: red;font-size: 12px;">{{ errors.first('unitCardId') }}</span>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">单位证件照片:</span> <div class="fl register-person-input clear">
<div class="card-img-show">
<img :src="unitImgDataUrl" class="addWorkFile">
<input class="register-person-260-upload fl" :class="{'is-danger': errors.has('unitCardImg') }" v-validate="{required: workShow==true,unitCardImg:workShow==true}" v-on:change="getFile($event)" id="addWorkFile" type="file" name="unitCardImg"
placeholder="请上传证件照">
<!--<span v-on:click="submitForm($event)" id="addWorkFile2" class="register-person-upload fr" style="margin-left: 9px">
上传
</span>-->
<p v-show="errors.has('unitCardImg')" style="display:none;color: red;font-size: 12px;">{{ errors.first('unitCardImg') }}</p>
<p class="card-img-show-p">上传加盖公章的单位证照复印件照片,文件格式为.jpg,大小不超过3M</p>
</div> </div> </div>
</div>
<!-- 单位 -->
<div class="register-person-tatol clear">
<span class="fl register-person-cue">联系人姓名:</span>
<div class="fl register-person-input">
<input type="text" name="realName" :class="{'is-danger': errors.has('realName') }" v-validate="'required|realName'" v-model="realName" placeholder="请填写联系人姓名">
<span v-show="errors.has('realName')" style="display:none;color: red;font-size: 12px;">{{ errors.first('realName') }}</span>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">联系人邮箱:</span>
<div class="fl register-person-input">
<input type="text" name="userMail" :class="{'is-danger': errors.has('userMail') }" v-validate="'required|email'" v-model="userMail" placeholder="请填写联系人邮箱">
<span v-show="errors.has('userMail')" style="display:none;color: red;font-size: 12px;">{{ errors.first('userMail') }}</span>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">证件类型:</span>
<div class="fl register-person-input">
<select v-model="cardType" name="cardType" :class="{'is-danger': errors.has('cardType') }" v-validate="'required|cardType'" class="register-person-256">
<option v-for="item in items" v-bind:value="item.value">{{item.text}}</option>
</select>
<span v-show="errors.has('cardType')" style="display:none;color: red;font-size: 12px;">{{ errors.first('cardType') }}</span>
<!--<input class="register-person-256" type="text" name="cardType" v-model="cardType" placeholder="选择证照类型">-->
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">证件编号:</span>
<div class="fl register-person-input">
<input class="register-person-256" type="text" :class="{'is-danger': errors.has('cardId') }" v-validate="'required|cardId'" name="cardId" v-model="cardId" placeholder="请填写证件照编号">
<span v-show="errors.has('cardId')" style="display:none;color: red;font-size: 12px;">{{ errors.first('cardId') }}</span>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">证件照片:</span>
<div class="fl register-person-input">
<div class="card-img-show"><img class="addPersonFile" :src="personImgDataUrl" >
<input class="register-person-260-upload" :class="{'is-danger': errors.has('cardImg') }" v-validate="'required|unitCardImg'" name="cardImg" type="file" id="addPersonFile" v-on:change="getFile($event)"
placeholder="请上传证件照">
<p v-show="errors.has('cardImg')" style="display:none;color: red;font-size: 12px;">{{ errors.first('cardImg') }}</p>
<!-- <input class="register-person-260" v-on:change="uploadChange" id="addPersonFile" type="file" name="cardImg"
placeholder="请上传证件照">-->
<!--<span v-on:click="submitForm($event)" id="addPersonFile2" class="register-person-upload fr">
上传
</span>-->
<p class="card-img-show-p">文件格式为.jpg,大小不超过3M</p>
</div>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">联系人手机号:</span>
<div class="fl register-person-input">
<input type="text" name="userPhone" :class="{'is-danger': errors.has('userPhone') }" v-validate="'required|userPhone'" v-model="userPhone" placeholder="请填写联系人手机号">
<span v-show="errors.has('userPhone')" style="display:none;color: red;font-size: 12px;">{{ errors.first('userPhone') }}</span>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">验证码:</span>
<div class="fl register-person-input">
<input class="register-person-260" :class="{'is-danger': errors.has('code') }" v-validate="'required|code'" maxlength="6" type="text" name="code" v-model="code" placeholder="请填写验证码">
<button id="registerCode" v-on:click="sendMessages('registerCode',userPhone,smsUrl)" class="register-person-upload fr">
获取验证码
</button>
<p v-show="errors.has('code')" style="margin-top:47px!important;display:none;color: red;font-size: 12px;">{{ errors.first('code') }}</p>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">用户名:</span>
<div class="fl register-person-input" style="width: auto">
<input class="" type="text" name="userName" :class="{'is-danger': errors.has('userName') }" v-validate="'required|userName'" v-model="userName" placeholder="请填写用户名">
<span v-show="errors.has('userName')" style="display:none;color: red;font-size: 12px;">{{ errors.first('userName') }}</span>
<p>长度为2至20个字符,允许包含汉字、大小写英文字母、数字及下划线等</p>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">密码:</span>
<div class="fl register-person-input">
<input class="" type="password" name="password" :class="{'is-danger': errors.has('password') }" v-validate="'required|password'" v-model="password" placeholder="8-20位密码,需包含大小字母及数字">
<span v-show="errors.has('password')" style="display:none;color: red;font-size: 12px;">{{ errors.first('password') }}</span>
<p>长度8至20位,须包含大小写字母及数字</p>
</div>
</div>
<div class="register-person-tatol clear">
<span class="fl register-person-cue">确认登录密码:</span>
<div class="fl register-person-input">
<input type="password" name="repassword" :class="{'is-danger': errors.has('repassword') }" v-validate="'required|confirmed:password'" v-model="repassword" placeholder="请再次输入登录密码">
<span v-show="errors.has('repassword')" style="display:none;color: red;font-size: 12px;">{{ errors.first('repassword') }}</span>
</div>
</div>
<button class="register-porson-btn" type="button" name="button" :disabled="submitDisabled"
v-on:click="submit()">立即注册
</button>
</div>
</div>
<div class="dong-hua">
<p class="dong-hua-chuan">上传中</p >
<div class="loader-05">
</div>
</div>
</div>
<div th:include="foot :: html"></div>
</div>
</body>
<script th:inline="javascript">
/*<![CDATA[*/
VeeValidate.Validator.localize('zh_CN');
VeeValidate.Validator.localize({
zh_CN:{messages:{
required:function (name) {
return name+"不能为空";
}
},attributes:{
unitName:'单位名称',
unitCardType: '证照类型',
unitCardId: '证照编号',
unitCardImg: '单位证件照片',
realName: '联系人姓名',
userMail: '联系人邮箱',
cardType: '证件类型',
cardId: '证件编号',
cardImg: '证件照片',
userPhone: '联系人手机号',
code: '验证码',
userName: '用户名',
password: '密码',
repassword: '确认登录密码',
}
}
});
VeeValidate.Validator.extend('unitName',{
getMessage:function () {
return "请输入正确单位名称";
},
validate:function (value) {
return /^(([\u4e00-\u9fff]{2,50})|([a-z\.\s\,\(\)()]{2,50}))$/i.test(value);
}
});
VeeValidate.Validator.extend('unitCardId',{
getMessage:function () {
return "请输入正确证照编号";
},
validate:function (value) {
return /^[a-zA-Z0-9]{10,20}$/.test(value);
}
});
VeeValidate.Validator.extend('realName',{
getMessage:function () {
return "输入正确的联系人名称";
},
validate:function (value) {
return /^[\u4e00-\u9fa5a-zA-Z\s]{2,20}$/.test(value);
}
});
VeeValidate.Validator.extend('cardId',{
getMessage:function () {
return "输入正确的证件编号";
},
validate:function (value) {
return /^[a-zA-Z0-9]{10,20}$/.test(value);
}
});
VeeValidate.Validator.extend('userPhone',{
getMessage:function () {
return "输入正确的手机号";
},
validate:function (value) {
return /^((13|14|15|16|17|18|19)[0-9]{1}\d{8})$/.test(value);
}
});
VeeValidate.Validator.extend('code',{
getMessage:function () {
return "输入6位数字验证码";
},
validate:function (value) {
return /^[0-9]{6}$/.test(value);
}
});
VeeValidate.Validator.extend('userName',{
getMessage:function () {
return "请输入正确用户名";
},
validate:function (value) {
return /^[\u4e00-\u9fa5_a-zA-Z0-9]{2,20}$/.test(value);
}
});
VeeValidate.Validator.extend('password',{
getMessage:function () {
return "请输入正确密码";
},
validate:function (value) {
return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z_]{8,20}$/.test(value);
}
});
VeeValidate.Validator.extend('cardType',{
getMessage:function () {
return "请选择证件类型";
},
validate:function (value) {
return !!value;
}
});
VeeValidate.Validator.extend('unitCardType',{
getMessage:function () {
return "请选择证照类型";
},
validate:function (value) {
return !!value;
}
}); VeeValidate.Validator.extend('unitCardImg',{
getMessage:function () {
return "上传照片!";
},
validate:function (value) {
return !!value;
}
}); Vue.use(VeeValidate);
var InterValObj; //timer变量,控制短信时间
var vue = new Vue({
el: "#form",
data: {
personFileName:'文件格式为.jpg,大小不超过3M',
workFileName:'上传加盖公章的单位证照复印件照片,文件格式为.jpg,大小不超过3M',
unitImgDataUrl:'',
personImgDataUrl:'',
//使用时将最后一个1去掉
smsUrl:[[@{/common/sendSMS}]],
workShow: false,
unitCardTypes: [{text: '选择证照类型', value: ''}, {text: '工商营业执照', value: '101'}, {
text: '有关*部门的批文',value: '102'},
{text: '事业单位法人证书', value: '105'}, {text: '登记证书', value: '103'},
{text: '其他证照', value: '104'}],
items: [{text: '选择证件类型', value: ''}, {text: '居民身份证件', value: '101'}, {
text: '军人身份证件',
value: '102'
}, {text: '武警身份证件', value: '103'},
{text: '港澳台居民通行证', value: '104'}, {text: '外国公民护照', value: '105'}, {text: '其他证件', value: '106'}],
submitDisabled: false,
unitName: '',
unitCardType: '',
unitCardId: '',
unitCardImg: 'test1.jpg',
realName: '',
userMail: '',
cardType: '',
cardId: '',
cardImg: 'test2.jpg',
userName: '',
userPhone: '',
code: '',
password: '',
repassword: '',
userType: '100',
file: '',
file2: '',
isUpload:true,
},
methods: {
getFile(event) {
let eventId = event.target.id;
let type= testImgType(eventId);
if(!type){
return;
}
let fileName = event.target.files[0].name;
let max = testMaxSize(event.target.files[0],1024*3*1024);
if(!max){
return;
}
if(eventId=='addWorkFile'){
this.file = event.target.files[0];
this.workFileName=fileName;
}else{
this.file2 = event.target.files[0];
this.personFileName=fileName;
}
/* },
submitForm(event) {
let eventId = event.target.id;
event.preventDefault();*/
let formData = new FormData();
if(eventId=='addWorkFile'){
formData.append('file', this.file);
}else{
formData.append('file', this.file2);
} let config = {
headers: {
'Content-Type': 'multipart/form-data'
}
}
$(".dong-hua").css("display","block");
this.$http.post([[@{/common/uploadFile}]], formData, config).then(function (res) {
$(".dong-hua").css("display","none");
if (res.data.code == '000') {
if(eventId=='addWorkFile'){
$("img.addWorkFile ").css("height","4em");
this.unitImgDataUrl=res.data.data;
}else {
$("img.addPersonFile").css("height","4em");
this.personImgDataUrl=res.data.data;
}
}
})
}, //提交
submit(){
this.$validator.validateAll().then((result) => {
if (result) {
this.submitDisabled = true;
if(this.password!=this.repassword){
this.submitDisabled = false;
this.open("两次输入的密码不一致","001");
return;
}
var json = {
'userType': this.userType,
'companyName': this.unitName,
'companyCardType': this.unitCardType,
'companyCardId': this.unitCardId,
'companyCardImg': this.unitImgDataUrl,
'userName': this.realName,
'userMail': this.userMail,
'cardType': this.cardType,
'cardId': this.cardId,
'cardImg': this.personImgDataUrl,
'loginName': this.userName,
'userPhone': this.userPhone,
'code': this.code,
'loginPwd': this.password,
};
let postUrl = [[@{/user/businessUserRegister}]];
this.$http.post(postUrl, json, {emulateJSON: true}).then(
(response)=> {
console.log(response.data)
this.submitDisabled = false;
if(response.data.code == '000'){
this.openMsg("<p>注册完成,请等待审核结果!<br/><br/>" +
"您提交的注册信息需要审核1-2个工作日,请您耐心等待!</p>");
}else {
this.open(response.data.msg,response.data.code);
}
}
)
}else {
console.log("提交失败!")
}
})
},
//选择标签
clickTitle: function (type) {
if (type == 1) {
this.userType='100';
this.workShow = false;
$(".register-choose-person .register-choose-person-blue").css("color", "#009FDF");
$(".register-choose-work .register-choose-person-gray").css("color", "#4A4A4A");
} else if (type == 2) {
this.userType='200';
this.workShow = true;
$(".register-choose-person .register-choose-person-blue").css("color", "#4A4A4A");
$(".register-choose-work .register-choose-person-gray").css("color", "#009FDF");
}
}, //发送短信验证码
sendMessages(id,phone,url){
sendSms(id,phone,url,InterValObj);
},
//提示信息
open: function (msg, code) {
if (code == '000') {
this.$alert(msg, '提示', {
confirmButtonText: '确定',
type: 'success',
callback: action => {
this.openMsg("<p>注册完成,请等待审核结果!<br/><br/>" +
"您提交的注册信息需要审核1-2个工作日,请您耐心等待!</p>"); }
});
} else {
this.$alert(msg, '提示', {
confirmButtonText: '确定',
type: 'error'
});
}
},
toIndex(){
window.open([[@{/user/showHtml}]],"_self");
},
openMsg(msg) {
this.$confirm(msg, '', {
confirmButtonText: '确定',
showCancelButton:false,
dangerouslyUseHTMLString: true,
closeOnClickModal:false,
showClose:false,
center: true,
type: ''
}).then(() => {
this.toIndex();
}).catch(() => { });
}
},
created:function() {
$("#model5").addClass("li-btn");
var v = getCookieValue("secondsremained") ? getCookieValue("secondsremained") : 0;//获取cookie值
if(v > 0) {
$("#registerCode").attr("disabled", true);
settime("registerCode",InterValObj,v,"secondsremained"); //开始倒计时
}
},
})
/*]]>*/
</script>
</html>