当前位置:   article > 正文

vue中用element-ui给动态添加的表单增加校验规则_elform动态添加校验

elform动态添加校验

场景:根据需求业务需要在每个房屋下添加不定数量的家庭成员,且每个家庭成员的信息都是必填字段,且身份证和手机号需要正则验证

如图

 结构:

  1. <div v-show="parkInformationChecked1" class="personList" v-for="(item, i) in personnelInformation" :key="i">
  2. <div class="personListTitle">家庭成员{{ i + 1 }}<el-button @click="deleteperson(i)" type="primary" size="mini"
  3. style="margin-left: 30px;" v-if="type != 'look'">删除</el-button></div>
  4. <el-form style="padding-top: 30px;background-color: #F7F6F9;" :rules="personnelRules" ref="personnelInformationForm"
  5. class="content" label-width="120px" :model="item">
  6. <el-form-item label="姓名" prop="name">
  7. <el-input class="searchInput1" v-model="item.name" placeholder="请输入"></el-input>
  8. </el-form-item>
  9. <el-form-item label="手机号" prop="telephone">
  10. <el-input class="searchInput1" v-model="item.telephone" placeholder="请输入"></el-input>
  11. </el-form-item>
  12. <el-form-item label="身份证号" prop="idNumber">
  13. <el-input class="searchInput1" v-model="item.idNumber" placeholder="请输入"></el-input>
  14. </el-form-item>
  15. <el-form-item label="与户主关系" prop="isHouserelation">
  16. <el-select class="searchInput1" v-model="item.isHouserelation" placeholder="请选择" clearable>
  17. <el-option v-for="item in relationLst" :key="item.index" :label="item.label"
  18. :value="item.label"></el-option>
  19. </el-select>
  20. </el-form-item>
  21. </el-form>
  22. </div>
  23. <div v-show="parkInformationChecked" class="personbutton">
  24. <el-button @click="pushPersonnelInformation" style="width: 200px;height: 40px;">添加人员</el-button>
  25. </div>

校验规则:

  1. personnelRules: {
  2. name: [{validator: validatePass, required: true, message: '内容不能为空' }],
  3. telephone: [{ required : true, validator: relationPass, trigger: 'blur' }],
  4. idNumber: [{ required : true, validator: idnumPass, trigger: 'blur' }],
  5. isHouserelation: [{validator: validatePass, required: true, message: '内容不能为空' }]
  6. }
  7. let relationPass = (rule, value, callback) => {
  8. if (!(/^\d{11}$/.test(value))) {
  9. callback(new Error('请输入正确手机号'));
  10. } else if (value === '') {
  11. callback(new Error('请输入手机号'));
  12. } else {
  13. callback();
  14. }
  15. };
  16. let id = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/;
  17. let idnumPass = (rule, value, callback) => {
  18. if (!(id.test(value))) {
  19. callback(new Error('请输入正确身份证号'));
  20. } else if (value === '') {
  21. callback(new Error('请输入身份证号'));
  22. } else {
  23. callback();
  24. }
  25. };
  26. var validatePass = (rule, value, callback) => {
  27. if (value === '') {
  28. callback(new Error('内容不能为空'));
  29. } else {
  30. callback();
  31. }
  32. };

添加人员按钮:

  1. pushPersonnelInformation() {
  2. this.personnelInformation.push({
  3. name: '',
  4. telephone: '',
  5. idNumber: '',
  6. isHouserelation: ''
  7. })
  8. },

删除人员:

  1. deleteperson(i){
  2. this.personnelInformation.splice(1, 1)
  3. },

保存按钮遍历校验表单规则:

  1. save(){
  2. this.flag = true
  3. for (let i = 0; i < this.personnelInformation.length; i++) {
  4. this.$refs.personnelInformationForm[i].validate((valid) => {
  5. if (!valid) {
  6. this.flag = false
  7. return false;
  8. }
  9. });
  10. }
  11. if (!this.flag) return
  12. let postData = {
  13. houseId: this.id,
  14. personDetails: this.personnelInformation
  15. }
  16. var res = await personnelHousAdd(postData)
  17. if (res.status === 200) {
  18. this.$message({
  19. message: '信息添加成功!',
  20. type:'success'
  21. })
  22. }
  23. }

注意:v-for遍历生成的表单的ref拿到的是一个数组,this.$refs.personnelInformationForm[i]拿到的就是具体的各个表单的ref的对应结构了,准备个变量flag来控制通过校验与否,且要注意在这个函数最上面要把这个变量赋值回初始值,否则当前检验规则不通过下次再保存永远不通过!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/438214
推荐阅读
相关标签
  

闽ICP备14008679号