SysMenuController.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. using Attribute;
  2. using Dto;
  3. using Enums;
  4. using Extensions;
  5. using Filters;
  6. using Infrastructure;
  7. using Infrastructure.Model;
  8. using Mapster;
  9. using Microsoft.AspNetCore.Mvc;
  10. using Middleware;
  11. using Model;
  12. using Model.Base;
  13. using Services;
  14. using Util;
  15. namespace Controllers
  16. {
  17. /// <summary>
  18. /// 系统菜单
  19. /// </summary>
  20. [ApiExplorerSettings(GroupName = "sys")]
  21. public class SysMenuController : BaseController
  22. {
  23. private readonly ISysRoleService sysRoleService;
  24. private readonly ISysMenuService sysMenuService;
  25. private readonly ISysRoleMenuService sysRoleMenuService;
  26. public SysMenuController(
  27. ISysRoleService sysRoleService,
  28. ISysMenuService sysMenuService,
  29. ISysRoleMenuService sysRoleMenuService)
  30. {
  31. this.sysRoleService = sysRoleService;
  32. this.sysMenuService = sysMenuService;
  33. this.sysRoleMenuService = sysRoleMenuService;
  34. }
  35. /// <summary>
  36. /// 获取菜单列表
  37. /// </summary>
  38. /// <returns></returns>
  39. [HttpGet("/v1/admin/sysServer/menu/list")]
  40. public IActionResult TreeMenuList()
  41. {
  42. var response = sysMenuService.GetList();
  43. return SUCCESS(response, "yyyy-MM-dd HH:mm:ss");
  44. }
  45. /// <summary>
  46. /// 获取菜单树列表
  47. /// </summary>
  48. /// <returns></returns>
  49. [HttpGet("/v1/admin/sysServer/menu/tree")]
  50. public IActionResult TreeMenuList([FromQuery] MenuQueryDto menu)
  51. {
  52. TokenModel loginUser = JwtUtil.GetLoginUser(HttpContext);
  53. long userId = loginUser.userId;
  54. return SUCCESS(sysMenuService.SelectTreeMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss");
  55. }
  56. /// <summary>
  57. /// 获取菜单列表
  58. /// </summary>
  59. /// <returns></returns>
  60. [ActionPermissionFilter(Permission = "system:menu:list")]
  61. [HttpGet("list")]
  62. public IActionResult MenuList([FromQuery] MenuQueryDto menu)
  63. {
  64. long userId = HttpContext.GetUId();
  65. return SUCCESS(sysMenuService.SelectMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss");
  66. }
  67. /// <summary>
  68. /// 根据菜单编号获取详细信息
  69. /// </summary>
  70. /// <param name="menuId"></param>
  71. /// <returns></returns>
  72. [HttpGet("{menuId}")]
  73. [ActionPermissionFilter(Permission = "system:menu:query")]
  74. public IActionResult GetMenuInfo(int menuId = 0)
  75. {
  76. return SUCCESS(sysMenuService.GetMenuByMenuId(menuId), "yyyy-MM-dd HH:mm:ss");
  77. }
  78. /// <summary>
  79. /// 根据菜单编号获取菜单列表,菜单管理首次进入
  80. /// </summary>
  81. /// <param name="menuId"></param>
  82. /// <returns></returns>
  83. [HttpGet("list/{menuId}")]
  84. [ActionPermissionFilter(Permission = "system:menu:query")]
  85. public IActionResult GetMenuList(int menuId = 0)
  86. {
  87. long userId = HttpContext.GetUId();
  88. return SUCCESS(sysMenuService.GetMenusByMenuId(menuId, userId), "yyyy-MM-dd HH:mm:ss");
  89. }
  90. /// <summary>
  91. /// 获取角色菜单信息
  92. /// 加载对应角色菜单列表树
  93. /// </summary>
  94. /// <param name="roleId"></param>
  95. /// <returns></returns>
  96. [HttpGet("/v1/admin/sysServer/menu/getRoleTree")]
  97. public IActionResult RoleMenuTreeselect([FromQuery] RoleMenuQueryDto menu)
  98. {
  99. TokenModel loginUser = JwtUtil.GetLoginUser(HttpContext);
  100. var menus = sysMenuService.SelectMenuList(new MenuQueryDto(), loginUser.userId);
  101. var setCheckedKeys = sysRoleService.SelectUserRoleMenus(menu.roleId);
  102. return SUCCESS(new
  103. {
  104. setCheckedKeys,
  105. menus = sysMenuService.BuildMenuTreeSelect(menus),
  106. });
  107. }
  108. [Verify]
  109. [HttpGet("/v1/admin/sysServer/menu/getUserMenu")]
  110. public IActionResult GetMenus()
  111. {
  112. long userId = HttpContext.GetUId();
  113. var menus = sysMenuService.SelectMenuList(new MenuQueryDto(), userId);
  114. return SUCCESS(sysMenuService.BuildLeftMenuTreeSelect(menus));
  115. }
  116. /// <summary>
  117. /// 修改菜单
  118. /// </summary>
  119. /// <param name="menuDto"></param>
  120. /// <returns></returns>
  121. [HttpPut("/v1/admin/sysServer/menu/update")]
  122. public IActionResult MenuEdit([FromBody] MenuDto menuDto)
  123. {
  124. if (menuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
  125. //if (UserConstants.NOT_UNIQUE.Equals(sysMenuService.CheckMenuNameUnique(MenuDto)))
  126. //{
  127. // return ToResponse(ApiResult.Error($"修改菜单'{MenuDto.menuName}'失败,菜单名称已存在"));
  128. //}
  129. var config = new TypeAdapterConfig();
  130. //映射规则
  131. config.ForType<SysMenu, MenuDto>()
  132. .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略字段名称的大小写;//忽略除以上配置的所有字段
  133. var modal = menuDto.Adapt<SysMenu>(config).ToUpdate(HttpContext);
  134. if (modal.menuType == "3" && !modal.path.StartsWith("http"))
  135. {
  136. return ToResponse(ApiResult.Error($"修改菜单'{modal.name}'失败,地址必须以http(s)://开头"));
  137. }
  138. if (modal.menuId.Equals(modal.parentId))
  139. {
  140. return ToResponse(ApiResult.Error($"修改菜单'{modal.name}'失败,上级菜单不能选择自己"));
  141. }
  142. TokenModel loginUser = JwtUtil.GetLoginUser(HttpContext);
  143. modal.UpdateBy = loginUser.username;
  144. long result = sysMenuService.EditMenu(modal);
  145. return SUCCESS(result);
  146. }
  147. /// <summary>
  148. /// 添加菜单
  149. /// </summary>
  150. /// <param name="menuDto"></param>
  151. /// <returns></returns>
  152. [HttpPost("/v1/admin/sysServer/menu/add")]
  153. public IActionResult MenuAdd([FromBody] MenuDto menuDto)
  154. {
  155. var config = new TypeAdapterConfig();
  156. //映射规则
  157. config.ForType<SysMenu, MenuDto>()
  158. .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);
  159. var menu = menuDto.Adapt<SysMenu>(config).ToCreate(HttpContext);
  160. if (menu == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
  161. if (UserConstants.NOT_UNIQUE.Equals(sysMenuService.CheckMenuNameUnique(menu)))
  162. {
  163. return ToResponse(ApiResult.Error($"新增菜单'{menu.name}'失败,菜单名称已存在"));
  164. }
  165. if (menu.menuType == "3" && !menu.path.StartsWith("http"))
  166. {
  167. return ToResponse(ApiResult.Error($"新增菜单'{menu.name}'失败,地址必须以http(s)://开头"));
  168. }
  169. TokenModel loginUser = JwtUtil.GetLoginUser(HttpContext);
  170. menu.CreateBy = loginUser.username;
  171. menu.UpdateBy = loginUser.username;
  172. menu.DelFlag = "0";
  173. long result = sysMenuService.AddMenu(menu);
  174. return SUCCESS(result);
  175. }
  176. /// <summary>
  177. /// 菜单删除
  178. /// </summary>
  179. /// <param name="menuId"></param>
  180. /// <returns></returns>
  181. [HttpDelete("/v1/admin/sysServer/menu/removeById/{id}")]
  182. public IActionResult Remove(int id)
  183. {
  184. if (sysMenuService.HasChildByMenuId(id))
  185. {
  186. return ToResponse(ResultCode.CUSTOM_ERROR, "存在子菜单,不允许删除");
  187. }
  188. if (sysRoleMenuService.CheckMenuExistRole(id))
  189. {
  190. return ToResponse(ResultCode.CUSTOM_ERROR, "菜单已分配,不允许删除");
  191. }
  192. int result = sysMenuService.DeleteMenuById(id);
  193. return SUCCESS(result);
  194. }
  195. /// <summary>
  196. /// 保存排序
  197. /// </summary>
  198. /// <param name="id"></param>
  199. /// <param name="value"></param>
  200. /// <returns></returns>
  201. [ActionPermissionFilter(Permission = "system:menu:update")]
  202. [HttpGet("ChangeSort")]
  203. [Log(Title = "保存排序", BusinessType = BusinessType.UPDATE)]
  204. public IActionResult ChangeSort(int id = 0, int value = 0)
  205. {
  206. MenuDto MenuDto = new()
  207. {
  208. menuId = id,
  209. sortOrder = value
  210. };
  211. if (MenuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
  212. int result = sysMenuService.ChangeSortMenu(MenuDto);
  213. return ToResponse(result);
  214. }
  215. }
  216. }