一、后端实现
1、定义vo
ChapterVo
package com.guli.edu.vo;@ApiModel(value = "章节信息")@Datapublic class ChapterVo implements Serializable {private static final long serialVersionUID = 1L;private String id;private String title;private List<VideoVo> children = new ArrayList<>();}
VideoVo
package com.guli.edu.vo;@ApiModel(value = "课时信息")@Datapublic class VideoVo implements Serializable {private static final long serialVersionUID = 1L;private String id;private String title;private Boolean free;}
2、服务层
接口
package com.guli.edu.service;public interface ChapterService extends IService<Chapter> {List<ChapterVo> nestedList(String courseId);}
实现
package com.guli.edu.service.impl;@Servicepublic class ChapterServiceImpl extends ServiceImpl<ChapterMapper, Chapter> implements ChapterService {@Autowiredprivate VideoService videoService;@Overridepublic List<ChapterVo> nestedList(String courseId) {//最终要的到的数据列表ArrayList<ChapterVo> chapterVoArrayList = new ArrayList<>();//获取章节信息QueryWrapper<Chapter> queryWrapper1 = new QueryWrapper<>();queryWrapper1.eq("course_id", courseId);queryWrapper1.orderByAsc("sort", "id");List<Chapter> chapters = baseMapper.selectList(queryWrapper1);//获取课时信息QueryWrapper<Video> queryWrapper2 = new QueryWrapper<>();queryWrapper2.eq("course_id", courseId);queryWrapper2.orderByAsc("sort", "id");List<Video> videos = videoService.list(queryWrapper2);//填充章节vo数据int count1 = chapters.size();for (int i = 0; i < count1; i++) {Chapter chapter = chapters.get(i);//创建章节vo对象ChapterVo chapterVo = new ChapterVo();BeanUtils.copyProperties(chapter, chapterVo);chapterVoArrayList.add(chapterVo);//填充课时vo数据ArrayList<VideoVo> videoVoArrayList = new ArrayList<>();int count2 = videos.size();for (int j = 0; j < count2; j++) {Video video = videos.get(j);if(chapter.getId().equals(video.getChapterId())){//创建课时vo对象VideoVo videoVo = new VideoVo();BeanUtils.copyProperties(video, videoVo);videoVoArrayList.add(videoVo);}}chapterVo.setChildren(videoVoArrayList);}return chapterVoArrayList;}}
3、web层
package com.guli.edu.controller.admin;@Api(description="课程章节管理")@CrossOrigin //跨域@RestController@RequestMapping("/admin/edu/chapter")public class ChapterAdminController {@Autowiredprivate ChapterService chapterService;@ApiOperation(value = "嵌套章节数据列表")@GetMapping("nested-list/{courseId}")public R nestedListByCourseId(@ApiParam(name = "courseId", value = "课程ID", required = true)@PathVariable String courseId){List<ChapterVo> chapterVoList = chapterService.nestedList(courseId);return R.ok().data("items", chapterVoList);}}
4、Swagger测试
二、前端实现
1、定义api
chapter.js
import request from '@/utils/request'const api_name = '/admin/edu/chapter'export default {getNestedTreeList(courseId) {return request({url: `${api_name}/nested-list/${courseId}`,method: 'get'})}}

">
