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
原创粉丝点击