public override Task <MenusRoleReponse> GetMenusByRole(MenusRoleRequest request, ServerCallContext context) { var result = new MenusRoleReponse(); var tree = GetRoleOfMenus(request.RoleId); result.Datas.Add(new MenusByRole { Id = 0, Icon = "home", Title = "首页", Path = "/index" }); tree.ForEach(item => { var model = new MenusByRole { Id = item.Id, Title = item.Title, Icon = item.Icon ?? "", Path = "" }; if (item.Children.Count > 0) { item.Children.ForEach(child => { model.Children.Add(new MenusByRole { Id = child.Id, Icon = child.Icon ?? "", Path = child.Path + "?id=" + child.Id, Title = child.Title }); }); } result.Datas.Add(model); }); return(Task.FromResult(result)); }
public override Task <RoleMenuReponse> GetMenusSetRole(MenusRoleRequest request, ServerCallContext context) { var result = new RoleMenuReponse(); var datas = _menu.GetAll().OrderBy(item => item.Id).AsNoTracking().ToList(); var listMenus = new List <RoleMenuDto>(); datas.ForEach(item => { listMenus.Add(new RoleMenuDto { ParentId = item.ParentId, Id = item.Id, Title = item.Name, Icon = item.Icon, Path = item.Url, Operates = item.Operates, Children = new List <RoleMenuDto>() }); }); var tree = listMenus.Where(item => item.ParentId == 99999).ToList(); var operates = _operate .GetAll() .AsNoTracking() .Select(item => new { item.Id, item.Name, item.Unique }).ToList(); tree.ForEach(item => { BuildMeunsRecursiveTree(listMenus, item); }); tree.ForEach(item => { var model = new MenuModel { Id = $"{item.Id}_0", Lable = item.Title }; if (item.Children.Count > 0) { item.Children.ForEach(child => { var operateModel = new MenuModel { Id = $"{child.Id}_0", Lable = child.Title }; model.Children.Add(operateModel); operates.ForEach(op => { if (JsonConvert.DeserializeObject <List <int> >(child.Operates).Contains(op.Id)) { operateModel.Children.Add(new MenuModel { Id = $"{child.Id}_{op.Id}", Lable = op.Name }); } }); }); } result.List.Add(model); }); var roleMenus = GetRoleOfMenus(request.RoleId); roleMenus.ForEach(item => { if (item.Children.Count > 0) { item.Children.ForEach(child => { JsonConvert.DeserializeObject <List <int> >(child.Operates).ForEach(operateId => { operates.ForEach(op => { if (op.Id != operateId) { return; } result.MenuIds.Add($"{child.Id}_{op.Id}"); }); }); }); } }); return(Task.FromResult(result)); }