vue + el-form 实现的多层循环表单验证


Posted in Vue.js onNovember 25, 2020

html

<el-form :model="formObj" :rules="rules" ref="ruleForm">
 <el-form-item :label="'护理记录项目配置:'" label-width="180px">
  <template v-for="(formItem, index) in formObj.formDictExtendDoList">
   <div class="hljl-container" :key="formItem.id">
    <el-row>
     <el-col :span="8">
      <el-form-item
       :label="'字段名称:'"
       label-width="90px"
       :rules="rules.fieldName"
       :prop="'formDictExtendDoList.'+index+'.fieldName'"
      >
       <el-input
        v-model.trim="formItem.fieldName"
        type="text"
        :clearable="true"
        maxLength="100"
        placeholder="请输入"
       />
       <!--@blur="isRepeat(formItem, index, 'fieldName')"-->
      </el-form-item>
     </el-col>
     <template
      v-for="(child, index1) in formItem.item"
      v-show="formItem.type === 2"
     >
      <el-col :span="8" :key="child.id">
       <el-form-item
        :label="'选项' + (index1+1) + ':'"
        label-width="90px"
        :rules="rules.value"
        :prop="'formDictExtendDoList.'+index+'.item.'+index1+'.value'"
       >
        <el-input
         v-model.trim="child.value"
         @input="forceUpdate"
         :clearable="true"
         type="text"
         maxlength="20"
         placeholder="请输入"
        />
       </el-form-item>
      </el-col>
     </template>
    </el-row>
   </div>
  </template>
 </el-form-item>
</el-form>

js

let _THAT
export
default {
  name: 'formMangeAdd',
  data() {
    return {
      formObj: {
        formDictExtendDoList: []
      },
      rules: {
        fieldName: [{
          required: true,
          message: '请输入',
          trigger: 'blur'
        }, {
          validator: this.itemValidator,
          trigger: 'blur'
        }],
        value: [{
          validator: (rule, value, callback) = > {
            // I'm a genius.
            let that = _THAT
            that.forceUpdate()
            let field = rule.field
            let arr = field.split('.')
            let index = +arr[1]
            let index1 = +arr[3]
            let _value = that.formObj.formDictExtendDoList[index].item[index1].value
            if (_value === '' || _value === null || _value === undefined) {
              callback(new Error('请输入'))
            } else {
              callback()
            }
          },
          trigger: 'blur'
        }]
      }
    }
  },
  beforeCreate() {
    _THAT = this
  },
  created() {
    // 测试数据
    let test = [{
      id: 'id_1595641858891',
      // 唯一配置id
      fieldName: '字段名称',
      // 字段名称
      item: []
    }, {
      id: 'id_1595641858892',
      // 唯一配置id
      fieldName: '字段名称',
      // 字段名称
      item: []
    }, {
      id: 'id_1595641858893',
      // 唯一配置id
      fieldName: '字段名称',
      // 字段名称
      item: [{
        id: 'item_id_1595641858891',
        // 唯一id
        value: '选项1'
      }, {
        id: 'item_id_1595641858892',
        // 唯一id
        value: '选项2'
      }]
    }]
    this.formObj.formDictExtendDoList = test
  },
  methods: {
    /**
     * 重复性判断
     **/
    itemValidator: (rule, value, callback) = > {
      let that = _THAT
      that.forceUpdate()
      let field = rule.field
      let ruleArr = field.split('.')
      let index = +ruleArr[1]
      let type = ruleArr[2]
      if (value === '') {
        callback()
        return false
      }
      let arr = []
      for (let i = 0; i < that.formObj.formDictExtendDoList.length; i++) {
        let formDictExtendDoListItem = that.formObj.formDictExtendDoList[i]
        let formDictExtendDoListFieldName = formDictExtendDoListItem.fieldName
        let formDictExtendDoListProjectName = formDictExtendDoListItem.projectName
        if (index !== i) {
          if (type === 'fieldName') {
            if (formDictExtendDoListFieldName !== '') {
              if (formDictExtendDoListFieldName === value) {
                arr.push(i)
              }
            }
          }
        }
      }
      if (arr.length !== 0) {
        if (type === 'fieldName') {
          callback(new Error('与配置' + (+arr[0] + 1) + '的字段名称重复'))
          setTimeout(function() {
            that.formObj.formDictExtendDoList[index].fieldName = ''
          }, 500)
        }
      } else {
        callback()
      }
    },
    forceUpdate() {
      this.$forceUpdate()
    }
  }
}

以上就是vue + el-form 实现的多层循环表单验证的详细内容,更多关于vue 表单验证的资料请关注三水点靠木其它相关文章!

Vue.js 相关文章推荐
基于vue项目设置resolves.alias: '@'路径并适配webstorm
Dec 02 Vue.js
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
Dec 04 Vue.js
vue项目中openlayers绘制行政区划
Dec 24 Vue.js
浅析vue中的nextTick
Dec 28 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
如何在vue中使用video.js播放m3u8格式的视频
Feb 01 Vue.js
vue组件的路由高亮问题解决方法
May 11 Vue.js
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
vue特效之翻牌动画
Apr 20 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
vue递归实现树形组件
Jul 15 Vue.js
vue打开其他项目页面并传入数据详解
Nov 25 #Vue.js
Vue开发中常见的套路和技巧总结
Nov 24 #Vue.js
浅析VUE防抖与节流
Nov 24 #Vue.js
解决vue页面刷新,数据丢失的问题
Nov 24 #Vue.js
Vue 的 v-model用法实例
Nov 23 #Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 #Vue.js
Vue实现购物小球抛物线的方法实例
Nov 22 #Vue.js
You might like
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
2019/10/18 PHP
超简单的jquery的AJAX用法
2010/05/10 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
js日期相关函数总结分享
2013/10/15 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
js实现的简洁网页滑动tab菜单效果代码
2015/08/24 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
查找廉价航班和发现新目的地:Kiwi.com
2019/02/25 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
幼师岗位求职简历的自荐信格式
2013/09/21 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
优秀驾驶员先进事迹材料
2014/05/04 职场文书
交通志愿者活动总结
2014/06/27 职场文书
企业授权委托书范本
2014/09/22 职场文书
2014年财务工作自我评价
2014/09/23 职场文书
紧急通知
2015/04/17 职场文书
干部培训工作总结2015
2015/05/25 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
MySQL如何解决幻读问题
2021/08/07 MySQL
详解CSS3浏览器兼容
2022/12/24 HTML / CSS