ztree的操作简单使用,比bootstrap中的树更简单明了,故分享
1、index.ftl菜单界面:
<div id="ordinary_content">
<div>
<li>
<a id="content1" style="display:none" title="目录一">
<i class="glyph-icon icon-linecons-tv"></i>
<span>目录一</span>
</a>
<ul id="content1_menu">
<li id="hellotestdo" style="display:none"><a href="/ps_admin/hellotest.do" title="菜单11"><span>菜单11</span></a></li>
<li id="hellotest2do" style="display:none"><a href="/ps_admin/hellotest2.do" title="菜单12"><span>菜单12</span></a></li>
</ul>
</li>
</div>
<div>
<li>
<a id="content2" style="display:none" title="目录二">
<i class="glyph-icon icon-linecons-tv"></i>
<span>目录二</span>
</a>
<ul id="content2_menu">
<li id="hellotest3do" style="display:none"><a href="/ps_admin/hellotest3.do" title="菜单21"><span>菜单21</span></a></li>
<li id="hellotest4do" style="display:none"><a href="/ps_admin/hellotest4.do" title="菜单22"><span>菜单22</span></a></li>
<li id="hellotest5do" style="display:none"><a href="/ps_admin/hellotest5.do" title="菜单23"><span>菜单23</span></a></li>
</ul>
</li>
</div>
</div>
2、操作按钮:加载树,查看树,更改树,删除树按钮:
<div id="tableList">
<button style="width:150px" class="btn btn-success" οnclick="urlAdd()">添加角色</button>
<table class="table table-bordered table-striped table-hover" id="rgtable1" style="color:#444444">
<thead>
<tr>
<th>角色</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<#list urlBeanList as urlBean>
<tr class="odd">
<td><#if urlBean.urlType?exists>${urlBean.urlType}<#else>无</#if></td>
<td>
<button class="btn btn-success"
οnclick="urlLookUp('${urlBean.urlType}')"><span><span>查看</span></span>
</button>
<button class="btn btn-success"
οnclick="urlUpdate('${urlBean.urlType}')"><span><span>修改</span></span>
</button>
<button class="btn btn-danger" οnclick="urlDelete('${urlBean.urlType}')">
<span><span>删除</span></span></button>
</td>
</tr>
</#list>
</tbody>
</table>
<div class="pageNu" align="right">
总共 ${pages?c} 页|第 ${currentPage?c} 页
<a style='cursor:pointer;' οnclick=lastPage()>上一页</a>
<a style='cursor:pointer;' οnclick=nextPage()>下一页</a>
转至<input type="text" name="pageNum" id="pageNum" value="1" size="5"/>
<button class="btn btn-success" οnclick="goPageByNum()"><span><span>Go</span></span></button>
<input type="text" id="currentPage" style="display:none;" value="${currentPage?c}"/>
<input type="text" id="pages" style="display:none;" value="${pages?c}"/>
</div>
</div>
<!-- 新建/修改界面 -->
<div id="addDialog" style="display:none;">
<table style="text-align: center;margin-top:20px;">
<tr>
<th> 角色名称:</th>
<td><input class="form-control" name="urlType" id="urlType" placeholder="例如:角色一"
style="width:250px"/></td>
</tr>
<tr>
<th> 角色权限关联:</th>
<td>
<ul id="treeDemo" class="ztree"></ul>
</td>
</tr>
</table>
</div>
3、加载树:
function initZNodes(){
var zNodes =[];//树结构数据
var len1 = $("#ordinary_content").children("div").length;
for(var j=1;j<=len1;j++)
{
var map = {};
map['id']=""+j;
map['pId']="0";
map['name']=$("#content"+j+" span").text();
zNodes.push(map);
var len = $("#content"+j+"_menu").children("li").length;
for(var i=0;i<len;i++){
var mapMenu = {};
mapMenu['id']=$("#content"+j+"_menu a").eq(i).attr("href");
mapMenu['pId']=j;
mapMenu['name']=$("#content"+j+"_menu a span").eq(i).text();
zNodes.push(mapMenu);
}
}
return zNodes;
}
function initZtree(zNodes){
var setting = {
check: {
enable: true
},
data: {
simpleData: {
enable: true
}
}
};
$.fn.zTree.init($("#treeDemo"), setting, zNodes);
setCheck();
}
/*权限列表*/
function urlAdd() {
var zNodes = initZNodes();
initZtree(zNodes);
}
4、查看树,不可更改,所有的树的选项都为灰色不可选择:
function urlLookUp(roleName){
var url = "urlLookUp.json?roleName=" + roleName;
$.ajax({
url: url,// 跳转到 action
success: function (data) {//这个用来存储在数据库中的菜单id
if (data.status) {
var idList = [];//用来存储该角色关联的菜单id
var summary="";
var menuList = data.menuString;
var lenOfMenu = menuList.length;
for(var i=0;i<lenOfMenu;i++){
var menuStr = menuList[i];
var menuLL = menuStr.split(";");
idList.push(menuLL[1]);
summary = menuLL[2];
}
loadZtree(idList,"true");
$("#urlType").val(roleName);
$('#urlType').attr("disabled",true);
}
else {
alert("查询失败");
}
},
error: function () {
alert("异常!");
}
});
}
//加载已经对应角色的树,查看树用的
function loadZtree(idList,isLook){
var zNodes = initZNodes();
var len =zNodes.length;
var parentContentId = [];
for(var i=0;i<len;i++){//勾选子菜单
var node = zNodes[i];
if(idList.contains(node.id)){
node.checked=true;
parentContentId.push(node.pId.toString());
}
if(isLook == "true"){
node.chkDisabled=true;
}
}
for(var i=0;i<len;i++){//根据勾选的子菜单,勾选父菜单
var node = zNodes[i];
if(parentContentId.contains(node.id.toString())){
node.checked=true;
}
}
initZtree(zNodes);
}
Array.prototype.contains = function (obj) {
var i = this.length;
while (i--) {
if (this[i] === obj) {
return true;
}
}
return false;
}
5、加载原有的树,并且可进行更改:
function urlUpdate(roleName) {
var url = "urlLookUp.json?roleName=" + roleName;
$.ajax({
url: url,// 跳转到 action
success: function (data) {
if (data.status) {
var idList = [];//用来存储该角色关联的菜单id
var roleName="";
var summary="";
var menuList = data.menuString;
var lenOfMenu = menuList.length;
for(var i=0;i<lenOfMenu;i++){
var menuStr = menuList[i];
var menuLL = menuStr.split(";");
idList.push(menuLL[1]);
roleName = menuLL[0];
summary = menuLL[2];
}
loadZtree(idList,"false");//这个函数在第4项中,false表示可以更改树
}
else {
alert("查询失败");
}
},
error: function () {
alert("异常!");
}
});
}
6、操作树后,获取树的id与内容
function getMenuUrlAndName(){
var map = {};
var urlResource="";
var menuName="";
var treeObj=$.fn.zTree.getZTreeObj("treeDemo");
nodes=treeObj.getCheckedNodes(true);
for(var i=0;i<nodes.length;i++){
var id = nodes[i].id;
if(id.match("^[0-9]*$"))//去掉一级目录,因为任何一个二级目录勾选一级目录都会勾选
{
continue;
}
urlResource+=id + ";";
menuName+=nodes[i].name+";";
}
map.urlResource = urlResource;
map.menuName = menuName;
return map;
}