package com.iailab.module.system.controller.admin.permission; import com.iailab.framework.common.enums.CommonStatusEnum; import com.iailab.framework.common.pojo.CommonResult; import com.iailab.framework.common.util.object.BeanUtils; import com.iailab.module.system.controller.admin.permission.vo.menu.MenuListReqVO; import com.iailab.module.system.controller.admin.permission.vo.menu.MenuRespVO; import com.iailab.module.system.controller.admin.permission.vo.menu.MenuSaveVO; import com.iailab.module.system.controller.admin.permission.vo.menu.MenuSimpleRespVO; import com.iailab.module.system.dal.dataobject.permission.MenuDO; import com.iailab.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 org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import java.util.Comparator; import java.util.List; import static com.iailab.framework.common.pojo.CommonResult.error; import static com.iailab.framework.common.pojo.CommonResult.success; import static com.iailab.framework.tenant.core.context.TenantContextHolder.getTenantId; @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); } @PostMapping("/createAppMenu") @Operation(summary = "创建菜单") @PreAuthorize("@ss.hasPermission('system:app-menu:create')") public CommonResult createAppMenu(@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); } @PutMapping("/updateAppMenu") @Operation(summary = "修改菜单") @PreAuthorize("@ss.hasPermission('system:app-menu:update')") public CommonResult updateAppMenu(@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("/deleteAppMenu") @Operation(summary = "删除菜单") @Parameter(name = "id", description = "菜单编号", required= true, example = "1024") @PreAuthorize("@ss.hasPermission('system:app-menu:delete')") public CommonResult deleteAppMenu(@RequestParam("id") Long id) { menuService.deleteMenu(id); return success(true); } @GetMapping("/list") @Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面") @PreAuthorize("@ss.hasPermission('system:menu:query')") public CommonResult> getMenuList(MenuListReqVO reqVO) { List list = menuService.getMenuList(reqVO); list.sort(Comparator.comparing(MenuDO::getSort)); return success(BeanUtils.toBean(list, MenuRespVO.class)); } @GetMapping("/app-menu-list") @Operation(summary = "获取应用菜单列表", description = "用于【应用菜单】界面") @PreAuthorize("@ss.hasPermission('system:app-menu:query')") public CommonResult> getAppMenuList(MenuListReqVO reqVO) { // 获取 tenantId Long tenantId = getTenantId(); // 管理员租户不在此管理菜单 if(tenantId == 1l) { return error(-1, "管理员租户请在“菜单管理”中管理菜单!"); } List list = menuService.getAppMenuList(tenantId, 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.sort(Comparator.comparing(MenuDO::getSort)); return success(BeanUtils.toBean(list, MenuSimpleRespVO.class)); } @GetMapping({"simple-app-menus"}) @Operation(summary = "获取应用菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" + "在多租户的场景下,会只返回租户所在套餐有的菜单") public CommonResult> getSimpleAppMenuList() { List list = menuService.getAppMenuListByTenant( new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); list.sort(Comparator.comparing(MenuDO::getSort)); return success(BeanUtils.toBean(list, MenuSimpleRespVO.class)); } @GetMapping("/get") @Operation(summary = "获取菜单信息") @PreAuthorize("@ss.hasPermission('system:menu:query')") public CommonResult getMenu(Long id) { MenuDO menu = menuService.getMenu(id); return success(BeanUtils.toBean(menu, MenuRespVO.class)); } @GetMapping("/getAppMenu") @Operation(summary = "获取菜单信息") @PreAuthorize("@ss.hasPermission('system:app-menu:query')") public CommonResult getAppMenu(Long id) { MenuDO menu = menuService.getMenu(id); return success(BeanUtils.toBean(menu, MenuRespVO.class)); } }