三级分类
查询分级菜单
导入分类信息
在数据库electricity_pms
的pms_category
表中插入商品分类数据。直接将 sql 文件pms_catelog.sql
数据导入数据库。
Controller 层
在CategoryController
类中编写方法调用 service 层方法。
@RequestMapping("/list/tree")
public R list(@RequestParam Map<String, Object> params){ List<CategoryEntity> entities = categoryService.listWithTree(); return R.ok().put("data", entities); }
|
Service 层
在CategoryService
接口中编写 listWithTree 方法,并在CategoryServiceImpl
类中实现该方法,调用 dao 层获取分级的分类信息。
@Override public List<CategoryEntity> listWithTree() { List<CategoryEntity> entities = baseMapper.selectList(null); List<CategoryEntity> menus = entities.stream().filter((categoryEntity) -> categoryEntity.getParentCid() == 0 ).map((menu) -> { menu.setChildren(getChildren(menu, entities)); return menu; }).sorted((menu1, menu2) -> { return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort()); }).collect(Collectors.toList()); return menus; }
private List<CategoryEntity> getChildren(CategoryEntity root, List<CategoryEntity> all) { List<CategoryEntity> children = all.stream().filter(categoryEntity -> { return categoryEntity.getParentCid().equals(root.getCatId()); }).map(categoryEntity -> { categoryEntity.setChildren(getChildren(categoryEntity, all)); return categoryEntity; }).sorted((menu1, menu2) -> { return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort()); }).collect(Collectors.toList()); return children; }
|
在递归获取子分类信息时,需要一个字段保存子分类信息,该字段数据库中没有。需要在CategoryEntity
类添加字段。
@TableField(exist = false) private List<CategoryEntity> children;
|
配置网关路由
新建分类信息前端页面
启动renren-fast
后台项目和renren-fast-vue
前端项目,在前端页面系统管理中,选择菜单管理,然后新建目录商品管理,在该目录下再新建分类维护菜单,菜单 url 为product/category
。