欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)

程序员文章站 2022-05-03 22:30:20
通过 abp(net core)+easyui+efcore实现仓储管理系统——菜单-上 (十六)这篇文章,我们已经了解了ABP中的菜单相关的类及类的属性与方法,接下我们通过实例来实现一个动态加载菜单的功能。动态菜单是我们在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中的菜单相关的类及类的属性与方法,接下我们通过实例来实现一个动态加载菜单的功能。动态菜单是我们在中添加的功能模块。

     1. 在visual studio 2017的“解决方案资源管理器”中,右键单击“abp.tplms.mvc.web”项目的“startup”文件夹,在弹出菜单中选择“添加” > > “类”。 将类命名为 daynaicaddmenu,然后选择“添加”。如下图。

 abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)

 

      2. 在visual studio 2017的编辑器中打开我们刚才创建的daynaicaddmenu.cs文件,写入如下代码。

 

using abp.application.navigation;
using abp.localization;
using abp.tplms.entitys;
using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
 

namespace abp.tplms.web.startup
{
    public class dynamicaddmenu
    {
         modules.imoduleappservice _moduleappservice;
        public dynamicaddmenu(modules.imoduleappservice moduleapp)

        { _moduleappservice = moduleapp; }
        public  menuitemdefinition addmenus()
        {
            #region 动态菜单
           var modules= _moduleappservice.getall();
            var project = new menuitemdefinition(
                    "business",
                    l("business"),                  

                    icon: "menu",
                    order: 5
                    );    

            var list = modules.tolist();
            fillmenu(project, 0, list);
            return project;
            #endregion
        }

        // 递归算法
        private  void fillmenu(menuitemdefinition menu, int parentid, list<module> modules)
        {
            list<module> drs = modules.where(x=>x.parentid==parentid).tolist();
            if (drs == null || drs.count <=0)
            {
                return;
            }
            else
            {
                for (int i = 0; i < drs.count; i++)
                {
                    module dr = drs[i];
                    menuitemdefinition nodename = new menuitemdefinition(
                       dr.name,
                       l(dr.displayname),
                       url: dr.url,
                       icon: "business",
                       requiredpermissionname: dr.requiredpermissionname,
                       customdata: i
                   );
                    menu.additem(nodename);
                    fillmenu(nodename, dr.id, modules);
                }
            }
        }

        private static ilocalizablestring l(string name)
        {
            return new localizablestring(name, tplmsconsts.localizationsourcename);

        }
    }
}

 

 

      3. 在visual studio 2017的编辑器中打开“abp.tplms.mvc.web”项目的“startup”文件夹中的tplmsnavigationprovider.cs文件,写入加载菜单的代码。下面代码中的粗体部分。

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
    {
        modules.imoduleappservice _moduleappservice;
        public tplmsnavigationprovider(modules.imoduleappservice moduleapp)
        { _moduleappservice = moduleapp; }

        public override void setnavigation(inavigationprovidercontext context)
        {
            var submenu = new dynamicaddmenu(_moduleappservice).addmenus();
            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(submenu
                )

                .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(
                                "aspnetboilerplatehome",
                                new fixedlocalizablestring("home"),
                                url: "https://aspnetboilerplate.com?ref=abptmpl"
                            )

                        ).additem(
                            new menuitemdefinition(
                                "aspnetboilerplatetemplates",
                                new fixedlocalizablestring("templates"),
                                url: "https://aspnetboilerplate.com/templates?ref=abptmpl"
                            )

                        ).additem(
                            new menuitemdefinition(
                                "aspnetboilerplatesamples",
                                new fixedlocalizablestring("samples"),
                                url: "https://aspnetboilerplate.com/samples?ref=abptmpl"

                            )
                        ).additem(
                            new menuitemdefinition(
                                "aspnetboilerplatedocuments",
                                new fixedlocalizablestring("documents"),
                                url: "https://aspnetboilerplate.com/pages/documents?ref=abptmpl"

                            )
                        )
                    ).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(
                                "aspnetzerodescription",
                                new fixedlocalizablestring("description"),
                                url: "https://aspnetzero.com/?ref=abptmpl#description"

                            )
                        ).additem(
                            new menuitemdefinition(
                                "aspnetzerofeatures",
                                new fixedlocalizablestring("features"),
                                url: "https://aspnetzero.com/?ref=abptmpl#features"

                            )
                        ).additem(

                            new menuitemdefinition(
                                "aspnetzeropricing",
                                new fixedlocalizablestring("pricing"),
                                url: "https://aspnetzero.com/?ref=abptmpl#pricing"

                            )
                        ).additem(
                            new menuitemdefinition(
                                "aspnetzerofaq",
                                new fixedlocalizablestring("faq"),
                                url: "https://aspnetzero.com/faq?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);

        }
    }
}

 

    4. 在visual studio 2017的“解决方案资源管理器”中,找到“abp.tplms.application”项目中的“modules”目录,在编辑器中打开 imoduleappservice.cs 接口文件。添加获取全部模块的代码。代码如下。

   list<module> getall();

    5. 在visual studio 2017的“解决方案资源管理器”中,找到“abp.tplms.application”项目中的“modules”目录,在编辑器中打开 moduleappservice.cs 文件。添加获取全部模块的代码。代码如下。  

  public list<module> getall()
        {
            var books = _modulerepository.getalllist();    

            return books;
        }

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

 abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)