当前位置: 首页 > news >正文

vue+springboot+element-ui实现table的树懒加载

概要

vue+springboot+element-ui实现table的树懒加载

整体架构流程

前端vue2,elment-ui,内置封装了axios使用es6导出的写法,js,css等
后端spring全家桶

技术细节

前端:调用elementui的组件Element - The world's most popular Vue UI framework

<el-table:data="biddData"style="width: 100%;margin-top: 10px"row-key="id":border="false"lazy:tree-props="{children: 'children', hasChildren: 'hasChildren'}"class="horizontal-line-table":header-cell-style="{background:'#42b983',color: '#ffffff'}"@selection-change="handleSelectionChange"ref="multipleTable"
>

这里主要就是将后端整理好的数据双向绑定表格里

 getMenuData() {setTimeout(() => {url.getMenusTree().then(res => {const fileTypeMap = {0: '测试目录',1: '测试目录二级',2: '测试目录三级',3: '测试文档一类',4: '测试文档二类',5: '测试文档三类'};// 定义递归处理函数const processTree = (nodes) => {return nodes.map(item => ({...item,filetype: fileTypeMap[item.filetype] || item.filetype,children: item.children ? processTree(item.children) : []}));};this.biddData = processTree(res.data);// console.log('处理后的数据:', this.biddData);});}, 100);},export function getMenusTree() {return request({url: '/xxx/ccc/ddd',method: 'get'})
}

这个写法是我项目框架的写法也可以直接使用axios大同小异,方法内部的操作是将某个字段进行转换
后端:

@RequiredArgsConstructor
@RestController
@RequestMapping("/aa/ss")
public class BiddInvestmentController {@Autowiredprivate SysBiddinveUnitService unitService;@RequestMapping("/getList")public R UnitList(){List<SysBiddinveUnit> list = unitService.getUnitList();return R.ok().put("data",list);}
}List<SysBiddinveUnit> getUnitList();/**** 查询所有数据并返回树形结构* @return*/@Overridepublic List<SysBiddinveUnit> getUnitList() {//查询所有数据List<SysBiddinveUnit> list = sysBiddinveUnitMapper.getUnitList();//建立map映射(id->index)HashMap<Integer,Integer> map = new HashMap<>();for (int index = 0; index < list.size(); index++) {Integer id = list.get(index).getId();map.put(id,index);}//处理数据for (int i = 0; i < list.size(); i++) {SysBiddinveUnit node = list.get(i);Integer pid = node.getPid();//有父级if (pid!=null){//找到pid的父级并把当前节点(node)放到父级节点的children里面Integer indexParent = map.get(pid);//获取父亲节点SysBiddinveUnit parent = list.get(indexParent);//判重if (parent.getChildren()==null){parent.setChildren(new ArrayList<>());}//向父亲节点的children添加当天nodeparent.getChildren().add(node);}}//过滤树的一级节点List<SysBiddinveUnit> collect = list.stream().filter(e -> e.getPid() == null).collect(Collectors.toList());return collect;}

 

@Data
public class SysBiddinveUnit {private Integer id;private Integer pid;private String code;private String uploadcode;private String filetype;private String filename;private String createtime;private String filestate;private String createBy;private String updateTime;private String updateBy;private String uploadname;private String mlname;private List<SysBiddinveUnit> children;}


小结

这里的业务其实很好理解,需要知道前端table需要的数据格式,然后搭建实体类,首先查出所有的数据,然后使用递归进行筛选父节点,获取id和pid进行遍历比对如果pid是null的或空的表示是顶级的也就是父级的 然后如果pid等于父级id的表示是父级的子类 然后判各重 就放到chideren里,到这里就已经快变成我们想要的数据格式了,此时需要对树进行过滤过滤好之后就可以变成我们需要的JSON了 此时放到list里返回前端即可

http://www.dtcms.com/a/202809.html

相关文章:

  • Redis学习专题(三)主从复制
  • Java大师成长计划之第28天:处理多线程的Web应用
  • python-数据可视化(大数据、数据分析、可视化图像、HTML页面)
  • 生产专属ERP系统源码,一套集成企业财务、供应链、生产、销售等核心业务流程的管理系统
  • 第三十天打卡
  • 【Java高阶面经】1.微服务架构核心:服务注册与发现之AP vs CP选型全攻略
  • 电子电器架构 --- 汽车高性能计算
  • 关于 APK 反编译与重构工具集
  • Spring Boot-Swagger离线文档(插件方式)
  • C++(3)
  • 鸿蒙开发进阶:深入解析ArkTS语言特性与开发范式
  • 关于 Web 漏洞原理与利用:3. CSRF(跨站请求伪造)
  • Python _day31
  • 第40天-Python开发音乐播放器完整指南
  • Java 10IO流
  • [Java] idea的调试介绍
  • P2670 [NOIP 2015 普及组] 扫雷游戏
  • 软件设计师考试三大核心算法考点深度解析(红黑树 / 拓扑排序 / KMP 算法)真题考点分析——求三连
  • centos7配置静态ip 网关 DNS
  • C++中的宏
  • 解码数据语言:如何优雅的进行数仓字典建设?
  • Web开发-Python应用Flask框架Jinja模版绑定路由参数传递页面解析SSTI注入
  • 协程+Flow:现代异步编程范式,替代RxJava的完整实践指南
  • PH热榜 | 2025-05-20
  • springboot框架 集成海康ISUP-SDK 并实现 协议透传给设备下发指令!
  • 武汉科技大学人工智能与演化计算实验室许志伟课题组参加第八届智能优化与调度学术会议
  • 【QT】QTableWidget获取width为100,与真实值不符问题解决
  • BUUCTF——Kookie
  • C语言学习之内存函数
  • Python打卡训练营day27-函数-装饰器