Layui treeTable相关

Layui treeTable相关layui官网是没有treeTable这个功能的,需要下载额外的插件实现,幸运的是有符合layui风格的treeTable插件,此篇围绕树状表格讲述。treeTable官网指路:https://gitee.com/whvse/treetable-lay/wikis/pages下载有Gitee账号官网TreeTable资源下载路径:https://gitee.com/whvse/treetable-lay无Gitee账号导入treeTable的导入方式和layui其他组件一样,都是通过layui

大家好,又见面了,我是你们的朋友全栈君。

layui官网是没有treeTable这个功能的,需要下载额外的插件实现,幸运的是有符合layui风格的treeTable插件,此篇围绕树状表格讲述。
treeTable官网指路:https://gitee.com/whvse/treetable-lay/wikis/pages

下载

有Gitee账号

官网TreeTable资源下载路径:https://gitee.com/whvse/treetable-lay

无Gitee账号

我已上传资源:https://download.csdn.net/download/Swn__/13624186

导入

treeTable的导入方式和layui其他组件一样,都是通过layui的语法导入,不同的是你可以将treeTable.js放到你目录的任意一个地方,不是必须要放到layui/lay/modules中,如果你放到你的js目录下,你需要这样配置你的layui(具体根据个人目录设置)。
在这里插入图片描述

使用

这里不演示静态表格树,只演示通过API接口获取数据的表格树。

代码如下:

<table class="layui-table layui-form" id="data-table" lay-filter="tableEvent"></table>

