vue-admin-template-master组件学习-Tree 树形控件(1)

vue-admin-template-master组件学习-Tree 树形控件(1)

最终效果

最终效果

一、前端部署

1)router路由

在router文件夹中的index.js中添加路由

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

2)views页面

在views文件夹下新建subject文件夹并新建info.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/subject/info'
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.items
            })
    }
    // filterNode(value, data) {
    //   if (!value) return true
    //   return data.title.toLowerCase().indexOf(value.toLowerCase()) !== -1
    // }
  }
}
</script>

3)info.js

import request from '@/utils/request'
export default {
    getSubjectList() {
        return request({
        	//后端提供的接口
            url: '/stu/subject/getAllSubject',
            method: 'get'
          })
    }
}

二、数据库

有Excel导入到数据库(省略)
在这里插入图片描述
Excel文件
在这里插入图片描述

三、后端开发

通过自动生成功能创建了subject实体类,controller,service等等
主要是编写前端需要的数据形式(官方提供的数据形式)
在这里插入图片描述

1)定义一个SubjectTree类

package com.atrsm.stu.entity.vo;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Ro shinMM
 * @create 2020-08-14 16:06
 */
@Data
public class SubjectTree {
	//雪花算法自动生成的id
    private String id;
    //名称
    private String title;
    //孩子集合
    private List<SubjectTree> children = new ArrayList<>();
}

2)controller层返回数据

	@Autowired
    private SubjectService subjectService;
    
 	@ApiOperation("获取所有课程")
    @GetMapping("getAllSubject")
    public R getAllSubject(){
    	//自定义的treeList()方法
        List<SubjectTree> subjectTreeList = subjectService.treeList();
        return R.ok().data("items",subjectTreeList);
    }

3)service层

public interface SubjectService extends IService<Subject> {

    //void importSubjectData(MultipartFile file, SubjectService subjectService);

    List<SubjectTree> treeList();
}

4)SubjectServiceImpl实现类

@Service
public class SubjectServiceImpl extends ServiceImpl<SubjectMapper, Subject> implements SubjectService {

    @Override
    public List<SubjectTree> treeList() {
        ArrayList<SubjectTree> subjectTrees = new ArrayList<>();
        QueryWrapper<Subject> wrapper = new QueryWrapper<>();
        //数据库中parent_id为0的数据为一级目录
        wrapper.eq("parent_id","0");
        List<Subject> subjects = baseMapper.selectList(wrapper);
        for (int i = 0; i < subjects.size(); i++) {
            SubjectTree tree = new SubjectTree();
            BeanUtils.copyProperties(subjects.get(i),tree);
            //调用下面的递归方法
            addTree(tree);
            subjectTrees.add(tree);
        }
        return subjectTrees;
    }
	
	//递归方法
    public void addTree(SubjectTree subjectTree){
        if (subjectTree != null) {
            QueryWrapper<Subject> wrapper = new QueryWrapper<>();
            wrapper.eq("parent_id",subjectTree.getId());
            //获取到parent_id为父节点id的所有subject集合
            List<Subject> list = baseMapper.selectList(wrapper);
            //如果存在子节点,递归执行
            if (list.size() > 0){
            	//new一个所需数据的集合
                ArrayList<SubjectTree> subjectTrees = new ArrayList<>();
                for (int i = 0; i < list.size(); i++) {
                    Subject subject = list.get(i);
                    SubjectTree childTree = new SubjectTree();
                    //将所有subject集合中的元素复制给subjectTrees集合
                    //copyProperties这个方法第一个参数必须要有值
                    BeanUtils.copyProperties(subject,childTree);
                    //父节点添加子节点
                    subjectTrees.add(childTree);
                    //对子节点进行递归
                    addTree(childTree);
                }
                //将所有子节点的集合赋值给父元素
                subjectTree.setChildren(subjectTrees);
            }else {
                return;
            }
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值