abp(net core)+easyui+efcore實現倉儲管理系統——ABP整體介紹(一)html
abp(net core)+easyui+efcore實現倉儲管理系統——解決方案介紹(二)前端
abp(net core)+easyui+efcore實現倉儲管理系統——領域層建立實體(三)node
abp(net core)+easyui+efcore實現倉儲管理系統——定義倉儲並實現 (四)算法
abp(net core)+easyui+efcore實現倉儲管理系統——建立應用服務(五)app
abp(net core)+easyui+efcore實現倉儲管理系統——展示層實現增刪改查之控制器(六)編輯器
abp(net core)+easyui+efcore實現倉儲管理系統——展示層實現增刪改查之列表視圖(七)ide
abp(net core)+easyui+efcore實現倉儲管理系統——展示層實現增刪改查之增刪改視圖(八)post
abp(net core)+easyui+efcore實現倉儲管理系統——展示層實現增刪改查之菜單與測試(九)測試
abp(net core)+easyui+efcore實現倉儲管理系統——多語言(十)ui
abp(net core)+easyui+efcore實現倉儲管理系統——使用 WEBAPI實現CURD (十一)
abp(net core)+easyui+efcore實現倉儲管理系統——菜單-上 (十六)
3、動態加載菜單
經過 abp(net core)+easyui+efcore實現倉儲管理系統——菜單-上 (十六)這篇文章,咱們已經瞭解了ABP中的菜單相關的類及類的屬性與方法,接下咱們經過實例來實現一個動態加載菜單的功能。動態菜單是咱們在abp(net core)+easyui+efcore實現倉儲管理系統——領域層建立實體(三)至abp(net core)+easyui+efcore實現倉儲管理系統——展示層實現增刪改查之增刪改視圖(八)中添加的功能模塊。
1. 在Visual Studio 2017的「解決方案資源管理器」中,右鍵單擊「ABP.TPLMS.Mvc.Web」項目的「Startup」文件夾,在彈出菜單中選擇「添加」 > > 「類」。 將類命名爲 DaynaicAddMenu,而後選擇「添加」。以下圖。
2. 在Visual Studio 2017的編輯器中打開咱們剛纔建立的DaynaicAddMenu.cs文件,寫入以下代碼。
using Abp.Application.Navigation; using Abp.Localization; using ABP.TPLMS.Entitys; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace ABP.TPLMS.Web.Startup { public class DynamicAddMenu { Modules.IModuleAppService _moduleAppService; public DynamicAddMenu(Modules.IModuleAppService moduleApp) { _moduleAppService = moduleApp; } public MenuItemDefinition AddMenus() { #region 動態菜單 var modules= _moduleAppService.GetAll(); var project = new MenuItemDefinition( "Business", L("Business"), icon: "menu", order: 5 ); var list = modules.ToList(); FillMenu(project, 0, list); return project; #endregion } // 遞歸算法 private void FillMenu(MenuItemDefinition menu, int ParentId, List<Module> modules) { List<Module> drs = modules.Where(x=>x.ParentId==ParentId).ToList(); if (drs == null || drs.Count <=0) { return; } else { for (int i = 0; i < drs.Count; i++) { Module dr = drs[i]; MenuItemDefinition nodeName = new MenuItemDefinition( dr.Name, L(dr.DisplayName), url: dr.Url, icon: "business", requiredPermissionName: dr.RequiredPermissionName, customData: i ); menu.AddItem(nodeName); FillMenu(nodeName, dr.Id, modules); } } } private static ILocalizableString L(string name) { return new LocalizableString(name, TPLMSConsts.LocalizationSourceName); } } }
3. 在Visual Studio 2017的編輯器中打開「ABP.TPLMS.Mvc.Web」項目的「Startup」文件夾中的TPLMSNavigationProvider.cs文件,寫入加載菜單的代碼。下面代碼中的粗體部分。
using Abp.Application.Navigation; using Abp.Localization; using ABP.TPLMS.Authorization; namespace ABP.TPLMS.Web.Startup { /// <summary> /// This class defines menus for the application. /// </summary> public class TPLMSNavigationProvider : NavigationProvider { Modules.IModuleAppService _moduleAppService; public TPLMSNavigationProvider(Modules.IModuleAppService moduleApp) { _moduleAppService = moduleApp; } public override void SetNavigation(INavigationProviderContext context) { var subMenu = new DynamicAddMenu(_moduleAppService).AddMenus(); context.Manager.MainMenu .AddItem( new MenuItemDefinition( PageNames.Home, L("HomePage"), url: "", icon: "home", requiresAuthentication: true ) ).AddItem( new MenuItemDefinition( PageNames.Tenants, L("Tenants"), url: "Tenants", icon: "business", requiredPermissionName: PermissionNames.Pages_Tenants ) ).AddItem( new MenuItemDefinition( PageNames.Users, L("Users"), url: "Users", icon: "people", requiredPermissionName: PermissionNames.Pages_Users ) ).AddItem( new MenuItemDefinition( PageNames.Roles, L("Roles"), url: "Roles", icon: "local_offer", requiredPermissionName: PermissionNames.Pages_Roles ) ) .AddItem( new MenuItemDefinition( PageNames.Module, L("Module"), url: "Module", icon: "local_offer" ) ) .AddItem( new MenuItemDefinition( PageNames.Supplier, L("Supplier"), url: "Supplier", icon: "people" ) ) .AddItem(subMenu ) .AddItem( new MenuItemDefinition( PageNames.About, L("About"), url: "About", icon: "info" ) ).AddItem( // Menu items below is just for demonstration! new MenuItemDefinition( "MultiLevelMenu", L("MultiLevelMenu"), icon: "menu" ).AddItem( new MenuItemDefinition( "AspNetBoilerplate", new FixedLocalizableString("ASP.NET Boilerplate") ).AddItem( new MenuItemDefinition( "AspNetBoilerplateHome", new FixedLocalizableString("Home"), url: "https://aspnetboilerplate.com?ref=abptmpl" ) ).AddItem( new MenuItemDefinition( "AspNetBoilerplateTemplates", new FixedLocalizableString("Templates"), url: "https://aspnetboilerplate.com/Templates?ref=abptmpl" ) ).AddItem( new MenuItemDefinition( "AspNetBoilerplateSamples", new FixedLocalizableString("Samples"), url: "https://aspnetboilerplate.com/Samples?ref=abptmpl" ) ).AddItem( new MenuItemDefinition( "AspNetBoilerplateDocuments", new FixedLocalizableString("Documents"), url: "https://aspnetboilerplate.com/Pages/Documents?ref=abptmpl" ) ) ).AddItem( new MenuItemDefinition( "AspNetZero", new FixedLocalizableString("ASP.NET Zero") ).AddItem( new MenuItemDefinition( "AspNetZeroHome", new FixedLocalizableString("Home"), url: "https://aspnetzero.com?ref=abptmpl" ) ).AddItem( new MenuItemDefinition( "AspNetZeroDescription", new FixedLocalizableString("Description"), url: "https://aspnetzero.com/?ref=abptmpl#description" ) ).AddItem( new MenuItemDefinition( "AspNetZeroFeatures", new FixedLocalizableString("Features"), url: "https://aspnetzero.com/?ref=abptmpl#features" ) ).AddItem( new MenuItemDefinition( "AspNetZeroPricing", new FixedLocalizableString("Pricing"), url: "https://aspnetzero.com/?ref=abptmpl#pricing" ) ).AddItem( new MenuItemDefinition( "AspNetZeroFaq", new FixedLocalizableString("Faq"), url: "https://aspnetzero.com/Faq?ref=abptmpl" ) ).AddItem( new MenuItemDefinition( "AspNetZeroDocuments", new FixedLocalizableString("Documents"), url: "https://aspnetzero.com/Documents?ref=abptmpl" ) ) ) ); } private static ILocalizableString L(string name) { return new LocalizableString(name, TPLMSConsts.LocalizationSourceName); } } }
4. 在Visual Studio 2017的「解決方案資源管理器」中,找到「ABP.TPLMS.Application」項目中的「Modules」目錄,在編輯器中打開 IModuleAppService.cs
接口文件。添加獲取所有模塊的代碼。代碼以下。
List<Module> GetAll();
5. 在Visual Studio 2017的「解決方案資源管理器」中,找到「ABP.TPLMS.Application」項目中的「Modules」目錄,在編輯器中打開 ModuleAppService.cs
文件。添加獲取所有模塊的代碼。代碼以下。
public List<Module> GetAll() { var books = _moduleRepository.GetAllList(); return books; }
6. 前端代碼不用做任何修改。在Visual Studio 2017中按F5運行應用程序。登陸以後,效果以下圖。