123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- /**
- * BladeX Commercial License Agreement
- * Copyright (c) 2018-2099, https://bladex.cn. All rights reserved.
- * <p>
- * Use of this software is governed by the Commercial License Agreement
- * obtained after purchasing a license from BladeX.
- * <p>
- * 1. This software is for development use only under a valid license
- * from BladeX.
- * <p>
- * 2. Redistribution of this software's source code to any third party
- * without a commercial license is strictly prohibited.
- * <p>
- * 3. Licensees may copyright their own code but cannot use segments
- * from this software for such purposes. Copyright of this software
- * remains with BladeX.
- * <p>
- * Using this software signifies agreement to this License, and the software
- * must not be used for illegal purposes.
- * <p>
- * THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY. The author is
- * not liable for any claims arising from secondary or illegal development.
- * <p>
- * Author: Chill Zhuang (bladejava@qq.com)
- */
- package org.springblade.modules.system.controller;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.Parameter;
- import io.swagger.v3.oas.annotations.Parameters;
- import io.swagger.v3.oas.annotations.enums.ParameterIn;
- import io.swagger.v3.oas.annotations.media.Schema;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import jakarta.validation.Valid;
- import lombok.AllArgsConstructor;
- import org.springblade.core.boot.ctrl.BladeController;
- import org.springblade.core.cache.utils.CacheUtil;
- import org.springblade.core.launch.constant.AppConstant;
- import org.springblade.core.mp.support.Condition;
- import org.springblade.core.secure.BladeUser;
- import org.springblade.core.secure.annotation.PreAuth;
- import org.springblade.core.tenant.annotation.NonDS;
- import org.springblade.core.tool.api.R;
- import org.springblade.core.tool.constant.RoleConstant;
- import org.springblade.core.tool.node.TreeNode;
- import org.springblade.core.tool.support.Kv;
- import org.springblade.core.tool.utils.Func;
- import org.springblade.modules.system.pojo.entity.Menu;
- import org.springblade.modules.system.pojo.entity.TopMenu;
- import org.springblade.modules.system.service.IMenuService;
- import org.springblade.modules.system.service.ITopMenuService;
- import org.springblade.modules.system.pojo.vo.CheckedTreeVO;
- import org.springblade.modules.system.pojo.vo.GrantTreeVO;
- import org.springblade.modules.system.pojo.vo.MenuVO;
- import org.springblade.modules.system.wrapper.MenuWrapper;
- import org.springframework.web.bind.annotation.*;
- import java.util.List;
- import java.util.Map;
- import static org.springblade.core.cache.constant.CacheConstant.MENU_CACHE;
- /**
- * 控制器
- *
- * @author Chill
- */
- @NonDS
- @RestController
- @AllArgsConstructor
- @RequestMapping(AppConstant.APPLICATION_SYSTEM_NAME + "/menu")
- @Tag(name = "菜单", description = "菜单")
- public class MenuController extends BladeController {
- private final IMenuService menuService;
- private final ITopMenuService topMenuService;
- /**
- * 详情
- */
- @GetMapping("/detail")
- @ApiOperationSupport(order = 1)
- @Operation(summary = "详情", description = "传入menu")
- public R<MenuVO> detail(Menu menu) {
- Menu detail = menuService.getOne(Condition.getQueryWrapper(menu));
- return R.data(MenuWrapper.build().entityVO(detail));
- }
- /**
- * 列表
- */
- @GetMapping("/list")
- @Parameters({
- @Parameter(name = "code", description = "菜单编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
- @Parameter(name = "name", description = "菜单名称", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
- })
- @ApiOperationSupport(order = 2)
- @Operation(summary = "列表", description = "传入menu")
- public R<List<MenuVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> menu) {
- List<Menu> list = menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().orderByAsc(Menu::getSort));
- return R.data(MenuWrapper.build().listNodeVO(list));
- }
- /**
- * 懒加载列表
- */
- @GetMapping("/lazy-list")
- @Parameters({
- @Parameter(name = "code", description = "菜单编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
- @Parameter(name = "name", description = "菜单名称", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
- })
- @ApiOperationSupport(order = 3)
- @Operation(summary = "懒加载列表", description = "传入menu")
- public R<List<MenuVO>> lazyList(Long parentId, @Parameter(hidden = true) @RequestParam Map<String, Object> menu,BladeUser bladeUser) {
- menu.put("clientId",bladeUser.getClientId());
- List<MenuVO> list = menuService.lazyList(parentId, menu);
- return R.data(MenuWrapper.build().listNodeLazyVO(list));
- }
- /**
- * 菜单列表
- */
- @GetMapping("/menu-list")
- @Parameters({
- @Parameter(name = "code", description = "菜单编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
- @Parameter(name = "name", description = "菜单名称", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
- })
- @ApiOperationSupport(order = 4)
- @Operation(summary = "菜单列表", description = "传入menu")
- public R<List<MenuVO>> menuList(@Parameter(hidden = true) @RequestParam Map<String, Object> menu) {
- List<Menu> list = menuService.list(Condition.getQueryWrapper(menu, Menu.class).lambda().eq(Menu::getCategory, 1).orderByAsc(Menu::getSort));
- return R.data(MenuWrapper.build().listNodeVO(list));
- }
- /**
- * 懒加载菜单列表
- */
- @GetMapping("/lazy-menu-list")
- @Parameters({
- @Parameter(name = "code", description = "菜单编号", in = ParameterIn.QUERY, schema = @Schema(type = "string")),
- @Parameter(name = "name", description = "菜单名称", in = ParameterIn.QUERY, schema = @Schema(type = "string"))
- })
- @PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR)
- @ApiOperationSupport(order = 5)
- @Operation(summary = "懒加载菜单列表", description = "传入menu")
- public R<List<MenuVO>> lazyMenuList(Long parentId, @Parameter(hidden = true) @RequestParam Map<String, Object> menu) {
- List<MenuVO> list = menuService.lazyMenuList(parentId, menu);
- return R.data(MenuWrapper.build().listNodeLazyVO(list));
- }
- /**
- * 新增或修改
- */
- @PostMapping("/submit")
- @ApiOperationSupport(order = 6)
- @Operation(summary = "新增或修改", description = "传入menu")
- public R submit(@Valid @RequestBody Menu menu,BladeUser bladeUser) {
- if(Func.isNull(bladeUser.getClientId()) && Func.isEmpty(bladeUser.getClientId())){
- bladeUser.setClientId("saber3");
- }else{
- menu.setSysType(bladeUser.getClientId());
- }
- if (menuService.submit(menu)) {
- CacheUtil.clear(MENU_CACHE);
- CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
- // 返回懒加载树更新节点所需字段
- Kv kv = Kv.create().set("id", String.valueOf(menu.getId()));
- return R.data(kv);
- }
- return R.fail("操作失败");
- }
- /**
- * 删除
- */
- @PostMapping("/remove")
- @ApiOperationSupport(order = 7)
- @Operation(summary = "删除", description = "传入ids")
- public R remove(@Parameter(name = "主键集合", required = true) @RequestParam String ids) {
- CacheUtil.clear(MENU_CACHE);
- CacheUtil.clear(MENU_CACHE, Boolean.FALSE);
- return R.status(menuService.removeMenu(ids));
- }
- /**
- * 前端菜单数据
- */
- @GetMapping("/routes")
- @ApiOperationSupport(order = 8)
- @Operation(summary = "前端菜单数据", description = "前端菜单数据")
- public R<List<MenuVO>> routes(BladeUser user, Long topMenuId) {
- List<MenuVO> list = menuService.routes((user == null) ? null : user.getRoleId(), topMenuId,user.getClientId());
- return R.data(list);
- }
- /**
- * 前端菜单数据
- */
- @GetMapping("/routes-ext")
- @ApiOperationSupport(order = 9)
- @Operation(summary = "前端菜单数据", description = "前端菜单数据")
- public R<List<MenuVO>> routesExt(BladeUser user, Long topMenuId) {
- List<MenuVO> list = menuService.routesExt(user.getRoleId(), topMenuId);
- return R.data(list);
- }
- /**
- * 前端按钮数据
- */
- @GetMapping("/buttons")
- @ApiOperationSupport(order = 10)
- @Operation(summary = "前端按钮数据", description = "前端按钮数据")
- public R<List<MenuVO>> buttons(BladeUser user) {
- List<MenuVO> list = menuService.buttons(user.getRoleId(),user.getClientId());
- return R.data(list);
- }
- /**
- * 获取菜单树形结构
- */
- @GetMapping("/tree")
- @ApiOperationSupport(order = 11)
- @Operation(summary = "树形结构", description = "树形结构")
- public R<List<TreeNode>> tree(BladeUser bladeUser) {
- List<TreeNode> tree = menuService.tree(bladeUser.getClientId());
- return R.data(tree);
- }
- /**
- * 获取权限分配树形结构
- */
- @GetMapping("/grant-tree")
- @ApiOperationSupport(order = 12)
- @Operation(summary = "权限分配树形结构", description = "权限分配树形结构")
- public R<GrantTreeVO> grantTree(BladeUser user) {
- GrantTreeVO vo = new GrantTreeVO();
- vo.setMenu(menuService.grantTree(user));
- vo.setDataScope(menuService.grantDataScopeTree(user));
- vo.setApiScope(menuService.grantApiScopeTree(user));
- return R.data(vo);
- }
- /**
- * 获取权限分配树形结构
- */
- @GetMapping("/role-tree-keys")
- @ApiOperationSupport(order = 13)
- @Operation(summary = "角色所分配的树", description = "角色所分配的树")
- public R<CheckedTreeVO> roleTreeKeys(String roleIds) {
- CheckedTreeVO vo = new CheckedTreeVO();
- vo.setMenu(menuService.roleTreeKeys(roleIds));
- vo.setDataScope(menuService.dataScopeTreeKeys(roleIds));
- vo.setApiScope(menuService.apiScopeTreeKeys(roleIds));
- return R.data(vo);
- }
- /**
- * 获取顶部菜单树形结构
- */
- @GetMapping("/grant-top-tree")
- @ApiOperationSupport(order = 14)
- @Operation(summary = "顶部菜单树形结构", description = "顶部菜单树形结构")
- public R<GrantTreeVO> grantTopTree(BladeUser user) {
- GrantTreeVO vo = new GrantTreeVO();
- vo.setMenu(menuService.grantTopTree(user));
- return R.data(vo);
- }
- /**
- * 获取顶部菜单树形结构
- */
- @GetMapping("/top-tree-keys")
- @ApiOperationSupport(order = 15)
- @Operation(summary = "顶部菜单所分配的树", description = "顶部菜单所分配的树")
- public R<CheckedTreeVO> topTreeKeys(String topMenuIds) {
- CheckedTreeVO vo = new CheckedTreeVO();
- vo.setMenu(menuService.topTreeKeys(topMenuIds));
- return R.data(vo);
- }
- /**
- * 顶部菜单数据
- */
- @GetMapping("/top-menu")
- @ApiOperationSupport(order = 16)
- @Operation(summary = "顶部菜单数据", description = "顶部菜单数据")
- public R<List<TopMenu>> topMenu(BladeUser user) {
- if (Func.isEmpty(user)) {
- return null;
- }
- List<TopMenu> list = topMenuService.list(Wrappers.<TopMenu>query().lambda().orderByAsc(TopMenu::getSort));
- return R.data(list);
- }
- /**
- * 获取配置的角色权限
- */
- @GetMapping("auth-routes")
- @ApiOperationSupport(order = 17)
- @Operation(summary = "菜单的角色权限")
- public R<List<Kv>> authRoutes(BladeUser user) {
- if (Func.isEmpty(user)) {
- return null;
- }
- return R.data(menuService.authRoutes(user));
- }
- }
|