el-table树形表格表单验证(列表生成序号)


Posted in Javascript onMay 31, 2020

树形表格表单验证预览

el-table树形表格表单验证(列表生成序号)

树形列表生成序号

首先需要生成一个序号用来确定表单验证的目标row,通过广度优先遍历,以1,1.1,1.1.1的规则对树形列表生成确定唯一值的索引,因为列表自身可以做CURD,因此需要每次列表的item增加或减少时重新调用生成索引的方法。

setIndex = (data) => {
        let queue = [...data];
        let loop = 0;
        while (queue.length > 0) {
          loop++
          [...queue].forEach((child, i) => {
            queue.shift()
            if (loop == 1) {
              child.customIndex = i + 1 + "";
              child.currentIndex = i;
            }
            if (child.children && child.children.length > 0) {
              child.dataType = 1
              for (let ci = 0; ci < child.children.length; ci++) {
                child.children[ci].currentIndex = ci
                child.children[ci].customIndex = child.customIndex + "." + (ci + 1)
              }
              queue.push(...child.children)
            } else {
              child.dataType = 2
            }
          })
        }
      }
      const rows = [
        {
          id: "1",
          date: "2016-05-02",
          name: "王小虎1",
          address: "上海市普陀区金沙江路 1518 弄",
          children: [
            {
              name: "233",
              customIndex: "1.1",
              children: [{name: "9"}]
            },
            {
              name: "7771",
              customIndex: "1.2",
              children: [
                {
                  name: "9"
                }, 
                {
                  name: "9",
                }]
            }
          ]
        },
        {
          id: "2",
          date: "2016-05-04",
          name: "王小虎2",
          address: "上海市普陀区金沙江路 1517 弄",
          children: []
        },
       ]
 setIndex(rows)

表单校验

要想实现对表格的表单验证,需要用form-item将整个表格包裹,然后在以子集的方式将每一列用form-item包裹。

<el-form ref="form" :model="form" label-width="80px" :rules="rules">
      <el-form-item label-width="0" prop="rows">
        <el-table>
        </el-table>
      </el-form-item>
    </el-form>
<el-table-column
              prop="name"
              label="姓名"
              sortable
              width="180">
            <template v-slot="{$index, row}">
                           {{`rows${getPathByKey(row.customIndex,"customIndex",form.rows)}.name`}}
              <el-form-item label-width="0" :rules="rules.name"
                     :prop="`${row.customIndex!=='tempIndex'?`rows${getPathByKey(row.customIndex,'customIndex',form.rows)}.name`:''}`">
                <el-input v-model="row.name"></el-input>
              </el-form-item>
            </template>
          </el-table-column>

实现方式,表单校验本质是对于目标数据的路径查找,当el-form-item 上的prop匹配不到正确的目标是的时候就不能正常触发校验

el-table树形表格表单验证(列表生成序号)

因此,需要记录每一个row上面的属性路径,即实现记录每一行中属性(name,address)路径的方法。

getPathByKey = (value, key, arr) => {
        let temppath = [];
        let realPath = ""
        try {
          function getNodePath(node) {
            temppath.push(node.currentIndex);
            //找到符合条件的节点,通过throw终止掉递归
            if (node[key] === value) {
              temppath.forEach((v, i) => {
                if (i == 0) {
                  realPath += "." + v
                } else {
                  realPath += `.children.${v}`
                }
              })
              // temppath = temppath.join(",")
              throw ("GOT IT!");
              // return;
            }
            if (node.children && node.children.length > 0) {
              for (var i = 0; i < node.children.length; i++) {
                getNodePath(node.children[i]);
              }

              //当前节点的子节点遍历完依旧没找到,则删除路径中的该节点
              temppath.pop();
            } else {

              //找到叶子节点时,删除路径当中的该叶子节点
              temppath.pop();
            }
          }

          for (let i = 0; i < arr.length; i++) {
            getNodePath(arr[i]);
          }
        } catch (e) {
          return realPath;
        }
      },

将每一列需要验证的item,路径查找好之后,form就可以具体监控到所有的表格输入,并触发正确的验证了,如图:

el-table树形表格表单验证(列表生成序号)

demo参考

到此这篇关于el-table树形表格表单验证(列表生成序号)的文章就介绍到这了,更多相关el-table树形表格表单验证内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
Jquery Ajax学习实例3 向WebService发出请求,调用方法返回数据
Mar 16 Javascript
jQuery EasyUI API 中文文档 搜索框
Sep 29 Javascript
5个最佳的Javascript日期处理类库分享
Apr 15 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
js运动动画的八个知识点
Mar 12 Javascript
JavaScript数据推送Comet技术详解
Apr 07 Javascript
浅析jQuery中使用$所引发的问题
May 29 Javascript
BootStrap中Tab页签切换实例代码
May 30 Javascript
JS常见疑难点分析之match,charAt,charCodeAt,map,search用法分析
Dec 25 Javascript
解决IE7中使用jQuery动态操作name问题
Aug 28 jQuery
layer实现弹出层自动调节位置
Sep 05 Javascript
微信小程序swiper实现文字纵向轮播提示效果
Jan 21 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
May 31 #Javascript
使用原生JS实现滚轮翻页效果的示例代码
May 31 #Javascript
24个ES6方法解决JS实际开发问题(小结)
May 31 #Javascript
公众号SVG动画交互实战代码
May 31 #Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
May 31 #Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
May 31 #Javascript
详解Typescript 内置的模块导入兼容方式
May 31 #Javascript
You might like
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php通过ajax实现双击table修改内容
2014/04/28 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
js对象的比较
2011/02/26 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
JavaScript如何一次性展示几万条数据
2017/03/30 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
浅谈gulp创建完整的项目流程
2017/12/20 Javascript
vue脚手架及vue-router基本使用
2018/04/09 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
Node.JS获取GET,POST数据之queryString模块使用方法详解
2020/02/06 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
收集的几个Python小技巧分享
2014/11/22 Python
pandas基于时间序列的固定时间间隔求均值的方法
2019/07/04 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
Python+unittest+DDT实现数据驱动测试
2020/11/30 Python
苹果音乐订阅:Apple Music
2018/08/02 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
《假如》教学反思
2014/04/17 职场文书
魂断蓝桥观后感
2015/06/10 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python