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

news2024/9/25 23:23:40

一、简单

	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 的节点
			}
		});
	};

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

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组件 操作 结束

去掉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}');
			}
		});
    });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1324020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

diffusers-Inpainting

原文链接&#xff1a;添加链接描述 白色mask区域仅使用生成出来的&#xff0c;非白色mask区域使用原始影像&#xff0c;但是图像有点不平滑 import PIL import numpy as np import torchfrom diffusers import AutoPipelineForInpainting from diffusers.utils i…

一文为您解决:Ozon服装尺码表怎么上?Ozon富文本图片怎么处理等产品优化问题

近日&#xff0c;不少Ozon卖家反馈在编辑产品时遇到&#xff1a;中俄服装/鞋类尺码不匹配、富文本文案及图片编辑较繁琐、详描图片质量不佳、富文本图片上传效率慢等问题。 针对以上问题&#xff0c;妙手ERP在Ozon采集箱及在线产品的产品编辑模块优化了以下功能&#xff0c;全…

了解C++工作机制

基于hello.cpp对C的运行进行一个初步认识&#xff0c;并介绍国外C大佬Cherno常用的项目结构和调试Tips C是如何工作的 C工作流程1.实用工程&#xff08;project&#xff09;结构&#xff08;1&#xff09;Microsoft Visual Studio2022新建项目后&#xff0c;自动生成的原始文件…

【机器学习】密度聚类:从底层手写实现DBSCAN

【机器学习】Building-DBSCAN-from-Scratch 概念代码数据导入实现DBSCAN使用样例及其可视化 补充资料 概念 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff0c;具有噪声的基于密度的聚类方法&#xff09;是一种基于密度的空间聚类算…

脉冲水表计量方法有哪些?

随着社会的发展和人们对资源的需求不断增长&#xff0c;水资源的有效利用显得尤为重要。而水表作为测量家庭和工业用水的关键设备&#xff0c;其准确性和稳定性对于水资源管理至关重要。本文将重点介绍水表脉冲数计量方法&#xff0c;以帮助读者更好地理解和应用水资源。 一、机…

Magnific AI:彻底改变 AI 生成图像的升级

在我最近与 Magnific AI 的讨论中&#xff0c;我不仅感到惊讶&#xff0c;而且对该工具提供的质量和可能性着迷。我发现 Magnific AI 能够转换人工智能生成的图像&#xff08;这些图像通常只能以低分辨率提供&#xff09;&#xff0c;尤其令人印象深刻&#xff0c;不仅在可打印…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别&#xff1a; 1.sobol计算依赖于验证集样本&#xff0c;无需定义变量上下限。 2.SW-ELM自带激活函数&#xff0c;计算具有phi&#xff08;x&#xff09;e^x激…

Kafka基本原理及使用

目录 基本概念 单机版 环境准备 基本命令使用 集群版 消息模型 成员组成 1. Topic&#xff08;主题&#xff09;&#xff1a; 2. Partition&#xff08;分区&#xff09;&#xff1a; 3. Producer&#xff08;生产者&#xff09;&#xff1a; 4. Consumer&#xff08;…

多任务学习(Multi-task Learning)的详细过程和具体示例

多任务学习 1.多任务学习的基本思想2. 多任务学习的过程包括:3. 多任务学习的具体例子: 1.多任务学习的基本思想 多任务学习(Multi-task Learning)是一种机器学习的方法,它可以同时解决多个相关任务。 多任务学习的基本思想是:多个任务之间存在一定的相关性或公共特征,我们可…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中&#xff0c;我们⼀般谈的⽂件有两种&#xff1a; 程序⽂件、数据⽂件 &#xff08;从⽂件功能的⻆度来分类 的&#xff09;。 程序⽂件 &#xff1a; 程序⽂件包括源 程序⽂件&#xff08;后缀为.c&#xff09; , ⽬标⽂件&#xff0…

虚幻学习笔记16—C++和3DUI(二)