//js部分
re = treeTable.render({
	tree: {
		iconIndex: 3, // 折叠图标显示在第几列
		isPidData: true, // 是否是id、pid形式数据
		idName: 'code', // id字段名称
		pidName: 'pcode' // pid字段名称
	},
	elem: '#data-table',//要渲染的表格dom
    url: tableDataUrl, //url接口地址,包括参数
	height: 'full-80',  //设置表格高度,滚动时表头固定
	parseData: function(data){  //对后台传来的参数进行解析,例如message-->msg,若有此函数必须要有return
		tableData = data.data;
		return data;  
	},
	end: function(e) {
		form.render(); //form格式整理
	},
	done: function(res) {
		console.log(tableData); //框架解析后的数据children格式
	},
	cols: [
		[{
				field: 'No',
				title: 'No',
				type: 'numbers',
				width: 50
			},
			{
				field: 'name',
				title: '名称',
				width: 200
			},
			{
				field: 'operate',
				title: '操作',
				align: 'center',
				templet: function(item) {
				    return '<a lay-event="edit" data-toggle="tooltip" data-placement="right" title="编辑"><i class="layui-icon layui-icon-edit"></i></a>' +
							'<a lay-event="delete" data-toggle="tooltip" data-placement="right" title="删除"><i class="layui-icon layui-icon-delete" style="color:red"></i></a>'+
							'<a lay-event="add" data-toggle="tooltip" data-placement="right" title="添加"><i class="layui-icon layui-icon-add-circle" style="color:red"></i></a>';
				},
				width: 150
			},
		]
	]

json数据格式(新版不用指定pid的值,自动识别)
说明:通过在数据里面增加open字段来控制是否默认展开
open:true 默认展开
如果没有该参数,则是默认关闭,另外,该参数也可以自定义名称,

treeTable.render({
    tree: {
        openName: 'open',   // 自定义默认展开的字段名
    }
});

json数据格式如下:

{
  "code": 0,
  "msg": "",
  "data": [
    {
      "code": 1,
      "name": "系统管理",
      "pcode": 0,
      "open": true  
    },
     {
      "code": 2,
      "name": "用户管理",
      "pcode": 1,
      "open": true  
    },
    {
      "code": 3,
      "name": "查询用户",
      "pcode": 2,
      "open": true  
    },
    {
      "code": 4,
      "name": "添加用户",
      "pcode": 2,
      "open": true  
    },
  ]
}

上述的tree参数中是构成树状表格的关键,除了那些之外,还有部分如下图所示(截取官网图片):
在这里插入图片描述
另外对表格的样式、布局、颜色、也有相应的参数配置,若是想要和layui统一,默认样式还是挺不错的。除了上述参数之外,还提供自定义配置:自定义表头和自定义树形图标。

除了上述加载方式之外,官网还另外提供了两种:懒加载和reqData方法。

懒加载

懒加载用于数据量特别大的情况下,逐层加载,先加载第一层,当下拉框打开之后再加载第二层,这样可以避免等待时间过长的情况。
这是官网给出的例子:

var insTb = treeTable.render({
    elem: '#demoTb1',
    url: 'json/menus.json',
    request: {pidName: 'pid'}        // 懒加载请求携带的参数名称
    tree: {
        iconIndex: 1,                // 折叠图标显示在第几列
        idName: 'authorityId',       // 自定义id字段的名称
        pidName: 'parentId',         // 自定义标识是否还有子节点的字段名称
        haveChildName: 'haveChild',  // 自定义标识是否还有子节点的字段名称
        isPidData: true              // 是否是pid形式数据
    },
    cols: [[
        {type: 'numbers'},
        {field: 'authorityName', title: '菜单名称'},
        {field: 'menuUrl', title: '菜单地址'},
        {field: 'authority', title: '权限标识'}
    ]]
});
reqData方式

reqData是通过该函数去请求ajax,通过callback方法回调数据。
如果要实现远程访问数据且懒加载,则用这种方式实现。例子如下:

var insTb = treeTable.render({
    elem: '#demoTreeTb',
    tree: {
        iconIndex: 2,           // 折叠图标显示在第几列
        isPidData: true,        // 是否是id、pid形式数据
        idName: 'authorityId',  // id字段名称
        pidName: 'parentId'     // pid字段名称
    },
    cols: [[
        {type: 'numbers'},
        {type: 'checkbox'},
        {field: 'authorityName', title: '菜单名称'},
        {field: 'menuUrl', title: '菜单地址'},
        {field: 'authority', title: '权限标识'}
    ]],
    reqData: function(data, callback) {
        // 在这里写ajax请求,通过callback方法回调数据
        $.get('json/menus.json', function (res) {
            if(res.code==0) callback(res.data);
            else callback(res.msg);
        });
    }
});

懒加载+ajax请求

treeTable.render({
    reqData: function(data, callback) {
        var pid = data?data.id:'';
        $.get('list.json?pid='+pid, function (res) {
            callback(res.data);
        });
    }
});

json数据参考格式:

{"code": 200, "data": [{"id": "1", "name": "xxx", "haveChild": true}]}
通过haveChild标识是否还有子节点,id也是必须的字段,这两个字段的名字可以在tree参数里面自定义。

reqData这个方法里面也可以一次性把所有数据都返回,也可以懒加载。

事件监听

监听工具条点击事件
//这里的data-table是表格的ID,并不是表格的event事件
treeTable.on('tool(data-table)', function(obj){
    var data = obj.data;  // 获得当前行数据
    var event = obj.event; // 获得lay-event对应的值
    if (event === 'edit') {
     	console.log('您点击了编辑');
     } else if (event === 'delete'){
     	console.log('您点击了删除');
     } else if (event === 'add'){
     	console.log('您点击了添加');
     }
});
监听复选框选择
treeTable.on('checkbox(data-table)', function(obj){
    console.log(obj.checked);  // 当前是否选中状态
    console.log(obj.data);  // 选中行的相关数据
    console.log(obj.type);  // 如果触发的是全选,则为:all,如果触发的是单选,则为:one
});
监听单元格编辑:
treeTable.on('edit(test)', function(obj){
    console.log(obj.value); //得到修改后的值
    console.log(obj.field); //当前编辑的字段名
    console.log(obj.data); //所在行的所有相关数据  
});
监听行单双击事件:
// 监听行单击事件
treeTable.on('row(test)', function(obj){
    console.log(obj.tr) //得到当前行元素对象
    console.log(obj.data) //得到当前行数据
    // obj.del(); // 删除当前行
    // obj.update(fields) // 修改当前行数据
});
 
// 监听行双击事件
treeTable.on('rowDouble(test)', function(obj){
    // obj 同上
});
监听单元格单双击事件:
// 监听行单击事件
treeTable.on('cell(test)', function(obj){
    console.log(obj.field); //当前单元格的字段名
    console.log(obj.data) // 得到当前行数据
});
 
// 监听行双击事件
treeTable.on('cellDouble(test)', function(obj){
    // obj 同上
});

实例方法

var insTb = treeTable.render({ });

刷新
insTb.reload(options);   // 重载表格
insTb.refresh();  // 刷新(异步模式)
insTb.refresh(data);  // 刷新(数据模式)
insTb.refresh(id);  // 刷新指定节点下的数据(异步模式)
insTb.refresh(id, data);  // 刷新指定节点下的数据(数据模式)
复选框
insTb.checkStatus();  // 获取选中数据(是否是半选会有一个isIndeterminate字段标识)
insTb.checkStatus(false);  // 获取选中数据,不要半选状态
insTb.setChecked(['1','2']);  // 设置选中数据
insTb.removeAllChecked();  // 移除全部选中
折叠/展开
insTb.expand(id);  // 展开指定节点
insTb.fold(id);  // 折叠指定节点
insTb.expandAll();  // 展开全部
insTb.foldAll();  // 折叠全部
搜索
insTb.filterData('keywords');   // 根据关键字模糊搜索
insTb.filterData(['1','2']);   // 根据id搜索
insTb.clearFilter();   // 清除搜索
更新数据(只更新数据,不更新界面)
insTb.del(id);   // 根据id删除
insTb.update(id, fields);  // 根据id更新

其他方法

pid形式数据转children形式数据

treeTable.pidToChildren(data, idName, pidName, childName);

使用方法

re = treeTable.render({
				treeColIndex: 1, //树形图标显示在第几列
				treeSpid: "", //最上级的父级id
				treeIdName: 'XMID', //id字段的名称
				treePidName: 'PXMID', //pid字段的名称
				treeDefaultClose: true, //是否默认折叠
				treeLinkage: false, //父级展开时是否自动展开所有子级
				elem: '#tree-table', //元素
				cellMinWidth: 80,//最小宽度
				url: tableDataUrl, //请求地址
				 page: false,  //分页
				end: function(e) {
					form.render(); //form格式整理
				},
				done: function(res) {
					tableData = res.data;
				},
				cols: [
					
				],
			});
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138832.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Maven环境的搭建[通俗易懂]

    Maven环境的搭建[通俗易懂]前言:项目需要的外jar包的时候,这时候建立一个普通的web项目是一个比较头痛的事,它需要新建web项目,配置好tomcat(8.0),然后手动复制所需jar到lib下面然后addbuildpath,把需要的jar都下载好并且导入(太麻烦,不灵活),而且可能项目中的框架比较多,导入的jar包有重复的,那么导入重复的jar包启动项目肯定会报错,所以博主教大家手把手搭建maven环境,使用…

    2022年5月14日
    37
  • (转)pyCharm最新2017激活码

    (转)pyCharm最新2017激活码来源:pyCharm最新2017激活码EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2U

    2022年8月27日
    55
  • Django(35)Django请求生命周期分析(超详细)

    Django(35)Django请求生命周期分析(超详细)Django请求生命周期分析1.客户端发送请求在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都

    2022年7月29日
    10
  • 7道常见的数据分析面试题[通俗易懂]

    7道常见的数据分析面试题[通俗易懂]InfoQ内容来自极客时间《数据分析实战45讲》数据分析师近几年在国内互联网圈越来越火,很多开发都因为薪资和发展前景,希望转行到数据分析岗。今天,我们就来聊聊面试数据分析师的那些事。其实,数据分析能力是每个互联网人的必备技能,哪怕你没有转行数据分析师的计划,也推荐你看看这个专题,提升你的数据能力。数据分析的能力要求与数据分析相关的工作有一个特质,就是对数字非常敏感,同时也要求对数据具…

    2022年5月27日
    34
  • WebApp开发实战视频教程「建议收藏」

    WebApp开发实战视频教程「建议收藏」商品配送系统手机WebApp开发(Asp.NetMVC5、HTML5、jQueryMobile、Backbone)适合人群:中级课时数量:18课时用到技术:Asp.NetMVC5、HTML5、jQueryMobile、Backbone涉及项目:手机WebApp、消息推送、富文本编辑、后台接单咨询QQ:18402155921.课程研发环境操作系统:Windows

    2022年6月15日
    28
  • 微信第三方登录接口购买_微信授权登录第三方网页

    微信第三方登录接口购买_微信授权登录第三方网页随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式。  第一步:获取AppID AppSecret(不做解释,自己去微信公众平台申请)第二步:生成扫描二维码,获取codehttps://open.weixin.qq.com/connect/qrconnect?appid=AppID&amp;redirect_uri=http://…

    2025年6月19日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号