namespace MiaoYu.Api.Admin.ApplicationServices.Systems; /// /// 角色 菜单 功能服务 /// public class SysRoleMenuFunctionService : ApplicationService> { private readonly IRepository _sysMenuRepository; private readonly IRepository _sysMenuFunctionRepository; public SysRoleMenuFunctionService(IRepository defaultRepository, IRepository sysMenuRepository, IRepository sysMenuFunctionRepository) : base(defaultRepository) { _sysMenuRepository = sysMenuRepository; _sysMenuFunctionRepository = sysMenuFunctionRepository; } /// /// 保存数据 /// /// /// [Transactional] public async Task SaveFormAsync(List form) { var sysRoleMenuFunctions = new List(); var roleId = form.Count > 0 ? form[0].RoleId : default; if (roleId == Guid.Empty) return; await _defaultRepository.DeleteAsync(w => w.RoleId == roleId); foreach (var item in form) { var menuId = item.MenuId; var menuFuncionList = item.MenuFunctionIdList; var list = menuFuncionList .Select(item => new SysRoleMenuFunction { MenuId = menuId, RoleId = roleId, MenuFunctionId = item }) .ToList(); sysRoleMenuFunctions.AddRange(list); } await _defaultRepository.InsertRangeAsync(sysRoleMenuFunctions); } /// /// 获取 角色 勾选的菜单功能集合 /// /// /// public async Task>> GetRoleMenuFunctionByRoleIdAsync(Guid roleId) { var allMenus = await _sysMenuRepository.ToListAllAsync(); var allMenuFunction = await _sysMenuFunctionRepository.ToListAllAsync(); var allRoleMenuFunction = await _defaultRepository.Select.Where(w => w.RoleId == roleId).ToListAsync(); var result = new List>(); foreach (var item in allMenus) { //组装菜单 var menuFunctions = allMenuFunction .Where(w => w.MenuId == item.Id) .Select(w => new { w.Id, Label = w.FunctionName }) .ToList(); //获取当前角色勾选该菜单的按钮数组 var checkedMenuFunctionIds = allRoleMenuFunction .Where(w => w.MenuId == item.Id) .Select(w => w.MenuFunctionId) .ToList() ; result.Add(new Dictionary { ["id"] = item.Id, ["name"] = item.Name, ["number"] = item.Number, ["parentId"] = item.ParentId, ["levelCode"] = item.LevelCode, ["menuFunctions"] = menuFunctions, ["checkedMenuFunctionIds"] = checkedMenuFunctionIds, ["checkAll"] = menuFunctions.Count == checkedMenuFunctionIds.Count, ["indeterminate"] = checkedMenuFunctionIds.Count > 0 && checkedMenuFunctionIds.Count < menuFunctions.Count }); } return result; } }