SysMenuController.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using Infrastructure;
  2. using Infrastructure.Attribute;
  3. using Infrastructure.Enums;
  4. using Infrastructure.Model;
  5. using Mapster;
  6. using Microsoft.AspNetCore.Mvc;
  7. using ZR.Admin.WebApi.Extensions;
  8. using ZR.Admin.WebApi.Filters;
  9. using ZR.Model.System;
  10. using ZR.Model.System.Dto;
  11. using ZR.Service.System.IService;
  12. namespace ZR.Admin.WebApi.Controllers.System
  13. {
  14. /// <summary>
  15. /// 系统菜单
  16. /// </summary>
  17. [Verify]
  18. [Route("/system/menu")]
  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. [ActionPermissionFilter(Permission = "system:menu:list")]
  38. [HttpGet("list")]
  39. public IActionResult TreeMenuList([FromQuery] MenuQueryDto menu)
  40. {
  41. long userId = HttpContext.GetUId();
  42. return SUCCESS(sysMenuService.SelectTreeMenuList(menu, userId), "yyyy-MM-dd HH:mm:ss");
  43. }
  44. /// <summary>
  45. /// 根据菜单编号获取详细信息
  46. /// </summary>
  47. /// <param name="menuId"></param>
  48. /// <returns></returns>
  49. [HttpGet("{menuId}")]
  50. [ActionPermissionFilter(Permission = "system:menu:query")]
  51. public IActionResult GetMenuInfo(int menuId = 0)
  52. {
  53. return SUCCESS(sysMenuService.GetMenuByMenuId(menuId), "yyyy-MM-dd HH:mm:ss");
  54. }
  55. /// <summary>
  56. /// 根据菜单编号获取菜单列表,菜单管理首次进入
  57. /// </summary>
  58. /// <param name="menuId"></param>
  59. /// <returns></returns>
  60. [HttpGet("list/{menuId}")]
  61. [ActionPermissionFilter(Permission = "system:menu:query")]
  62. public IActionResult GetMenuList(int menuId = 0)
  63. {
  64. long userId = HttpContext.GetUId();
  65. return SUCCESS(sysMenuService.GetMenusByMenuId(menuId, userId), "yyyy-MM-dd HH:mm:ss");
  66. }
  67. /// <summary>
  68. /// 获取角色菜单信息
  69. /// 加载对应角色菜单列表树
  70. /// </summary>
  71. /// <param name="roleId"></param>
  72. /// <returns></returns>
  73. [HttpGet("roleMenuTreeselect/{roleId}")]
  74. public IActionResult RoleMenuTreeselect(int roleId)
  75. {
  76. long userId = HttpContext.GetUId();
  77. var menus = sysMenuService.SelectMenuList(new MenuQueryDto(), userId);
  78. var checkedKeys = sysRoleService.SelectUserRoleMenus(roleId);
  79. return SUCCESS(new
  80. {
  81. checkedKeys,
  82. menus = sysMenuService.BuildMenuTreeSelect(menus),
  83. });
  84. }
  85. /// <summary>
  86. /// 修改菜单
  87. /// </summary>
  88. /// <param name="menuDto"></param>
  89. /// <returns></returns>
  90. [HttpPost("edit")]
  91. [Log(Title = "菜单管理", BusinessType = BusinessType.UPDATE)]
  92. [ActionPermissionFilter(Permission = "system:menu:edit")]
  93. public IActionResult MenuEdit([FromBody] MenuDto menuDto)
  94. {
  95. if (menuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
  96. //if (UserConstants.NOT_UNIQUE.Equals(sysMenuService.CheckMenuNameUnique(MenuDto)))
  97. //{
  98. // return ToResponse(ApiResult.Error($"修改菜单'{MenuDto.menuName}'失败,菜单名称已存在"));
  99. //}
  100. var config = new TypeAdapterConfig();
  101. //映射规则
  102. config.ForType<SysMenu, MenuDto>()
  103. .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);//忽略字段名称的大小写;//忽略除以上配置的所有字段
  104. var modal = menuDto.Adapt<SysMenu>(config).ToUpdate(HttpContext);
  105. if (UserConstants.YES_FRAME.Equals(modal.IsFrame) && !modal.Path.StartsWith("http"))
  106. {
  107. return ToResponse(ApiResult.Error($"修改菜单'{modal.MenuName}'失败,地址必须以http(s)://开头"));
  108. }
  109. if (modal.MenuId.Equals(modal.ParentId))
  110. {
  111. return ToResponse(ApiResult.Error($"修改菜单'{modal.MenuName}'失败,上级菜单不能选择自己"));
  112. }
  113. modal.Update_by = HttpContext.GetName();
  114. int result = sysMenuService.EditMenu(modal);
  115. return ToResponse(result);
  116. }
  117. /// <summary>
  118. /// 添加菜单
  119. /// </summary>
  120. /// <param name="menuDto"></param>
  121. /// <returns></returns>
  122. [HttpPut("add")]
  123. [Log(Title = "菜单管理", BusinessType = BusinessType.INSERT)]
  124. [ActionPermissionFilter(Permission = "system:menu:add")]
  125. public IActionResult MenuAdd([FromBody] MenuDto menuDto)
  126. {
  127. var config = new TypeAdapterConfig();
  128. //映射规则
  129. config.ForType<SysMenu, MenuDto>()
  130. .NameMatchingStrategy(NameMatchingStrategy.IgnoreCase);
  131. var menu = menuDto.Adapt<SysMenu>(config).ToCreate(HttpContext);
  132. if (menu == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
  133. if (UserConstants.NOT_UNIQUE.Equals(sysMenuService.CheckMenuNameUnique(menu)))
  134. {
  135. return ToResponse(ApiResult.Error($"新增菜单'{menu.MenuName}'失败,菜单名称已存在"));
  136. }
  137. if (UserConstants.YES_FRAME.Equals(menu.IsFrame) && !menu.Path.StartsWith("http"))
  138. {
  139. return ToResponse(ApiResult.Error($"新增菜单'{menu.MenuName}'失败,地址必须以http(s)://开头"));
  140. }
  141. menu.Create_by = HttpContext.GetName();
  142. int result = sysMenuService.AddMenu(menu);
  143. return ToResponse(result);
  144. }
  145. /// <summary>
  146. /// 菜单删除
  147. /// </summary>
  148. /// <param name="menuId"></param>
  149. /// <returns></returns>
  150. [HttpDelete("{menuId}")]
  151. [Log(Title = "菜单管理", BusinessType = BusinessType.DELETE)]
  152. [ActionPermissionFilter(Permission = "system:menu:remove")]
  153. public IActionResult Remove(int menuId = 0)
  154. {
  155. if (sysMenuService.HasChildByMenuId(menuId))
  156. {
  157. return ToResponse(ResultCode.CUSTOM_ERROR, "存在子菜单,不允许删除");
  158. }
  159. if (sysRoleMenuService.CheckMenuExistRole(menuId))
  160. {
  161. return ToResponse(ResultCode.CUSTOM_ERROR, "菜单已分配,不允许删除");
  162. }
  163. int result = sysMenuService.DeleteMenuById(menuId);
  164. return ToResponse(result);
  165. }
  166. /// <summary>
  167. /// 保存排序
  168. /// </summary>
  169. /// <param name="id"></param>
  170. /// <param name="value"></param>
  171. /// <returns></returns>
  172. [ActionPermissionFilter(Permission = "system:menu:update")]
  173. [HttpGet("ChangeSort")]
  174. [Log(Title = "保存排序", BusinessType = BusinessType.UPDATE)]
  175. public IActionResult ChangeSort(int id = 0, int value = 0)
  176. {
  177. MenuDto MenuDto = new()
  178. {
  179. MenuId = id,
  180. OrderNum = value
  181. };
  182. if (MenuDto == null) { return ToResponse(ApiResult.Error(101, "请求参数错误")); }
  183. int result = sysMenuService.ChangeSortMenu(MenuDto);
  184. return ToResponse(result);
  185. }
  186. }
  187. }