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中的菜单相关的类及类的属性与方法,接下我们通过实例来实现一个动态加载菜单的功能。动态菜单是我们在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文件,写入如下代码。

  1. using Abp.Application.Navigation;
  2. using Abp.Localization;
  3. using ABP.TPLMS.Entitys;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ABP.TPLMS.Web.Startup
  10. {
  11. public class DynamicAddMenu
  12. {
  13. Modules.IModuleAppService _moduleAppService;
  14. public DynamicAddMenu(Modules.IModuleAppService moduleApp)
  15.  
  16. { _moduleAppService = moduleApp; }
  17. public MenuItemDefinition AddMenus()
  18. {
  19. #region 动态菜单
  20. var modules= _moduleAppService.GetAll();
  21. var project = new MenuItemDefinition(
  22. "Business",
  23. L("Business"),
  24.  
  25. icon: "menu",
  26. order:
  27. );
  28.  
  29. var list = modules.ToList();
  30. FillMenu(project, , list);
  31. return project;
  32. #endregion
  33. }
  34.  
  35. // 递归算法
  36. private void FillMenu(MenuItemDefinition menu, int ParentId, List<Module> modules)
  37. {
  38. List<Module> drs = modules.Where(x=>x.ParentId==ParentId).ToList();
  39. if (drs == null || drs.Count <=)
  40. {
  41. return;
  42. }
  43. else
  44. {
  45. for (int i = ; i < drs.Count; i++)
  46. {
  47. Module dr = drs[i];
  48. MenuItemDefinition nodeName = new MenuItemDefinition(
  49. dr.Name,
  50. L(dr.DisplayName),
  51. url: dr.Url,
  52. icon: "business",
  53. requiredPermissionName: dr.RequiredPermissionName,
  54. customData: i
  55. );
  56. menu.AddItem(nodeName);
  57. FillMenu(nodeName, dr.Id, modules);
  58. }
  59. }
  60. }
  61.  
  62. private static ILocalizableString L(string name)
  63. {
  64. return new LocalizableString(name, TPLMSConsts.LocalizationSourceName);
  65.  
  66. }
  67. }
  68. }

