无限级数基于elmentUi

一.背景

主要用于实现父级目录下有子目录的情况
在这里插入图片描述

二.实现

1.编写controller接口

@GetMapping(value = "/treeData")
    public JSONResult treeData(){
        List<CourseType> treeData = courseTypeService.treeData();
        return JSONResult.success(treeData);
    }

2.业务

这里使用map保存分类对象,减少一层for循环

  @Override
    @Cacheable(cacheNames = "course",key = "'treedata'")
    public List<CourseType> treeData() {
        // 1.查询所有的分类
        List<CourseType> courseTypes = super.selectList(null);
        // 用map保存对象,减少查询次数
        Map<Long, CourseType> courseTypeMap =
                courseTypes.stream().collect(Collectors.toMap(CourseType::getId, CourseType -> CourseType));
        // 2.查询一级分类
        List<CourseType> firstCourseTypes = new ArrayList<>();
        for (CourseType courseType: courseTypes) {
            if (courseType.getPid() != null && courseType.getPid() == 0) { // pid = 0 为顶级目录
                firstCourseTypes.add(courseType);
            } else { // 否则就是次级目录
                // 通过map中key获取器父类
                CourseType parentCourseType = courseTypeMap.get(courseType.getPid());
                if (parentCourseType != null) {
                    // 给父类添加子目录
                    parentCourseType.getChildren().add(courseType);
                }
            }
        }
        return firstCourseTypes;
    }

3.实体类

    // 课程树
    @TableField(exist = false)
    // 集合为空不参与jason转化
    @JsonInclude(value = JsonInclude.Include.NON_EMPTY)
    private List<CourseType> children = new ArrayList<>();

4.前端

<el-form-item label="课程类型" prop="courseTypeId" >
	<el-cascader style="width: 300px"
			:props="courseTypeProps"
			v-model="addForm.courseTypeId"
			placeholder="课程类型"
			:options="courseTypes"
			expand-trigger="hover"
			:show-all-levels="false"
			filterable
			change-on-select
	></el-cascader>
</el-form-item>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值