一、前言 上一篇虚幻学习笔记15—C和UI&#xff08;一&#xff09;中介绍了通过C代码创建2D的ui&#xff0c;本章主要讲解怎么用C代码创建3D的UI&#xff0c;在虚幻学习笔记3—UI跟随弹窗这章中讲解了怎样用蓝图创建一个3D的UI&#xff0c;并且和其交互。 本系列使用的虚幻5.2.…

Hive参数操作和运行方式

Hive参数操作和运行方式 1、Hive参数操作 1、hive参数介绍 ​ hive当中的参数、变量都是以命名空间开头的&#xff0c;详情如下表所示&#xff1a; 命名空间读写权限含义hiveconf可读写hive-site.xml当中的各配置变量例&#xff1a;hive --hiveconf hive.cli.print.headert…

abpvnext框架的项目部署到linux arm64版的docker中

参考&#xff1a; windows10下安装的docker 导出镜像到另一个电脑_docker镜像拷贝另一台机器的镜像-CSDN博客 前提条件&#xff1a; 1、vs2022&#xff0c;我的电脑本机安装有windows版docker desktop 。 2、linux中已经安装好docker&#xff0c;安装了sftp。这部分可以自行…

vue proxy代理 和 Nginx 配置跨域

vue.config.js文件中配置的代理&#xff1a; devServer: {port: 9095,// open: true, // 配置项目在启动时自动在浏览器打开proxy: {/yh: { // /api是代理标识&#xff0c;一般是每个接口前的相同部分target: "http://192.168.5.58:8002", // 请求地址&#xff0c;一…

2023年12月GESP认证Scratch图形化等级考试(四级)真题试卷

2023年12月GESP认证Scratch图形化等级考试&#xff08;四级&#xff09;真题试卷 题目总数&#xff1a;27 总分数&#xff1a;100 选择题 第 1 题 单选题 现代计算机是指电子计算机&#xff0c;它所基于的是&#xff08; &#xff09;体系结构 A. 艾伦图灵 B. …

Kafka为什么能高效读写数据

1&#xff09;Kafka 本身是分布式集群&#xff0c;可以采用分区技术&#xff0c;并行度高&#xff08;生产消费方并行度高&#xff09;&#xff1b; 2&#xff09;读数据采用稀疏索引&#xff0c;可以快速定位要消费的数据&#xff1b; 3&#xff09;顺序写磁盘&#xff1b; …

vue3项目引入电子签名(可横屏竖屏)

实现效果&#xff1a;&#xff08;左边横屏&#xff0c;右边竖屏&#xff09; 前言&#xff1a;【使用开源项目smooth-signature 实现签名的功能。Gitee 地址是 &#xff1a;GitHub - linjc/smooth-signature: H5带笔锋手写签名&#xff0c;支持PC端和移动端&#xff0c;任何前…

局域网其他pc如何访问宿主机虚拟机IP?

文章目录 背景贝瑞蒲公英设置虚拟机网络连接测试 背景 使用贝瑞蒲公英异地组网&#xff0c;将家里的pc作为pgsql服务器在公司使用&#xff0c;但是虚拟机的ip和端口访问不了 贝瑞蒲公英 设置虚拟机网络 就是添加端口转发规则 连接测试 公网内其他pc连接测试 可以看到已经连接成…

【python基础】-- yarn add 添加依赖的各种类型

目录 1、安装 yarn 1.1 使用npm安装 1.2 查看版本 1.3 yarn 淘宝源配置 2、安装命令说明 2.1 yarn add&#xff08;会更新package.json和yarn.lock&#xff09; 2.2 yarn install 2.3 一些操作 2.3.1 发布包 2.3.2 移除一个包 2.3.3 更新一个依赖 2.3.4 运行脚本 …

知乎上高频提问:Redis到底是单线程还是多线程程序?

1.概述 这里我们先给出问题的全面回答&#xff1a;Redis到底是多线程还是单线程程序要看是针对哪个功能而言&#xff0c;对于核心业务功能部分(命令操作处理数据)&#xff0c;Redis是单线程的&#xff0c;主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的&#xff…