Ext 权限树

先上图片

我们要遍历的XML权限菜单如下(犹如内容很长,我这里只截取一部分)

<MenuFunction> <menuCode>30</menuCode> <menuName>附加工作管理</menuName> <parentMenuCode>-1</parentMenuCode> <url /> <level>1</level> <menuType>1</menuType> <isVisible>1</isVisible> <toRoot>30,-1</toRoot> <title>附加工作管理</title> <imgSrc /> <isLeaf>0</isLeaf> </MenuFunction> <MenuFunction> <menuCode>3020</menuCode> <menuName>附加工作审核</menuName> <parentMenuCode>30</parentMenuCode> <url>WebUI/AdditionalWork/AddWorkAudit.aspx</url> <level>2</level> <menuType>2</menuType> <isVisible>1</isVisible> <toRoot>3020,30,-1</toRoot> <title>附加工作审核</title> <imgSrc /> <isLeaf>1</isLeaf> </MenuFunction> <MenuFunction> <menuCode>3010</menuCode> <menuName>申请附加工作</menuName> <parentMenuCode>30</parentMenuCode> <url>WebUI/AdditionalWork/WorkFormByCaleder.aspx</url> <level>2</level> <menuType>2</menuType> <isVisible>1</isVisible> <toRoot>3010,30,-1</toRoot> <title>申请附加工作</title> <imgSrc /> <isLeaf>1</isLeaf> </MenuFunction>

首先我要得到一个JSON

通过整理信息如下

{ text:'系统管理',cls:'folder',checked:true,leaf:false,id:'10', children: [ {text:'用户管理',cls:'folder',checked:true,leaf:true,id:'1010'}, {text:'角色管理',cls:'folder',checked:true,leaf:true,id:'1030'}, {text:'公告管理',cls:'folder',checked:false,leaf:true,id:'1040'} ] }, {text:'项目管理',cls:'folder',checked:true,leaf:false,id:'20', children: [ {text:'任务分配',cls:'folder',checked:true,leaf:true,id:'2000'}, {text:'任务审核',cls:'folder',checked:true,leaf:true,id:'2005'}, {text:'项目列表',cls:'folder',checked:true,leaf:false,id:'2010', children: [ {text:'查询',cls:'folder',checked:false,leaf:true,id:'201010'}, {text:'显示所有项目',cls:'folder',checked:false,leaf:true,id:'201020'}, {text:'添加所有项目',cls:'folder',checked:false,leaf:true,id:'201030'} ] } , {text:'任务列表',cls:'folder',checked:true,leaf:true,id:'2011'}, {text:'任务结果',cls:'folder',checked:true,leaf:true,id:'2015'}, {text:'日历管理',cls:'folder',checked:false,leaf:true,id:'2020'}, {text:'项目人力资源分配表',cls:'folder',checked:true,leaf:true,id:'2025'}, {text:'分配经理任务',cls:'folder',checked:true,leaf:true,id:'2035'}, {text:'审核经理任务',cls:'folder',checked:true,leaf:true,id:'2045'}, {text:'经理任务结果',cls:'folder',checked:true,leaf:true,id:'2055'} ] }, {text:'附加工作管理',cls:'folder',checked:true,leaf:false,id:'30', children: [ {text:'申请附加工作',cls:'folder',checked:false,leaf:true,id:'3010'}, {text:'附加工作审核',cls:'folder',checked:false,leaf:true,id:'3020'} ] }

观察上面JSON格式,找出递归的格式

JS如下

<mce:script type="text/javascript"><!-- //获取当前页面的角色ID function getParameter() { urlinfo=window.location.href; //获取当前页面的url len=urlinfo.length;//获取url的长度 offset=urlinfo.indexOf("?");//设置参数字符串开始的位置 newsidinfo=urlinfo.substr(offset,len)//取出参数字符串 这里会获得类似“id=1”这样的字符串 newsids=newsidinfo.split("=");//对获得的参数字符串按照“=”进行分割 newsid=newsids[1];//得到参数值 return newsid; } Ext.onReady(function(){ var ID=getParameter(); var load="OnLoad"; //Ext.Msg.alert(ID); var tree = new Ext.tree.TreePanel({ renderTo:'tree-div', // title: '配置权限', useArrows:true, autoScroll:true, animate:true, enableDD:true, containerScroll: true, rootVisible: false, frame: true, height:'450', root: { nodeType: 'async' }, // auto create TreeLoader // dataUrl: 'Action.aspx?Event=OnLoad', dataUrl: "Action.aspx?Event="+load+"&ID="+ID+"", listeners: { 'checkchange': function(node, checked){ if(checked){ node.getUI().addClass('complete'); }else{ node.getUI().removeClass('complete'); } } }, tbar:[ {id:'theRoleID',xtype:'label'}, {text: '保存权限', handler: function(){ var msg = '', selNodes = tree.getChecked(); Ext.each(selNodes, function(node){ if(msg.length > 0){ msg += ', '; } msg += node.id; } ); // if(msg!="") //var jsonData= {operatype:'InsertRoleAction',ID:ID,MenuCode:msg}; var jsonData= {MenuCode:msg}; CodeOperaMethod('../../WebUI/RoleManage/Action.aspx?operatype=InsertRoleAction&ID='+ID,jsonData); } } ] }); //后台数据交互方法 var CodeOperaMethod=function(u,p){ var conn=new Ext.data.Connection(); conn.request({ //请求的 Url url:u, // 传递的参数 params:p, method:'post', scope:this, //回调函数,根据执行结果作不同的操作,如果成功提示操作成功的信息,如果失败提示失败的信息 callback:function(options,success,response){ if(success){ Ext.MessageBox.alert("提示","操作成功!"); //tree.hide(); //store.reload(); //grid.store.reload(); } else{ Ext.MessageBox.alert("提示","所提交的操作失败!");} }});}; //为父节点添加全选,返选功能 tree.on('checkchange', function(node, checked) { node.expand(); //情形c和d if (!node.attributes.leaf) { node.eachChild(function(child) { child.ui.toggleCheck(checked); child.attributes.checked = checked; child.fireEvent('checkchange', child, checked); } ); } }, tree); }); // --></mce:script>

