abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)
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实现仓储管理系统——菜单 (十六)的更多相关文章
- abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)
实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案 ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI前端页面框架 (十八)
目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ab ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理一 (十九)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理二 (二十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理三 (二十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理四 (二十二)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理五 (二十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理六(二十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理七(二十五)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
随机推荐
- 简单粗暴的方式解决eclipse下安装STS失败的问题
直接去Spring官网下载,spring定制eclipse https://spring.io/tools
- linux初学者-延迟及定时任务篇
linux初学者-延迟及定时任务篇 在linux系统的学习工作中,南面会遇到需要延迟进行的任务和需要定时去完成的任务,就像手机的闹钟一样,这时候就需要用到linux系统当中的系统延迟和定时任务的设置了 ...
- jQuery入门一(jQuery下载以及基本语法)
1. jQuery简介 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗旨是 ...
- python交互界面无法使用方向键
问题 python交互界面无法使用方向键,按方向键全变成^[[^C这类型的字符 解决办法 办法1: 使用yum安装readline.readline-devel,然后重装python 这种方法太麻烦了 ...
- 【iOS】Error: Error Domain=PBErrorDomain Code=7 "Cannot connect to pasteboard server
这几天在用 Swift 开发一个简单的键盘扩展,真机调试时遇到了这个问题,详细信息如下: ***[:] Could not save pasteboard named com.apple.UIKit. ...
- Android 开发环境之 VMware 虚拟机(android8.1)
VM版本14 在官网下载androidx86的VMDK文件 官方下载地址 (VMDK文件是VMware的专用文件,比iso镜像文件安装要简便许多,内部已经配置好了,只需要按照虚拟机安装普通流程即可) ...
- x32下PsSetLoadImageNotifyRoutine的逆向
一丶简介 纯属兴趣爱好.特来逆向玩玩. PsSetLoadImageNotifyRoutine 是内核中用来监控模块加载.操作系统给我们提供的回调. 我们只需要填写对应的回调函数原型即可进行加监控. ...
- c# 控制台console进度条
1 说明 笔者大多数的开发在 Linux 下,多处用到进度条的场景,但又无需用到图形化界面,所以就想着弄个 console 下的进度条显示. 2 步骤 清行显示 //清行处理操作 int curren ...
- 限流降级神器,带你解读阿里巴巴开源 Sentinel 实现原理
Sentinel 是阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度来帮助用户保护服务的稳定性. 大家可能会问:Se ...
- hashCode和equals的区别
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 有面试官会问:你重写过 hashcode 和 equals 么,为什么重写equals时必须重写has ...