LayoutController.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Web.Mvc;
  4. using Abp.Application.Navigation;
  5. using Abp.Authorization;
  6. using Abp.Configuration;
  7. using Abp.Configuration.Startup;
  8. using Abp.Domain.Repositories;
  9. using Abp.Localization;
  10. using Abp.Runtime.Caching;
  11. using Abp.Runtime.Session;
  12. using Abp.Threading;
  13. using WeOnlineApp.Authorization;
  14. using WeOnlineApp.BaseInfo;
  15. using WeOnlineApp.BaseSystem.Configuration.Ui;
  16. using WeOnlineApp.BaseSystem.Sessions;
  17. using WeOnlineApp.Configuration;
  18. using WeOnlineApp.Models;
  19. using WeOnlineApp.Models.Layout;
  20. using WeOnlineApp.Views.Shared.SearchForm;
  21. using IwbZero.Authorization.Base.Users;
  22. using IwbZero.Runtime.Session;
  23. namespace WeOnlineApp.Controllers
  24. {
  25. public class LayoutController : IwbControllerBase
  26. {
  27. private readonly IUserNavigationManager _userNavigationManager;
  28. private readonly ISessionAppService _sessionAppService;
  29. private readonly IMultiTenancyConfig _multiTenancyConfig;
  30. private readonly ILanguageManager _languageManager;
  31. private IRepository<SysFunction> FunctionRepository { get; }
  32. public LayoutController(
  33. IUserNavigationManager userNavigationManager,
  34. ISessionAppService sessionAppService,
  35. IMultiTenancyConfig multiTenancyConfig,
  36. ILanguageManager languageManager, IRepository<SysFunction> functionRepository)
  37. {
  38. _userNavigationManager = userNavigationManager;
  39. _sessionAppService = sessionAppService;
  40. _multiTenancyConfig = multiTenancyConfig;
  41. _languageManager = languageManager;
  42. FunctionRepository = functionRepository;
  43. }
  44. #region Old
  45. [ChildActionOnly]
  46. public PartialViewResult TopBarUserArea()
  47. {
  48. var model = new TopBarUserAreaViewModel(AbpSession);
  49. return PartialView("_TopBarUserArea", model);
  50. }
  51. [ChildActionOnly]
  52. public PartialViewResult SideBarNav(string activeMenu = "")
  53. {
  54. var model = new SideBarNavViewModel
  55. {
  56. MainMenu = AsyncHelper.RunSync(() => _userNavigationManager.GetMenuAsync("MainMenu", AbpSession.ToUserIdentifier())),
  57. ActiveMenuItemName = activeMenu,
  58. PageTitles = new List<PageTitle>()
  59. };
  60. if (!string.IsNullOrEmpty(activeMenu))
  61. {
  62. var menu = PermissionManager.GetPermission(activeMenu);
  63. var names = GetActiveNames(menu);
  64. model.ActiveNames = names.Item1;
  65. names.Item2.Reverse();
  66. model.PageTitles = names.Item2;
  67. }
  68. return PartialView("_SideBarNav", model);
  69. }
  70. [ChildActionOnly]
  71. public PartialViewResult SideBarUserArea()
  72. {
  73. var model = new SideBarUserAreaViewModel
  74. {
  75. LoginInformations = AsyncHelper.RunSync(() => _sessionAppService.GetCurrentLoginInformations()),
  76. IsMultiTenancyEnabled = _multiTenancyConfig.IsEnabled,
  77. };
  78. return PartialView("_SideBarUserArea", model);
  79. }
  80. [ChildActionOnly]
  81. public PartialViewResult LanguageSelection()
  82. {
  83. var model = new LanguageSelectionViewModel
  84. {
  85. CurrentLanguage = _languageManager.CurrentLanguage,
  86. Languages = _languageManager.GetLanguages().Where(l => !l.IsDisabled).ToList()
  87. .Where(l => !l.IsDisabled)
  88. .ToList(),
  89. CurrentUrl = Request.Path
  90. };
  91. return PartialView("_LanguageSelection", model);
  92. }
  93. [ChildActionOnly]
  94. public PartialViewResult RightSideBar()
  95. {
  96. var themeName = SettingManager.GetSettingValue(IwbSettingNames.UiTheme);
  97. var viewModel = new RightSideBarViewModel
  98. {
  99. CurrentTheme = UiThemes.All.FirstOrDefault(t => t.CssClass == themeName)
  100. };
  101. return PartialView("_RightSideBar", viewModel);
  102. }
  103. #endregion
  104. [ChildActionOnly]
  105. public PartialViewResult UserMenu(string id)
  106. {
  107. var model = new TopBarUserAreaViewModel(AbpSession);
  108. if (string.IsNullOrEmpty(id))
  109. {
  110. return PartialView("_UserMenuHeader", model);
  111. }
  112. return PartialView("_UserMenuSidebar", model);
  113. }
  114. [ChildActionOnly]
  115. public PartialViewResult LanguageChange()
  116. {
  117. var model = new LanguageSelectionViewModel
  118. {
  119. CurrentLanguage = _languageManager.CurrentLanguage,
  120. Languages = _languageManager.GetLanguages().Where(l => !l.IsDisabled).ToList()
  121. .Where(l => !l.IsDisabled)
  122. .ToList(),
  123. CurrentUrl = Request.Path
  124. };
  125. return PartialView("_LanguageChange", model);
  126. }
  127. [ChildActionOnly]
  128. public PartialViewResult ToolMenu(string activeMenu = "", object searchForm = null)
  129. {
  130. var model = new List<ToolMenuViewModel>();
  131. ViewBag.ActiveMenu = activeMenu;
  132. try
  133. {
  134. ViewBag.SearchFrom = (SearchFormViewModel)searchForm;
  135. }
  136. catch
  137. {
  138. ViewBag.SearchFrom = null;
  139. }
  140. if (string.IsNullOrEmpty(activeMenu))
  141. {
  142. return PartialView("_ToolMenu", model);
  143. }
  144. var permission = PermissionManager.GetPermissionOrNull(activeMenu);
  145. if (permission != null)
  146. {
  147. var userName = AbpSession.GetUserName();
  148. foreach (var child in permission.Children)
  149. {
  150. if (PermissionChecker.IsGranted(child.Name))
  151. {
  152. var fun = AsyncHelper.RunSync(() => FunctionRepository.FirstOrDefaultAsync(a => a.PermissionName == child.Name));
  153. if (fun.FunctionType != FunctionTypeDefinition.Button || fun.Script.ToLower() == "none")
  154. {
  155. continue;
  156. }
  157. if (fun.Script != null && (fun.Script.ToLower().StartsWith("admin") ||
  158. fun.Script.ToLower().StartsWith("_admin")) &&
  159. userName != UserBase.HostAdminName && userName != UserBase.HostSystemName &&
  160. userName != UserBase.AdminUserName && userName != UserBase.SystemUserName)
  161. {
  162. continue;
  163. }
  164. var menu = new ToolMenuViewModel(fun)
  165. {
  166. DisplayName = L(fun.PermissionName?.Replace(".", "") ?? "none")
  167. };
  168. model.Add(menu);
  169. }
  170. }
  171. }
  172. return PartialView("_ToolMenu", model);
  173. }
  174. [ChildActionOnly]
  175. public PartialViewResult NavSideBar(string activeMenu = "")
  176. {
  177. var model = new SideBarNavViewModel
  178. {
  179. MainMenu = AsyncHelper.RunSync(() => _userNavigationManager.GetMenuAsync("MainMenu", AbpSession.ToUserIdentifier())),
  180. ActiveMenuItemName = activeMenu,
  181. PageTitles = new List<PageTitle>()
  182. };
  183. if (!string.IsNullOrEmpty(activeMenu))
  184. {
  185. var menu = PermissionManager.GetPermission(activeMenu);
  186. var names = GetActiveNames(menu);
  187. model.ActiveNames = names.Item1;
  188. names.Item2.Reverse();
  189. model.PageTitles = names.Item2;
  190. }
  191. return PartialView("_NavSidebar", model);
  192. }
  193. [ChildActionOnly]
  194. public PartialViewResult ControlSideBar()
  195. {
  196. var themeName = SettingManager.GetSettingValue(IwbSettingNames.UiTheme);
  197. var viewModel = new RightSideBarViewModel
  198. {
  199. CurrentTheme = UiThemes.All.FirstOrDefault(t => t.CssClass == themeName)
  200. };
  201. return PartialView("_ControlSideBar", viewModel);
  202. }
  203. private (List<string>, List<PageTitle>) GetActiveNames(Permission permission)
  204. {
  205. var nameList = new List<string>() { permission.Name };
  206. var fun = permission.Properties.ContainsKey(IwbConsts.AuthPropertiesFunName)
  207. ? (SysFunction)permission.Properties[IwbConsts.AuthPropertiesFunName]
  208. : CacheManager.GetCache(IwbCacheNames.FunctionCache).Get(permission.Name,
  209. () => FunctionRepository.FirstOrDefault(a => a.PermissionName == permission.Name));
  210. var pageTitles = new List<PageTitle>() { new PageTitle(fun?.Icon ?? "", L(fun?.PermissionName)?.Replace(".", "") ?? "") };
  211. if (permission.Parent != null)
  212. {
  213. var parent = GetActiveNames(permission.Parent);
  214. nameList.AddRange(parent.Item1);
  215. pageTitles.AddRange(parent.Item2);
  216. }
  217. return (nameList, pageTitles);
  218. }
  219. }
  220. }