jqery easyui 给角色分配菜单 利用tree来实现
来源:互联网 发布:风火轮软件 编辑:程序博客网 时间:2024/05/16 08:25
cshtml代码
@{ ViewBag.Title = "Grant"; string id = ViewBag.id;}<div id="tb" style="height:auto;position:absolute; left:10px; top:30px;" > <a id="qd" class="easyui-linkbutton" data-options="iconCls:'icon-ok'" onclick="save()">确定</a> <a id="qd" class="easyui-linkbutton" data-options="iconCls:'icon-undo'" onclick="javascript:$('#tt').tree('reload')">取消</a> @*<a href="javascript:void(0)" class="easyui-linkbutton" data-options="iconCls:'icon-search',plain:true" onclick="getChanges()">GetChanges</a>*@</div><ul id="tt"></ul><script type="text/javascript"> $('#tt').tree({ url: '/Role/GetTree', checkbox: true, //显示复选框 lines: true, //显示树线 cascadeCheck: true,//级联选择 onLoadSuccess:function(node,data){granted()},//tree树加载成功后触发 在数据库中展示已有的菜单 默认选中 }); function granted() {//查找当前对象已有的权限 $.ajax({ url: '/Role/Granted', data: { roleId:@id }, dataType: 'json', type: "POST", async: false, error: function (d) { }, success: function (d) { if(undefined!=d){ for(var i=0;i<d.length;i++){ var node = $('#tt').tree('find',d[i]); $('#tt').tree('check',node.target); } } } }) } function save() { debugger; var nodes = $('#tt').tree('getChecked','indeterminate'); var listNode = $('#tt').tree('getChecked') if (listNode.length==0) { utils.message('error','请选择权限!'); return; } var checkAllList = new Array(); for (var i = 0; i < listNode.length; i++) { checkAllList.push(listNode[i]); } for (var i = 0; i < listNode.length; i++) { var nodeArray = parentList(listNode[i].target); if (nodeArray.length > 0) { for (var j = 0; j < nodeArray.length; j++) checkAllList.push(nodeArray[j])//当前节点的所有祖先节点 } } checkAllList = outRepeat(checkAllList); var idArray = new Array(); for (var i = 0; i < checkAllList.length; i++) { idArray.push(checkAllList[i].id); } $.ajax({ url: '/Role/SaveGrant', data: { roleId: @id,navListId: idArray }, dataType: 'json', type: "POST", async: true, error:function(d){ utils.message('error', '保存失败!'); }, success: function (d) { if (d == '保存成功') { utils.message('success', d); } else { utils.message('error', d); } } }) } function parentList(target) {//获得节点的所有祖先节点 var parentArray = new Array(); var node = parentNode(target); while (undefined != node) {//判断是否还有父节点 parentArray.push(node); node = parentNode(node.target); } return parentArray; } function parentNode(target) {//获得节点的父节点 var node = $('#tt').tree('getParent', target); return node; } function outRepeat(arr) {//数组去重复值得方法 var new_arr = new Array() for (var i = 0; i < arr.length; i++) { var items = arr[i]; //判断元素是否存在于new_arr中,如果不存在则插入到new_arr的最后 if (!isArrayValueEqual(items, new_arr)) { new_arr.push(items); } } return new_arr; } function isArrayValueEqual(a, b) {//判断数组中是否有一个对象和此对象相等 var is = false; for (var i = 0; i < b.length; i++) { is = isObjectValueEqual(a, b[i]); if (is) { return is; } } return is; } function isObjectValueEqual(a, b) {//判断俩个对象是否相等的方法,比较的是俩个对象的ID值 var is = a.id == b.id; return is; } //这里做的有点麻烦 开始做的取不到 父级节点 因为父级节点是实心点 没有打对号 所以循环来取 //后来知道有个方法可以取到 var nodes = $('#tt').tree('getChecked','indeterminate');//取实心圆节点的方法</script>
后台方法
public ActionResult Granted(string roleId) { IList<Navigation> lists = new Navigation().FindAll<Navigation>();//查出所有节点,减少数据库的访问次数 List<string> navList = new List<string>(); if (null != roleId) { Role role = new Role().FindById<Role>(roleId); if (role.Navigations.Count > 0) { foreach (Navigation item in role.Navigations) {//遍历当前角色已有的权限 List<TreeNode> treelist = AllchildNode(item, lists); if (null == treelist || treelist.Count == 0) { navList.Add(item.BaseId); } } } } return this.Json(navList); } public ActionResult SaveGrant(string roleId , List<string> navListId) { string message = "保存成功"; // DatasourceFactory.BeginTransaction(); try { Role role = new Role().FindById<Role>(roleId); if (null != role && null != navListId) { role.Navigations = new HashSet<Navigation>(); role.Save(); foreach (string id in navListId) { Navigation nav = new Navigation().FindById<Navigation>(id); if (null != nav) { role.Navigations.Add(nav); } } role.Save(); } } catch (System.Exception e) { message = "保存失败"; } return this.Json(message); } public ActionResult Grant(string id) { ViewBag.id = id; return View(); } public ActionResult GetTree() { IList<Navigation> top = new Navigation().GetRootNav();//查找所有根节点 List<TreeNode> treeGrid = new List<TreeNode>(); IList<Navigation> lists = new Navigation().FindAll<Navigation>();//查出所有节点,减少数据库的访问次数 foreach (Navigation na in top) {//遍历所有根节点 TreeNode node = ObjectConvertNode(na,lists); treeGrid.Add(node); } return Json(treeGrid); } private TreeNode ObjectConvertNode(Navigation na, IList<Navigation> lists) {//转化成tree树所需要的格式 TreeNode node = new TreeNode(); node.id = na.BaseId; node.text = na.Name; // node.state = "closed"; node.children = AllchildNode(na,lists); //if (null == node.children) //{ node.state = "open"; //} //else { // node.state= "closed"; //} return node; } private List<TreeNode> AllchildNode(Navigation na, IList<Navigation> lists) {//查找这个节点所有的子节点 List<Navigation> list = new List<Navigation>(); List<TreeNode> children = null; //获得这个对象的所有子集 // List<Navigation> nalist = new Navigation().GetQueryabel<Navigation>().Where(t=>t.Parent==na).OrderBy(t=>t.Sequence).ToList(); List<Navigation> nalist = lists.Where(t => t.Parent == na).OrderBy(t => t.Sequence).ToList(); if (null != nalist && nalist.Count > 0) { children = new List<TreeNode>(); foreach (Navigation navigation in nalist) { TreeNode node= ObjectConvertNode(navigation, lists); children.Add(node); } } return children; }
0 0
- jqery easyui 给角色分配菜单 利用tree来实现
- jqery easyui 利用treeview实现菜单的增删改查
- 利用MVVM来实现基于角色的权限菜单
- jqery实现树形二级菜单
- easyui menu tree 实现左侧菜单树
- ASP.NET MVC5+EF6+EasyUI 后台管理系统-分配角色给用户
- jqery easyui 利用datagrid增删该查后台权限
- JQuery EasyUI Tree和tab右键菜单实现
- easyUI 实现tree树形菜单json的处理
- jqery-easyui-Datagrid(数据表)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色
- ajax 给 easyui-tree 赋值
- c#实现按用户角色分配菜单的使用权限(WinForm)
- c#实现按用户角色分配菜单的使用权限(WinForm)
- c#实现按用户角色分配菜单的使用权限(WinForm) 转载
- c#实现按用户角色分配菜单的使用权限(WinForm)
- easyUI tree 的实现
- EasyUI--tree的实现
- struts1和spring的整合
- 434. Number of Segments in a String
- svg 透视
- 类和对象的关系
- Python--matplotlib绘图可视化知识点整理
- jqery easyui 给角色分配菜单 利用tree来实现
- 这些警告如何消除
- OpenCV249和VS2010配置
- 网易2017实习生笔试编程题-魔力手环
- spark 数据倾斜解决方案 (二)聚合源数据以及过滤导致倾斜的key
- cocos2d默认创建的HelloWorld是竖屏
- 深度学习中的激活函数导引
- Lua的初探学习
- 创建SVN版本库