首页 > 其他分享 >layui 树组件tree 通过API获取数据

layui 树组件tree 通过API获取数据

时间:2023-12-28 14:38:54浏览次数:27  
标签:function layer layui tree 获取数据 var data id


一、简单

var treedata=[];
	tree.render({
		elem: '#addLeftType',
		id: 'demoId',
		data: treedata,
		showCheckbox: true,
		oncheck: function(obj){
			console.log(obj.data); // 得到当前点击的节点数据
			console.log(obj.checked); // 节点是否被选中
			console.log(obj.elem); // 得到当前节点元素
		},
		edit: ['add', 'update', 'del'] // 开启节点的右侧操作图标
	});
	get_tree_data(0);//初始化
	// 使用 layui 的 ajax 方法来获取树节点数据
	function get_tree_data(id){
		$.ajax({
			type:'post',
			url: "{:url('classif_listjson')}",
			data: {id:id},
			success:function(response){
				tree.reload('demoId', {
					data:response,
				});
				tree.setChecked('demoId', [1,2]); //单个勾选 id 为 1 的节点
			}
		});
	};

初始化 默认选中:只能这个位置才能生效

layui 树组件tree 通过API获取数据_layui

tree.setChecked('demoId', [1,2]); //单个勾选 id 为 1 的节点

二、复杂(只能单选,二级):增加、编辑、删除功能

