zoukankan      html  css  js  c++  java
  • layui-soul-table 无限级子表

    组件地址

    https://saodiyang.gitee.io/layui-soul-table/#/zh-CN/component/child/basic

      1 var childTable = null;
      2 var xqTable = null;
      3 var myTableIns = null;
      4 var soulTable = null;
      5 var spread = false;
      6 var response = {
      7     statusName: 'success' //数据状态的字段名称,默认:code
      8     , statusCode: true //成功的状态码,默认:0
      9     , msgName: 'message' //状态信息的字段名称,默认:msg
     10     , countName: 'total' //数据总数的字段名称,默认:count
     11     , dataName: 'rows' //数据列表的字段名称,默认:data
     12 };
     13 
     14 
     15 var variableCols = [[
     16     { field: 'shortName', title: '变量名称', filter: true },
     17     { field: 'fullName', title: '完整名称', sort: true },
     18     {
     19         field: 'type', title: '取值类型', sort: true, templet: function (d) {
     20             switch (d.type) {
     21                 case 0: return "默认值";
     22                 case 1: return "SQL语句取值";
     23                 case 2: return "变量计算取值";
     24                 default: return "";
     25             }
     26         }
     27     },
     28     {
     29         field: 'dataType', title: '参数类型', sort: true, templet: function (d) {
     30             switch (d.dataType) {
     31                 case 0: return "数值类型";
     32                 case 1: return "字符类型";
     33                 case 2: return "时间类型";
     34                 default: return "";
     35             }
     36         }
     37     },
     38     { field: 'defVal', title: '默认数据' },
     39     { field: 'sourceData', title: 'SQL语句' },
     40     { title: '操作', toolbar: '#barVar',  250 }
     41     ]];
     42 
     43 
     44 var logicCols = [[
     45     { field: 'expression', title: '逻辑表达式', filter: true },
     46     { field: 'remark', title: '描述', sort: true },
     47     { field: 'result', title: '结果', sort: true },
     48     { title: '操作',  256, templet: '#barLogic' }
     49 ]];
     50 
     51 
     52 
     53 
     54 
     55 /**
     56  * 事项表展开后的子表配置
     57  * @param {any} row
     58  */
     59 var childTable = function (row) {
     60     var col = childColsData(row);
     61     return [
     62         {
     63             title: "数值数据"
     64             , url: 'TrendChart.aspx?action=loadvar'
     65             , page: false
     66             , overflow: 'tips'
     67             , filter: {
     68                 bottom: false
     69             }
     70             , where: function (row) {
     71                 return { matterId: row.id }
     72             }
     73             , cols: variableCols
     74             , toolEvent: function (obj, pobj) {
     75                 var self = this;
     76                 xqTable = this.id;
     77             }
     78             , response: response
     79             , done: function (res) {
     80                 var cols = this.cols;
     81                 soulTable.render(this);
     82             }
     83         }
     84         ,
     85         {
     86             title: '计算逻辑'
     87             , url: 'TrendChart.aspx?action=loadlogic'
     88             , limit: 1000000
     89             , page: false
     90             , overflow: 'tips'
     91             , filter: {
     92                 bottom: false
     93             }
     94             , where: function (row) {
     95                 avalon.log(row)
     96                 return { matterId: row.id, pid: 0 }
     97             }
     98             , cols: col
     99             , response: response
    100             , toolEvent: function (obj, pobj) {
    101                 var self = this;
    102                 //avalon.log("计算条件toolEvent",this.id);
    103                 xqTable = self.id;
    104                 //LogicDataToolEvent(obj);
    105             }
    106             , done: function () {
    107                 avalon.log("计算条件", this.id);
    108                 soulTable.render(this);
    109             }
    110         }
    111     ]
    112 }
    113 
    114 /**
    115  * 逻辑子表的列设置
    116  * @param {any} row
    117  */
    118 var childColsData = function (row) {
    119     return [[{
    120         title: '#',  50, children: function (row) {
    121             //console.log("子表", row)
    122             var arr = childLogicTable(row);
    123             //console.log("列", arr)
    124             return arr;
    125         }
    126     }
    127         , { field: 'expression', title: '逻辑表达式', filter: true },
    128     { field: 'remark', title: '描述', sort: true },
    129     { field: 'result', title: '结果', sort: true },
    130     { title: '操作',  256, templet: '#barLogic' }
    131     ]];
    132 }
    133 /**
    134  * 无限级子表的设置
    135  * @param {any} row
    136  */
    137 var childLogicTable = function (row) {
    138     var col = childColsData(row);
    139     var title = row.expression + " 结果为真时";
    140     return [
    141         {
    142             title: title
    143             , url: 'TrendChart.aspx?action=loadlogic'
    144             , limit: 1000000
    145             , page: false
    146             , overflow: 'tips'
    147             , filter: {
    148                 bottom: false
    149             }
    150             , where: function (row) {
    151                 avalon.log(row)
    152                 return { matterId: row.matterId, pid: row.id }
    153             }
    154             , cols: col
    155             , response: response
    156             , toolEvent: function (obj, pobj) {
    157                 var self = this;
    158                 //avalon.log("计算条件toolEvent",this.id);
    159                 xqTable = self.id;
    160                 //LogicDataToolEvent(obj);
    161             }
    162             , done: function () {
    163                 avalon.log("计算条件", this.id);
    164                 soulTable.render(this);
    165             }
    166         }
    167     ]
    168 }
    169 
    170 
    171 var vm = avalon.define({
    172     $id: "controller"
    173     , searchdata: {kw:""}
    174     , loadData: function () {
    175         GetApiDataSync2("TrendChart.aspx?action=load"
    176             , 'get'
    177             , {}
    178             , function (result) {
    179                 myTableIns.reload({
    180                     data: result.rows
    181                 })
    182             }, true
    183         );
    184     }
    185 });
    186 
    187 layui.config({ base: '/Components/layui/extend/' })
    188     .extend({
    189         tableEdit: 'TableColumnEdit/tableEdit'
    190         , soulTable: 'layui-soul-table/ext/soulTable'
    191         , tableChild: 'layui-soul-table/ext/tableChild'
    192         , tableFilter: 'layui-soul-table/ext/tableFilter'
    193         , excel: 'layui-soul-table/ext/excel'
    194         , tableMerge: 'layui-soul-table/ext/tableMerge'
    195 
    196     }).use(['form', 'element', 'jquery', 'table', 'layer', 'upload', 'tableChild', 'soulTable', 'upload', 'laydate', 'tableEdit'], function () {
    197         var $ = layui.$,
    198             form = layui.form,
    199             table = layui.table;
    200         //soulTable = layui.tableChild;
    201         soulTable = layui.soulTable;
    202 
    203         layui.form.on('select', function (data) {
    204             var result = data.elem.getAttribute("result");
    205             var callback = data.elem.getAttribute("callback");
    206             if (callback) {
    207                 window[callback] && window[callback](data, result)
    208             }
    209         });
    210 
    211         InitData();
    212         vm.loadData();
    213     });
    214 
    215 function InitData() {
    216     myTableIns = layui.table.render({
    217         elem: '#myTable'
    218         , height: $(document).height() - $('#myTable').offset().top - 20
    219         , limit: 999
    220         , soulSort: true
    221         , page: false
    222         , overflow: 'tips'
    223         , filter: {
    224             bottom: false
    225         }
    226         , cols: [[
    227             {
    228                 title: '#',  50, spread: spread, isChild: true
    229                 , children: function (row) {
    230                     return childTable(row);
    231                 }
    232             },
    233             { field: 'matterName', title: '事项名称', filter: true },
    234             { field: 'remark', title: '说明' },
    235             { title: '操作', toolbar: '#barRoot',  450 }
    236         ]]
    237         , done: function (res) {
    238             var cols = myTableIns.config.cols;
    239             /**
    240             * 参数cols是table.render({})中的cols属性值
    241             * aop代理是基于event点击事件进行操作的,
    242             * 因此cols中务必开启event点击事件!
    243             **/
    244             //delete cols[0][0];
    245 
    246             soulTable.render(this)
    247         }
    248     });
    249 }
     <table id="myTable" lay-filter="myTable" class="layui-hidden" style="display: none">
        </table>

    脚本需要使用layui 需要自行添加引用

  • 相关阅读:
    Palindrome Partitioning
    Minimum Path Sum
    Maximum Depth of Binary Tree
    Minimum Depth of Binary Tree
    Unique Binary Search Trees II
    Unique Binary Search Trees
    Merge Intervals
    Merge Sorted Array
    Unique Paths II
    C++ Primer Plus 笔记第九章
  • 原文地址:https://www.cnblogs.com/gxivwshjj/p/13927887.html
Copyright © 2011-2022 走看看