这是用jquery ztree做的二级权限树,互联二版代码,原理主要:
1.框架基于struts2、spring3、ibatIS2.3
2.主要是TEmployeePriv表的三个字段(PRIV_NUM、MENU_ID_1、PRIV_TYPE):
?? privNum为id(子id),menuId1为pId(父id),
?? privType为权限菜单类型[权限菜单(60),权限集合(61),权限动作(62)]即60一级菜单、61二级菜单、62三级菜单
?
一、action代码
/** * 打开授权 */ public String openImpower() { role = service.queryById(roleNum); TRolePriv rp = new TRolePriv(); rp.setRoleNum(roleNum); List<TRolePriv> rpList = service.queryRolePriv(rp);//权限中间表List List<TEmployeePriv> privList = service.queryAllPriv(new TEmployeePriv());//查询所有TEmployeePriv /**合成权限树*/ List<PrivJSON> jsonList = new ArrayList<PrivJSON>(); for( TEmployeePriv priv : privList ){ if("60".equals(priv.getPrivType())){ PrivJSON json = new PrivJSON();//一级菜单 json.setId(priv.getPrivNum()); json.setpId("0"); json.setName(priv.getPrivName()); json.setOpen(false);//默认不展开 jsonList.add(json); } else{ PrivJSON json2 = new PrivJSON(); json2.setId(priv.getPrivNum()); json2.setpId(priv.getMenuId1()); json2.setName(priv.getPrivName()); json2.setPrivNum(priv.getPrivNum()); for(TRolePriv trp : rpList){ if(trp.getPrivNum().equals(priv.getPrivNum())){ json2.setOpen(false);//默认不展开 json2.setChecked(true); } } jsonList.add(json2); } } JSONArray myjsonObj = JSONArray.fromObject(jsonList);//将权限集合,转成JSON数组 this.getRequest().setAttribute("myjsonObj",myjsonObj); successPath = "/jsp/phone/priv/role/impowerRole.jsp"; return SUCCESS; }
?
二、jsp页面代码
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>角色授权</title> <%@ include file="/cssBasePage.jsp"%> <link rel="stylesheet" href="BaseInfo/ztree/demoStyle/demo.css" type="text/css"/> <link rel="stylesheet" href="BaseInfo/ztree/zTreeStyle/zTreeStyle.css" type="text/css"/> <script type="text/javascript" src="BaseInfo/ztree/jquery.ztree-2.6.js"></script> <script type="text/javascript" src="<%=path%>/jsp/phone/priv/role/impowerRole.js"></script> <script type="text/javascript"> var zTreeObj; var setting = {checkable:true,treeNodeKey:"id",treeNodeParentKey:"pId",isSimpleData:true}; //zTree的参数配置,深入使用请参考 API 文档(参数说明 -- setting 详解) /*var zNodes = [ {name:"test1", open:true, nodes:[ {name:"test1_1"}, {name:"test1_2"}]}, {name:"test2", open:true, nodes:[ {name:"test2_1"}, {name:"test2_2"}]} ];*/ //zTree的数据属性,深入使用请参考 API 文档(参数说明 -- zTreeNodes 详解) var myjsonObj = ${requestScope.myjsonObj}; var zNodes = myjsonObj; $(document).ready(function(){ zTreeObj = $("#treeDemo").zTree(setting, zNodes); }); function expandAll(expandSign) { zTreeObj.expandAll(expandSign); } function checkAllTreeNode(checked) { var oldNodes = zTreeObj.getNodes(); var oldcheckNum = zTreeObj.getCheckedNodes(checked).length; zTreeObj.checkAllNodes(checked); var newcheckNum = zTreeObj.getCheckedNodes(checked).length; if (newcheckNum != oldcheckNum) zTreeObj.checkAllNodes(checked); } /*测试用树授权*/ function testImpower() { var temp =""; var nodes = zTreeObj.getCheckedNodes(); for( var i=0; i<nodes.length; i++ ){ if(nodes[i].privNum != ''){ temp = temp+";"+nodes[i].privNum; } } alert(temp); document.getElementById('privSelect').value=temp; } /*分配运维权限*/ function allotYunwei() { checkAllTreeNode(false); var privNum = ["menu_0101","menu_0102"];//数组不能包含一级菜单,包含将会选中整个节点 for(var i=0;i<privNum.length;i++){ var node = zTreeObj.getNodeByParam("privNum", privNum[i]); node.checked=true; zTreeObj.updateNode(node,true); //zTreeObj.selectNode(node);//选中指定的节点 } } </script> </head> <body> <hp:HpNavigate TValue="工号及权限管理,角色管理,角色授权"></hp:HpNavigate> <hp:HpSearch namekey="site.page.update.title"> <br/> <table> <tr> <td class="txtright">当前角色名称:</td> <td class="txtleft"> ${ role.roleName } </td> </tr> <tr> <td class="txtleft" colspan="2"> </td> </tr> <tr> <td class="txtleft" colspan="2"> <div class="zTreeDemoBackground"> <button onclick="expandAll(true);">全展开</button>|<button onclick="expandAll(false);">全关闭</button> <button onclick="checkAllTreeNode(true);">全选</button>|<button onclick="checkAllTreeNode(false);">全不选</button> <button onclick="testImpower();">测试</button> <button onclick="allotYunwei();">运维授权</button><br/><br/> <ul id="treeDemo" class="tree"></ul> </div> </td> </tr> </table> <form method="post" name="form1" id="form1"> <input type="hidden" name="roleNum" value="${role.roleNum}"/> <input id="privSelect" name="privSelect" type="hidden"/> <!-- 真正提交时的list,后台Action中得到此项,修改权限 --> <br/> <table> <tr> <td class="txtright">修改原因:</td> <td class="txtleft"> <hp:HpTextarea TRows="6" name="alterReason" id="alterReason" TValue="" TCols="75" TClass="text-input inputbox" TOnBlur="onBlurValiTextArea3(this.value,'role\\\\.alterReasonDiv')" TMaxLength="50" /> <div class="DivShowInfoCss" id="role.alterReasonDiv" style="display: inline" ></div> </td> </tr> <tr> <td class="txtright">业务密码:</td> <td class="txtleft"> <hp:HpInputPass name="password2" TClass="inputbox" id="password2" TMaxLength="16" TOnBlur="onBlurValiPass2(this.value,'password2Div')" ></hp:HpInputPass> <div class="DivShowInfoCss" id="password2Div" style="display: inline" ></div> </td> </tr> <tr> <td></td> <td class="txtleft"> <hp:HpButton TJsClick="impower()" TValue="save" id=""></hp:HpButton> <hp:HpButton TJsClick="$('.DivShowInfoCss').html('');" TValue="reset" id=""></hp:HpButton> <hp:HpButton TJsClick="$.hpDialog.close();" TValue="return" id=""></hp:HpButton> </td> <td></td> </tr> </table> </form> </hp:HpSearch> </body> </html>