多表zTree

多表zTree

表结构

库存组织(em_store_groups) → 下有多个仓库(em_stores) → 下有多个库存发布(em_store_mats)

 

库存组织(em_store_groups)

 

仓库(em_stores)

 

库存发布(em_store_mats)

 

完成效果

 

zTree由3个属性组成:(id,name,pId)

json中还可以加入其它需要使用的数据

json数据结构(例):

[{"name":"地面类","id":"1","psId":"0"},
 {"name":"天空类","id":"2","psId":"0"},
 {"name":"海底类","id":"3","psId":"0"},
 {"name":"四轮机车","id":"11","psId":"1"},
 {"name":"二轮机车","id":"12","psId":"1"},
 {"name":"民航机","id":"23","psId":"2"},
 {"name":"战斗机","id":"24","psId":"2"},
 {"name":"快艇","id":"35","psId":"3"},
 {"name":"潜水艇","id":"36","psId":"3"},
 {"name":"本田","id":"111","psId":"11"},
 {"name":"宝马","id":"112","psId":"11"},
 {"name":"奔驰","id":"113","psId":"11"},
 {"name":"凯迪拉克","id":"114","psId":"11"},
 {"name":"新世纪","id":"125","psId":"12"},
 {"name":"哈雷","id":"126","psId":"12"},
 {"name":"客机A310","id":"237","psId":"23"},
 {"name":"空客A410","id":"238","psId":"23"},
 {"name":"飞鹰S88","id":"249","psId":"24"},
 {"name":"铁汉K50","id":"2410","psId":"24"},
 {"name":"飞毛腿02","id":"3511","psId":"35"},
 {"name":"潜水1号","id":"3612","psId":"36"}];

 

★因为这里库存组织(em_store_groups)与仓库(em_stores)做了表连接,如果以表中的主键,作为json中的id,

那么json中id会重复,无法生成树,所以在这里实际json中,加入了另一个字段storeId,用于存放每条数据的实际id,

而仓库(em_stores)表中的,‘仓库编号(store_no)’是惟一的,故sql获取数据时用此字段作为id,

而仓库(em_stores)表的实际主键,放入storeId中


后台将json写入页面后:

<link rel="stylesheet" href="<%=request.getContextPath()%>/css/default/zTree.css" media="screen,print" />
<script language="javascript" type="text/javascript" src="<%=request.getContextPath()>/scripts/jquery.ztree.all3.3.min.js"></script>
//异步获得tree
function getTree(){
	$.ajax({
		type: 'POST',
		dataType : "json",
		url:global_ctxPath+"/storage/stores/treeList",
		error: function () {
		alert('请求失败');
		},
		success:function(data){ 
		treeNodes = data; //把后台封装好的简单Json格式赋给treeNodes
		$.fn.zTree.init($("#productsTree"), setting,treeNodes);	//加载树
		}
	});
}


其中$("#productsTree")为指定div的id

 

//设置tree属性
var setting = {
  view:{
   selectedMulti:false,
   addHoverDom: addHoverDom,
   removeHoverDom: removeHoverDom,
  },
  edit:{
   enable:true,
   showRemoveBtn :true,
   showRenameBtn:true
  },
  data: {
   simpleData: {
    enable: true,
    rootPId:"0"
   }
  },
  callback:{
   beforeClick:beforeClick ,
   onClick:onClick,
   beforeRemove:beforeRemove,
   onRemove: onRemove,
   beforeRename:beforeRename,
   onRename:onRename
  }
 };	

其中rootPid:“0”,设置根节点pId值

 

/**单击事件-----------------------------------------------*/
 //点击前事件

function beforeClick(treeId, treeNode, clickFlag){
 if(nodeIdTemporary==treeNode.id){
  zTree.cancelSelectedNode(treeNode);
   return false;
 }
}
//点击事件

function onClick(event, treeId, treeNode, clickFlag){  nodePId = treeNode.pId;//获得节点控制id  clickFlagTemporary = clickFlag;//保存选中节点数量  nodeId = treeNode.storeId;//获得当前节点主键  nodeIdTemporary = treeNode.id;

 $("#storeName").html(treeNode.name);    iframe01.document.getElementById("Node_StoreId").value = nodeId;//赋值→iFrame中隐藏域的值  iframe01.document.getElementById("Node_PId").value = nodePId;//赋值→iFrame中隐藏域的值  if(nodePId != '0'){   iframe01.document.getElementById("form01").action = "${pageContext.request.contextPath}/storage/stores/tableList/1";//查询路劲   iframe01.document.getElementById("form01").submit();//提交iFrame中from表单  } }

 

/**删除事件--------------------------------------------------*/
 //删除前事件
function beforeRemove(treeId, treeNode){
	nodePId = treeNode.pId;
	nodeId = treeNode.storeId;
	if(window.confirm("您确定删除吗?")){
		return checkNode(nodeId,nodePId);
		}
	return false;
}
  //删除事件
 function onRemove(){
  if(nodePId == "0"){//删除仓库组织
   location.href="${pageContext.request.contextPath}/storage/stores/removeStoreGroup/"+nodeId;
  }else{
   location.href="${pageContext.request.contextPath}/storage/stores/removeStore/"+nodeId;
  }
 }

 

//验证选中节点下,是否有数据
function checkNode(nodeId,nodePId){
	var has=false;
	$.ajax({
		type:"POST",
		dataType:"json",
		async:false,
		data:{
			abc:Math.random,
			nodeId:nodeId,
			nodePId:nodePId,
		},
		url:global_ctxPath+"/storage/stores/checkNodeResult",
		error: function () {
			alert('请求失败');
			return false;
		},
		success:function(data){
			if(data){
				alert("该仓库下有数据,无法删除!");
				has= false;
			}else{
				has= true;
			}
		}
	});
	return has;
}

 

 

 /**修改事件------------------------------------------------------------*/
 //修改前事件
 function beforeRename(){
	 
 }
 
//修改事件 function onRename(event, treeId, treeNode){ if(treeNode.pId=="0"){ }else{ } }

 

 

 



为了让每个节点之后,直接拥有添加功能,自定义添加按钮

 

/**自定义按钮----------------------------------------------------------*/
//添加按钮以及按钮点击事件
function addHoverDom(treeId, treeNode){
	var sObj = $("#" + treeNode.tId + "_span");
	if (treeNode.editNameFlag || $("#addBtn_"+treeNode.id).length>0) return;
// 	var addStr = "<button type='button' class='add' id='addBtn_" + treeNode.id + "' title='add node' onfocus='this.blur();'></button>";
	var addStr = "<a id='addBtn_"+treeNode.id+"' onfocus='this.blur()' title='添加节点'><img src='<%=request.getContextPath()%>/images/addchildnode.png' width='16' height='16' /></a>";
	sObj.append(addStr);
	var btn = $("#addBtn_"+treeNode.id);
	if (btn) btn.bind("click", function(){
		addNode(treeNode.storeId,treeNode.pId);
		return false;
	});
}
 //按钮失焦事件
function removeHoverDom(treeId, treeNode){
	$("#addBtn_"+treeNode.id).unbind().remove();
}

 

 

/**添加方法--------------------------------------------------*/
function addNode(nodeId,nodePId){
	 if(nodeId == 'rootNode'){
		 addStoreGroup();
	 }else{
		 addStore(nodeId,nodePId);
	 }
}


 

最后效果如上图,

此文笔记,详细功能参考官方api与demo

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值