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 相关文章推荐
网络之美 JavaScript中Get和Set访问器的实现代码
Sep 19 Javascript
Javascript动态绑定事件的简单实现代码
Dec 25 Javascript
javascript学习笔记(五)原型和原型链详解
Oct 08 Javascript
jquery实现右键菜单插件
Mar 29 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
详解Angular 4.x 动态创建组件
Apr 25 Javascript
Vue监听事件实现计数点击依次增加的方法
Sep 26 Javascript
jquery层次选择器的介绍
Jan 18 jQuery
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
Jun 14 Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 jQuery
微信小程序实现聊天室
Aug 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中构造函数和析构函数解析
2014/10/10 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
CI框架实现cookie登陆的方法详解
2016/05/18 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
js实现在页面上弹出蒙板技巧简单实用
2013/04/16 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
如何用JavaScript定义一个类
2014/09/12 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
js实现九宫格的随机颜色跳转
2017/02/19 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
mint-ui在vue中的使用示例
2018/04/05 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
关于vue组件事件属性穿透详解
2019/10/28 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
pandas值替换方法
2018/07/10 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
爱尔兰橄榄球店:Irish Rugby Store
2019/12/05 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
PHP面试题及答案一
2012/06/18 面试题
一套带网友答案的.NET笔试题
2016/12/06 面试题
大学生预备党员自我评价分享
2013/11/16 职场文书
职业技术学校毕业生推荐信
2013/12/03 职场文书
基层党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
2014年维稳工作总结
2014/11/18 职场文书
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA