概述
后台框架中使用树状表格是非常常用的操作,layUI本身并没有这种组件。 第三方的treetable.js做到了完美的实现,但是不能实现在双击时异步加载数据,本文就是站在了巨人的肩膀上实现的异步加载的树状表格~
1. 使用说明
本组件基于treetable.js组件进行编写,最大的区别在treetable.js无法进行异步加载,而本组件则使用异步加载树状表格。
因此,若无异步加载需求,建议直接使用treetable.js,有异步加载需求时,可使用本组件。
本组件treetableAsync.js下载地址:https://pan.baidu.com/s/1qZXi7mLJj0ZvjMd4mGbjFA 提取码:808p
本组件所依赖的treetable.js下载地址:https://pan.baidu.com/s/1fx5_sFRb0Noa4NCIdDoltw 密码:e891 (源码有修改,因此不能使用官方下载的原版本)
2. 使用需知
2.1 本组件依赖于treetable.js【重中之重】
由于本组件依赖于treetable.js,因此使用本组件时,需首先引入treetable.js,方可使用。 但由于treetable.js的源码进行过修改,因此不能使用官方下载的原版本。
代码示例:
layui.config({
base: '../../common/'
}).extend({
index: 'lib/index',
treetable: "../lib/extend/treetable", // 使用异步加载treetableAsync,必须先引入treetable
treetableAsync : '../lib/extend/treetableAsync'
})
2.2 本组件基于layUIAdmin进行使用
本组件使用中的Ajax请求,基于layUIAdmin的admin.req()进行。 如果不使用layUIAdmin,需要自行调整源码。
2.3 本组件的方法支持treetable.js的所有方法;
本组件中所用的所有方法,均基于支持treetable.js中所使用的方法,因此在treetable.js中可以调用的方法,均可使用treetableAsync调用。
例如:
treetableAsync.expandAll('#dataList');
// 等同于
treetable.expandAll('#dataList');
2.4 本组件不支持的其他方法,均可使用layui-table组件的方法。
本组件及treetable.js所不支持的方法,均可使用layUI原生的数据表格组件的相应方法。
本组件不支持列表的toolbar操作,则可以使用table原生的事件监听:
//列表操作
table.on('tool(dataList)', function (obj) {
})
2.4 组件源码
本组件源码附上,大家有疑问可以评论留言。
layui.define(['index','form','treetable','jquery','treetable'],function(exports){
var treetable = layui.treetable,
table = layui.table,
form = layui.form,
$ = layui.jquery,
setter = layui.setter,
view = layui.view,
admin = layui.admin;
var tableData = [];
var treetableAsync = {
render : function(param){
var provincesUrl = param.url;
function init(id){
admin.req({
url: provincesUrl + id,
type:"get",
success:function(r){
param.data = tableData = r.data;
tableInit();
}
});
}
init(param.treeSpid);
// 渲染表格
function tableInit(){
treetable.render(param);
}
$("body").on('dblclick','.layui-table-body .layui-table tr',function(){
var top = $('.layui-table-body').scrollTop();
var pid = $(this).find('div[class$="'+param.treeIdName+'"]').text();
var index = $(this).index();
admin.req({
url: provincesUrl + pid,
type:"get",
success:function(r){
var isInit = false;
for(var i=0; i
初次之外,本组件所有方法属性,均与treetable.js完全相同,请熟读treetable.js的帮助文档。
【附】 非异步加载的treetable.js使用方式
实现layui的树形表格treeTable
1.简介
在layui数据表格之上进行扩展实现。
- 演示地址:https://whvse.gitee.io/treetable-lay/
还有一个BOM表结构的树形表格,树形表格2,欢迎查看。
2.使用方法
2.1.引入模块
下载module/treetable-lay整个文件夹,放在你的项目里面,然后使用模块加载的方式使用:
layui.config({
base: 'module/'
}).extend({
treetable: 'treetable-lay/treetable'
}).use(['treetable'], function () {
var treetable = layui.treetable;
});
2.2.渲染表格
注意:
可以使用url传递数据,也可以使用data传递数据,如果使用url传递数据,参数是where字段,
跟layui数据表格的使用方式一致。
数据格式
总而言之就是以id、pid的形式,不是以subMenus的形式,当然id、pid这两个字段的名称可以自定义:
{
"code": 0,
"msg": "ok",
"data": [{
"id": 1,
"name": "xx",
"sex": "male",
"pid": -1
},{
"id": 2,
"name": "xx",
"sex": "male",
"pid": 1
}
]
}
2.3.参数说明
layui数据表格的所有参数都可以用,除此之外treetable新增的参数有:
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
treeColIndex | int | 是 | 树形图标显示在第几列 |
treeSpid | object | 是 | 最上级的父级id |
treeIdName | string | 否 | id字段的名称 |
treePidName | string | 否 | pid字段的名称 |
treeDefaultClose | boolean | 否 | 是否默认折叠 |
treeLinkage | boolean | 否 | 父级展开时是否自动展开所有子级 |
treeColIndex
树形图标(箭头和文件夹、文件的图标)显示在第几列, 索引值是cols数组的下标。
treeSpid
最上级的父级id,比如你可以规定pid为0或-1的是最顶级的目录。
treeIdName
treetable是以id和pid字段来渲染树形结构的,如果你的数据没有id和pid字段,你可以指定id和pid字段的名称。
treePidName
pid在你的数据字段中的名称。
treeDefaultClose
默认是全部展开的,如果需要默认全部关闭,加上treeDefaultClose:true即可。
treeLinkage
父级展开时是否自动展开所有子级
2.4.注意事项
不能使用分页功能,即使写了page:true,也会忽略该参数。
不能使用排序功能,不要开启排序功能。
table.reload()不能实现刷新,请参考demo的刷新。
除了文档上写的treetable.xxx的方法之外,其他数据表格的方法都使用table.xxx。
建议删除和修改请求完后台之后请刷新(重新渲染)表格,最好不要使用obj.delete方式删除。
2.5.其他方法
全部展开
treetable.expandAll('#table1');
全部折叠
treetable.foldAll('#table1');
2.6.如何修改图标
通过css来修改图标,content是图标的unicode字符。
修改文件夹图标:
/** 未展开 */
.treeTable-icon .layui-icon-layer:before {
content: "\e638";
}
/** 展开 */
.treeTable-icon.open .layui-icon-layer:before {
content: "\e638";
}
修改文件图标:
.treeTable-icon .layui-icon-file:before {
content: "\e621";
}
修改箭头的图标:
/** 未展开 */
.treeTable-icon .layui-icon-triangle-d:before {
content: "\e623";
}
/** 展开 */
.treeTable-icon.open .layui-icon-triangle-d:before {
content: "\e625";
}
如何获取content:
2.7.截图
树形表格1:
树形表格2: