【想法】element-table列表排序和上移,下移一项,序号重排等

场景

课程-(章节)视频 模型,课程库下存在多门课程,一门课程包含多个视频;章节也需要显示唯一序号,例如:

2-12-22-3

课程页面

主要功能包括 **课程排序上移 **、**下移 **、**序号重排 **、**序号手动编辑 **,章节模块页面同理
![image.png](https://img-blog.csdnimg.cn/img_convert/e3800ebfced79def229bf56f7810640f.png#align=left&display=inline&height=239&margin=[object Object]&name=image.png&originHeight=478&originWidth=1652&size=56482&status=done&style=none&width=826)

获取列表

// 课程list查询参数
queryParams: {
  orderByColumn: "sort",
  isAsc: "asc",
  pageNum: 1,
  pageSize: 10,
  courseName: undefined,
  contentIntroduce:undefined
},

实现


数据库

课程表添加排序字段 Sort;章节表也添加排序字段 sort 数据库实际都是小写

接口

课程上移一项

/**
 * 课程列表上移
 */
@PostMapping("/moveUp/{id}")
public AjaxResult moveUp(@PathVariable("id") Long courseId){
    return tCourseService.moveUpCourse(courseId);
}

业务

/**
 * 课程列表上移
 */
@Override
@Transactional
public AjaxResult moveUpCourse(Long courseId) {
    TVideoCourse course = tCourseService.getById(courseId); // 当前课程
    // 1. 找到比 course 小的最接近的一个
    TVideoCourse lessThanCourse = tCourseService.getOne(Wrappers.<TVideoCourse>lambdaQuery()
            .lt(TVideoCourse::getSort, course.getSort())
            .orderByDesc(TVideoCourse::getSort).last("limit 1"));
    if (lessThanCourse == null){
        return AjaxResult.error("已经为第一个");
    }
    // 2. 交换排序
    Integer courseSort = course.getSort(); // 取出 course 的 sort
    course.setSort(lessThanCourse.getSort());
    lessThanCourse.setSort(courseSort); 
	// 3. 更新数据
    tVideoCourseMapper.updateById(course);
    return toAjax(tVideoCourseMapper.updateById(lessThanCourse));
}

课程下移一项

/**
 * 课程列表下移
 */
@PostMapping("/moveDown/{id}")
public AjaxResult moveDown(@PathVariable("id") Long courseId){
    return tCourseService.moveDownCourse(courseId);
}

业务

/**
 * 课程列表下移
 */
@Override
@Transactional
public AjaxResult moveDownCourse(Long courseId) {
    TVideoCourse course = tCourseService.getById(courseId);
    // 找到比 course 大的第一个
    TVideoCourse moreThanCourse = tCourseService.getOne(Wrappers.<TVideoCourse>lambdaQuery()
            .gt(TVideoCourse::getSort, course.getSort())
            .orderByAsc(TVideoCourse::getSort).last("limit 1"));
    if (moreThanCourse == null){
        return AjaxResult.error("已经为最后一个");
    }
    Integer courseSort = course.getSort(); // 取出 course 的 sort
    course.setSort(moreThanCourse.getSort());
    moreThanCourse.setSort(courseSort); // 交换排序

    tVideoCourseMapper.updateById(course);
    return toAjax(tVideoCourseMapper.updateById(moreThanCourse));
}

课程序号重排

/**
 * 课程序号重新排序
 */
@PostMapping("/resort")
public AjaxResult resort(){
    return tCourseService.resort();
}

业务

/**
 * 课程序号重新排序
 */
@Override
public AjaxResult resort() {
    List<TVideoCourse> courseList = tCourseService.list();
    for (int i = 0; i < courseList.size(); i++) {
        TVideoCourse course = courseList.get(i);
        course.setSort(i + 1); // 重排序号
    }
    tCourseService.updateBatchById(courseList);
    return AjaxResult.success();
}

CRUD


新增

新增课程 (✔) 时,先获取Sort字段最大值,再设置新的课程序号为 Sort+1 ,章节 (✔) 同理

// 新增课程业务 片段
TVideoCourse maxCourse = tCourseService.getOne(Wrappers.<TVideoCourse>lambdaQuery()
	.orderByDesc(TVideoCourse::getSort).last("limit 1"));
if (maxCourse == null){
    tCourse.setSort(1); // 第一门课
} else {
    tCourse.setSort(maxCourse.getSort() + 1);
}
...

编辑

编辑接口中需要保证序号不重复
![image.png](https://img-blog.csdnimg.cn/img_convert/918fe61b0dd778c1f4ef3fe8b34f186d.png#align=left&display=inline&height=448&margin=[object Object]&name=image.png&originHeight=895&originWidth=618&size=137337&status=done&style=shadow&width=309)

删除

删除课程或视频,排序依然可用

章节

列表list接口回显

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值