JQ树形菜单加表格混合使用:treeTable组件使用

前端:

 <div class="demo-side" style="margin-top: 50px">
        <table id="demoTreeTb"></table>
    </div>

在这里插入图片描述

js:

<!-- 表格操作列 -->
<script type="text/html" id="tbBar">
    <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="edit">修改</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<link href="__STATIC__/layui_2.5.5/css/layui.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="__STATIC__/layui_2.5.5/layui.all.js"></script>
<script>
    layui.config({
   
        base: '/Public/static/layui_2.5.5/'   //这里是treeTable.js 的目录 例如我的treeTable.js放在这个目录下
    }).use(['treeTable'], function () {
   
        var $ = layui.jquery;
        var treeTable = layui.treeTable;
        $('body').removeClass('layui-hide');

        // 渲染表格
        treeTable.render({
   
            elem: '#demoTreeTb',
            url: 'menus',
            toolbar: true,
            tree: {
   
                iconIndex: 2,
                isPidData: true,
                idName: 'id',  //菜单的id名
                pidName: 'parent_id', //父id 字段名
                arrowType: 'arrow2',
                getIcon: 'ew-tree-icon-style2'
            },
            cols: [[
                {
   type: 'numbers',width:50},
                {
   type: 'checkbox'},
                {
   field: 'cate_name', title: '分类名称', minWidth: 65},

                {
   field: 'remark', title: '备注'},

                {
   field: 'add_time', title: '创建时间'},
                {
   align: 'center', toolbar: '#tbBar', title: '操作', width: 120}
            ]],
            style: 'margin-top:0;'
        });

        // 工具列点击事件
        treeTable.on('tool(demoTreeTb)', function (obj) {
   
            var event = obj.event;
            var id = obj.data.id;
            if (event === 'del') {
   
                $.ajax({
   
                    url: "del_cate_menu_data",    //后台数据请求地址
                    type: "post",
                    data:{
   id:id},
                    async: false,
                    success: function (result) {
   
                        if(result == 'success'){
   
                            layer.msg('删除成功');
                            obj.del();
                        }

                    }
                });

            } else if (event === 'edit') {
   
                layer.open({
   
                    title:'编辑',
                    type: 2,
                    // shadeClose: true, //点击遮罩关闭层
                    area: ['400px', '450px'],
                    content: "goods_class_info?id="+id,

                    success:function (layero, index) {
   

                        // layer.close(layer.index)


                        // layer.close(layer.index)
                        // layer.msg('修改成功');
                        // obj.update({cate_name: '新的名称'});
                    },
                    cancel: function(index, layero){
   
                        location.reload()
                    }
                });


                //




            }
        });

    });
</script>

后端接口样式:
搞一个json 字符串即可,需要条数count和data数据. open=true 自动展开
data里面带一个open字段 才能自动展开

public function menus(){
   
        $res = D('StoreCate')
            ->field('id,cate_name,parent_id,remark,add_time,spread as open')
            ->select();
        echo json_encode(
                [
                'code'=>0,
                'msg'=>'',
                'count'=>D('StoreCate')->count(),
                'data'=>$res
                ]
        );exit;


    }

在这里插入图片描述

treeTable.js

