vxe table: 实现tree表格,并且自定义展示指定行

要求,数据中必须有唯一的id字段,并且row-config.KeyField 要指定这个id字段。否则在自定义展开行时展开不生效。并不影响tree的渲染

数据有两种形式

  1. 普通数据结构在这里插入图片描述
  2. tree 状结构,
    在这里插入图片描述

以树状结构为例:
首先我们要将普通结构的数据,按照业务的需求将其处理成tree状结构的数据,常用处理方式用后端的Java8 不断的对类型分组,组装children(如下代码) 这里在组装前我们必须要给所有的数据,添加一个唯一的id字段:


public static List<Map<String,Object> arrayToTreeE(List<Map<String,Object>> data) {
        List<Map<String,Object>> result = new ArrayList<>();
        for(int i=0; i< data.size(); i++) {
            data.get(i).put("id",i);
        }
        Map<Object,List<Map<String,Object>>> glist =data.stream().collect(Collectors.groupingBy(e -> e.get(Constant.RULE_TYPE),
                LinkedHashMap::new,Collectors.toList()));
        System.out.println(data.size());
        glist.forEach((key, list)->{
            List<Map<String,Object>> node1 = list.stream().filter((item)-> item.get("SEC_TYPE1").equals("-")).collect(Collectors.toList());
            for(Map<String,Object> n1 : node1) {
                List<Map<String,Object>> node2 = list.stream().filter((item)-> item.get("SEC_TYPE").equals("-")).collect(Collectors.toList());
                if(node2.size() > 0) {
                    for(Map<String,Object> n2 : node2) {
                        List<Map<String,Object>> node3 = list.stream().filter((item)-> item.get("SEC_TYPE1").equals(n2.get("SEC_TYPE1"))
                                &&!item.get("SEC_TYPE").equals("-")).collect(Collectors.toList());
                        n2.put("children",node3);
                        n2.put("nodeName",n2.get("SEC_NAME1"));
                    }
                    n1.put("children",node2);
                } else {
                    List<Map<String,Object>> nodeList = list.stream().filter((item)-> !item.get("SEC_TYPE1").equals("-") && 
                            !item.get("SEC_TYPE").equals("-")).collect(Collectors.toList());
                    for(Map<String,Object> n2 : nodeList) {
                        n2.put("nodeName",n2.get("SEC_NAME1"));
                    }
                    n1.put("children",nodeList);
                }
                n1.put("nodeName",n1.get("RULE_TYPE_NAME"));
            }
            result.addAll(node1);
        });
       
        return result;
    }

最终的数据结构:
在这里插入图片描述

前端表格需要注意的点:
在这里插入图片描述
设置自定义规则展开:
在这里插入图片描述

  1. 展开指定的行,需要将行放到数组中
    在这里插入图片描述

  2. 展开多行,需要将多行放入同一个数组中。
    在这里插入图片描述

  3. 展开所有第一层节点。
    在这里插入图片描述

  4. 展开所有节点。数据为Array类型时会生效。为树型结构时不会生效,看5的解决方案
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/69114d516ada46f188f33961ba417995.png在这里插入图片描述

  5. 展开所有,我们需要将数据的树形结构转换为Array结构,Array结构是没有children 属性的。
    在这里插入图片描述

最终效果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值