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实现仓储管理系统——使用 WEBAPI实现CURD (十二)

abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十三)

abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十四)

abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十五)

在前面的文章(abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之菜单与测试(九))中我们学会了如何添加静态菜单,但是做为一个信息管理系统,总不能每次有新功能新菜单,都静态添加菜单,编译,再上线。我们希望的是有一个菜单管理界面,在此页面中输入相应的菜单,只要我们重新登录,菜单就自动显示在菜单栏中。而菜单的来源可以是多样的,可以从需要从数据库,xml等数据源中加载一些动态菜单来满足我们的系统要求。

今天我们就来实现这个功能,动态加载菜单。所要加载的菜单就是模块管理中的功能模块。

一、菜单项类

一个应用程序可能包含不同的模块,而每个模块都可能有它自己的菜单项。在Abp中,需要创建一个派生自NavigationProvider的类来定义一个菜单项。例如我们这个项目中的TPLMSNavigationProvider类。代码如下。

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
{
public override void SetNavigation(INavigationProviderContext context)
{
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(
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(
"AspNetZero",
new FixedLocalizableString("ASP.NET Zero")
).AddItem(
new MenuItemDefinition(
"AspNetZeroHome",
new FixedLocalizableString("Home"),
url: "https://aspnetzero.com?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);
}
}
}

二、abp菜单类

ABP框架中已经为我们做了前期的准备工作。在ABP中有一个MenuDefinition类,这个类封装了导航栏上的主菜单的属性。

     MenuDefinition:主菜单类,定义了一个List<MenuItemDefinition>,这个类存放了我们定义的菜单,同时定义了AddItem方法

using System.Collections.Generic;
using Abp.Localization; namespace Abp.Application.Navigation
{ // Represents a navigation menu for an application.
public class MenuDefinition : IHasMenuItemDefinitions
{
//
// 构造函数
// public MenuDefinition(string name, ILocalizableString displayName, object customData = null); //
//菜单名称
//
public string Name { get; } //
//表示本地化字符串
//
public ILocalizableString DisplayName { get; set; } //
//自定义数据
//
public object CustomData { get; set; } // 菜单集合
public List<MenuItemDefinition> Items { get; set; } // 添加菜单
//
public MenuDefinition AddItem(MenuItemDefinition menuItem); //
// 删除菜单
// public void RemoveItem(string name);
} }

在ABP中还有一个MenuItemDefinition类,这个类中封装了子菜单的属性,子菜单可以添加其他子菜单构成一个菜单树。我们首先来了解一下MenuItemDefinition类的属性与方法。MenuItemDefinition成员定义如下:

 public class MenuItemDefinition : IHasMenuItemDefinitions
{ //
// 构造函数:
public MenuItemDefinition(string name, ILocalizableString displayName, string icon = null, string url = null, bool requiresAuthentication = false, string requiredPermissionName = null, int order = , object customData = null,
IFeatureDependency featureDependency = null, string target = null, bool isEnabled = true, bool isVisible = true,
IPermissionDependency permissionDependency = null); //
// 摘要:
// Can be used to enable/disable a menu item.
public bool IsEnabled { get; set; } // 自定义数据
public object CustomData { get; set; } //
// 摘要:
// Target of the menu item. Can be "_blank", "_self", "_parent", "_top" or a frame
// name.
public string Target { get; set; } // 是否有子菜单
public bool IsLeaf { get; } // 权限验证如果通过验证显示此菜单否则不可见
//即只有登陆后才会显示该菜单
public bool RequiresAuthentication { get; set; } // 功能特性
public IFeatureDependency FeatureDependency { get; set; } //
// 摘要:
// A permission dependency. Only users that can satisfy this permission dependency
// can see this menu item. Optional.
public IPermissionDependency PermissionDependency { get; set; } //即用户具有指定的权限时才显示菜单
// 权限名称
[Obsolete("Use PermissionDependency instead.")]
public string RequiredPermissionName { get; set; } // The URL to navigate when this menu item is selected.
public string Url { get; set; } // 菜单图标
public string Icon { get; set; } // 排序
public int Order { get; set; } // 表示本地化字符串
public ILocalizableString DisplayName { get; set; } // 菜单名称
public string Name { get; } // 是否显示菜单
public bool IsVisible { get; set; } // 子菜单
public virtual List<MenuItemDefinition> Items { get; } // 添加子菜单
public MenuItemDefinition AddItem(MenuItemDefinition menuItem); // 删除菜单:
public void RemoveItem(string name);
}
}

从上面的代码中,我们可以看到做为一个菜单树的相关属性与相关方法,ABP都已经为我们准备好了。有了以上对象我们可以方便自定义任何菜单。

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实现仓储管理系统——EasyUI之货物管理六(二十四)

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

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

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

随机推荐

  1. Android利用Handler异步获取子线程中的产生的值

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     近段时间有一个需求:在线获取图片并且显示在界面 ...

  2. Web安全之CSRF攻击(转载)

    CSRF是什么? CSRF(Cross Site Request Forgery),中文是跨站点请求伪造.CSRF攻击者在用户已经登录目标网站之后,诱使用户访问一个攻击页面,利用目标网站对用户的信任, ...

  3. 最全面的改造Zuul网关为Spring Cloud Gateway(包含Zuul核心实现和Spring Cloud Gateway核心实现)

    前言: 最近开发了Zuul网关的实现和Spring Cloud Gateway实现,对比Spring Cloud Gateway发现后者性能好支持场景也丰富.在高并发或者复杂的分布式下,后者限流和自定 ...

  4. 基于Spring注解的上下文初始化过程源码解析(二)

    上一篇看完了register方法的代码,继续跟后面代码 后面执行refresh方法,代码清单如下: public void refresh() throws BeansException, Illeg ...

  5. Docker笔记(七):常用服务安装——Nginx、MySql、Redis

    开发中经常需要安装一些常用的服务软件,如Nginx.MySql.Redis等,如果按照普通的安装方法,一般都相对比较繁琐 —— 要经过下载软件或源码包,编译安装,配置,启动等步骤,使用 Docker ...

  6. 【Java例题】4.4使用牛顿迭代法求方程的解

    4. 使用牛顿迭代法求方程的解:x^3-2x-5=0区间为[2,3]这里的"^"表示乘方. package chapter4; public class demo4 { publi ...

  7. 0x15 字符串

    KMP算法 next数组的求法 void calc_next() { next[]=; , j=; i<=n; ++i) { &&a[i]!=a[j+]) j=next[j]; ...

  8. HTML/CSS:display:flex 布局教程

    网页布局(layout)是 CSS 的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂 ...

  9. Java8 CompletableFuture 编程

    一.简介  所谓异步调用其实就是实现一个无需等待被调用函数的返回值而让操作继续运行的方法.在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结 ...

  10. k8s学习笔记

    9.deployment:声明式的升级应用 9.1.使用RC实现滚动升级 #kubectl rolling-update kubia-v1 kubia-v2 --image=luksa/kubia:v ...