using Hotline.Repository.SqlSugar.DataPermissions; using Hotline.Settings; using Hotline.Share.Dtos.Menu; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using XF.Domain.Dependency; namespace Hotline.Repository.SqlSugar.System { public class SystemMenuRepository : BaseRepository, ISystemMenuRepository, IScopeDependency { public SystemMenuRepository(ISugarUnitOfWork uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder) { } public async Task> GetSystemMenus() { var list = await Db.Queryable() .OrderBy(x => x.DisplayOrder) //.Includes(t => t.ButtonArr) .ToTreeAsync(x => x.children, it => it.ParentId, ""); return list; } /// /// 获取可选快速入口(排除已有) /// /// /// public async Task> GetFastMenu(string[] roles, string userId,string name) { var list = await Db.Queryable() .Where(x => roles.Contains(x.RoleCode)).ToListAsync(); var codes = list.SelectMany(d => d.SystemMenuArr).Select(d => d.Code).Distinct(); var model = await Db.Queryable().FirstAsync(x => x.UserId == userId); var perList = new List(); if (model != null) { perList = codes.Except(model.FastMenuArr).ToList(); } if (perList.Count > 0) { //过滤已存在的 var menulist = await Db.Queryable() .Where(x => x.IsFast && perList.Contains(x.PermissionCode) && x.PageName.Contains(name) && x.MenuType == Share.Enums.Settings.EMenuType.Menu).ToListAsync(); return menulist; } else { var menulist = await Db.Queryable() .Where(x => (x.IsFast && x.MenuType == Share.Enums.Settings.EMenuType.Menu)).ToListAsync(); return menulist; } } /// /// 获取我的快速入口 /// /// /// /// public async Task> GetMyFastMenu(string[] roles, string userId) { var list = await Db.Queryable() .Where(x => roles.Contains(x.RoleCode)).ToListAsync(); var codes = list.SelectMany(d => d.SystemMenuArr).Select(d => d.Code).Distinct(); var model = await Db.Queryable().FirstAsync(x => x.UserId == userId); if (model != null) { var perList = codes.Intersect(model.FastMenuArr).ToList(); return await Db.Queryable().Where(x => perList.Contains(x.PermissionCode) && x.MenuType == Share.Enums.Settings.EMenuType.Menu).ToListAsync(); } return new List(); } } }