# P200214crazyTable **Repository Path**: scheidolon/P200214crazyTable ## Basic Information - **Project Name**: P200214crazyTable - **Description**: 在项目中,我们经常需要用到,表格字段的筛选、单元格编辑等功能。现有的layui table 在这方面功能还不够强大。 参考了社区很多优秀的第三方插件,我汇总了一下,制作了一个 crazy Table 插件。将会陆续将比较好的插件改进、集成进来。 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: http://scheidolon.gitee.io/p200214crazytable/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-02-13 - **Last Updated**: 2020-12-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README <<<<<<< HEAD ## 简介 基于Layui Table 扩展的表格工具,支持单元格编辑,表头筛选,子表扩展。 演示地址: ## 更新日志 - 2020-01-22 v1.1.0 - 支持表头筛选功能 - 表头筛选,支持:input文本模糊查找、checkbox精确查找、radio精确查找、datetime模糊查找 - checkbox精确查找:支持枚举类型 - datetime模糊查找:支持int时间戳范围查找,支持 YYYY-MM-DD 或相关时间格式的模糊查找 - 单元格编辑: - 支持多选批量编辑成相同的值 - 扩展子表格: - 支持展开/折叠子表格 - 支持多个子表格 - 支持手风琴模式 - 支持懒加载(异步加载) - 懒加载模式下,筛选的时候,自动回到第一页 - 2020-01-20 (v1.0) - 基于layui数据表格table模板实现 - 仅支持 layui table 【自动渲染】的表格 - - 支持懒加载(异步加载) - 懒加载模式下,筛选的时候,自动回到第一页 - ## 导入模块 把`/2.x/layerTable`整个目录放在你的项目里面,正确配置模块路径即可使用: ```javascript // 引入方法 layui.config({ base: '/' }).extend({ layerTable: 'layerTable/layerTable' }).use(['layerTable'], function () { var layerTable = layui.layerTable; }); ``` 如果不会引用先到layui官网查看模块规范介绍。 ## 快速使用 - 定义一个 toolbar 脚本,供table col 调用 ```html ``` - 原始的主表,采用方法渲染: ```javascript // 初始化 table Options // 注意:toolbar 对应的是刚才定义的 barCollapse let tbOptions = { // table 其他参数 cols: [[ {type: 'numbers', title: 'ID', width: 50}, // 序号 {title: '详情', field: '', width: 100, toolbar: '#barCollapse'}, // 展开/折叠 操作列 // 其他cols ]], }; ``` - 定义 原始主表 的tool 监听事件 ```javascript //监听行工具事件 table.on('tool(tableDemo)', function (obj) { let data = obj.data; // layerTable options 初始化 // 注意:如果没有加main,默认都是指子表的参数 // 因为需要传递包括 obj, $(this), $(this).parents('tr') 这些参数 // 所以初始化需要在 table.on 中完成 let layerTbOptions = { mainElem: '#mainTableName', // main table 容器,注意,是原始主表的容器 url: 'testapi', // 子表API接口 width: 1600, cols: [[ {field: 'order_no', title: '流水号', width: 180}, {field: 'carnum', title: '车牌', width: 100}, {field: 'do_time', title: '活动时间', width: 150}, {field: 'do_city', title: '活动城市', width: 100}, {field: 'do_addr', title: '活动地点', width: 200}, {field: 'create_datetime', title: '创建时间', width: 180}, ]], // 表头参数,二位数组。用法和layui table 一样 // 【重要!!重要!!重要!!】 rowData: obj.data, // 将当前的 行数据 传递 eventObj: obj, // 将当前的 对象 传递 // 【重要!!重要!!重要!!】 // reqField:可以是对象,也可是数组。 // 如果是对象,索引是url http 请求的参数名。值是行记录的参数字段名。 reqField: ['carnum', 'do_time'], // 【重要!!重要!!重要!!】以下两个参数也非常重要,一定都要传递进来 jQueryThis: $(this), jQueryTr: $(this).parents('tr'), logOn: true, // 开启 log 打印,建议正式发布版本设置为false。默认=false }; switch (obj.event) { // 如果当前是 展开 事件 case 'expand': layerTbOptions.layEvent = '1'; // 注意:展开事件 = "1"(字符串) layui.use(['layerTable'], function () { let layerTable = layui.layerTable; layerTable.render(layerTbOptions); // 和table 一样的render 方法 }); break; // 如果当前是 折叠 事件 case 'closed': layerTbOptions.layEvent = '2'; // 注意:折叠事件 = "2"(字符串) layui.use(['layerTable'], function () { let layerTable = layui.layerTable; layerTable.render(layerTbOptions); // 和table 一样的render 方法 }); break; } }); ``` 大功告成。 ## 设置 新表格的样式 ```javaScript let layerTbOption = { // 其他参数 skin: undefined, // line =(行边框风格),row =(列边框风格),nob =(无边框风格) size: 'sm', // 表格尺寸,默认=sm even: true, // 是否开启隔行变色,默认=true evenColor: "#C8EFD4", // 隔行变色的底色,默认=#C8EFD4 parseData: function (res) { return parseData(this, res); }, renderHeader: function (that, res) { return renderHeader(this, that, res); }, // 完成后的回调,处理 header renderTable: function (that, res, curr, count) { return renderTable(this, that, res, curr, count); }, // 完成后的回调,处理 table renderEvenRow: function (that, res) { return renderEvenRow(this, that, res); }, // 完成后的回调,处理 table even row }; ``` 在这里,renderHeader,renderTable,renderEvenRow,even,evenColor,skin,size 等参数,都是可以用来设置新表格的样式 ## 基础参数一览表 以下参数,如果没有前缀main,都是指针对 扩展面板中显示的新表格的参数 参数 | 类型 | 说明 | 示例值 :--- | :--- | :--- | :--- mainElem | String/DOM | 指定 main table 容器的选择器或 DOM | '#demo' url | String | http API接口 | 'collapse.html' cols | Array | 列配置,二位数组 | 和layui table一样 rowData | Array | 当前的 行数据 | obj.data eventObj | Object | 当前的 对象 | obj jQueryThis | DOM | 当前对象自己 | $(this) jQueryTr | DOM | 当前对象的父级(即当前行DOM) | $(this).parents('tr') reqField | Array|Object | http请求的参数。如果是对象,索引是url http,详见 reqField用法请求的参数名。值是行记录的参数字段名。 | [{}, {}, {}, {}, …],和layui table一样 width | Number | 设定容器宽度,暂不支持 | 350 height | Number/String | 设定容器高度,暂不支持 | 300 cellMinWidth | Number | 定义所有单元格的最小宽度,暂不支持 | 100 even | Boolean | 开启隔行背景| true/false,默认=true evenColor | String | 设置隔行背景,even=true才有效 | 默认=#C8EFD4 size | String | 设定表格尺寸 | sm 小尺寸、lg 大尺寸,和layui table一样,默认=sm parseData | Function | 数据返回后的处理 | 同layui table 的parseData 一样 renderHeader | Function | done完成后渲染新表的标题行 | 详见 自定义方法参数functions renderEvenRow | Function | done完成后渲染奇偶行,even=true生效 | 详见 自定义方法参数functions renderTable | Function | done完成后渲染新表 | 详见 自定义方法参数functions layEventOn | Object | 是否开启 lay-event 触发事件 | 默认:开启 layEvent | String | 当前Event的取值 | 不支持自定义 layEvents | Object | Event 对应的配置 | 详见 事件参数一览表 layEvents logOn | Boolean | 是否开启 log 打印 | 建议正式发布版本设置为false。默认=false ## 重点介绍下 reqField 的用法 ```html 为了更好的说明,我假设当前操作行中,carname = '京AX123Y'(测试数据) 1、数组 比如 reqField: ['carname'],则子表 的http 请求中传递的where = {'carname':'京AX123Y'}。 2、对象 比如 reqField: {'req_name':'carname'},则子表 的http 请求中传递的where = {'req_name':'京AX123Y'}。 ``` 能看明白两者的区别吗? ## 事件参数一览表 layEvents - 该对象,一共就两个成员:expand(展开)、closed(折叠)。这两个成员的成员定义如下: - 这里的code 和 next 就是状态码,支持自定义,但要保证 html中和js 都保持统一 参数 | 类型 | 说明 | 示例值 :--- | :--- | :--- | :--- func | String | 当前触发事件名称 | 'expand', 'closed', title | String | 当前仅支持log中使用 | '展开' icon | String | 折叠/展开对应的icon | 请参见layui iconfont - 以下是layerTable.js 中的默认Options 配置 ```JavaScript // 展开/折叠 状态码 const eventExpand = '1'; // 展开 const eventClosed = '2'; // 折叠 /** * 默认参数,语法定义,参考了layui.table 的options 的方式 * reference: https://www.layui.com/doc/modules/table.html#options */ let defaultOption = { mainElem: undefined, // main table 容器 url: undefined, // http API接口 method: 'post', // http 请求的方法 data: [], // 数据 cols: [], // 列配置,二位数组 where: undefined, // 异步加载数据的请求参数的名称,同时也是html 中action 方法中后面带的参数,注意要保持顺序一致 reqField: undefined, // 异步请求需要传递的参数的字段名称,一维数组,v2.0新增 rowData: undefined, // 当前要操作行的所有记录,要和 reqField 字段配合使用,获取需要异步传递的参数,v2.0新增 eventObj: undefined, // 整张表格渲染的数据,v2.0新增,暂时没用 keyField: undefined, // 整张表索引的名称,v2.0新增 jQueryThis: undefined, // 一般用于layui.table中的on监听tool的时候,=$(this),v2.0新增 jQueryTr: undefined, // tr DOM,=$(this).parent('tr'),v2.0新增 width: undefined, // 容器宽度 height: undefined, // 容器高度 cellMinWidth: 100, // 单元格最小宽度 totalRow: false, // 是否开启 合计 skin: undefined, // line =(行边框风格),row =(列边框风格),nob =(无边框风格) size: 'sm', // 表格尺寸,默认=sm even: true, // 是否开启隔行变色,默认=true evenColor: "#C8EFD4", // 隔行变色的底色,默认=#C8EFD4 parseData: function (res) { return parseData(this, res); }, renderHeader: function (that, res) { return renderHeader(this, that, res); }, // 完成后的回调,处理 header renderTable: function (that, res, curr, count) { return renderTable(this, that, res, curr, count); }, // 完成后的回调,处理 table renderEvenRow: function (that, res) { return renderEvenRow(this, that, res); }, // 完成后的回调,处理 table even row layEventOn: true, // 是否开启 lay-event 触发事件,默认:开启 layEvent: eventExpand, // 1=展开,2=折叠,支持任意格式 layEvents: { expand: {func: 'closed', title: '', icon: 'layui-icon-triangle-d'}, // 展开事件 closed: {func: 'expand', title: '', icon: 'layui-icon-triangle-r'}, // 折叠事件 }, // 展开、折叠 配置 logOn: false, // 是否开启 log 打印 }; ``` ## 自定义方法参数一览表 functions 参数 | 类型 | 说明 | 示例值 :--- | :--- | :--- | :--- this | Object | 指原始表的Options配置 | that | DOM | 新创建的表的上层目录,可以对此进行各类操作 | this.elem.next(),其中this 就是新表done回调中的this res | Array | 新表done完成后返回的数据 | 参见layui table done curr | Number | 当前页码 | 参见layui table done,仅限renderTable count | Number | 当前页面数据长度 | 参见layui table done,仅限renderTable ## ------------------------------- ## ------------------------------- ## ------------------------------- ## ------------------------------- - 以下是v1.0 的指导书 ## 导入模块 把`/1.x/layerTable`整个目录放在你的项目里面,正确配置模块路径即可使用: ```javascript // 引入方法 layui.config({ base: '/' }).extend({ layerTable: 'layerTable/layerTable' }).use(['layerTable'], function () { var layerTable = layui.layerTable; }); ``` 如果不会引用先到layui官网查看模块规范介绍。 ## 快速使用 - 原始的主表的自动渲染: ```html
详情 | ID | 标题1 | 标题2 | 标题3 |
---|---|---|---|---|
{$vo.id??''} | {$vo.field1??''} | {$vo.field2??''} | {$vo.field3??''} |