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;
}
}