package com.youlai.boot.system.controller; import com.youlai.boot.common.annotation.Log; import com.youlai.boot.common.annotation.RepeatSubmit; import com.youlai.boot.common.enums.LogModuleEnum; import com.youlai.boot.common.model.Option; import com.youlai.boot.core.web.Result; import com.youlai.boot.system.model.form.MenuForm; import com.youlai.boot.system.model.query.MenuQuery; import com.youlai.boot.system.model.vo.MenuVo; import com.youlai.boot.system.model.vo.RouteVo; import com.youlai.boot.system.service.MenuService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; /** * 菜单控制层 * * @author Ray.Hao * @since 2020/11/06 */ @Tag(name = "04.菜单接口") @RestController @RequestMapping("/api/v1/menus") @RequiredArgsConstructor @Slf4j public class MenuController { private final MenuService menuService; @Operation(summary = "菜单列表") @GetMapping @Log(value = "菜单列表", module = LogModuleEnum.MENU) public Result> getMenus(MenuQuery queryParams) { List menuList = menuService.listMenus(queryParams); return Result.success(menuList); } @Operation(summary = "菜单下拉列表") @GetMapping("/options") public Result>> getMenuOptions( @Parameter(description = "是否只查询父级菜单") @RequestParam(required = false, defaultValue = "false") boolean onlyParent ) { List> menus = menuService.listMenuOptions(onlyParent); return Result.success(menus); } @Operation(summary = "当前用户菜单路由列表") @GetMapping("/routes") public Result> getCurrentUserRoutes() { List routeList = menuService.listCurrentUserRoutes(); return Result.success(routeList); } @Operation(summary = "菜单表单数据") @GetMapping("/{id}/form") @PreAuthorize("@ss.hasPerm('sys:menu:update')") public Result getMenuForm( @Parameter(description = "菜单ID") @PathVariable Long id ) { MenuForm menu = menuService.getMenuForm(id); return Result.success(menu); } @Operation(summary = "新增菜单") @PostMapping @PreAuthorize("@ss.hasPerm('sys:menu:create')") @RepeatSubmit public Result addMenu(@RequestBody MenuForm menuForm) { boolean result = menuService.saveMenu(menuForm); return Result.judge(result); } @Operation(summary = "修改菜单") @PutMapping(value = "/{id}") @PreAuthorize("@ss.hasPerm('sys:menu:update')") public Result updateMenu( @RequestBody MenuForm menuForm ) { boolean result = menuService.saveMenu(menuForm); return Result.judge(result); } @Operation(summary = "删除菜单") @DeleteMapping("/{id}") @PreAuthorize("@ss.hasPerm('sys:menu:delete')") public Result deleteMenu( @Parameter(description = "菜单ID,多个以英文(,)分割") @PathVariable("id") Long id ) { boolean result = menuService.deleteMenu(id); return Result.judge(result); } @Operation(summary = "修改菜单显示状态") @PatchMapping("/{menuId}") @PreAuthorize("@ss.hasPerm('sys:menu:update')") public Result updateMenuVisible( @Parameter(description = "菜单ID") @PathVariable Long menuId, @Parameter(description = "显示状态(1:显示;0:隐藏)") Integer visible ) { boolean result = menuService.updateMenuVisible(menuId, visible); return Result.judge(result); } }