using langguanApi.Extensions; using langguanApi.Extensions.AutoDI; using langguanApi.Model; using langguanApi.Model.Entity; using Mapster; using Microsoft.AspNetCore.Mvc.ApiExplorer; using System.Linq.Expressions; namespace langguanApi.Service { [ServiceInjection(InjectionType.Transient)] public class MenuService : BaseService { public MenuService(IConfiguration config) : base(config, nameof(Menu)) { } public async Task> GetMenusByParentId(string parentId) { Expression> exp = filter => filter.IsDelete == false && filter.ParentId == parentId; return (await base.GetListWithExp(exp)).OrderBy(x => x.Sort).ToList(); } public async Task AddMenu(AddMenuDto menu) { var entity = menu.Adapt(); await base.CreateAsync(entity); return new ApiResult(); } public async Task UpdateMenu(UpdateMenuDto menu) { var entity = menu.Adapt(); await base.UpdateAsync(entity.Id, entity); return new ApiResult(); } /// /// 获取菜单树 /// /// public async Task GetMenuTree() { //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 }; } /// /// 递归获取子菜单列表 /// /// /// 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; } } }