//tree组件 操作 开始
	var show_btn = [];
	var show_btn_ids='';
	var array_ids=[];
	function get_tree_id(checkarr){ 
		for(var i=0;i<checkarr.length;i++){ 
			if(checkarr[i].children){
				get_tree_id(checkarr[i].children)
			}else{
				show_btn_ids += checkarr[i].id+',';
				array_ids.push(checkarr[i].id);
				$("#classify_ids").val(show_btn_ids);
			}

		} 
	}

 	var treedata=[];
	 //用来修改后的节点数据
	var update_treedata=[];
    //渲染
    var inst1 = tree.render({
      elem: '#addLeftType'  //绑定元素
	  ,id: 'demoId'
	  ,edit: ['add', 'update', 'del']
	  ,showCheckbox: true
      ,data:treedata
	  ,click: function(obj){
      	//layer.msg(JSON.stringify(obj.data));
      },oncheck: function(obj){
		// console.log(obj); //得到当前点击的节点数据 
		show_btn_ids = '';
		$("#classify_ids").val('');
		$("#showLeftType").html('');
		//获得选中的节点
		var checkData = tree.getChecked('demoId');
		$("#showLeftType").html("");
		//console.log(checkData.length)
		// 取消其它选中,只能单选
		uncheckAllExceptOne()


		get_tree_id(checkData); 
	
	 },operate: function(obj){
			var type = obj.type; //得到操作类型:add、edit、del
			var data = obj.data; //得到当前节点的数据
			var elem = obj.elem; //得到当前节点元素
			//Ajax 操作
			var id = data.id; //得到节点索引
			var all_id = data.pid_all.split(","); 
			if(type === 'add'){ //增加节点
				addType(id,all_id);
				//返回 key 值
				return '增加';
			} else if(type === 'update'){ //修改节点
				var title = elem.find('.layui-tree-txt').html()
				$.ajax({
					type: "post",
					url: "{:url('classif_add')}",
					dataType:"json",   //返回格式为json
					data: {id:id,title:title,field:'name',action:'ajax_update'},
					success: function(data){
						layer.msg(data.msg);
						$("#"+id).text(title);
					},
					error: function(){
						layer.msg('更新失败!');
					}
				});
			} else if(type === 'del'){ //删除节点
				$.ajax({
					type: "post",
					url: "{:url('classif_add')}",
					dataType:"json",   //返回格式为json
					data: {id:id,del_is:1,action:'ajax_del'},
					success: function(data){
						layer.msg(data.msg);
						if(data.code==200){
							//获得选中的节点
							var checkData = tree.getChecked('demoId');
							//清空选中
							array_ids=[];
							//重新获取选中id
							get_tree_id(checkData); 
							//treedata 结构数据,id递归删除对应id,array_ids给默认选中的id加上
							update_treedata= delete_tree_id(treedata,id,array_ids,"del",0,all_id);
							//重新渲染组件
							tree.reload('demoId', {data:update_treedata});
							//清空
							$("#showLeftType").html("");
							//再次获得选中的节点
							var checkData = tree.getChecked('demoId');
							//再次清空选中
							array_ids=[];
							//再次重新获取选中id
							get_tree_id(checkData); 
						}
					},
					error: function(){
						layer.msg('更新失败!');
					}
				});
			};
	  }
    });

	//取消除了当前选中所有选项
	function uncheckAllExceptOne(checkboxId) {
		var checkboxes = document.querySelectorAll('#addLeftType input[type="checkbox"]');
		for (var i = 0; i < checkboxes.length; i++) {
			checkboxes[i].checked = false;
		}
	}
	function get_page_data(id){
		$.ajax({
			type:'post',
			url: '{:url('classif_listjson')}',
			data: {id:id},
			success:function(response){
				treedata = response.data;
				if(response.code!=200){
					treedata =[{title:response.msg,id:99999999,children:[]}];
				}
				tree.reload('demoId', {
					data:treedata
				});
				{notempty name="$rs"}
				tree.setChecked('demoId', [{$rs['classify1']},{$rs['classify2']}]); //单个勾选 id 为 1 的节点
				{/notempty}
			}
		});
	};
	var p_id=0;
	var add_terr_item_title="未命名";
	get_page_data({$id});
	tree.setChecked('demoId', [1, 2]); // 批量勾选 id 为 1,3 的节点
	//操作节点type:del删除 add 添加
	function delete_tree_id(data,id,array_ids,type,addid,all_id){ 
		var is_data=data;
		var one_data=[];
		var p_spread=true;
		
		for(var i=0;i<data.length;i++){
		
			if(id==data[i].id&&type=="del"){
				is_data.splice(i,1);
			}else if(type=="add"&&(id==data[i].id)){
				if(is_data[i].children){
					is_data[i].children.push({id:addid,title:add_terr_item_title,pid_all:all_id.toString()+','+addid});
				}else{
					is_data[i].children=[];
					is_data[i].children.push({id:addid,title:add_terr_item_title,pid_all:all_id.toString()+','+addid});
				}
			}
			for (let index = 0; index < array_ids.length; index++) {
					var acid = array_ids[index];
					if(data[i]&&acid==data[i].id){
						if(is_data[i]){
							is_data[i].checked=true;
						}
					}
			} 
			//父节点展开
			if(data[i]&&data[i].id==id){
				is_data[i].spread=p_spread;//父节点展开
			}
			if(all_id){
				for (let k = 0; k <all_id.length; k++) {
					const sp_id = all_id[k];
					if(data[i]&&sp_id==data[i].id){
						is_data[i].spread=p_spread;//父节点展开
					}
				}
			}
			if(data[i]&&data[i].children){
				delete_tree_id(data[i].children,id,array_ids,type,addid,all_id);
			}
		}
		one_data=is_data;
		return  one_data;
	}

	function addType(pid,all_id){
		var typetitle = $("#typetitle").val();
		var title
		if(pid==p_id||pid==""||pid==0||pid==null||pid==undefined){
			title = typetitle? typetitle:add_terr_item_title;
		}else{
			title=add_terr_item_title;
		}
		add_terr_item_title=title;
		$.ajax({
			type: "post",
			url: "{:url('classif_add')}",
			dataType:"json",   //返回格式为json
			data: {pid:pid,title:title,level_limit:{$level_limit}},
			success: function(data){
				layer.msg(data.msg);
				if(data.code==200){
					//获得选中的节点
					var checkData = tree.getChecked('demoId');
					//清空选中
					array_ids=[];
					//重新获取选中id
					get_tree_id(checkData); 
					//treedata 结构数据,id递归删除对应id,array_ids给默认选中的id加上,all_id
					update_treedata= delete_tree_id(treedata,pid,array_ids,"add",data.add_id,all_id);
					if((pid==0||pid==null||pid==undefined||pid==""||pid==p_id)){
						update_treedata.push({id:data.add_id,title:add_terr_item_title,pid_all:p_id.toString()+','+data.add_id});
					}
					//重新渲染组件
					tree.reload('demoId', {data:update_treedata});
					//清空
					$("#showLeftType").html("");
					//再次获得选中的节点
					var checkData = tree.getChecked('demoId');
					//再次清空选中
					array_ids=[];
					//再次重新获取选中id
					get_tree_id(checkData); 
					add_terr_item_title="未命名";
				}else{
					//重新渲染组件
					tree.reload('demoId');
				}
			},
			error: function(){
				layer.msg('更新失败!');
			}
		});
	}
	$("#addType").click(function(){
		//更新后台数据
		addType(p_id,0);
	})

//tree组件 操作 结束

layui 树组件tree 通过API获取数据_javascript_02

去掉uncheckAllExceptOne()就可以多选了

表单提交的一些判断

