feat: 代码生成支持生成菜单路由
This commit is contained in:
@@ -47,8 +47,11 @@ public class SysMenuController {
|
|||||||
|
|
||||||
@Operation(summary = "菜单下拉列表")
|
@Operation(summary = "菜单下拉列表")
|
||||||
@GetMapping("/options")
|
@GetMapping("/options")
|
||||||
public Result listMenuOptions() {
|
public Result listMenuOptions(
|
||||||
List<Option> menus = menuService.listMenuOptions();
|
@Parameter(description = "是否只查询父级菜单")
|
||||||
|
@RequestParam(required = false, defaultValue = "false") boolean onlyParent
|
||||||
|
) {
|
||||||
|
List<Option> menus = menuService.listMenuOptions(onlyParent);
|
||||||
return Result.success(menus);
|
return Result.success(menus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.youlai.system.service;
|
package com.youlai.system.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
import com.youlai.system.model.entity.GenConfig;
|
||||||
import com.youlai.system.model.form.MenuForm;
|
import com.youlai.system.model.form.MenuForm;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.common.model.Option;
|
||||||
import com.youlai.system.model.entity.SysMenu;
|
import com.youlai.system.model.entity.SysMenu;
|
||||||
@@ -24,11 +25,12 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||||||
*/
|
*/
|
||||||
List<MenuVO> listMenus(MenuQuery queryParams);
|
List<MenuVO> listMenus(MenuQuery queryParams);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取菜单下拉列表
|
* 获取菜单下拉列表
|
||||||
|
*
|
||||||
|
* @param onlyParent 是否只查询父级菜单
|
||||||
*/
|
*/
|
||||||
List<Option> listMenuOptions();
|
List<Option> listMenuOptions(boolean onlyParent);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 新增菜单
|
* 新增菜单
|
||||||
@@ -68,7 +70,7 @@ public interface SysMenuService extends IService<SysMenu> {
|
|||||||
* 为代码生成添加菜单
|
* 为代码生成添加菜单
|
||||||
*
|
*
|
||||||
* @param parentMenuId 父菜单ID
|
* @param parentMenuId 父菜单ID
|
||||||
* @param entityName 实体名
|
* @param genConfig 实体名
|
||||||
*/
|
*/
|
||||||
void addMenuForCodeGeneration(Long parentMenuId,String businessName, String entityName);
|
void saveMenu(Long parentMenuId, GenConfig genConfig);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ public class GeneratorServiceImpl implements GeneratorService {
|
|||||||
genConfig.setEntityName(entityName);
|
genConfig.setEntityName(entityName);
|
||||||
|
|
||||||
String packageName = SystemApplication.class.getPackageName();
|
String packageName = SystemApplication.class.getPackageName();
|
||||||
genConfig.setPackageName(packageName);
|
genConfig.setPackageName( StrUtil.subBefore(packageName, ".", true));
|
||||||
|
genConfig.setModuleName(StrUtil.subAfter(packageName, ".", true));
|
||||||
|
|
||||||
genConfig.setAuthor(generatorProperties.getDefaultConfig().getAuthor());
|
genConfig.setAuthor(generatorProperties.getDefaultConfig().getAuthor());
|
||||||
|
|
||||||
@@ -177,7 +178,7 @@ public class GeneratorServiceImpl implements GeneratorService {
|
|||||||
// 如果选择上级菜单
|
// 如果选择上级菜单
|
||||||
Long parentMenuId = formData.getParentMenuId();
|
Long parentMenuId = formData.getParentMenuId();
|
||||||
if (parentMenuId != null) {
|
if (parentMenuId != null) {
|
||||||
menuService.addMenuForCodeGeneration(parentMenuId,genConfig.getBusinessName(),genConfig.getEntityName());
|
menuService.saveMenu(parentMenuId,genConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<GenFieldConfig> genFieldConfigs = genConfigConverter.toGenFieldConfig(formData.getFieldConfigs());
|
List<GenFieldConfig> genFieldConfigs = genConfigConverter.toGenFieldConfig(formData.getFieldConfigs());
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import com.youlai.system.common.model.Option;
|
|||||||
import com.youlai.system.converter.MenuConverter;
|
import com.youlai.system.converter.MenuConverter;
|
||||||
import com.youlai.system.mapper.SysMenuMapper;
|
import com.youlai.system.mapper.SysMenuMapper;
|
||||||
import com.youlai.system.model.bo.RouteBO;
|
import com.youlai.system.model.bo.RouteBO;
|
||||||
|
import com.youlai.system.model.entity.GenConfig;
|
||||||
import com.youlai.system.model.entity.SysMenu;
|
import com.youlai.system.model.entity.SysMenu;
|
||||||
import com.youlai.system.model.form.MenuForm;
|
import com.youlai.system.model.form.MenuForm;
|
||||||
import com.youlai.system.model.query.MenuQuery;
|
import com.youlai.system.model.query.MenuQuery;
|
||||||
@@ -102,11 +103,15 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 菜单下拉数据
|
* 菜单下拉数据
|
||||||
|
*
|
||||||
|
* @param onlyParent 是否只查询父级菜单 如果为true,排除按钮
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<Option> listMenuOptions() {
|
public List<Option> listMenuOptions(boolean onlyParent) {
|
||||||
List<SysMenu> menuList = this.list(new LambdaQueryWrapper<SysMenu>()
|
List<SysMenu> menuList = this.list(new LambdaQueryWrapper<SysMenu>()
|
||||||
.orderByAsc(SysMenu::getSort));
|
.in(onlyParent, SysMenu::getType, MenuTypeEnum.CATALOG.getValue(), MenuTypeEnum.MENU.getValue())
|
||||||
|
.orderByAsc(SysMenu::getSort)
|
||||||
|
);
|
||||||
return buildMenuOptions(SystemConstants.ROOT_NODE_ID, menuList);
|
return buildMenuOptions(SystemConstants.ROOT_NODE_ID, menuList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -355,27 +360,40 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||||||
* 为代码生成添加菜单
|
* 为代码生成添加菜单
|
||||||
*
|
*
|
||||||
* @param parentMenuId 父菜单ID
|
* @param parentMenuId 父菜单ID
|
||||||
* @param entityName 实体名称
|
* @param genConfig 实体名称
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void addMenuForCodeGeneration(Long parentMenuId, String businessName, String entityName) {
|
public void saveMenu(Long parentMenuId, GenConfig genConfig) {
|
||||||
SysMenu parentMenu = this.getById(parentMenuId);
|
SysMenu parentMenu = this.getById(parentMenuId);
|
||||||
Assert.notNull(parentMenu, "父菜单不存在");
|
Assert.notNull(parentMenu, "上级菜单不存在");
|
||||||
|
|
||||||
|
String entityName = genConfig.getEntityName();
|
||||||
|
|
||||||
long count = this.count(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getRouteName, entityName));
|
long count = this.count(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getRouteName, entityName));
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取父级菜单子菜单最带的排序
|
||||||
|
SysMenu maxSortMenu = this.getOne(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, parentMenuId)
|
||||||
|
.orderByDesc(SysMenu::getSort)
|
||||||
|
.last("limit 1")
|
||||||
|
);
|
||||||
|
int sort = 1;
|
||||||
|
if (maxSortMenu != null) {
|
||||||
|
sort = maxSortMenu.getSort() + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
SysMenu menu = new SysMenu();
|
SysMenu menu = new SysMenu();
|
||||||
menu.setParentId(parentMenuId);
|
menu.setParentId(parentMenuId);
|
||||||
menu.setName(businessName);
|
menu.setName(genConfig.getBusinessName());
|
||||||
|
|
||||||
menu.setRouteName(entityName);
|
menu.setRouteName(entityName);
|
||||||
menu.setRoutePath(StrUtil.toUnderlineCase(entityName));
|
menu.setRoutePath(StrUtil.toSymbolCase(entityName, '-'));
|
||||||
menu.setComponent(StrUtil.toUnderlineCase(entityName) + "/index");
|
menu.setComponent(genConfig.getModuleName() + "/" + StrUtil.toSymbolCase(entityName, '-') + "/index");
|
||||||
menu.setType(MenuTypeEnum.CATALOG);
|
menu.setType(MenuTypeEnum.MENU);
|
||||||
menu.setSort(0);
|
menu.setSort(sort);
|
||||||
menu.setVisible(1);
|
menu.setVisible(1);
|
||||||
boolean result = this.save(menu);
|
boolean result = this.save(menu);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user