前言
现在是2022年4月16日21:44:05!今天分享一个代码段,个人觉得还是比较有参考性的。
- 后端使用框架:bladex
- 前端使用技术:AVue
- 功能:自定义分页
- 实现思路:由于业务上涉及到了多个表进行关联查询,所有直接使用框架自带的分页无法满足前端分页,所以就想着自己封装一个吧,现在记录记录,等后面自己用到的时候回来看看,也希望能帮助其他人。
实现代码
整体思路是这样的:
- 查询当前用户下的所有应用
- 查询每个应用下的所有设备
- 将查询出来的设备信息封装在分页工具类中
- 给前端传回去分页对象
比较麻烦的地方就在于,计算当前页以及将当前页的信息放在集合中传出去,下面是实现代码:
/** * 分页 设备流程表 */ @GetMapping("/list") @ApiOperationSupport(order = 2) @ApiOperation(value = "分页", notes = "传入equipment") public R<IPage<Equipment>> list(Equipment equipment, Query query) { //获取当前用户应用 Application application = new Application(); application.setUserId(AuthUtil.getUserId()); List<Application> appList = applicationService.list(Condition.getQueryWrapper(application).select("app_id")); List<Equipment> equipmentList = new ArrayList<>(); for(Application app : appList){ QueryWrapper<Equipment> equipmentQueryWrapper = new QueryWrapper<>(); equipmentQueryWrapper.eq("application_id",app.getAppId()); List<Equipment> eList = equipmentService.list(equipmentQueryWrapper); for(Equipment e : eList){ equipmentList.add(e); } } //新的集合 List<Equipment> equipmentListNew = new ArrayList<>(); //当前页 //如果是第一页,0-10 //第二页,11-20 Integer current = (query.getCurrent()-1)*query.getSize(); //页大小 Integer pageSize = query.getSize(); if(equipmentList.size()<pageSize){ pageSize = equipmentList.size(); }else if(query.getCurrent()>1) { if (equipmentList.size() % query.getSize() != 0) { pageSize = (pageSize * (query.getCurrent() - 1)) + (equipmentList.size() % query.getSize()); }else{ pageSize = pageSize * query.getCurrent(); } } for(int i = current;i<pageSize;i++){ equipmentListNew.add(equipmentList.get(i)); } IPage<Equipment> pages =new Page<>(); pages.setRecords(equipmentListNew); pages.setSize(query.getSize()); pages.setCurrent(query.getCurrent()); pages.setTotal(equipmentList.size()); return R.data(pages); } pages.setTotal(equipmentList.size()); return R.data(pages); }