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中更短的 Array 类型转换
Oct 30 Javascript
iframe的父子窗口之间的对象相互调用基本用法
Sep 03 Javascript
使用js简单实现了tree树菜单
Nov 20 Javascript
Google Dart编程语法和基本类型学习教程
Nov 27 Javascript
JS中window.open全屏命令解析及使用示例
Dec 11 Javascript
node.js适合游戏后台开发吗?
Sep 03 Javascript
原生js实现旋转木马轮播图效果
Feb 27 Javascript
使用mint-ui开发项目的一些心得(分享)
Sep 07 Javascript
解决vue处理axios post请求传参的问题
Mar 05 Javascript
解决vue移动端适配问题
Dec 12 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
Oct 24 Javascript
聊聊JS ES6中的解构
Apr 29 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中time()和mktime()方法的区别
2013/09/28 PHP
PHP获取中英混合字符串长度的方法
2014/06/07 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
Laravel ORM 数据model操作教程
2019/10/21 PHP
js 左右悬浮对联广告代码示例
2014/12/12 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
js原生代码实现轮播图的实例讲解
2017/07/28 Javascript
详解vue axios中文文档
2017/09/12 Javascript
利用vue.js把静态json绑定bootstrap的table方法
2018/08/28 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
Python使用MONGODB入门实例
2015/05/11 Python
浅析Python基础-流程控制
2016/03/18 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
python监控进程状态,记录重启时间及进程号的实例
2019/07/15 Python
使用python模拟命令行终端的示例
2019/08/13 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
优秀员工评语
2014/02/10 职场文书
六个一活动实施方案
2014/03/21 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
小学运动会报道稿
2014/10/04 职场文书
2015年店长个人工作总结
2015/10/23 职场文书
js不常见操作运算符总结
2021/11/20 Javascript