C#

protected void Page_Load(object sender, EventArgs e) { if (Request.QueryString["Event"] == "OnLoad") { sb = OnLoad(); Response.Write(sb.ToString()); Response.End(); } } private string OnLoad() { //取得所有菜单和功能点数据集合 dsMenu = this.GetMenuData(); string strAction = ""; //得到XML根节点条件 string strCondition = string.Format("level>0"); dshelp = new AppData.DataSetHelper(ref dsMenu); //第一层父级目录 System.Data.DataTable dtModel = dshelp.SelectJoinInto("menumodel", dsMenu.Tables[0], "menucode,menuname,parentMenuCode,level,isLeaf", strCondition, "menucode"); //根节点 Res = "[{text:'武汉市金讯科技有限公司',cls:'folder',leaf:false,icon :'../../images/LOGO.png',children:["; //从XML中读取节点信息 GetTree(dtModel, -1, 1); Res += StrMenu.Substring(0, StrMenu.Length - 1); //暂时不要Res = Res.Substring(0, Res.Length - 1) + "]}"; Res += "]}]"; return Res; } public void GetTree(DataTable PDT, int PID, int Depth) { //遍历根节点下面的子节点信息 DataView ParentDV = PDT.DefaultView; ParentDV.RowFilter = "parentMenuCode=" + PID; foreach (DataRowView PDrv in ParentDV) { //每一个节点信息格式如下, //{text:'用户管理',cls:'folder',checked:true,leaf:true,id:'1010'} //leaf:true 表示有子节点 //checked:true 表示选中 //id:表示节点编码 StrMenu += "{"; StrMenu += string.Format("text:'{0}',cls:'folder',checked:{1},leaf:false,id:'{2}',", PDrv["menuName"] + "", ArrayCodeMenu.Contains(PDrv["menucode"] + "") == true ? "true" : "false", PDrv["menucode"] + "" ); //如果该节点下面还有子节点的话就递归遍历该节点下面的子节点 if (object.Equals(PDrv["isLeaf"] + "", "0")) { CreateChildMenu(PDT, PDrv["menucode"] + ""); } StrMenu += "},"; } } //遍历子节点 public void CreateChildMenu(DataTable DT, string pID) { DataView DV = DT.DefaultView; //得到当前父节点的子节点DateView DV.RowFilter = "parentMenuCode=" + pID; StrMenu+=@"children: ["; foreach (DataRowView Drv in DV) { StrMenu += "{"; //如果当前子节点还有子节点的话,继续递归 if (object.Equals(Drv["isLeaf"] + "", "0")) { StrMenu += string.Format("text:'{0}',cls:'folder',checked:{1},leaf:false,id:'{2}',", Drv["menuName"] + "", ArrayCodeMenu.Contains(Drv["menucode"] + "") == true ? "true" : "false", Drv["menucode"] + "" ); CreateChildMenu(DT, Drv["menucode"] + ""); } //如果当前子节点没有子节点,则追加此子节点的 JSON文本信息 // ArrayCodeMenu.Contains(Drv["menucode"] + "") == true ? "true" : "false" //如果当前角色中包含此节点信息则选中当前CheckBox else { StrMenu += string.Format("text:'{0}',cls:'folder',checked:{1},leaf:true,id:'{2}'", Drv["menuName"] + "", ArrayCodeMenu.Contains(Drv["menucode"] + "") == true ? "true" : "false", Drv["menucode"] + "" ); } StrMenu += "},"; } StrMenu=StrMenu.Substring(0,StrMenu.Length-1); StrMenu+="]"; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值