SystemMenuRepository.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Hotline.Repository.SqlSugar.DataPermissions;
  2. using Hotline.Settings;
  3. using Hotline.Share.Dtos.Menu;
  4. using SqlSugar;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Runtime.CompilerServices;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using XF.Domain.Dependency;
  12. namespace Hotline.Repository.SqlSugar.System
  13. {
  14. public class SystemMenuRepository : BaseRepository<SystemMenu>, ISystemMenuRepository, IScopeDependency
  15. {
  16. public SystemMenuRepository(ISugarUnitOfWork<HotlineDbContext> uow, IDataPermissionFilterBuilder dataPermissionFilterBuilder) : base(uow, dataPermissionFilterBuilder)
  17. {
  18. }
  19. public async Task<IReadOnlyList<SystemMenu>> GetSystemMenus()
  20. {
  21. var list = await Db.Queryable<SystemMenu>()
  22. .OrderBy(x => x.DisplayOrder)
  23. //.Includes(t => t.ButtonArr)
  24. .ToTreeAsync(x => x.children, it => it.ParentId, "");
  25. return list;
  26. }
  27. /// <summary>
  28. /// 获取可选快速入口(排除已有)
  29. /// </summary>
  30. /// <param name="roles"></param>
  31. /// <returns></returns>
  32. public async Task<IReadOnlyList<SystemMenu>> GetFastMenu(string[] roles, string userId,string name)
  33. {
  34. var list = await Db.Queryable<SystemAuthority>()
  35. .Where(x => roles.Contains(x.RoleCode)).ToListAsync();
  36. var codes = list.SelectMany(d => d.SystemMenuArr).Select(d => d.Code).Distinct();
  37. var model = await Db.Queryable<UserFastMenu>().FirstAsync(x => x.UserId == userId);
  38. var perList = new List<string>();
  39. if (model != null)
  40. {
  41. perList = codes.Except(model.FastMenuArr).ToList();
  42. }
  43. if (perList.Count > 0)
  44. {
  45. //过滤已存在的
  46. var menulist = await Db.Queryable<SystemMenu>()
  47. .Where(x => x.IsFast && perList.Contains(x.PermissionCode) && x.PageName.Contains(name) && x.MenuType == Share.Enums.Settings.EMenuType.Menu).ToListAsync();
  48. return menulist;
  49. }
  50. else
  51. {
  52. var menulist = await Db.Queryable<SystemMenu>()
  53. .Where(x => (x.IsFast && x.MenuType == Share.Enums.Settings.EMenuType.Menu)).ToListAsync();
  54. return menulist;
  55. }
  56. }
  57. /// <summary>
  58. /// 获取我的快速入口
  59. /// </summary>
  60. /// <param name="roles"></param>
  61. /// <param name="userId"></param>
  62. /// <returns></returns>
  63. public async Task<IReadOnlyList<SystemMenu>> GetMyFastMenu(string[] roles, string userId)
  64. {
  65. var list = await Db.Queryable<SystemAuthority>()
  66. .Where(x => roles.Contains(x.RoleCode)).ToListAsync();
  67. var codes = list.SelectMany(d => d.SystemMenuArr).Select(d => d.Code).Distinct();
  68. var model = await Db.Queryable<UserFastMenu>().FirstAsync(x => x.UserId == userId);
  69. if (model != null)
  70. {
  71. var perList = codes.Intersect(model.FastMenuArr).ToList();
  72. return await Db.Queryable<SystemMenu>().Where(x => perList.Contains(x.PermissionCode) && x.MenuType == Share.Enums.Settings.EMenuType.Menu).ToListAsync();
  73. }
  74. return new List<SystemMenu>();
  75. }
  76. }
  77. }