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 相关文章推荐
脚本吧 - 幻宇工作室用到js,超强推荐expand.js
Dec 23 Javascript
js 绑定带参数的事件以及手动触发事件
Apr 27 Javascript
jquery下异步提交表单 异步跨域提交表单
Nov 17 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
Mar 14 Javascript
JS获取网页属性包括宽、高等等
Apr 03 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
Jun 05 Javascript
详解Webwork中Action 调用的方法
Feb 02 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
微信小程序实现图片预加载组件
Jan 18 Javascript
如何基于js判断浏览器版本
Feb 20 Javascript
在Vue 中获取下拉框的文本及选项值操作
Aug 13 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
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
仿AS3实现PHP 事件机制实现代码
2011/01/27 PHP
php获取发送给用户的header信息的方法
2015/03/16 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
input 高级限制级用法
2009/03/26 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
清除输入框内的空格
2016/12/21 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
JS FormData对象使用方法实例详解
2020/02/12 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python ftp上传文件
2016/02/13 Python
Python3简单实例计算同花的概率代码
2017/12/06 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python pandas生成时间列表
2019/06/29 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Python三维绘图之Matplotlib库的使用方法
2020/09/20 Python
Python根据字符串调用函数过程解析
2020/11/05 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
大学生学期自我鉴定
2014/03/19 职场文书
教代会闭幕词
2015/01/28 职场文书
公司捐书倡议书
2015/04/27 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
git中cherry-pick命令的使用教程
2022/06/25 Servers
httpclient调用远程接口的方法
2022/08/14 Java/Android