<六>左侧菜单栏显示
左侧菜单栏的显示很简单,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则有多个,下一章完成用户页面的增删改查。
最后运行的结果如下图:


浙公网安备 33010602011771号