/** 树形表格3.x Created by wangfan on 2020-05-12 https://gitee.com/whvse/treetable-lay */
layui.define(["laytpl","form","util"],function(s){
   var g=layui.jquery;var d=layui.laytpl;var c=layui.form;var b=layui.util;var o=layui.device();var h="treeTable";var k={
   };var e={
   elem:undefined,cols:undefined,url:undefined,method:undefined,where:undefined,contentType:undefined,headers:undefined,parseData:undefined,request:{
   pidName:"pid"},toolbar:undefined,defaultToolbar:undefined,width:undefined,height:undefined,cellMinWidth:90,done:undefined,data:undefined,title:undefined,skin:undefined,even:undefined,size:undefined,text:{
   none:"无数据"},reqData:undefined,useAdmin:false,tree:{
   idName:"id",pidName:"pid",childName:"children",haveChildName:"haveChild",openName:"open",iconIndex:0,arrowType:undefined,onlyIconControl:undefined,getIcon:function(u){
   var t=u[this.haveChildName];if(t!==undefined){
   t=t===true||t==="true"}else{
   if(u[this.childName]){
   t=u[this.childName].length>0}}if(t){
   return'<i class="ew-tree-icon layui-icon layui-icon-layer"></i>'}else{
   return'<i class="ew-tree-icon layui-icon layui-icon-file"></i>'}}}};var r={
   field:undefined,title:undefined,width:undefined,minWidth:undefined,type:"normal",fixed:undefined,hide:undefined,unresize:undefined,style:undefined,align:undefined,colspan:undefined,rowspan:undefined,templet:undefined,toolbar:undefined,"class":undefined,singleLine:undefined};var p=function(t){
   k[t.elem.substring(1)]=this;this.reload(t)};p.prototype.initOptions=function(t){
   var D=this;function B(J){
   if(!J.INIT_OK){
   J=g.extend({
   INIT_OK:true},r,J)}if(J.type==="space"){
   if(!J.width){
   J.width=15}J.minWidth=J.width}else{
   if(J.type==="numbers"){
   if(!J.width){
   J.width=40}J.minWidth=J.width;if(!J.singleLine){
   J.singleLine=false}if(!J.unresize){
   J.unresize=true}if(!J.align){
   J.align="center"}}else{
   if(J.type==="checkbox"||J.type==="radio"){
   if(!J.width){
   J.width=48}J.minWidth=J.width;if(!J.singleLine){
   J.singleLine=false}if(!J.unresize){
   J.unresize=true}if(!J.align){
   J.align="center"}}}}if(J.toolbar){
   J.type="tool"}return J}if("Array"!==l(t.cols[0])){
   t.cols=[t.cols]}for(var w=0;w<t.cols.length;w++){
   for(var u=0;u<t.cols[w].length;u++){
   t.cols[w][u].INIT_OK=undefined;t.cols[w][u].key=undefined;t.cols[w][u].colGroup=undefined;t.cols[w][u].HAS_PARENT=undefined;t.cols[w][u].parentKey=undefined;t.cols[w][u].PARENT_COL_INDEX=undefined}}var F=[],G=0;for(var y=0;y<t.cols.length;y++){
   var C=t.cols[y];for(var x=0;x<C.length;x++){
   var A=C[x];if(!A){
   C.splice(x,1);continue}A=B(A);A.key=y+"-"+x;var I=undefined;if(A.colGroup||A.colspan>1){
   A.colGroup=true;A.type="group";I=[];G++;var z=0;for(var v=0;v<t.cols[y+1].length;v++){
   var H=g.extend({
   INIT_OK:true},r,t.cols[y+1][v]);if(H.HAS_PARENT||(z>1&&z==A.colspan)){
   t.cols[y+1][v]=H;continue}H.HAS_PARENT=true;H.parentKey=y+"-"+x;H.key=(y+1)+"-"+v;H.PARENT_COL_INDEX=G;H=B(H);I.push(H);z=z+parseInt(H.colspan>1?H.colspan:1);t.cols[y+1][v]=H}}A.CHILD_COLS=I;if(!A.PARENT_COL_INDEX){
   F.push(A)}t.cols[y][x]=A}}this.options=g.extend(true,{
   },e,t);this.options.colArrays=F;if(this.options.url){
   this.options.reqData=function(J,K){
   if(!D.options.where){
   D.options.where={
   }}if(J){
   D.options.where[D.options.request.pidName]=J[D.options.tree.idName]}(D.options.useAdmin?layui.admin:g).ajax({
   url:D.options.url,data:D.options.contentType&&D.options.contentType.indexOf("application/json")===0?JSON.stringify(D.options.where):D.options.where,headers:D.options.headers,type:D.options.method,dataType:"json",contentType:D.options.contentType,success:function(L){
   if(D.options.parseData){
   L=D.options.parseData(L)}if(L.code==0){
   K(L.data)}else{
   K(L.msg||"加载失败")}},error:function(L){
   K(L.status+" - "+L.statusText)}})}}else{
   if(this.options.data&&this.options.data.length>0&&this.options.tree.isPidData){
   this.options.data=a.pidToChildren(this.options.data,this.options.tree.idName,this.options.tree.pidName,this.options.tree.childName)}}if("default"===this.options.toolbar){
   this.options.toolbar=["<div>",'   <div class="ew-tree-table-tool-item" title="添加" lay-event="add">','      <i class="layui-icon layui-icon-add-1"></i>',"   </div>",'   <div class="ew-tree-table-tool-item" title="修改" lay-event="update">','      <i class="layui-icon layui-icon-edit"></i>',"   </div>",'   <div class="ew-tree-table-tool-item" title="删除" lay-event="delete">','      <i class="layui-icon layui-icon-delete"></i>',"   </div>","</div>"].join("")}if(this.options.defaultToolbar===undefined){
   this.options.defaultToolbar=["filter","exports","print"]}if(typeof this.options.tree.getIcon==="string"){
   var E=this.options.tree.getIcon;this.options.tree.getIcon=function(K){
   if(E!=="ew-tree-icon-style2"){
   return E}var J=K[this.haveChildName];if(J!==undefined){
   J=J===true||J==="true"}else{
   if(K[this.childName]){
   J=K[this.childName].length>0}}if(J){
   return'<i class="ew-tree-icon ew-tree-icon-folder"></i>'}else{
   return'<i class="ew-tree-icon ew-tree-icon-file"></i>'}}}};p.prototype.init=function(){
   var E=this.options;var u=g(E.elem);var B=E.elem.substring(1);u.removeAttr("lay-filter");if(u.next(".ew-tree-table").length===0){
   u.css("display","none");u.after(['<div class="layui-form ew-tree-table" lay-filter="',B,'" style="',E.style||"",'">','   <div class="ew-tree-table-tool" style="display: none;"></div>','   <div class="ew-tree-table-head">','      <table class="layui-table"></table>',"   </div>",'   <div class="ew-tree-table-box">','      <table class="layui-table"></table>','      <div class="ew-tree-table-loading">','         <i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i>',"      </div>",'      <div class="ew-tree-table-empty">',E.text.none||"","</div>","   </div>","</div>"].join(""))}var A=this.getComponents();if(E.skin){
   A.$table.attr("lay-skin",E.skin)}if(E.size){
   A.$table.attr("lay-size",E.size)}if(E.even){
   A.$table.attr("lay-even",E.even)}A.$toolbar.empty();if(E.toolbar===false||E.toolbar===undefined){
   A.$toolbar.hide()}else{
   A.$toolbar.show();if(typeof E.toolbar==="string"){
   d(g(E.toolbar).html()).render({
   },function(F){
   A.$toolbar.html('<div style="display: inline-block;">'+F+"</div>")})}var C=['<div class="ew-tree-table-tool-right">'];for(var y=0;y<E.defaultToolbar.length;y++){
   var w;if("filter"===E.defaultToolbar[y]){
   w={
   title:"筛选",layEvent:"LAYTABLE_COLS",icon:"layui-icon-cols"}}else{
   if("exports"===E.defaultToolbar[y]){
   w={
   title:"导出",layEvent:"LAYTABLE_EXPORT",icon:"layui-icon-export"}}else{
   if("print"===E.defaultToolbar[y]){
   w={
   title:"打印",layEvent:"LAYTABLE_PRINT",icon:"layui-icon-print"}}else{
   w=E.defaultToolbar[y]}}}if(w){
   C.push('<div class="ew-tree-table-tool-item"');C.push(' title="'+w.title+'"');C.push(' lay-event="'+w.layEvent+'">');C.push('<i class="layui-icon '+w.icon+'"></i></div>')}}A.$toolbar.append(C.join("")+"</div>")}if(E.width){
   A.$view.css("width",E.width);A.$tHeadGroup.css("width",E.width);A.$tBodyGroup.css("width",E.width)}var v=this.resize(true);var D="<thead>"+this.renderBodyTh()+"</thead>";A.$tBodyGroup.children("style").remove();if(E.height){
   A.$tHead.html(v+D);A.$tBody.html(v+"<tbody></tbody>");if(E.height.indexOf("full-")===0){
   var z=parseFloat(E.height.substring(5))+A.$toolbar.outerHeight()+A.$tHeadGroup.outerHeight()+1;A.$tBodyGroup.append(['<style>[lay-filter="',B,'"] .ew-tree-table-box {',"   height: ",m()-z,"px;","   height: -moz-calc(100vh - ",z,"px);","   height: -webkit-calc(100vh - ",z,"px);","   height: calc(100vh - ",z,"px);","}</style>"].join(""));A.$tBodyGroup.data("full",z);A.$tBodyGroup.css("height","")}else{
   A.$tBodyGroup.css("height",E.height);A.$tBodyGroup.data("full","")}A.$tHeadGroup.show()}else{
   A.$tHeadGroup.hide();var x={
   lg:50,sm:30,md:38};A.$tBodyGroup.append(['<style>[lay-filter="',B,'"] .ew-tree-table-box:before {','   content: "";',"   position: absolute;","   top: 0; left: 0; right: 0;","   height: "+(x[E.size||"md"]*E.cols.length)+"px;","   background-color: #f2f2f2;","   border-bottom: 1px solid #e6e6e6;","}</style>"].join(""));A.$tBody.html(v+D+"<tbody></tbody>")}c.render("checkbox",B);function t(H){
   var F=H.data("parent"),G;if(!F){
   return}var I=A.$table.children("thead").children("tr").children('[data-key="'+F+'"]');var J=I.attr("colspan")-1;I.attr("colspan",J);if(J===0){
   I.addClass("layui-hide")}t(I)}A.$table.children("thead").children("tr").children("th.layui-hide").each(function(){
   t(g(this))});if(E.reqData
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 树形表格treetable)是一种常见的数据展示方式,既可以展示数据的层次结构,又可以展示数据的详细信息,因此在许多领域都有应用。 树形表格的核心是将层次结构的树形关系与普通表格的行列结构相结合。在树形表格中,每个节点都是一行,每一列都是一类数据,树形结构则体现在节点的父子关系上。可以通过缩进、图标等方式来显示节点的层次关系,也可以折叠、展开子节点以显示或隐藏子节点的详细信息。 树形表格的应用场景包括但不限于:文件管理系统、组织架构图、商品分类等。相较于普通表格或者树形列表,树形表格可以更直观地呈现数据间的关系,使得数据展示更清晰明了。 开发者可以通过使用相关的 UI 库或者前端框架来实现树形表格的功能,并通过配置数据、格式样式等属性来进行定制化。在开发过程中需要注意性能问题,避免过深的递归,以及优化数据的查询等操作。 总之,树形表格是一种非常实用的数据展示方式,用来展示具有层次结构的数据非常适用。它可以帮助用户更清晰地理解数据间的关系,强数据的可读性、可理解性,提升用户体验。 ### 回答2: 树形表格(treetable)是一种用于展示树状结构的表格视图。它包含了行和列两个维度,每一行都可以展开或者折叠成它的子树结构,这样可以节省大量空间和提高数据可视化的效率。树形表格可以用于对层级信息进行展示,例如文件目录、产品分类、组织架构等等。它可以同时将行和列作为维度,而且视图清晰明了,易于用户的查看和使用树形表格的优点是明显的,展开子树结构可以使用更少的空间来呈现更多的数据,并且可以更准确地理解层级信息。同时,树形表格可以很方便地实现节点的拖放排序、展开、折叠和移除等交互操作。与此同时,提供搜索、排序、过滤等功能能够让用户更有效地查找感兴趣的数据。 然而,树形表格也存在一些缺点。例如,由于它展示的是层级的信息,所有的操作都需要在具有特定级别的节点上进行。如果节点太多,可能会出现用户无法快速找到自己需要的节点的问题。此外,由于树状结构中每个节点的数据都是依存于其祖先节点,导致对节点数据的修改变得异常复杂。 总的来说,树形表格是一种适用于树状结构视图的有用的展示方式,它能够提供清晰的层级信息和交互能力,并且随着互联网应用的普及,它将在越来越多的领域发挥巨大的作用。 ### 回答3: 树形表格treetable),是一种类似于树状图的表格形式。它可以展示数据之间的层次关系,在表格的左侧以树形结构的方式呈现。树形表格最广泛应用于网站数据和企业运营数据的展示,尤其适用于那些需要快速深入了解数据的业务领域。 树形表格的优势在于其可扩展性。相比于传统的表格实现,树形表格可以将大量的数据进行组织和分类,使数据展示更具有层次性和可读性。在具体应用中,树形表格可以很好地展示多层数据和复杂的业务关系,使用户能够更容易地理解数据之间的关联和影响。 此外,树形表格还具有一系列的功能,如展开和折叠、拖拽和排序、动态更新等。用户可以根据具体需求自由设置和调整表格的样式和功能。 虽然树形表格的应用场景较为特殊,但它在以数据为中心的应用中的作用不容忽视。随着大数据和智能化的应用不断深入,树形表格有望成为数据分析和业务管理中不可或缺的工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jason Ho

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值