abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)
实现仓储管理系统目录
abp(net core)+easyui+efcore实现仓储管理系统——abp总体介绍(一)
abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二)
abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)
abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四)
abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八)
abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之菜单与测试(九)
abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
abp(net core)+easyui+efcore实现仓储管理系统——使用 webapi实现curd (十一)
abp(net core)+easyui+efcore实现仓储管理系统——菜单-上 (十六)
三、动态加载菜单
通过 abp(net core)+easyui+efcore实现仓储管理系统——菜单-上 (十六)这篇文章,我们已经了解了abp中的菜单相关的类及类的属性与方法,接下我们通过实例来实现一个动态加载菜单的功能。动态菜单是我们在至中添加的功能模块。
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运行应用程序。登录之后,效果如下图。
推荐阅读
-
abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理四 (二十二)
-
abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七)
-
abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十五)
-
abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理三 (二十一)
-
abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十二)
-
abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之五(三十一)
-
abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之八(三十四)
-
abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理五 (二十三)
-
abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理八(二十六)
-
abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)