<六>左侧菜单栏显示

左侧菜单栏的显示很简单,nfine都给我们把js封装好了,只要将数据封装成模型,返回给前端就好。

首先来看下菜单绑定的js,找到content文件夹下的js文件夹里有一个叫index.js的文件,这个就是登录后初始化的js,里面包含了很多东西。代码如下:

 

 如上代码用dom生成了一个ul,数据变量clients.authorizeMenu的初始化来自另一个js文件framework-clientdata.js ,代码如下:

 

 也是很简单的一段代码,这里初始化了很多数据,我们不采用nfine的后端权限设计,那么只要保留menu字段就可以了。

从ajax访问路径也可以确定了controller和action的名字,有需要的可以自己改,但是我比较懒,不想改。再来看看nfine   controller里获取数据的源代码

 [HttpGet]
        [HandlerAjaxOnly]
        public ActionResult GetClientsDataJson()
        {
            var data = new
            {
                dataItems = this.GetDataItemList(),
                organize = this.GetOrganizeList(),
                role = this.GetRoleList(),
                duty = this.GetDutyList(),
                user = "",
                authorizeMenu = this.GetMenuList(),
                authorizeButton = this.GetMenuButtonList(),
            };
            return Content(data.ToJson());
        }

        private object GetMenuList()
        {
            var roleId = OperatorProvider.Provider.GetCurrent().RoleId;
            return ToMenuJson(new RoleAuthorizeApp().GetMenuList(roleId), "0");
        }
        private string ToMenuJson(List<ModuleEntity> data, string parentId)
        {
            StringBuilder sbJson = new StringBuilder();
            sbJson.Append("[");
            List<ModuleEntity> entitys = data.FindAll(t => t.F_ParentId == parentId);
            if (entitys.Count > 0)
            {
                foreach (var item in entitys)
                {
                    string strJson = item.ToJson();
                    strJson = strJson.Insert(strJson.Length - 1, ",\"ChildNodes\":" + ToMenuJson(data, item.F_Id) + "");
                    sbJson.Append(strJson + ",");
                }
                sbJson = sbJson.Remove(sbJson.Length - 1, 1);
            }
            sbJson.Append("]");
            return sbJson.ToString();
        }

额,代码阅读应该没什么难度的,就是深度递归子菜单以及json的字符串拼接。。。脑壳子疼。。因为菜单的可读权限问题,先不管这个,全部可见先。。。。。。

下面根据4,5的步骤建立相应的仓储,服务层。新建一个dto和OutputDto代码如下:

 public  class ModuleOutputDto
    {
        public List<ModuleDto> ModuleDtoList { get; set; }
        public string TreeGridJson { get; set; }
        public string TreeViewJson { get; set; }
        public string TreeSelectJson { get; set; }
        public ModuleDto UserDtoSingle { get; set; }
    }

SysModuleApp的代码

 public ModuleOutputDto GetModuleList()
        {
            List<SysModuleEntity> entityList = _sysModuleRepository.GetAllList();
            return FillOutPutDto(entityList);
        }

修改GetClientsDataJson 的代码:

 public ActionResult GetClientsDataJson()
        {
            var data = new
            {
                dataItems = "",// this.GetDataItemList(),
                organize = "",//this.GetOrganizeList(),
                role = "",//this.GetRoleList(),
                duty = "",//this.GetDutyList(),
                user = "",
                authorizeMenu = this.GetMenuList(),
                authorizeButton = "",//this.GetMenuButtonList(),
            };
            return Json(data,JsonRequestBehavior.AllowGet);
        }

        private object GetMenuList()
        {
            // var roleId = OperatorProvider.Provider.GetCurrent().RoleId;
            // return ToMenuJson(new RoleAuthorizeApp().GetMenuList(roleId), "0");
            return ToMenuJson(_sysModuleApp.GetModuleList(), "0");
            //return "";
        }

 

这样就完成了所有菜单的获取和显示。

都不用干什么。只是这里有关键的地方就是输出函数统一用一个outputdto作为输出参数,里面包含各种输出参数。

而inputdto则有多个,下一章完成用户页面的增删改查。

最后运行的结果如下图:

 

 

posted @ 2019-10-08 11:37  许轩霖  阅读(379)  评论(0)    收藏  举报