SysMenuController.cs 8.2 KB

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