Implement warehouse management system directory
abp (net core) + easyui + efcore implement Warehouse Management System - Solutions Introduction (b)
abp (net core) + easyui + efcore implement Warehouse Management System - Multilingual (X)
abp (net core) + easyui + efcore implement Warehouse Management System - menu - on (XVI)
Third, the dynamic loading menu
By abp (net core) + easyui + efcore implement Warehouse Management System - menu - on (xvi) of this article, we have learned about the properties and methods of the class and the class of ABP in the relevant menu, it took us by example to achieve a dynamic load function menu. The menu is dynamic we abp (net core) + easyui + efcore implement warehouse management system - the domain layer created entity (c) to abp (net core) + easyui + efcore implement Warehouse Management System - presentation layer implementation of CRUD CRUD view (VIII) added function module.
1. In Visual Studio 2017's "Solution Explorer", right-click "ABP.TPLMS.Mvc.Web" project "Startup" folder, the pop-up menu, select "Add">> "class." Name the class DaynaicAddMenu, then select "Add." As shown below.
2. Open DaynaicAddMenu.cs file we just created in Visual Studio editor in 2017, write the following code.
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. Open the "Startup" TPLMSNavigationProvider.cs file folder "ABP.TPLMS.Mvc.Web" project in the Visual Studio editor in 2017, writes the code to load the menu. Bold code below.
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. In Visual Studio 2017's "Solution Explorer", find "ABP.TPLMS.Application" project "Modules" directory, open in the editor IModuleAppService.cs
interface files. Get the code to add all the modules. code show as below.
List<Module> GetAll();
5. In Visual Studio 2017's "Solution Explorer", find "ABP.TPLMS.Application" project "Modules" directory, open in an editor ModuleAppService.cs
file. Get the code to add all the modules. code show as below.
public List<Module> GetAll() { var books = _moduleRepository.GetAllList(); return books; }
6. The front-end code without any modification. In Visual Studio 2017, press F5 to run the application. After logging in, the following picture.