zoukankan      html  css  js  c++  java
  • 树形结构的接口和前端代码

    1.entity

    //一级分类
    @Data
    public class OneSubject {
        private String id;
        private String title;
    
        //一个一级分类有多个二级分类
        private List<TwoSubject> children = new ArrayList<>();
    }
    
    
    //二级分类
    @Data
    public class TwoSubject {
        private String id;
        private String title;
    }
    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @ApiModel(value="EduSubject对象", description="课程科目")
    public class EduSubject implements Serializable {
    
        private static final long serialVersionUID = 1L;
    
        @ApiModelProperty(value = "课程类别ID")
        @TableId(value = "id", type = IdType.ID_WORKER_STR)
        private String id;
    
        @ApiModelProperty(value = "类别名称")
        private String title;
    
        @ApiModelProperty(value = "父ID")
        private String parentId;
    
        @ApiModelProperty(value = "排序字段")
        private Integer sort;
    
        @ApiModelProperty(value = "创建时间")
        @TableField(fill = FieldFill.INSERT)
        private Date gmtCreate;
    
        @ApiModelProperty(value = "更新时间")
        @TableField(fill = FieldFill.INSERT)
        private Date gmtModified;
    
    }

    2.Controller层

    @RestController
    @RequestMapping("/eduservice/subject")
    @CrossOrigin
    public class EduSubjectController {
    
    
        @Autowired
        private EduSubjectService subjectService;
    
    
        //课程分类列表(树形)
        @GetMapping("getAllSubject")
        public R getAllSubject() {
            //list集合泛型是一级分类
            List<OneSubject> list = subjectService.getAllOneTwoSubject();
            return R.ok().data("list",list);
        }
    
    }

    3.service层

    @Service
    public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {
    
      
        @Override
        public List<OneSubject> getAllOneTwoSubject() {
            //1 查询所有一级分类  parentid = 0
            QueryWrapper<EduSubject> wrapperOne = new QueryWrapper<>();
            wrapperOne.eq("parent_id","0");
            List<EduSubject> oneSubjectList = baseMapper.selectList(wrapperOne);
    
            //2 查询所有二级分类  parentid != 0
            QueryWrapper<EduSubject> wrapperTwo = new QueryWrapper<>();
            wrapperTwo.ne("parent_id","0");
            List<EduSubject> twoSubjectList = baseMapper.selectList(wrapperTwo);
    
            //创建list集合,用于存储最终封装数据
            List<OneSubject> finalSubjectList = new ArrayList<>();
    
            //3 封装一级分类
            //查询出来所有的一级分类list集合遍历,得到每个一级分类对象,获取每个一级分类对象值,
            //封装到要求的list集合里面 List<OneSubject> finalSubjectList
            for (int i = 0; i < oneSubjectList.size(); i++) { //遍历oneSubjectList集合
                //得到oneSubjectList每个eduSubject对象
                EduSubject eduSubject = oneSubjectList.get(i);
                //把eduSubject里面值获取出来,放到OneSubject对象里面
                OneSubject oneSubject = new OneSubject();
    //            oneSubject.setId(eduSubject.getId());
    //            oneSubject.setTitle(eduSubject.getTitle());
                //eduSubject值复制到对应oneSubject对象里面
                BeanUtils.copyProperties(eduSubject,oneSubject);
                //多个OneSubject放到finalSubjectList里面
                finalSubjectList.add(oneSubject);
    
                //在一级分类循环遍历查询所有的二级分类
                //创建list集合封装每个一级分类的二级分类
                List<TwoSubject> twoFinalSubjectList = new ArrayList<>();
                //遍历二级分类list集合
                for (int m = 0; m < twoSubjectList.size(); m++) {
                    //获取每个二级分类
                    EduSubject tSubject = twoSubjectList.get(m);
                    //判断二级分类parentid和一级分类id是否一样
                    if(tSubject.getParentId().equals(eduSubject.getId())) {
                        //把tSubject值复制到TwoSubject里面,放到twoFinalSubjectList里面
                        TwoSubject twoSubject = new TwoSubject();
                        BeanUtils.copyProperties(tSubject,twoSubject);
                        twoFinalSubjectList.add(twoSubject);
                    }
                }
                //把一级下面所有二级分类放到一级分类里面
                oneSubject.setChildren(twoFinalSubjectList);
            }
            return finalSubjectList;
    
        }
    }

    前端代码

    router

     {
        path: '/subject',
        component: Layout,
        redirect: '/subject/list',
        name: '课程分类管理',
        meta: { title: '课程分类管理', icon: 'example' },
        children: [
          {
            path: 'list',
            name: '课程分类列表',
            component: () => import('@/views/edu/subject/list'),
            meta: { title: '课程分类列表', icon: 'table' }
          },
          {
            path: 'save',
            name: '添加课程分类',  
            component: () => import('@/views/edu/subject/save'),
            meta: { title: '添加课程分类', icon: 'tree' }
          }
        ]
      },

    api/edu/subject.js

    import request from '@/utils/request'
    export default {
        //1 课程分类列表
        getSubjectList() {
            return request({
                url: '/eduservice/subject/getAllSubject',
                method: 'get'
              })
        }
    }

    list.vue

    <template>
      <div class="app-container">
        <el-input v-model="filterText" placeholder="Filter keyword" style="margin-bottom:30px;" />
    
        <el-tree
          ref="tree2"
          :data="data2"
          :props="defaultProps"
          :filter-node-method="filterNode"
          class="filter-tree"
          default-expand-all
        />
    
      </div>
    </template>
    
    <script>
    import subject from '@/api/edu/subject'
    export default {
    
      data() {
        return {
          filterText: '',
          data2: [],  //返回所有分类数据
          defaultProps: {
            children: 'children',
            label: 'title'
          }
        }
      },
      created() {
          this.getAllSubjectList()
      },
      watch: {
        filterText(val) {
          this.$refs.tree2.filter(val)
        }
      },
    
      methods: {
        getAllSubjectList() {
            subject.getSubjectList()
                .then(response => {
                    this.data2 = response.data.list
                })
        },
        filterNode(value, data) {
          if (!value) return true
          return data.title.toLowerCase().indexOf(value.toLowerCase()) !== -1
        }
      }
    }
    </script>
  • 相关阅读:
    [TCP/IP] HTTPS的工作原理
    [TCP/IP] SSL的通讯原理
    ESLint笔记
    MacBook Pro维修过程
    论前端工程化
    听书,怅然若失
    js实现Mac触摸板双指事件(上/下/左/右/放大/缩小)
    Windows和Mac浏览器启动本地程序
    科目三(番禺化龙展贸东路)考试录20170224
    写jQuery插件该注意的
  • 原文地址:https://www.cnblogs.com/liuyi13535496566/p/12640090.html
Copyright © 2011-2022 走看看