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 相关文章推荐
学习YUI.Ext第五日--做拖放Darg&amp;Drop
Mar 10 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
解析jquery中的ajax缓存问题
Dec 19 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
Sep 23 Javascript
js中的面向对象入门
Mar 06 Javascript
微信小程序 下拉列表的实现实例代码
Mar 08 Javascript
微信小程序开发图片拖拽实例详解
May 05 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
详解小程序BackgroundAudioManager踩坑之旅
Dec 08 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
解析argc argv在php中的应用
2013/06/24 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
2010/04/25 Javascript
45个JavaScript编程注意事项、技巧大全
2015/02/11 Javascript
JS两个数组比较,删除重复值的巧妙方法(推荐)
2016/06/03 Javascript
JS中mouseover和mouseout多次触发问题如何解决
2016/06/06 Javascript
原生js二级联动效果
2017/06/20 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
python的类变量和成员变量用法实例教程
2014/08/25 Python
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python实现贪吃蛇游戏
2020/03/21 Python
浅谈python锁与死锁问题
2020/08/14 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
怎样拟定创业计划书
2014/05/01 职场文书
电子商务求职信
2014/06/15 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
2015新学期开学寄语
2015/02/26 职场文书