VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 网站开发 > ASPnet >
  • abp(net core)+easyui+efcore实现仓储管理系统——菜单-上 (十六)

 

      在前面的文章(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 = 0, 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都已经为我们准备好了。有了以上对象我们可以方便自定义任何菜单。

出处:https://www.cnblogs.com/chillsrc/p/11448287.html



相关教程