ztree+jsp实现的节点新增、修改、删除图标,以及提醒、jajx保存,还可以节点拖动
<%@ page contentType="text/html; charset=UTF-8" %> <% String path = request.getContextPath(); String code = request.getParameter("code"); code = "001003"; //综合查询 if(code==null) code = "001"; %> <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - Simple Data</TITLE> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <SCRIPT type="text/javascript"> var contextpath = "<%=path%>"; </SCRIPT> <style type="text/css"> .ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:-144px 0; vertical-align:top; *vertical-align:middle} </style> <link href="<%=path %>/frameworks/ligerUI/skins/Aqua/css/ligerui-all.css" rel="stylesheet" type="text/css" /> <script src="<%=path %>/frameworks/jquery/jquery-1.4.4.min.js" type="text/javascript"></script> <script src="<%=path %>/frameworks/ligerUI/js/core/base.js" type="text/javascript"></script> <script src="<%=path %>/frameworks/ligerUI/js/core/util.js" type="text/javascript"></script> <script src="<%=path %>/frameworks/ligerUI/js/plugins/ligerDrag.js" type="text/javascript"></script> <script src="<%=path %>/frameworks/ligerUI/js/plugins/ligerResizable.js" type="text/javascript"></script> <script src="<%=path %>/frameworks/ligerUI/js/plugins/ligerWindow.js" type="text/javascript"></script> <script src="<%=path %>/frameworks/ligerUI/js/plugins/ligerDialog.js" type="text/javascript"></script> <link rel="stylesheet" href="<%=path %>/frameworks/css/zTreeStyle/zTreeStyle.css" type="text/css"> <script type="text/javascript" src="<%=path %>/frameworks/ztree/jquery.ztree.core-3.5.js"></script> <script type="text/javascript" src="<%=path %>/frameworks/ztree/jquery.ztree.excheck-3.5.js"></script> <script type="text/javascript" src="<%=path %>/frameworks/ztree/jquery.ztree.exedit-3.5.js"></script> <link href="<%=path %>/frameworks/main/treeManager.css" rel="stylesheet" type="text/css" /> <script src="<%=path %>/js/json2.js" type="text/javascript"></script> <script src="<%=path %>/js/uuid.js" type="text/javascript"></script> <SCRIPT type="text/javascript"> var code = "<%=code%>"; var listenerClass = "foresee.wtp.um.tree.TreeManagerHandler"; var url = contextpath+"/json"; var fheight = 300, fwidth = 650; var setting = { view: { addHoverDom: addHoverDom, removeHoverDom: removeHoverDom, selectedMulti: false }, edit: { enable: true, editNameSelectAll: true, showRemoveBtn: showRemoveBtn, showRenameBtn: showRenameBtn }, data: { simpleData: { enable: true } }, callback: { beforeDrag: beforeDrag, beforeEditName: beforeEditName, beforeRemove: beforeRemove, beforeRename: beforeRename, onRemove: onRemove, onRename: onRename } }; function showLog(str) { } var newCount = 1,curTreeNode; function addHoverDom(treeId, treeNode) { curTreeNode = treeNode; var sObj = $("#" + treeNode.tId + "_span"); if (treeNode.editNameFlag || $("#addBtn_"+treeNode.id).length>0) return; var addStr = "<span class='button add' id='addBtn_" + treeNode.id + "' title='add node' onfocus='this.blur();'></span>"; sObj.after(addStr); //绑定新增按钮事件 var btn = $("#addBtn_"+treeNode.id); if (btn) btn.bind("click", function(){ //找出新增按钮的left、top var btnleft = btn.offset().left; var btntop = btn.offset().top; $.ligerDialog.open({ url: 'nodeForm.jsp', height: fheight,width: fwidth,title: '新增节点', modal: true, left:btnleft, top:btntop,name:'nodeForm', buttons: [ { text: '确定', onclick: function (item, dialog) { //保存节点 saveNode(item, dialog, treeNode, 'add'); } }, { text: '取消', onclick: function (item, dialog) { dialog.close(); } } ] }); return false; }); }; function removeHoverDom(treeId, treeNode) { $("#addBtn_"+treeNode.id).unbind().remove(); }; //callback function saveNode(item, dialog, treeNode,oper) //选择一笔,按确认按钮带回 { var name = dialog.frame.$("#nodeNameTxt").val(); var code = dialog.frame.$("#nodeCodeTxt").val(); var url = dialog.frame.$("#urlTxt").val(); var openCode = dialog.frame.$("#openCodeTxt").val(); var folder = dialog.frame.$("input[name='folderOpt']:checked").val(); //alert("name: "+name+", code: "+code); var param = {name:name,code:openCode,id:curTreeNode.id,type:'child',folder:folder,url:url,oper:oper}; ajaxcall(param, function(d) { dialog.close(); //保存成功后,才将真正添加节点 d = d[0].data; if(!d) return; var zTree = $.fn.zTree.getZTreeObj("leftTree"); if(oper=='add') //新增节点 zTree.addNodes(treeNode, {id:d.id, pId:d.pId, name:d.name}); if(oper=='edit') {//重命名节点 treeNode.name = name; //zTree.setNodeName(treeNode); //zTree.editNode(setting, treeNode); zTree.editName(treeNode); zTree.cancelEditName(); } }, oper=='add'?'addTreeNode':'updTreeNode'); } var log, className = "dark"; function beforeDrag(treeId, treeNodes) { return false; } function beforeEditName(treeId, treeNode) { className = (className === "dark" ? "":"dark"); showLog("[beforeEditName ] " + treeNode.name); var zTree = $.fn.zTree.getZTreeObj("leftTree"); zTree.selectNode(treeNode); //查询选中的节点数据 var param = {id:treeNode.id}; ajaxcall(param, function(d) { //保存成功后,才将真正添加节点 d = d[0].data.d; if(!d) return; //编辑按钮 var btn = $('#'+treeNode.tId+'_edit'); //找出新增按钮的left、top var btnleft = btn.offset().left; var btntop = btn.offset().top; var url = 'nodeForm.jsp?name='+jsc.trim(d.name)+'&url='+jsc.trim(d.url)+'&code='+jsc.trim(d.code)+'&openCode='+jsc.trim(d.openCode); $.ligerDialog.open({ url: url, height: fheight,width: fwidth,title: '修改节点', modal: true, left:btnleft, top:btntop,name:'nodeForm', buttons: [ { text: '确定', onclick: function (item, dialog) { //保存节点 saveNode(item, dialog, treeNode,'edit'); } }, { text: '取消', onclick: function (item, dialog) { dialog.close(); } } ] }); }, 'getNodeData'); return false; } function beforeRemove(treeId, treeNode) { className = (className === "dark" ? "":"dark"); var zTree = $.fn.zTree.getZTreeObj("leftTree"); zTree.selectNode(treeNode); //alert(JSON.stringify(treeNode)); if(confirm("确认删除 节点 -- " + treeNode.name + " 吗?")) { var param = {id:treeNode.id,sclx:'qzsc'}; ajaxcall(param, function(d) { //保存成功后,才将真正添加节点 var nodes = zTree.getSelectedNodes(); zTree.removeNode(nodes[0]); }, "delTreeData"); } return false; } function onRemove(e, treeId, treeNode) { showLog("[ onRemove ] " + treeNode.name); } function beforeRename(treeId, treeNode, newName) { className = (className === "dark" ? "":"dark"); showLog("[ beforeRename ] " + treeNode.name); if (newName.length == 0) { alert("节点名称不能为空."); var zTree = $.fn.zTree.getZTreeObj("leftTree"); setTimeout(function(){zTree.editName(treeNode)}, 10); return false; } return true; } function onRename(e, treeId, treeNode) { showLog("[onRename ] " + treeNode.name); } function showRemoveBtn(treeId, treeNode) { //return !treeNode.isFirstNode; return true; } function showRenameBtn(treeId, treeNode) { //return !treeNode.isLastNode; return true; } function beforeDrag(treeId, treeNodes) { for (var i=0,l=treeNodes.length; i<l; i++) { if (treeNodes[i].drag === false) { return false; } } return true; } function beforeDrop(treeId, treeNodes, targetNode, moveType) { return targetNode ? targetNode.drop !== false : true; } $(document).ready(function(){ //默认隐藏右边一棵树相关 $("#rightDiv").hide(); $("#rightTreeOpt").hide(); $("#modTwoTree").click(function() { if($(this).attr("checked")) { $("#rightDiv").show(); $("#rightTreeOpt").show(); } else { $("#rightDiv").hide(); $("#rightTreeOpt").hide(); } }); //获取第一棵树的数据 var o = {code:code,method:'getModifyTreeData'}; ajaxcall(o, function(d) { //查询成功处理 var zNodes = d[0].data.list; for (var i=0, l=zNodes.length; i<l; i++) { var node = zNodes[i]; if(node.hasOwnProperty("pid")) node.pId = node.pid; node.name = node.name.replace(/\.n/g, '.'); } $.fn.zTree.init($("#leftTree"), setting, zNodes); $.fn.zTree.init($("#rightTree"), setting); }); }); function ajaxcall(data, callback, method, __listenerClass) { var o = {___name:'execUnit',___service:'handlerService'}; //判断并设置method if(method) o.method = method; else if(!data.hasOwnProperty("method")) { alert("请指定method"); return; } //判断并设置listenerClass if(__listenerClass) o.listenerClass = __listenerClass; else if(listenerClass) o.listenerClass = listenerClass; else if(!data.hasOwnProperty("listenerClass")) { alert("请指定listenerClass"); return; } $.ajax({ type: "post", dataType: "json",//返回json格式的数据 url: url,//要访问的后台地址 data: $.extend(o, data), success: successHandle, error:errorHandle }); function successHandle(d) { var error = d[0]["error"]; var exception = d[0]["exception"]; if(exception && (error=="true" || error==true)) { //后台出现异常,提示错误信息 alert(exception); } callback(d) } function errorHandle() { } } </script> </head> <body> <div class="content_wrap"> <div> <ul class="info"> <li class="title"> <ul class="list"> <li>删除节点选项: <input type=radio id="qrscOpt" name="scOpt" checked><label for="qrscOpt">已分配权限的节点,提醒确认是否删除</label> <input type=radio id="scqxOpt" name="scOpt"><label for="scqxOpt">删除节点的同时,也删除权限</label> <input type=radio id="bscOpt" name="scOpt"><label for="bscOpt">已分配权限的节点,不能删除</label> </li> <li> <input type=checkbox id="dispBtnOpt"><label for="dispBtnOpt">显示菜单节点的按钮节点</label> </li> <!-- <li> <input type=checkbox id="modTwoTree"><label for="modTwoTree">在不同菜单树间修改</label> <span id="rightTreeOpt"> 右边树类型: <select id="rightTreeType"> <option value="001">----- 请选择 -----</option> <option value="002">系统管理</option> <option value="003">综合查询</option> </select> 提示:你可以拖动一棵树节点到另一棵树上 </span> </li> --> </ul> </li> </ul> </div> <div class="zleftTreeBackground left"> <ul id="leftTree" class="ztree"></ul> </div> <div class="right" id="rightDiv"> <ul id="rightTree" class="ztree"></ul> </div> </div> </body> </html>