树形表格的使用——配置DOM结构的延用[若依tree和普通树形结构的通用]

树形表格的使用——配置DOM结构的延用[若依tree和普通树形结构的通用]

技术:
架构:elemen-admin-beautiful,
引用:若依前后端分离版树形表格
element-ui 树形结构
背景:
业务需在web同app端回显树形数据结构的报告预览,经商讨确认使用树形结构的表格配置相关Dom节点,本文将记载个人完成树形结构的部分point

预览效果图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qW2SevlP-1598070798263)(http://mmbiz.qpic.cn/mmbiz_jpg/qRJazDfIbDyvFXT4LSnd8ibEh1iaTxf4F1fvTlZ73PYSYiaOe05YPEWRFWt9MbhfEANQ33H1oHWpGb4d4SSNJh2jQ/0)]

节点新增

一、树形结构的设计

在设计该数据的时候,本人就子节点中需要逐一配置的事项,追溯单一子节点的效率方面,参照若依前后端分离版结构,规定父节点和子节点的children统一为[],通过menuIdparentId绑定形成nodeList,随后经handleTree()转化为树形表格所需结构[即子节点包含在父节点对象的children list中]使用。

如图所示:

一维list转化为tree树形结构的代码如下:

 	  /**
       * 构造树型结构数据
       * @param {*} data 数据源
       * @param {*} id id字段 默认 'id'
       * @param {*} parentId 父节点字段 默认 'parentId'
       * @param {*} children 孩子节点字段 默认 'children'
       * @param {*} rootId 根Id 默认 0
       */
      handleTree(data, id, parentId, children, rootId) {
        id = id || "id";
        parentId = parentId || "parentId";
        children = children || "children";
        rootId = rootId || 0;
        //对源数据深度克隆
        const cloneData = JSON.parse(JSON.stringify(data));
        //循环所有项
        const treeData = cloneData.filter((father) => {
          let branchArr = cloneData.filter((child) => {
            //返回每一项的子级数组
            return father[id] === child[parentId];
          });
          branchArr.length > 0 ? (father.children = branchArr) : "";
          //返回第一层
          return father[parentId] === rootId;
        });
        return treeData != "" ? treeData : data;
      },
二、新增节点的完成

如前图(增加节点)所示,本人将其中含有配置的表单contentFom在每次新增时添加至nodeList数组中,随后将其重置,最后利用上面的handleTree的方法将nodeList转化为树形结构特征的dataList数组

主要代码如下:

// 新增节点
this.nodeList.push(this.contentForm);
// 表单重置
this.contentForm = this.$options.data().contentForm;
this.dataList = this.handleTree(this.nodeList, "menuId");
三、删除指定节点

如果使用树形结构的List这一步操作可移至element-ui树形控件——>自定义节点内容中查看详细删除

element-ui 删除源码:

remove(node, data) {
    const parent = node.parent;
    const children = parent.data.children || parent.data;
    const index = children.findIndex(d => d.id === data.id);
    children.splice(index, 1);
},

Link:

本文探讨nodeList一维带有父子级关系数组的删除方法,删除核心使用递归算法完成,主要思想:

定义一个del_arr数组主要用于记录需要删除的所有节点索引[基于一维父子级关系的数组],通过对nodeList遍历完成删除。需要注意的是两个点:1.删除一个父级的时候,需要递归查找子级,这样不会遗漏子级存在子级的情况;2.获取到所有需要删除的节点索引组成的数组del_arr时,需要注意,不能顺序遍历删除,否则会打乱nodeList的索引,可以将该索引数组倒序排列之后完成相应操作

主要代码如下:

/** 删除按钮操作 */
      handleDelete(row) {
        this.del_arr = [];
        this.$confirm('是否确认删除目录名称为"' + row.nodeTitle + '"的节点?')
          .then((_) => {
            if (this.nodeList.length != 0) {
              // 删除当前行
              this.nodeList.forEach((item, index) => {
                if (item.menuId === row.menuId) {
                  this.del_arr.push(index);
                }
              });
              // 删除子代行
              this.findNodeChild(row.menuId);
              // 倒序
              this.del_arr.sort((a, b) => {
                return b - a;
              });
              this.del_arr.forEach((item, index) => {
                this.nodeList.splice(item, 1);
              });
              this.dataList = this.handleTree(this.nodeList, "menuId");
            }
          })
          .catch((_) => {});
      },

递归方法findNodeCHild()

// 寻找子代节点
      findNodeChild(child_id) {
        this.nodeList.forEach((item, index) => {
          if (item.parentId == child_id) {
            this.del_arr.push(index);
            this.findNodeChild(item.menuId); // 注意此时的参数
          }
        });
      },
四、编辑节点的完成

阅读至此,感谢垂阅.

对于编辑节点,如若好的想法,请多加指教

本文拙见为:通过树形表格编辑按钮获取节点信息,利用menuId获取当前的节点对象,根据配置或者编辑修改相应的属性值,最后重新渲染树,完成编辑

主要代码如下:

 this.nodeList.map((item, index) => {
     if (item.menuId == this.tmpID) {
         item.nodeTitle = this.contentForm.nodeTitle;
     }
 });
// 节点重置
this.nodeReset();
this.dataList = this.handleTree(this.nodeList, "menuId");

最后,Kyle分享一句话送给各位:

不要因害怕冒险而踟蹰不前,而要为创造伟大提供可能

rm.nodeTitle;
}
});
// 节点重置
this.nodeReset();
this.dataList = this.handleTree(this.nodeList, “menuId”);




最后,Kyle分享一句话送给各位:

不要因害怕冒险而踟蹰不前,而要为创造伟大提供可能

Good Lucky,Bro!
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ECharts 是百度开源的一款功能强大的可视化图表库,支持树形结构图的绘制。要绘制树形结构图,可以使用 ECharts 提供的树状布局来实现。 首先,你需要引入 ECharts 的 JavaScript 文件和相关样式文件。然后,在 HTML 页面中创建一个容器元素,用于展示图表。接下来,你可以使用以下代码来绘制一个简单的树形结构图: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ECharts Tree</title> <!-- 引入 ECharts 文件 --> <script src="https://cdn.jsdelivr.net/npm/echarts@5.1.2/dist/echarts.min.js"></script> </head> <body> <!-- 创建一个容器元素,用于展示图表 --> <div id="chart" style="width: 600px; height: 400px;"></div> <script> // 初始化 ECharts 实例 var chart = echarts.init(document.getElementById('chart')); // 配置项 var option = { series: { type: 'tree', data: [{ name: 'Root', children: [{ name: 'Leaf 1' }, { name: 'Leaf 2' }] }] } }; // 使用配置项绘制图表 chart.setOption(option); </script> </body> </html> ``` 上述代码中,通过创建一个 `div` 元素作为图表容器,并设置其宽度和高度。然后,使用 `echarts.init` 方法初始化 ECharts 实例,并传入图表容器的 DOM 元素。接着,通过配置项 `option` 中的 `series` 属性指定图表类型为 `'tree'`,并设置树形结构的数据。最后,使用 `chart.setOption` 方法将配置项应用到图表中,从而绘制出树形结构图。 你可以根据实际需求修改配置项和数据,来绘制不同类型的树形结构图。同时,ECharts 还提供了丰富的 API 和交互功能,可以进一步定制和优化图表的展示效果。更多详细的使用方法和示例可以参考 ECharts 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Calmness_7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值