/* 监听提交 */
    form.on('submit(component-form-demo1)', function(data){
		/* 启动加载... */
		var indexload = layer.load(1, {
		  shade: [0.1,'#fff'] //0.1透明度的白色背景
		});
		// 加入分类
		var data = JSON.parse(JSON.stringify(data.field));
		var checkData = tree.getChecked('demoId');
		if (Object.keys(checkData).length === 0) {
			layer.close(indexload);/* 关闭加载弹层... */
			layer.msg('请选择分类');
			return
		}
		var classify1 = checkData[0]['id'];
		var classify2 =  checkData[0]?.children?.[0]?.id;;
		data.classify1=classify1;
		data.classify2=classify2;
		var addData = JSON.stringify(data);
		$.ajax({
			url: "{:url('add')}",
			type: "post",
			dataType:"json",   //返回格式为json
			data: {data:addData},
			success: function(data) {
				layer.close(indexload);/* 关闭加载弹层... */
				layer.msg(data['msg']);
				/* 延迟2秒刷新... */
				if(data['code']==200){
					setTimeout(function(){
						window.location.reload()  
					},2000)
				}
			},
			error: function() {
				layer.close(indexload);/* 关闭加载弹层... */
				layer.msg('{$form_server_error_title}');
			}
		});
    });

标签:function,layer,layui,tree,获取数据,var,data,id
From: https://blog.51cto.com/haibo0668/9014663

相关文章

  • 【CF1917F】Construct Tree
    题目题目链接:https://codeforces.com/contest/1917/problem/F给出\(n\)条边的边权,询问是否可以构造出一棵树,使得所有边都被用上恰好一次且直径为\(d\)。\(n,d\leq2000\)。思路首先肯定是找出一条长度为\(d\)的链,然后判断可不可以把剩下的所有边都挂在这条链的带权重心......
  • CF396C On Changing Tree 题解
    CF396C考虑将贡献表示出来:\(\forallv\in\text{subtree}_u\),\(v\)会加上\(x-(dep_v-dep_u)k\),然后发现这个东西可以维护整棵子树,即把\(x,dep_u\timesk\)和\(dep_v\timesk\)分开计算,然后\(dep_v\)可以最后再管,就变为子树加,单点和了。用树状数组维护dfs序即可。......
  • C++ Qt开发:TableView与TreeView组件联动
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TableView与TreeView组件联动的常用方法及灵活运用。本章我们继续实现表格的联动效果,当读者点击T......
  • layui之静态表格的分页及搜索功能以及前端使用XLSX导出Excel功能
    LayUI官方文档:https://layui.dev/docs/2/#introduceXLSXNPM地址:https://www.npmjs.com/package/xlsxXLSX 使用参考文档:https://juejin.cn/post/7003153489920524301https://blog.csdn.net/qq_20805455/article/details/1222297621、在官方网站上下载layui压缩文件解压后选......
  • 【OpenCV】【Python】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)
    在打算自己实现二维码的定位的时候,看到了相关博文的关于cv2.findContours返回的层级信息来定位三个“回”字从而达到定位二维码的目的,但是返回的hierarchy中的层级信息分别对应的是哪个轮廓却困扰了许久,查阅了很多资料最后还是自己手动找出了清晰的规律。关于hierarchy返......
  • CodeForces 1917F Construct Tree
    洛谷传送门CF传送门考虑形式化地描述这个问题。先把\(l\)排序。然后相当于是否存在一个\(\{1,2,\ldots,n\}\)的子集\(S\),使得:\(\sum\limits_{i\inS}l_i=d\)。\(\existsT\subseteqS,\max\limits_{i\notinS}l_i\le\min(\sum\limits_{i\inT}l_i,\sum......
  • .net自带的树控件TreeView用法
    原文链接:https://blog.csdn.net/wenchm/article/details/133276828https://blog.csdn.net/xiaogongzhu001/article/details/131100371    TreeView控件(树控件)可以为用户显示节点层次结构,每个节点又可以包含子节点,包含子节点的节点叫父节点。就像在Windows操作系统的Wind......
  • C# WinForm控件之advTree
    原文链接:https://www.cnblogs.com/SoftWareIe/p/8757270.html0.属性和方法//属性方法advTree1.DragDropEnabled=!advTree1.DragDropEnabled;//控制是否可以拖动节点advTree1.MultiSelect=!advTree1.MultiSelect;//控制节点是否可以多选advTree1.ExpandButtonType=Dev......
  • 一个功能更强大,性能更高的树控件DevComponents.AdvTree.AdvTree(几种树形控件汇总)
    原文链接:https://www.cnblogs.com/a7373773/archive/2009/07/27/1532236.html一直在用DevComponents.DotNetBar2 控件近来探索Add()和AddRange()的性能问题。一样用极为不专业不科学的方法,比较DevComponents.AdvTree.AdvTree的Add()和AddRange()的性能 1private void butt......
  • Codeforces1917F - Construct Tree
    Codeforces1917F-ConstructTreeProblems给一个长度为\(n\)的序列\(l\)和\(d\)。要求判断是否可以构造出一颗节点数为\(n+1\)的树,满足\(l\)的每一个元素唯一对应为一条边的长度,并使整棵树的直径长度恰好为\(d\)。Solution不妨令\(l_1\lel_2\le\cdots\lel_......