diff --git a/langguanApi.xml b/langguanApi.xml index 0d7dcb0..278c917 100644 --- a/langguanApi.xml +++ b/langguanApi.xml @@ -167,6 +167,44 @@ + + + MenuController + + + + + 菜单服务 + + + + + 获取菜单列表 + + + + + + + 添加菜单 + + + + + + + 更新菜单 + + + + + + + 删除菜单 + + + + 组织的工序 @@ -805,6 +843,26 @@ 父菜单ID,一级菜单为null + + + 菜单名称 + + + + + 菜单URL + + + + + 排序 + + + + + 父菜单ID,一级菜单为null + + 角色名称 @@ -825,6 +883,11 @@ 角色描述 + + + 菜单ID + + 更新角色DTO @@ -1730,6 +1793,13 @@ + + + 获取菜单树 + + + + OrganizedService @@ -1813,6 +1883,13 @@ + + + 删除角色菜单 + + + + 更新角色菜单 diff --git a/langguanApi/Controllers/MenuController.cs b/langguanApi/Controllers/MenuController.cs new file mode 100644 index 0000000..49cff20 --- /dev/null +++ b/langguanApi/Controllers/MenuController.cs @@ -0,0 +1,69 @@ +using langguanApi.Model; +using langguanApi.Model.Entity; +using langguanApi.Service; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace langguanApi.Controllers +{ + /// + /// MenuController + /// + [Route("api/[controller]")] + [ApiController] + public class MenuController : ControllerBase + { + /// + /// 菜单服务 + /// + private readonly MenuService _menuService; + public MenuController(MenuService menuService) + { + _menuService = menuService; + } + /// + /// 获取菜单列表 + /// + /// + /// + [HttpGet("list")] + public async Task List([FromQuery] reqpage input) + { + var result = await _menuService.Pager(input); + return Ok(result); + } + /// + /// 添加菜单 + /// + /// + /// + [HttpPost("add")] + public async Task Add(AddMenuDto input) + { + var result = await _menuService.AddMenu(input); + return Ok(result); + } + /// + /// 更新菜单 + /// + /// + /// + [HttpPut("update")] + public async Task Update(UpdateMenuDto input) + { + var result = await _menuService.UpdateMenu(input); + return Ok(result); + } + /// + /// 删除菜单 + /// + /// + /// + [HttpDelete("remove")] + public async Task Remove(IEnumerable ids) + { + await _menuService.BatchRemoveAsync(ids); + return Ok(new ApiResult()); + } + } +} diff --git a/langguanApi/Controllers/RoleController.cs b/langguanApi/Controllers/RoleController.cs index 59874aa..1e3201c 100644 --- a/langguanApi/Controllers/RoleController.cs +++ b/langguanApi/Controllers/RoleController.cs @@ -16,9 +16,11 @@ namespace langguanApi.Controllers public class RoleController : ControllerBase { public readonly RoleService _roleService; - public RoleController(RoleService roleService) + private readonly RoleMenuServie _roleMenuServie; + public RoleController(RoleService roleService, RoleMenuServie roleMenuServie) { _roleService = roleService; + _roleMenuServie = roleMenuServie; } /// /// 获取角色详情 diff --git a/langguanApi/Model/Entity/Menu.cs b/langguanApi/Model/Entity/Menu.cs index 02ccc82..8a8ad83 100644 --- a/langguanApi/Model/Entity/Menu.cs +++ b/langguanApi/Model/Entity/Menu.cs @@ -45,4 +45,26 @@ { public string Id { get; set; } } + public class MenuTreeDto + { + public string Id { get; set; } + /// + /// 菜单名称 + /// + public string Name { get; set; } + /// + /// 菜单URL + /// + public string Url { get; set; } + /// + /// 排序 + /// + public int Sort { get; set; } + /// + /// 父菜单ID,一级菜单为null + /// + public string ParentId { get; set; } + public string ParentName { get; set; } + public List Children { get; set; } + } } diff --git a/langguanApi/Model/Entity/Role.cs b/langguanApi/Model/Entity/Role.cs index 2b446ba..540b3cb 100644 --- a/langguanApi/Model/Entity/Role.cs +++ b/langguanApi/Model/Entity/Role.cs @@ -21,6 +21,10 @@ /// 角色描述 /// public string RoleDescription { get; set; } + /// + /// 菜单ID + /// + public IEnumerable MenuIds { get; set; } } /// /// 更新角色DTO diff --git a/langguanApi/Service/AlertService.cs b/langguanApi/Service/AlertService.cs index d6af8ea..2a522ac 100644 --- a/langguanApi/Service/AlertService.cs +++ b/langguanApi/Service/AlertService.cs @@ -41,7 +41,7 @@ namespace langguanApi.Service /// public async Task GetPage(reqpage input) { - Expression> exp = filter => filter.DeviceMn.Contains(input.key) && filter.IsDelete == false; + Expression> exp = filter => filter.IsDelete == false; return await base.GetPager(new ReqPaing() { pageSize = input.pageSize, diff --git a/langguanApi/Service/MenuService.cs b/langguanApi/Service/MenuService.cs index ac02656..adfd2f4 100644 --- a/langguanApi/Service/MenuService.cs +++ b/langguanApi/Service/MenuService.cs @@ -1,4 +1,5 @@ -using langguanApi.Extensions.AutoDI; +using langguanApi.Extensions; +using langguanApi.Extensions.AutoDI; using langguanApi.Model; using langguanApi.Model.Entity; using Mapster; @@ -30,5 +31,57 @@ namespace langguanApi.Service await base.UpdateAsync(entity.Id, entity); return new ApiResult(); } + /// + /// 获取菜单树 + /// + /// + /// + public async Task Pager(reqpage input) + { + Expression> exp = filter => filter.IsDelete == false; + if (!string.IsNullOrEmpty(input.key)) + { + exp = exp.And(filter => filter.Name.Contains(input.key)); + } + List dto = new List(); + var MenuList = await GetChildList(null); + foreach (var item in MenuList) + { + dto.Add(new MenuTreeDto() + { + Id = item.Id, + Name = item.Name, + Sort = item.Sort, + ParentId = item.ParentId, + ParentName = item.ParentName, + Children = await GetChildList(item.Id) + }); + } + return new ApiResult() { data = dto }; + + //return await base.GetPager(new ReqPaing() + //{ + // pageSize = input.pageSize, + // current = input.current + //}, exp); + } + /// + /// 递归获取子菜单列表 + /// + /// + /// + public async Task> GetChildList(string parentId) + { + Expression> exp = filter => filter.IsDelete == false && filter.ParentId == parentId; + var list = (await GetListWithExp(exp)) + .OrderByDescending(x => x.Sort) + .ToList().Adapt>(); + foreach (var item in list) + { + item.Children = await GetChildList(item.Id); + item.ParentName = (await base.GetAsync(item.ParentId))?.Name; + } + return list; + } } } diff --git a/langguanApi/Service/RoleMenuServie.cs b/langguanApi/Service/RoleMenuServie.cs index c7829e9..a9eeebf 100644 --- a/langguanApi/Service/RoleMenuServie.cs +++ b/langguanApi/Service/RoleMenuServie.cs @@ -38,9 +38,16 @@ namespace langguanApi.Service } return new ApiResult() { code = 0 }; } - public async Task DeleteRoleMenu(string roleId) + /// + /// 删除角色菜单 + /// + /// + /// + public async Task RemoveByRoleId(string roleId) { - return null; + Expression> exp = filter => filter.IsDelete == false && filter.RoleId == roleId; + await base.BatchRemoveAsync(exp); + return new ApiResult() { code = 0 }; } /// /// 更新角色菜单 diff --git a/langguanApi/Service/RoleService.cs b/langguanApi/Service/RoleService.cs index d29dac5..71b6216 100644 --- a/langguanApi/Service/RoleService.cs +++ b/langguanApi/Service/RoleService.cs @@ -36,6 +36,14 @@ namespace langguanApi.Service } var entity = role.Adapt(); await base.CreateAsync(entity); + foreach (var item in role.MenuIds) + { + await _roleMenuServie.CreateAsync(new RoleMenu() + { + RoleId = entity.Id, + MenuId = item + }); + } return new ApiResult() { code = 0 }; } /// @@ -78,6 +86,15 @@ namespace langguanApi.Service { var entity = role.Adapt(); await base.UpdateAsync(entity.Id, entity); + await _roleMenuServie.RemoveByRoleId(entity.Id); + foreach (var item in role.MenuIds) + { + await _roleMenuServie.CreateAsync(new RoleMenu() + { + MenuId = item, + RoleId = entity.Id + }); + } return new ApiResult() { code = 0 }; } /// diff --git a/langguanApi/Service/UserService.cs b/langguanApi/Service/UserService.cs index a34892c..aefb0c5 100644 --- a/langguanApi/Service/UserService.cs +++ b/langguanApi/Service/UserService.cs @@ -77,7 +77,11 @@ namespace langguanApi.Service /// public async Task GetPage(reqpage input) { - Expression> exp = filter => filter.Username.Contains(input.key) && filter.IsDelete == false; + Expression> exp = filter => true; + if (!string.IsNullOrEmpty(input.key)) + { + exp = filter => filter.Username.Contains(input.key) || filter.Phone.Contains(input.key) || filter.Email.Contains(input.key); + } return await base.GetPager(new ReqPaing() { pageSize = input.pageSize,