zoukankan      html  css  js  c++  java
  • 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 {
                 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=" 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-Zs]{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>
            
    

      

  • 相关阅读:
    Map
    input输入框文字提示IE兼容
    Linux下实现获取远程机器文件
    ssl_error_rx_record_too_long
    Linux下访问网站
    Linux安装Jdk1.7
    bootstrap左右圆角按钮-适配手机页面
    jQuery使用load方法加载其他文档内容
    Js操作DOM小练习_01
    BootstrapValidator验证表单用法
  • 原文地址:https://www.cnblogs.com/SimonHu1993/p/9290436.html
Copyright © 2011-2022 走看看