SysMenuController.cs 9.4 KB

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