3. 在Visual Studio 2017的编辑器中打开“ABP.TPLMS.Mvc.Web”项目的“Startup”文件夹中的TPLMSNavigationProvider.cs文件,写入加载菜单的代码。下面代码中的粗体部分。

  1. using Abp.Application.Navigation;
  2. using Abp.Localization;
  3. using ABP.TPLMS.Authorization;
  4.  
  5. namespace ABP.TPLMS.Web.Startup
  6. {
  7.  
  8. /// <summary>
  9. /// This class defines menus for the application.
  10. /// </summary>
  11. public class TPLMSNavigationProvider : NavigationProvider
  12. {
  13. Modules.IModuleAppService _moduleAppService;
  14. public TPLMSNavigationProvider(Modules.IModuleAppService moduleApp)
  15. { _moduleAppService = moduleApp; }
  16. public override void SetNavigation(INavigationProviderContext context)
  17. {
  18. var subMenu = new DynamicAddMenu(_moduleAppService).AddMenus();
  19. context.Manager.MainMenu
  20. .AddItem(
  21. new MenuItemDefinition(
  22. PageNames.Home,
  23. L("HomePage"),
  24. url: "",
  25. icon: "home",
  26. requiresAuthentication: true
  27. )
  28.  
  29. ).AddItem(
  30. new MenuItemDefinition(
  31. PageNames.Tenants,
  32. L("Tenants"),
  33. url: "Tenants",
  34. icon: "business",
  35. requiredPermissionName: PermissionNames.Pages_Tenants
  36.  
  37. )
  38.  
  39. ).AddItem(
  40.  
  41. new MenuItemDefinition(
  42. PageNames.Users,
  43. L("Users"),
  44. url: "Users",
  45. icon: "people",
  46. requiredPermissionName: PermissionNames.Pages_Users
  47.  
  48. )
  49.  
  50. ).AddItem(
  51.  
  52. new MenuItemDefinition(
  53. PageNames.Roles,
  54. L("Roles"),
  55. url: "Roles",
  56. icon: "local_offer",
  57. requiredPermissionName: PermissionNames.Pages_Roles
  58.  
  59. )
  60. )
  61.  
  62. .AddItem(
  63. new MenuItemDefinition(
  64. PageNames.Module,
  65. L("Module"),
  66. url: "Module",
  67. icon: "local_offer"
  68. )
  69. )
  70.  
  71. .AddItem(
  72. new MenuItemDefinition(
  73. PageNames.Supplier,
  74. L("Supplier"),
  75. url: "Supplier",
  76. icon: "people"
  77. )
  78.  
  79. )
  80.  
  81. .AddItem(subMenu
  82. )
  83.  
  84. .AddItem(
  85. new MenuItemDefinition(
  86. PageNames.About,
  87. L("About"),
  88. url: "About",
  89. icon: "info"
  90. )
  91.  
  92. ).AddItem( // Menu items below is just for demonstration!
  93.  
  94. new MenuItemDefinition(
  95. "MultiLevelMenu",
  96. L("MultiLevelMenu"),
  97. icon: "menu"
  98. ).AddItem(
  99.  
  100. new MenuItemDefinition(
  101. "AspNetBoilerplate",
  102. new FixedLocalizableString("ASP.NET Boilerplate")
  103.  
  104. ).AddItem(
  105. new MenuItemDefinition(
  106. "AspNetBoilerplateHome",
  107. new FixedLocalizableString("Home"),
  108. url: "https://aspnetboilerplate.com?ref=abptmpl"
  109. )
  110.  
  111. ).AddItem(
  112. new MenuItemDefinition(
  113. "AspNetBoilerplateTemplates",
  114. new FixedLocalizableString("Templates"),
  115. url: "https://aspnetboilerplate.com/Templates?ref=abptmpl"
  116. )
  117.  
  118. ).AddItem(
  119. new MenuItemDefinition(
  120. "AspNetBoilerplateSamples",
  121. new FixedLocalizableString("Samples"),
  122. url: "https://aspnetboilerplate.com/Samples?ref=abptmpl"
  123.  
  124. )
  125. ).AddItem(
  126. new MenuItemDefinition(
  127. "AspNetBoilerplateDocuments",
  128. new FixedLocalizableString("Documents"),
  129. url: "https://aspnetboilerplate.com/Pages/Documents?ref=abptmpl"
  130.  
  131. )
  132. )
  133. ).AddItem(
  134. new MenuItemDefinition(
  135. "AspNetZero",
  136. new FixedLocalizableString("ASP.NET Zero")
  137.  
  138. ).AddItem(
  139. new MenuItemDefinition(
  140. "AspNetZeroHome",
  141. new FixedLocalizableString("Home"),
  142. url: "https://aspnetzero.com?ref=abptmpl"
  143.  
  144. )
  145. ).AddItem(
  146. new MenuItemDefinition(
  147. "AspNetZeroDescription",
  148. new FixedLocalizableString("Description"),
  149. url: "https://aspnetzero.com/?ref=abptmpl#description"
  150.  
  151. )
  152. ).AddItem(
  153. new MenuItemDefinition(
  154. "AspNetZeroFeatures",
  155. new FixedLocalizableString("Features"),
  156. url: "https://aspnetzero.com/?ref=abptmpl#features"
  157.  
  158. )
  159. ).AddItem(
  160.  
  161. new MenuItemDefinition(
  162. "AspNetZeroPricing",
  163. new FixedLocalizableString("Pricing"),
  164. url: "https://aspnetzero.com/?ref=abptmpl#pricing"
  165.  
  166. )
  167. ).AddItem(
  168. new MenuItemDefinition(
  169. "AspNetZeroFaq",
  170. new FixedLocalizableString("Faq"),
  171. url: "https://aspnetzero.com/Faq?ref=abptmpl"
  172. )
  173. ).AddItem(
  174. new MenuItemDefinition(
  175. "AspNetZeroDocuments",
  176. new FixedLocalizableString("Documents"),
  177. url: "https://aspnetzero.com/Documents?ref=abptmpl"
  178. )
  179. )
  180. )
  181. );
  182. }
  183. private static ILocalizableString L(string name)
  184. {
  185. return new LocalizableString(name, TPLMSConsts.LocalizationSourceName);
  186.  
  187. }
  188. }
  189. }

