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 相关文章推荐
xtree.js 代码
Mar 13 Javascript
通用javascript脚本函数库 方便开发
Oct 13 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
Feb 07 Javascript
jquery一般方法介绍 入门参考
Jun 21 Javascript
JavaScript学习笔记记录我的旅程
May 23 Javascript
兼容IE和FF的图片上传前预览js代码
May 28 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
解析浏览器端的AJAX缓存机制
Jun 21 Javascript
JS实现图片手风琴效果
Apr 17 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
Nov 22 Javascript
教你部署vue项目到docker
Apr 05 Vue.js
插件导致ECharts被全量引入的坑示例解析
Sep 23 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
10个php函数实用却不常见
2015/10/13 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
ajax 文件上传应用简单实现
2009/03/03 Javascript
Grid得到选择行数据的方法总结
2011/01/17 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
vue获取dom元素注意事项
2017/12/28 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
js实现简单掷骰子小游戏
2019/10/24 Javascript
Nodejs + Websocket 指定发送及群聊的实现
2020/01/09 NodeJs
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
Python批量转换文件编码格式
2015/05/17 Python
Python中json格式数据的编码与解码方法详解
2016/07/01 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
使用pandas库对csv文件进行筛选保存
2020/05/25 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
django中cookiecutter的使用教程
2020/12/03 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
2014年庆元旦活动方案
2014/02/15 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
独生子女证明范本
2015/06/19 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS