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. java练习---15

    package cn.lyh; public class L { //斐波那契数列 public static void main(String[] args) { int []arr = new i ...

  2. manjaro配置记录

    一.换源 官方镜像源(包括 core, extra, community, multilib ) sudo pacman-mirrors -i -c China -m rank //更新镜像排名 su ...

  3. 微信小程序 「柒留言」 — 实现微信公众号留言功能(限时免费入驻,建议收藏)

    「柒留言」小程序留言助手使用指南(接近原生界面) 前言 从去年 3 月以后新公众号就没得留言功能了,新申请的微信公众号没有留言功能,没有留言就无法跟读者进行互动,写出去的文章得不到反馈,着实感觉有蛮难 ...

  4. Loadrunner参数(摘)

    一.占有率分析 1. 平均事务响应时间 Average Transaction Response Time 优秀:<2s 良好:2-5s 及格:6-10s 不及格:>10s 2. 每秒点击 ...

  5. CodeForces 372 A. Counting Kangaroos is Fun

    题意,有n只袋鼠,没每只袋鼠有个袋子,大小为si,一个袋鼠可以进入另外一个袋鼠的袋子里面,当且仅当另一个袋鼠的袋子是他的二倍或二倍一上,然后中国袋鼠就是不可见的,不能出现多个袋鼠嵌套的情况.让你求最少 ...

  6. codeforces 322 A Ciel and Dancing

    题目链接 题意: 有n个男孩和m个女孩,他们要结对跳舞,每对要有一个女孩和一个男孩,而且其中一个要求之前没有和其他人结对,求出最大可以结多少对. 如图,一条线代表一对,只有这样三种情况. #inclu ...

  7. git_stats安装及使用

    git_stats是仓库代码统计工具,今天我们要求用git_stats工具做项目的代码统计,也是一步一坑的找到了一些方法,在这里记录一下 一.安装 git_stats可以在windows和linux使 ...

  8. python基础之循环与迭代器

    循环 python 循环语句有for循环和while循环. while循环while循环语法 while 判断条件: 语句 #while循环示例 i = 0 while i < 10: i += ...

  9. JavaFX 集成 Sqlite 和 Hibernate 开发爬虫应用

    目录 [隐藏] 0.1 前言: 0.2 界面 0.3 Maven 环境 0.4 项目结构 0.5 整合 Hibernate 0.5.1 SQLiteDialect.java 数据库方言代码 0.5.2 ...

  10. Java虚拟机学习笔记(三)--- 生存还是死亡

    即便是可达性分析中不可达的对象,也不代表该对象一定被回收,一个对象被“宣判死刑”需要经过两次标记,第一次是被可达性算法标记为不可用,然后进入第二次筛选,筛选条件是对象是否有必要执行finalize() ...