4. 在Visual Studio 2017的“解决方案资源管理器”中,找到“ABP.TPLMS.Application”项目中的“Modules”目录,在编辑器中打开 IModuleAppService.cs 接口文件。添加获取全部模块的代码。代码如下。

  1. List<Module> GetAll();

5. 在Visual Studio 2017的“解决方案资源管理器”中,找到“ABP.TPLMS.Application”项目中的“Modules”目录,在编辑器中打开 ModuleAppService.cs 文件。添加获取全部模块的代码。代码如下。

  1. public List<Module> GetAll()
  2. {
  3. var books = _moduleRepository.GetAllList();
  4.  
  5. return books;
  6. }

6. 前端代码不用作任何修改。在Visual Studio 2017中按F5运行应用程序。登录之后,效果如下图。

abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)的更多相关文章

  1. abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)

    系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ...

  2. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI前端页面框架 (十八)

    目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ab ...

  3. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理一 (十九)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  4. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理二 (二十)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  5. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理三 (二十一)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  6. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理四 (二十二)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  7. abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  8. abp(net core)+easyui+efcore实现仓储管理系统——入库管理之七(四十三)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  9. Abp(net core)+easyui+efcore实现仓储管理系统——出库管理之七(五十六)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

随机推荐

  1. 深入理解Apache Kafka

    一.介绍 Kafka在世界享有盛名,大部分互联网公司都在使用它,那么它到底是什么呢? Kafka由LinkedIn公司于2011年推出,自那时起功能逐步迭代,目前演变成一个完整的平台级产品,它允许您冗 ...

  2. Flask+APScheduler定时任务

    1.安装依赖 pip install flask_apscheduler 2.使用定时任务 ```python from flask import Flask from flask_apschedul ...

  3. Kalman Filter、Extended Kalman Filter以及Unscented Kalman Filter介绍

    模型定义 如上图所示,卡尔曼滤波(Kalman Filter)的基本模型和隐马尔可夫模型类似,不同的是隐马尔科夫模型考虑离散的状态空间,而卡尔曼滤波的状态空间以及观测空间都是连续的,并且都属于高斯分布 ...

  4. 1和new Number(1)有什么区别

    1和new Number(1)有什么区别 author: @Tiffanysbear 总结,两者的区别就是原始类型和包装对象的区别. 什么是包装对象 对象Number.String.Boolean分别 ...

  5. LR(1)语法分析器生成器(生成Action表和Goto表)java实现(二)

    本来这次想好好写一下博客的...结果耐心有限,又想着烂尾总比断更好些.于是还是把后续代码贴上.不过后续代码是继续贴在BNF容器里面的...可能会显得有些臃肿.但目前管不了那么多了.先贴上来吧hhh.说 ...

  6. 从源码看Flask框架配置管理

    1 引言 Flask作为Python语言web开发的三大顶梁柱框架之一,对于配置的管理当然必不可少.一个应用从开发到测试到最后的产品发布,往往都需要多种不同的配置,例如是否开启调试模式.使用哪个数据库 ...

  7. java集合类的相关转换

    下面的的案例,基本上是以代码为主,文字的描述较少,后期有时间会继续添加. ArrayToList public void ArrayToList() { System.out.println(&quo ...

  8. word2vec原理分析

    本文摘录整编了一些理论介绍,推导了word2vec中的数学原理,理论部分大量参考<word2vec中的数学原理详解>. 背景 语言模型 在统计自然语言处理中,语言模型指的是计算一个句子的概 ...

  9. 洛谷 P1939 矩阵加速(数列)

    题意简述 \(a[1]=a[2]=a[3]=1\) \(a[x]=a[x−3]+a[x−1](x>3)\) 求a数列的第n项对1000000007取余的值. 题解思路 矩阵加速 设\[ F=\b ...

  10. Git原理入门简析

    为了获得更好的阅读体验,建议访问原地址:传送门 前言: 之前听过公司大佬分享过 Git 原理之后就想来自己总结一下,最近一忙起来就拖得久了,本来想塞更多的干货,但是不喜欢拖太久,所以先出一版足够入门的 ...