package cn.iocoder.yudao.module.system.controller.admin.permission; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuImportExcelVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuImportReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuImportRespVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuRespVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO; import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSimpleRespVO; import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO; import cn.iocoder.yudao.module.system.service.permission.MenuService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.io.IOException; import java.util.Arrays; import java.util.Comparator; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 菜单") @RestController @RequestMapping("/system/menu") @Validated public class MenuController { @Resource private MenuService menuService; @PostMapping("/create") @Operation(summary = "创建菜单") @PreAuthorize("@ss.hasPermission('system:menu:create')") public CommonResult createMenu(@Valid @RequestBody MenuSaveVO createReqVO) { Long menuId = menuService.createMenu(createReqVO); return success(menuId); } @PutMapping("/update") @Operation(summary = "修改菜单") @PreAuthorize("@ss.hasPermission('system:menu:update')") public CommonResult updateMenu(@Valid @RequestBody MenuSaveVO updateReqVO) { menuService.updateMenu(updateReqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除菜单") @Parameter(name = "id", description = "菜单编号", required= true, example = "1024") @PreAuthorize("@ss.hasPermission('system:menu:delete')") public CommonResult deleteMenu(@RequestParam("id") Long id) { menuService.deleteMenu(id); return success(true); } @DeleteMapping("/delete-list") @Operation(summary = "批量删除菜单") @Parameter(name = "ids", description = "编号列表", required = true) @PreAuthorize("@ss.hasPermission('system:menu:delete')") public CommonResult deleteMenuList(@RequestParam("ids") List ids) { menuService.deleteMenuList(ids); return success(true); } @GetMapping("/list") @Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面") public CommonResult> getMenuList(MenuListReqVO reqVO) { List list = menuService.getMenuList(reqVO); list.sort(Comparator.comparing(MenuDO::getSort)); return success(BeanUtils.toBean(list, MenuRespVO.class)); } @GetMapping({"/list-all-simple", "simple-list"}) @Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。在多租户的场景下,会只返回租户所在套餐有的菜单") public CommonResult> getSimpleMenuList() { List list = menuService.getMenuListByTenant( new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); list = menuService.filterDisableMenus(list); list.sort(Comparator.comparing(MenuDO::getSort)); return success(BeanUtils.toBean(list, MenuSimpleRespVO.class)); } @GetMapping("/get") @Operation(summary = "获取菜单信息") public CommonResult getMenu(Long id) { MenuDO menu = menuService.getMenu(id); return success(BeanUtils.toBean(menu, MenuRespVO.class)); } @GetMapping("/get-import-template") @Operation(summary = "获得导入菜单模板") public void importTemplate(HttpServletResponse response) throws IOException { // 手动创建导出 demo List list = Arrays.asList( MenuImportExcelVO.builder().name("示例菜单").parentName("").type(2).sort(0) .permission("").path("demo").icon("").component("demo/index") .componentName("Demo").status(0).visible(true).keepAlive(true).alwaysShow(true).build() ); // 输出 ExcelUtils.write(response, "菜单导入模板.xls", "菜单列表", MenuImportExcelVO.class, list); } @PostMapping("/import") @Operation(summary = "导入菜单") @PreAuthorize("@ss.hasPermission('system:menu:import')") public CommonResult importExcel(@Valid MenuImportReqVO importReqVO) throws Exception { List list = ExcelUtils.read(importReqVO.getFile(), MenuImportExcelVO.class); return success(menuService.importMenuList(list, importReqVO)); } }