/** 表格扩展模块 date:2020-02-29   License By http://easyweb.vip */ 
 | 
layui.define(['layer', 'table', 'laytpl', 'contextMenu'], function (exports) { 
 | 
    var $ = layui.jquery; 
 | 
    var layer = layui.layer; 
 | 
    var table = layui.table; 
 | 
    var laytpl = layui.laytpl; 
 | 
    var contextMenu = layui.contextMenu; 
 | 
    var device = layui.device(); 
 | 
    var tbSearchAttr = 'tb-search';  // 前端搜索属性 
 | 
    var tbRefreshAttr = 'tb-refresh';  // 刷新按钮属性 
 | 
    var tbExportAttr = 'tb-export';  // 导出按钮属性 
 | 
    var txFieldPre = 'txField_';  // templte列filed前缀 
 | 
    var tableX = {}; 
 | 
  
 | 
    /* 合并相同单元格 */ 
 | 
    tableX.merges = function (tableId, indexs, fields, sort) { 
 | 
        if (typeof fields === 'boolean') { 
 | 
            sort = fields; 
 | 
            fields = undefined; 
 | 
        } 
 | 
        var $tb = $('[lay-filter="' + tableId + '"]+.layui-table-view>.layui-table-box>.layui-table-body>table'); 
 | 
        var $trs = $tb.find('>tbody>tr'); 
 | 
        // 循环合并每一列 
 | 
        for (var i = 0; i < indexs.length; i++) { 
 | 
            if (fields) { 
 | 
                merge(tableId, indexs[i], fields[i]); 
 | 
            } else { 
 | 
                merge(tableId, indexs[i]); 
 | 
            } 
 | 
        } 
 | 
        $trs.find('[del="true"]').remove();  // 移除多余的单元格 
 | 
        // 监听排序事件 
 | 
        if (sort === undefined || sort) { 
 | 
            table.on('sort(' + tableId + ')', function () { 
 | 
                tableX.merges(tableId, indexs, fields, false); 
 | 
            }); 
 | 
        } 
 | 
  
 | 
        // 合并一列 
 | 
        function merge(tableId, index, field) { 
 | 
            var data = table.cache[tableId]; 
 | 
            if (data.length > 0) { 
 | 
                var lastValue, spanNum = 1; 
 | 
                if (field) { 
 | 
                    lastValue = data[0][field]; 
 | 
                } else { 
 | 
                    lastValue = $trs.eq(0).find('td').eq(index).find('.layui-table-cell').html(); 
 | 
                } 
 | 
                for (var i = 1; i < data.length; i++) { 
 | 
                    var currentValue; 
 | 
                    if (field) { 
 | 
                        currentValue = data[i][field]; 
 | 
                    } else { 
 | 
                        currentValue = $trs.eq(i).find('td').eq(index).find('.layui-table-cell').html(); 
 | 
                    } 
 | 
                    if (currentValue === lastValue) { 
 | 
                        spanNum++; 
 | 
                        if (i === data.length - 1) { 
 | 
                            $trs.eq(i - spanNum + 1).find('td').eq(index).attr('rowspan', spanNum); 
 | 
                            for (var j = 1; j < spanNum; j++) { 
 | 
                                $trs.eq(i - j + 1).find('td').eq(index).attr('del', 'true'); 
 | 
                            } 
 | 
                        } 
 | 
                    } else { 
 | 
                        $trs.eq(i - spanNum).find('td').eq(index).attr('rowspan', spanNum); 
 | 
                        for (var k = 1; k < spanNum; k++) { 
 | 
                            $trs.eq(i - k).find('td').eq(index).attr('del', 'true'); 
 | 
                        } 
 | 
                        spanNum = 1; 
 | 
                        lastValue = currentValue; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    }; 
 | 
  
 | 
    /* 表格行绑定鼠标右键 */ 
 | 
    tableX.bindCtxMenu = function (tableId, items) { 
 | 
        var data = table.cache[tableId]; 
 | 
        var elem = '#' + tableId + '+.layui-table-view .layui-table-body tr'; 
 | 
        $(elem).bind('contextmenu', function (event) { 
 | 
            var $this = $(this); 
 | 
            $(elem).removeClass('layui-table-click'); 
 | 
            $this.addClass('layui-table-click'); 
 | 
            var ctxItems; 
 | 
            if (typeof items === 'function') ctxItems = items(data[$this.data('index')], event.currentTarget); 
 | 
            else ctxItems = items; 
 | 
  
 | 
            function getCtxItems(menus) { 
 | 
                if (!menus) return; 
 | 
                var result = []; 
 | 
                for (var i = 0; i < menus.length; i++) { 
 | 
                    result.push({ 
 | 
                        icon: menus[i].icon, 
 | 
                        name: menus[i].name, 
 | 
                        _click: menus[i].click, 
 | 
                        click: function (e, e2) { 
 | 
                            var $tr = $(e2.currentTarget); 
 | 
                            this._click && this._click(data[$tr.data('index')], e2.currentTarget); 
 | 
                            $tr.removeClass('layui-table-click'); 
 | 
                        }, 
 | 
                        subs: getCtxItems(menus[i].subs) 
 | 
                    }); 
 | 
                } 
 | 
                return result; 
 | 
            } 
 | 
  
 | 
            contextMenu.show(getCtxItems(ctxItems), event.clientX, event.clientY, event); 
 | 
            return false; 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    /* 导出任意数据 */ 
 | 
    tableX.exportData = function (param) { 
 | 
        var cols = param.cols;  // 表头 
 | 
        var data = param.data;  // 数据 
 | 
        var fileName = param.fileName;  // 文件名 
 | 
        var fileType = param.expType;  // 类型,xls、csv 
 | 
        var option = param.option;  // url方式加载的配置 
 | 
        option || (option = {}); 
 | 
        if (device.ie) return layer.msg('不支持ie导出'); 
 | 
        // data为url先请求数据 
 | 
        if (typeof data === 'string') { 
 | 
            var loadIndex = layer.load(2); 
 | 
            option.url = data; 
 | 
            tableX.loadUrl(option, function (res) { 
 | 
                layer.close(loadIndex); 
 | 
                param.data = res; 
 | 
                tableX.exportData(param); 
 | 
            }); 
 | 
            return; 
 | 
        } 
 | 
        // 列参数补全 
 | 
        for (var i = 0; i < cols.length; i++) { 
 | 
            for (var j = 0; j < cols[i].length; j++) { 
 | 
                if (cols[i][j].type === undefined) { 
 | 
                    cols[i][j].type = 'normal'; 
 | 
                } 
 | 
                if (cols[i][j].hide === undefined) { 
 | 
                    cols[i][j].hide = false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        var titles = [], fields = [], expData = []; 
 | 
        // 获取表头和表头字段名 
 | 
        table.eachCols(undefined, function (i, item) { 
 | 
            if (item.type === 'normal' && !item.hide) { 
 | 
                titles.push(item.title || ''); 
 | 
                fields.push(item.field || (txFieldPre + i)); 
 | 
            } 
 | 
        }, cols); 
 | 
        // 获取templet后的数据 
 | 
        var fullData = tableX.parseTbData(cols, tableX.deepClone(data), true); 
 | 
        for (var n = 0; n < fullData.length; n++) { 
 | 
            var rowItem = []; 
 | 
            for (var m = 0; m < fields.length; m++) { 
 | 
                var text = fullData[n][fields[m]]; 
 | 
                text && (text = text.toString().replace(/,/g, ',')); 
 | 
                rowItem.push(text); 
 | 
            } 
 | 
            expData.push(rowItem.join(',')); 
 | 
        } 
 | 
        // 创建下载文件的a标签 
 | 
        var alink = document.createElement('a'); 
 | 
        var type = ({csv: 'text/csv', xls: 'application/vnd.ms-excel'})[fileType || 'xls']; 
 | 
        var content = encodeURIComponent(titles.join(',') + '\r\n' + expData.join('\r\n')); 
 | 
        alink.href = 'data:' + type + ';charset=utf-8,\ufeff' + content; 
 | 
        alink.download = (fileName || 'table') + '.' + (fileType || 'xls'); 
 | 
        document.body.appendChild(alink); 
 | 
        alink.click(); 
 | 
        document.body.removeChild(alink); 
 | 
    }; 
 | 
  
 | 
    /* 导出表格数据(高级) */ 
 | 
    tableX.exportDataX = function (param) { 
 | 
        layui.use('excel', function () { 
 | 
            var excel = layui.excel; 
 | 
            var cols = param.cols;  // 表头 
 | 
            var data = param.data;  // 数据 
 | 
            var fileName = param.fileName;  // 文件名 
 | 
            var fileType = param.expType;  // 类型,xls、xlsx 
 | 
            var option = param.option;  // url方式加载的配置 
 | 
            option || (option = {}); 
 | 
            fileType || (fileType = 'xlsx'); 
 | 
            // data为url先请求数据 
 | 
            if (data && typeof data === 'string') { 
 | 
                var loadIndex = layer.load(2); 
 | 
                option.url = data; 
 | 
                tableX.loadUrl(option, function (res) { 
 | 
                    layer.close(loadIndex); 
 | 
                    param.data = res; 
 | 
                    tableX.exportDataX(param); 
 | 
                }); 
 | 
                return; 
 | 
            } 
 | 
            // 列参数补全 
 | 
            for (var i = 0; i < cols.length; i++) { 
 | 
                for (var j = 0; j < cols[i].length; j++) { 
 | 
                    if (cols[i][j].type === undefined) { 
 | 
                        cols[i][j].type = 'normal'; 
 | 
                    } 
 | 
                    if (cols[i][j].hide === undefined) { 
 | 
                        cols[i][j].hide = false; 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            // 获取表头和表头字段名 
 | 
            var titles = {}, fields = []; 
 | 
            table.eachCols(undefined, function (i, item) { 
 | 
                if (item.type === 'normal' && !item.hide) { 
 | 
                    var field = item.field || (txFieldPre + i); 
 | 
                    fields.push(field); 
 | 
                    titles[field] = item.title || ''; 
 | 
                } 
 | 
            }, cols); 
 | 
            // 格式化数据 
 | 
            var fullData = tableX.parseTbData(cols, tableX.deepClone(data), true); 
 | 
            var expData = excel.filterExportData(fullData, fields); 
 | 
            expData.unshift(titles); 
 | 
            excel.exportExcel({sheet1: expData}, (fileName || 'table') + '.' + fileType, fileType); 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    /* 后端导出数据拼接参数 */ 
 | 
    tableX.exportDataBack = function (url, where, method) { 
 | 
        where || (where = {}); 
 | 
        if (!method || method.toString().toLowerCase() === 'get') { 
 | 
            var param = ''; 
 | 
            for (var f in where) { 
 | 
                if (!param) { 
 | 
                    param = ('?' + f + '=' + where[f]); 
 | 
                } else { 
 | 
                    param += ('&' + f + '=' + where[f]); 
 | 
                } 
 | 
            } 
 | 
            window.open(url + param); 
 | 
        } else { 
 | 
            var htmlStr = '<html><body><form id="eFrom" action="' + url + '" method="' + method + '">'; 
 | 
            for (var f2 in where) { 
 | 
                htmlStr += ('<textarea name="' + f2 + '">' + where[f2] + '</textarea>'); 
 | 
            } 
 | 
            htmlStr += '</form></body></html>'; 
 | 
            $('#exportFrame').remove(); 
 | 
            $('body').append('<iframe id="exportFrame" style="display: none;"></iframe>'); 
 | 
            var eFrame = document.getElementById('exportFrame'); 
 | 
            var eWindow = eFrame.contentWindow; 
 | 
            var eDocument = eWindow.document; 
 | 
            eWindow.focus(); 
 | 
            eDocument.open(); 
 | 
            eDocument.write(htmlStr); 
 | 
            eDocument.close(); 
 | 
            eDocument.getElementById('eFrom').submit(); 
 | 
        } 
 | 
    }; 
 | 
  
 | 
    /* 渲染表格,后端排序 */ 
 | 
    tableX.render = function (param) { 
 | 
        var tableId = $(param.elem).attr('lay-filter'); 
 | 
        param.autoSort = false;  // 关闭默认排序 
 | 
        var insTb = table.render(param);  // 渲染表格 
 | 
        // 排序监听 
 | 
        table.on('sort(' + tableId + ')', function (obj) { 
 | 
            var sortField = obj.field, sortType = obj.type; // 排序字段、类型 
 | 
            var sortWhere = $.extend(param.where, {sort: sortField, order: sortType}); 
 | 
            insTb.reload({where: sortWhere, page: {curr: 1}}); 
 | 
        }); 
 | 
        return insTb; 
 | 
    }; 
 | 
  
 | 
    /* 渲染表格,前端分页 */ 
 | 
    tableX.renderFront = function (param) { 
 | 
        var insTb, tableId = $(param.elem).attr('lay-filter'); 
 | 
        param.autoSort = false;  // 关闭默认排序 
 | 
        // 没有field的templet列补上,因为排序必须有filed字段,否则点击排序会报错 
 | 
        for (var i = 0; i < param.cols.length; i++) { 
 | 
            for (var j = 0; j < param.cols[i].length; j++) { 
 | 
                if (param.cols[i][j].templet && !param.cols[i][j].field) { 
 | 
                    param.cols[i][j].field = txFieldPre + i + '_' + j; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        if (param.url) {  // url方式 
 | 
            var xParam = tableX.deepClone(param); 
 | 
            xParam.data = []; 
 | 
            xParam.url = undefined; 
 | 
            insTb = table.render(xParam);  // 先渲染表格结构 
 | 
            // 提供刷新方法 
 | 
            insTb.reloadUrl = function (p) { 
 | 
                var reParam = tableX.deepClone(param); 
 | 
                p && (reParam = $.extend(reParam, p)); 
 | 
                $(param.elem + '+.layui-table-view>.layui-table-box').append('<div class="layui-table-init"><i class="layui-icon layui-icon-loading layui-anim layui-anim-rotate layui-anim-loop"></i></div>'); 
 | 
                // 获取url数据 
 | 
                tableX.loadUrl(reParam, function (data) { 
 | 
                    insTb.reload({url: '', data: data, page: {curr: 1}}); 
 | 
                    tableX.putTbData(tableId, tableX.parseTbData(reParam.cols, data));  // 缓存数据 
 | 
                    $('input[' + tbSearchAttr + '="' + tableId + '"]').val('');  // 清空搜索输入框 
 | 
                    window.tbX.cacheSearch[tableId] = undefined;  // 重置搜索结果 
 | 
                }); 
 | 
            }; 
 | 
            insTb.reloadUrl(); 
 | 
        } else { 
 | 
            insTb = table.render(param);  // 渲染表格 
 | 
            // 提供刷新的方法 
 | 
            insTb.reloadData = function (p) { 
 | 
                insTb.reload(p); 
 | 
                tableX.parseTbData(param.cols, p.data);  // 解析temple列 
 | 
                tableX.putTbData(tableId, p.data); 
 | 
                $('input[' + tbSearchAttr + '="' + tableId + '"]').val('');  // 清空搜索输入框 
 | 
                window.tbX.cacheSearch[tableId] = undefined;  // 重置搜索结果 
 | 
            }; 
 | 
            tableX.putTbData(tableId, tableX.parseTbData(param.cols, param.data));  // 缓存数据 
 | 
        } 
 | 
        tableX.renderAllTool(insTb);  // 渲染工具组件 
 | 
        return insTb; 
 | 
    }; 
 | 
  
 | 
    /* 加载表格数据 */ 
 | 
    tableX.loadUrl = function (options, callback) { 
 | 
        // 响应数据的自定义格式 
 | 
        options.response = $.extend({ 
 | 
            statusName: 'code', 
 | 
            statusCode: 0, 
 | 
            msgName: 'msg', 
 | 
            dataName: 'data', 
 | 
            countName: 'count' 
 | 
        }, options.response); 
 | 
        var response = options.response; 
 | 
        var where = options.where;   // 参数 
 | 
        if (options.contentType && options.contentType.indexOf('application/json') === 0) { 
 | 
            where = JSON.stringify(where);  // 提交 json 格式 
 | 
        } 
 | 
        $.ajax({ 
 | 
            type: options.method || 'get', 
 | 
            url: options.url, 
 | 
            contentType: options.contentType, 
 | 
            data: where, 
 | 
            dataType: 'json', 
 | 
            headers: options.headers || {}, 
 | 
            success: function (res) { 
 | 
                // 如果有数据解析的回调,则获得其返回的数据 
 | 
                if (typeof options.parseData === 'function') { 
 | 
                    res = options.parseData(res) || res; 
 | 
                } 
 | 
                // 检查数据格式是否符合规范 
 | 
                if (res[response.statusName] != response.statusCode) { 
 | 
                    var msgText = res[response.msgName] || ('返回的数据不符合规范,正确的成功状态码 (' + response.statusName + ') 应为:' + response.statusCode); 
 | 
                    layer.msg(msgText, {icon: 2}); 
 | 
                } else { 
 | 
                    callback(res[response.dataName]); 
 | 
                } 
 | 
            }, 
 | 
            error: function (e, m) { 
 | 
                layer.msg('数据接口请求异常:' + m, {icon: 2}); 
 | 
            } 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    /* 解析数据表格templet列 */ 
 | 
    tableX.parseTbData = function (cols, dataList, overwrite) { 
 | 
        var templets = [];  // 需要解析的列 
 | 
        table.eachCols(undefined, function (i, item) { 
 | 
            if (item.templet) { 
 | 
                var one = {field: ((item.field && (overwrite || item.field.indexOf(txFieldPre) === 0)) ? item.field : ('txField_' + i))}; 
 | 
                if (typeof item.templet === 'string') { 
 | 
                    one.templet = function (d) {  // templet列使用laytpl渲染 
 | 
                        var rsStr = undefined; 
 | 
                        laytpl($(item.templet).html()).render(d, function (html) { 
 | 
                            rsStr = html; 
 | 
                        }); 
 | 
                        return rsStr; 
 | 
                    } 
 | 
                } else { 
 | 
                    one.templet = item.templet; 
 | 
                } 
 | 
                templets.push(one); 
 | 
            } 
 | 
        }, cols); 
 | 
        for (var i = 0; i < dataList.length; i++) { 
 | 
            var current = dataList[i]; 
 | 
            for (var j = 0; j < templets.length; j++) { 
 | 
                var htmlStr = '<div>' + templets[j].templet(current) + '</div>'; 
 | 
                current[templets[j].field] = $(htmlStr).not('.export-hide').text().replace(/(^\s*)|(\s*$)/g, '');  // 去除前后空格 
 | 
            } 
 | 
        } 
 | 
        return dataList; 
 | 
    }; 
 | 
  
 | 
    /* 缓存表格的数据 */ 
 | 
    tableX.putTbData = function (tableId, dataList) { 
 | 
        window.tbX.cache[tableId] = dataList; 
 | 
    }; 
 | 
  
 | 
    /* 获取表格缓存的数据 */ 
 | 
    tableX.getTbData = function (tableId) { 
 | 
        var dataList = window.tbX.cache[tableId]; 
 | 
        return tableX.deepClone(dataList || table.cache[tableId]); 
 | 
    }; 
 | 
  
 | 
    /* 搜索数据 */ 
 | 
    tableX.filterData = function (dataList, searchName, searchValue) { 
 | 
        var newList = [], sfs; 
 | 
        for (var i = 0; i < dataList.length; i++) { 
 | 
            var obj = dataList[i]; 
 | 
            if (!sfs) {  // 搜索的字段 
 | 
                if (!searchName) { 
 | 
                    sfs = []; 
 | 
                    for (var f in obj) { 
 | 
                        if (!obj.hasOwnProperty(f)) continue; 
 | 
                        sfs.push(f); 
 | 
                    } 
 | 
                } else { 
 | 
                    sfs = searchName.split(','); 
 | 
                } 
 | 
            } 
 | 
            for (var j = 0; j < sfs.length; j++) { 
 | 
                if (tableX.isContains(obj[sfs[j]], searchValue)) { 
 | 
                    newList.push(obj); 
 | 
                    break; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return newList; 
 | 
    }; 
 | 
  
 | 
    /* 字符串是否包含 */ 
 | 
    tableX.isContains = function (str1, str2) { 
 | 
        str1 || (str1 = ''); 
 | 
        str2 || (str2 = ''); 
 | 
        str1 = str1.toString().toLowerCase(); 
 | 
        str2 = str2.toString().toLowerCase(); 
 | 
        if (str1 === str2 || str1.indexOf(str2) >= 0) { 
 | 
            return true; 
 | 
        } 
 | 
        return false; 
 | 
    }; 
 | 
  
 | 
    /* 渲染所有组件 */ 
 | 
    tableX.renderAllTool = function (insTb) { 
 | 
        renderRefresh(insTb);  // 刷新 
 | 
        renderFrontSort(insTb);  // 排序 
 | 
        renderFrontSearch(insTb);  // 搜索 
 | 
        renderExport(insTb);  // 导出 
 | 
    }; 
 | 
  
 | 
    /* 深度克隆对象 */ 
 | 
    tableX.deepClone = function (obj) { 
 | 
        var result; 
 | 
        var oClass = tableX.isClass(obj); 
 | 
        if (oClass === 'Object') { 
 | 
            result = {}; 
 | 
        } else if (oClass === 'Array') { 
 | 
            result = []; 
 | 
        } else { 
 | 
            return obj; 
 | 
        } 
 | 
        for (var key in obj) { 
 | 
            if (!obj.hasOwnProperty(key)) continue; 
 | 
            var copy = obj[key]; 
 | 
            if (tableX.isClass(copy) === 'Object') { 
 | 
                result[key] = arguments.callee(copy);//递归调用 
 | 
            } else if (tableX.isClass(copy) === 'Array') { 
 | 
                result[key] = arguments.callee(copy); 
 | 
            } else { 
 | 
                result[key] = obj[key]; 
 | 
            } 
 | 
        } 
 | 
        return result; 
 | 
    }; 
 | 
  
 | 
    /* 获取变量类型 */ 
 | 
    tableX.isClass = function (o) { 
 | 
        if (o === null) 
 | 
            return 'Null'; 
 | 
        if (o === undefined) 
 | 
            return 'Undefined'; 
 | 
        return Object.prototype.toString.call(o).slice(8, -1); 
 | 
    }; 
 | 
  
 | 
    // 创建数据缓存对象 
 | 
    window.tbX || (window.tbX = {}); 
 | 
    window.tbX.cache || (window.tbX.cache = {}); 
 | 
    window.tbX.cacheSearch || (window.tbX.cacheSearch = {}); 
 | 
  
 | 
    // 前端搜索 
 | 
    var renderFrontSearch = function (insTb) { 
 | 
        var tableId = insTb.config.id, $input = $('input[' + tbSearchAttr + '="' + tableId + '"]'); 
 | 
        if (!($input && $input.length > 0)) { 
 | 
            return; 
 | 
        } 
 | 
        if (!$input.attr('placeholder')) { 
 | 
            $input.attr('placeholder', '输入关键字按回车键搜索'); 
 | 
        } 
 | 
        $input.off('keydown').on('keydown', function (event) { 
 | 
            if (event.keyCode !== 13) { 
 | 
                return; 
 | 
            } 
 | 
            var searchName = $input.attr('name');  // 搜索的字段名,用逗号分隔 
 | 
            var searchValue = $input.val().replace(/(^\s*)|(\s*$)/g, '');  // 搜索关键字 
 | 
            var loadIndex = layer.msg('搜索中..', {icon: 16, shade: 0.01, time: 0}); 
 | 
            var dataList = tableX.getTbData(tableId); 
 | 
            var newDataList = tableX.filterData(dataList, searchName, searchValue); 
 | 
            window.tbX.cacheSearch[tableId] = newDataList;  // 缓存搜索后的数据用于排序 
 | 
            insTb.reload({url: '', data: newDataList, page: {curr: 1}}); 
 | 
            layer.close(loadIndex); 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    // 前端排序 
 | 
    var renderFrontSort = function (insTb) { 
 | 
        var tableId = insTb.config.id; 
 | 
        table.on('sort(' + tableId + ')', function (obj) { 
 | 
            var sortField = obj.field, sortType = obj.type; // 排序字段、类型 
 | 
            var loadIndex = layer.msg('加载中..', {icon: 16, shade: 0.01, time: 0}); 
 | 
            var dataList = window.tbX.cacheSearch[tableId];  // 表格搜索后的数据 
 | 
            dataList || (dataList = tableX.getTbData(tableId)); 
 | 
            if (sortType) { 
 | 
                dataList = dataList.sort(function (o1, o2) { 
 | 
                    var o1Str = o1[sortField], o2Str = o2[sortField]; 
 | 
                    if (sortType === 'asc') {  // 升序 
 | 
                        return (o1Str === o2Str) ? 0 : ((o1Str < o2Str) ? -1 : 1); 
 | 
                    } else {  // 降序 
 | 
                        return (o1Str === o2Str) ? 0 : ((o1Str < o2Str) ? 1 : -1); 
 | 
                    } 
 | 
                }); 
 | 
            } 
 | 
            insTb.reload({initSort: obj, url: '', data: dataList, page: {curr: 1}}); 
 | 
            layer.close(loadIndex); 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    // 表格刷新按鈕 
 | 
    var renderRefresh = function (insTb) { 
 | 
        $('[' + tbRefreshAttr + '="' + insTb.config.id + '"]').off('click').on('click', function () { 
 | 
            if (insTb.reloadUrl) { 
 | 
                insTb.reloadUrl(); 
 | 
            } else { 
 | 
                insTb.reload({page: {curr: 1}}); 
 | 
            } 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    // 渲染导出按钮 
 | 
    var renderExport = function (insTb) { 
 | 
        var tableId = insTb.config.id; 
 | 
        $('[' + tbExportAttr + '="' + tableId + '"]').off('click').on('click', function (event) { 
 | 
            if ($(this).find('.tbx-dropdown-menu').length > 0) { 
 | 
                return; 
 | 
            } 
 | 
            if (event !== void 0) { 
 | 
                event.preventDefault(); 
 | 
                event.stopPropagation(); 
 | 
            } 
 | 
            var htmlStr = '<div class="tbx-dropdown-menu">'; 
 | 
            htmlStr += '      <div class="tbx-dropdown-menu-item" data-type="check">导出选中数据</div>'; 
 | 
            htmlStr += '      <div class="tbx-dropdown-menu-item" data-type="current">导出当前页数据</div>'; 
 | 
            htmlStr += '      <div class="tbx-dropdown-menu-item" data-type="all">导出全部数据</div>'; 
 | 
            htmlStr += '   </div>'; 
 | 
            $(this).append(htmlStr); 
 | 
            $(this).addClass('tbx-dropdown-btn'); 
 | 
            $(this).parent().css('position', 'relative'); 
 | 
            $(this).parent().css('z-index', '9998'); 
 | 
            $('.tbx-dropdown-menu').off('click').on('click', '.tbx-dropdown-menu-item', function (event) { 
 | 
                var type = $(this).data('type'); 
 | 
                if (type === 'check') { 
 | 
                    var checkRows = table.checkStatus(tableId); 
 | 
                    if (checkRows.data.length === 0) { 
 | 
                        layer.msg('请选择要导出的数据', {icon: 2}); 
 | 
                    } else { 
 | 
                        $('.tbx-dropdown-menu').remove(); 
 | 
                        tableX.exportData({ 
 | 
                            fileName: insTb.config.title, 
 | 
                            cols: insTb.config.cols, 
 | 
                            data: checkRows.data 
 | 
                        }); 
 | 
                    } 
 | 
                } else if (type === 'current') { 
 | 
                    tableX.exportData({ 
 | 
                        fileName: insTb.config.title, 
 | 
                        cols: insTb.config.cols, 
 | 
                        data: table.cache[tableId] 
 | 
                    }); 
 | 
                } else if (type === 'all') { 
 | 
                    tableX.exportData({ 
 | 
                        fileName: insTb.config.title, 
 | 
                        cols: insTb.config.cols, 
 | 
                        data: tableX.getTbData(tableId) 
 | 
                    }); 
 | 
                } 
 | 
                if (event !== void 0) { 
 | 
                    event.preventDefault(); 
 | 
                    event.stopPropagation(); 
 | 
                } 
 | 
            }); 
 | 
        }); 
 | 
        $(document).off('click.tbxDropHide').on('click.tbxDropHide', function () { 
 | 
            $('.tbx-dropdown-menu').remove(); 
 | 
        }); 
 | 
    }; 
 | 
  
 | 
    /* css样式 */ 
 | 
    var getCommonCss = function () { 
 | 
        var cssStr = '.tbx-dropdown-btn {'; 
 | 
        cssStr += '        position: relative;'; 
 | 
        cssStr += '   }'; 
 | 
        cssStr += '   .tbx-dropdown-btn:hover {'; 
 | 
        cssStr += '        opacity: 1'; 
 | 
        cssStr += '   }'; 
 | 
        cssStr += '   .tbx-dropdown-menu {'; 
 | 
        cssStr += '        position: absolute;'; 
 | 
        cssStr += '        top: 100%;'; 
 | 
        cssStr += '        right: 0;'; 
 | 
        cssStr += '        padding: 5px 0;'; 
 | 
        cssStr += '        margin: 5px 0 0 0;'; 
 | 
        cssStr += '        overflow: visible;'; 
 | 
        cssStr += '        min-width: 110px;'; 
 | 
        cssStr += '        background: #fff;'; 
 | 
        cssStr += '        border-radius: 2px;'; 
 | 
        cssStr += '        box-shadow: 0 2px 4px rgba(0, 0, 0, .12);'; 
 | 
        cssStr += '        border: 1px solid #d2d2d2;'; 
 | 
        cssStr += '        z-index: 9998;'; 
 | 
        cssStr += '        cursor: default;'; 
 | 
        cssStr += '   }'; 
 | 
        cssStr += '   .tbx-dropdown-menu .tbx-dropdown-menu-item {'; 
 | 
        cssStr += '        display: block;'; 
 | 
        cssStr += '        color: #555;'; 
 | 
        cssStr += '        font-size: 14px;'; 
 | 
        cssStr += '        padding: 10px 15px;'; 
 | 
        cssStr += '        text-decoration: none;'; 
 | 
        cssStr += '        white-space: nowrap;'; 
 | 
        cssStr += '        cursor: pointer;'; 
 | 
        cssStr += '        user-select: none;'; 
 | 
        cssStr += '        line-height: normal;'; 
 | 
        cssStr += '   }'; 
 | 
        cssStr += '   .tbx-dropdown-menu .tbx-dropdown-menu-item:hover {'; 
 | 
        cssStr += '        background-color: #eeeeee;'; 
 | 
        cssStr += '   }'; 
 | 
        cssStr += '   .export-show {'; 
 | 
        cssStr += '        display: none;'; 
 | 
        cssStr += '   }'; 
 | 
        return cssStr; 
 | 
    }; 
 | 
  
 | 
    $('head').append('<style id="ew-css-tbx" type="text/css">' + getCommonCss() + '</style>'); 
 | 
    exports("tableX", tableX); 
 | 
}); 
 |