UNPKG

vxe-table-demonic

Version:

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...

1,228 lines (1,227 loc) 61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _xeUtils = _interopRequireDefault(require("xe-utils")); var _conf = _interopRequireDefault(require("../../v-x-e-table/src/conf")); var _vXETable = require("../../v-x-e-table"); var _util = require("../../table/src/util"); var _utils = require("../../tools/utils"); var _log = require("../../tools/log"); var _util2 = require("./util"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var htmlCellElem; var csvBOM = '\ufeff'; var enterSymbol = '\r\n'; function defaultFilterExportColumn(column) { return column.property || ['seq', 'checkbox', 'radio'].indexOf(column.type) > -1; } var getConvertColumns = function (columns) { var result = []; columns.forEach(function (column) { if (column.childNodes && column.childNodes.length) { result.push(column); result.push.apply(result, getConvertColumns(column.childNodes)); } else { result.push(column); } }); return result; }; var convertToRows = function (originColumns) { var maxLevel = 1; var traverse = function (column, parent) { if (parent) { column._level = parent._level + 1; if (maxLevel < column._level) { maxLevel = column._level; } } if (column.childNodes && column.childNodes.length) { var colSpan_1 = 0; column.childNodes.forEach(function (subColumn) { traverse(subColumn, column); colSpan_1 += subColumn._colSpan; }); column._colSpan = colSpan_1; } else { column._colSpan = 1; } }; originColumns.forEach(function (column) { column._level = 1; traverse(column); }); var rows = []; for (var i = 0; i < maxLevel; i++) { rows.push([]); } var allColumns = getConvertColumns(originColumns); allColumns.forEach(function (column) { if (column.childNodes && column.childNodes.length) { column._rowSpan = 1; } else { column._rowSpan = maxLevel - column._level + 1; } rows[column._level - 1].push(column); }); return rows; }; function toTableBorder(border) { if (border === true) { return 'full'; } if (border) { return border; } return 'default'; } function getBooleanValue(cellValue) { return cellValue === 'TRUE' || cellValue === 'true' || cellValue === true; } function getFooterData(opts, footerTableData) { var footerFilterMethod = opts.footerFilterMethod; return footerFilterMethod ? footerTableData.filter(function (items, index) { return footerFilterMethod({ items: items, $rowIndex: index }); }) : footerTableData; } function getCsvCellTypeLabel(column, cellValue) { if (cellValue) { if (column.type === 'seq') { return "\t".concat(cellValue); } switch (column.cellType) { case 'string': if (!isNaN(cellValue)) { return "\t".concat(cellValue); } break; case 'number': break; default: if (cellValue.length >= 12 && !isNaN(cellValue)) { return "\t".concat(cellValue); } break; } } return cellValue; } function toTxtCellLabel(val) { if (/[",\s\n]/.test(val)) { return "\"".concat(val.replace(/"/g, '""'), "\""); } return val; } function getElementsByTagName(elem, qualifiedName) { return elem.getElementsByTagName(qualifiedName); } function getTxtCellKey(now) { return "#".concat(now, "@").concat(_xeUtils.default.uniqueId()); } function replaceTxtCell(cell, vMaps) { return cell.replace(/#\d+@\d+/g, function (key) { return _xeUtils.default.hasOwnProp(vMaps, key) ? vMaps[key] : key; }); } function getTxtCellValue(val, vMaps) { var rest = replaceTxtCell(val, vMaps); return rest.replace(/^"+$/g, function (qVal) { return '"'.repeat(Math.ceil(qVal.length / 2)); }); } function parseCsvAndTxt(columns, content, cellSeparator) { var list = content.split(enterSymbol); var rows = []; var fields = []; if (list.length) { var vMaps_1 = {}; var now_1 = Date.now(); list.forEach(function (rVal) { if (rVal) { var item_1 = {}; rVal = rVal.replace(/("")|(\n)/g, function (text, dVal) { var key = getTxtCellKey(now_1); vMaps_1[key] = dVal ? '"' : '\n'; return key; }).replace(/"(.*?)"/g, function (text, cVal) { var key = getTxtCellKey(now_1); vMaps_1[key] = replaceTxtCell(cVal, vMaps_1); return key; }); var cells = rVal.split(cellSeparator); if (!fields.length) { fields = cells.map(function (val) { return getTxtCellValue(val.trim(), vMaps_1); }); } else { cells.forEach(function (val, colIndex) { if (colIndex < fields.length) { item_1[fields[colIndex]] = getTxtCellValue(val.trim(), vMaps_1); } }); rows.push(item_1); } } }); } return { fields: fields, rows: rows }; } function parseCsv(columns, content) { return parseCsvAndTxt(columns, content, ','); } function parseTxt(columns, content) { return parseCsvAndTxt(columns, content, '\t'); } function parseHTML(columns, content) { var domParser = new DOMParser(); var xmlDoc = domParser.parseFromString(content, 'text/html'); var bodyNodes = getElementsByTagName(xmlDoc, 'body'); var rows = []; var fields = []; if (bodyNodes.length) { var tableNodes = getElementsByTagName(bodyNodes[0], 'table'); if (tableNodes.length) { var theadNodes = getElementsByTagName(tableNodes[0], 'thead'); if (theadNodes.length) { _xeUtils.default.arrayEach(getElementsByTagName(theadNodes[0], 'tr'), function (rowNode) { _xeUtils.default.arrayEach(getElementsByTagName(rowNode, 'th'), function (cellNode) { fields.push(cellNode.textContent); }); }); var tbodyNodes = getElementsByTagName(tableNodes[0], 'tbody'); if (tbodyNodes.length) { _xeUtils.default.arrayEach(getElementsByTagName(tbodyNodes[0], 'tr'), function (rowNode) { var item = {}; _xeUtils.default.arrayEach(getElementsByTagName(rowNode, 'td'), function (cellNode, colIndex) { if (fields[colIndex]) { item[fields[colIndex]] = cellNode.textContent || ''; } }); rows.push(item); }); } } } } return { fields: fields, rows: rows }; } function parseXML(columns, content) { var domParser = new DOMParser(); var xmlDoc = domParser.parseFromString(content, 'application/xml'); var sheetNodes = getElementsByTagName(xmlDoc, 'Worksheet'); var rows = []; var fields = []; if (sheetNodes.length) { var tableNodes = getElementsByTagName(sheetNodes[0], 'Table'); if (tableNodes.length) { var rowNodes = getElementsByTagName(tableNodes[0], 'Row'); if (rowNodes.length) { _xeUtils.default.arrayEach(getElementsByTagName(rowNodes[0], 'Cell'), function (cellNode) { fields.push(cellNode.textContent); }); _xeUtils.default.arrayEach(rowNodes, function (rowNode, index) { if (index) { var item_2 = {}; var cellNodes = getElementsByTagName(rowNode, 'Cell'); _xeUtils.default.arrayEach(cellNodes, function (cellNode, colIndex) { if (fields[colIndex]) { item_2[fields[colIndex]] = cellNode.textContent; } }); rows.push(item_2); } }); } } } return { fields: fields, rows: rows }; } function clearColumnConvert(columns) { _xeUtils.default.eachTree(columns, function (column) { delete column._level; delete column._colSpan; delete column._rowSpan; delete column._children; delete column.childNodes; }, { children: 'children' }); } /** * 检查导入的列是否完整 * @param {Array} fields 字段名列表 * @param {Array} rows 数据列表 */ function checkImportData(columns, fields) { var tableFields = []; columns.forEach(function (column) { var field = column.property; if (field) { tableFields.push(field); } }); return fields.some(function (field) { return tableFields.indexOf(field) > -1; }); } var tableExportMethodKeys = ['exportData', 'importByFile', 'importData', 'saveFile', 'readFile', 'print', 'openImport', 'openExport', 'openPrint']; var tableExportHook = { setupTable: function ($xetable) { var props = $xetable.props, reactData = $xetable.reactData, internalData = $xetable.internalData; var _a = $xetable.getComputeMaps(), computeTreeOpts = _a.computeTreeOpts, computePrintOpts = _a.computePrintOpts, computeExportOpts = _a.computeExportOpts, computeImportOpts = _a.computeImportOpts, computeCustomOpts = _a.computeCustomOpts, computeSeqOpts = _a.computeSeqOpts, computeRadioOpts = _a.computeRadioOpts, computeCheckboxOpts = _a.computeCheckboxOpts, computeColumnOpts = _a.computeColumnOpts; var $xegrid = (0, _vue.inject)('$xegrid', null); var hasTreeChildren = function (row) { var treeOpts = computeTreeOpts.value; var childrenField = treeOpts.children || treeOpts.childrenField; return row[childrenField] && row[childrenField].length; }; var getSeq = function (row, $rowIndex, column, $columnIndex) { var seqOpts = computeSeqOpts.value; var seqMethod = seqOpts.seqMethod || column.seqMethod; if (seqMethod) { return seqMethod({ row: row, rowIndex: $xetable.getRowIndex(row), $rowIndex: $rowIndex, column: column, columnIndex: $xetable.getColumnIndex(column), $columnIndex: $columnIndex }); } return $xetable.getRowSeq(row); }; function getHeaderTitle(opts, column) { var columnOpts = computeColumnOpts.value; var headExportMethod = column.headerExportMethod || columnOpts.headerExportMethod; return headExportMethod ? headExportMethod({ column: column, options: opts, $table: $xetable }) : (opts.original ? column.property : column.getTitle()) || ''; } var toBooleanValue = function (cellValue) { return _xeUtils.default.isBoolean(cellValue) ? cellValue ? 'TRUE' : 'FALSE' : cellValue; }; var getLabelData = function (opts, columns, datas) { var isAllExpand = opts.isAllExpand, mode = opts.mode; var treeConfig = props.treeConfig; var radioOpts = computeRadioOpts.value; var checkboxOpts = computeCheckboxOpts.value; var treeOpts = computeTreeOpts.value; var columnOpts = computeColumnOpts.value; if (!htmlCellElem) { htmlCellElem = document.createElement('div'); } if (treeConfig) { var childrenField = treeOpts.children || treeOpts.childrenField; // 如果是树表格只允许导出数据源 var rest_1 = []; var expandMaps_1 = new Map(); _xeUtils.default.eachTree(datas, function (item, $rowIndex, items, path, parent, nodes) { var row = item._row || item; var parentRow = parent && parent._row ? parent._row : parent; if (isAllExpand || !parentRow || expandMaps_1.has(parentRow) && $xetable.isTreeExpandByRow(parentRow)) { var hasRowChild = hasTreeChildren(row); var item_3 = { _row: row, _level: nodes.length - 1, _hasChild: hasRowChild, _expand: hasRowChild && $xetable.isTreeExpandByRow(row) }; columns.forEach(function (column, $columnIndex) { var cellValue = ''; var renderOpts = column.editRender || column.cellRender; var bodyExportMethod = column.exportMethod; if (!bodyExportMethod && renderOpts && renderOpts.name) { var compConf = _vXETable.VXETable.renderer.get(renderOpts.name); if (compConf) { bodyExportMethod = compConf.exportMethod; } } if (!bodyExportMethod) { bodyExportMethod = columnOpts.exportMethod; } if (bodyExportMethod) { cellValue = bodyExportMethod({ $table: $xetable, row: row, column: column, options: opts }); } else { switch (column.type) { case 'seq': cellValue = mode === 'all' ? path.map(function (num, i) { return i % 2 === 0 ? Number(num) + 1 : '.'; }).join('') : getSeq(row, $rowIndex, column, $columnIndex); break; case 'checkbox': cellValue = toBooleanValue($xetable.isCheckedByCheckboxRow(row)); item_3._checkboxLabel = checkboxOpts.labelField ? _xeUtils.default.get(row, checkboxOpts.labelField) : ''; item_3._checkboxDisabled = checkboxOpts.checkMethod && !checkboxOpts.checkMethod({ row: row }); break; case 'radio': cellValue = toBooleanValue($xetable.isCheckedByRadioRow(row)); item_3._radioLabel = radioOpts.labelField ? _xeUtils.default.get(row, radioOpts.labelField) : ''; item_3._radioDisabled = radioOpts.checkMethod && !radioOpts.checkMethod({ row: row }); break; default: if (opts.original) { cellValue = (0, _util.getCellValue)(row, column); } else { cellValue = $xetable.getCellLabel(row, column); if (column.type === 'html') { htmlCellElem.innerHTML = cellValue; cellValue = htmlCellElem.innerText.trim(); } else { var cell = $xetable.getCell(row, column); if (cell) { cellValue = cell.innerText.trim(); } } } } } item_3[column.id] = _xeUtils.default.toValueString(cellValue); }); expandMaps_1.set(row, 1); rest_1.push(Object.assign(item_3, row)); } }, { children: childrenField }); return rest_1; } return datas.map(function (row, $rowIndex) { var item = { _row: row }; columns.forEach(function (column, $columnIndex) { var cellValue = ''; var renderOpts = column.editRender || column.cellRender; var exportLabelMethod = column.exportMethod; if (!exportLabelMethod && renderOpts && renderOpts.name) { var compConf = _vXETable.VXETable.renderer.get(renderOpts.name); if (compConf) { exportLabelMethod = compConf.exportMethod; } } if (exportLabelMethod) { cellValue = exportLabelMethod({ $table: $xetable, row: row, column: column, options: opts }); } else { switch (column.type) { case 'seq': cellValue = mode === 'all' ? $rowIndex + 1 : getSeq(row, $rowIndex, column, $columnIndex); break; case 'checkbox': cellValue = toBooleanValue($xetable.isCheckedByCheckboxRow(row)); item._checkboxLabel = checkboxOpts.labelField ? _xeUtils.default.get(row, checkboxOpts.labelField) : ''; item._checkboxDisabled = checkboxOpts.checkMethod && !checkboxOpts.checkMethod({ row: row }); break; case 'radio': cellValue = toBooleanValue($xetable.isCheckedByRadioRow(row)); item._radioLabel = radioOpts.labelField ? _xeUtils.default.get(row, radioOpts.labelField) : ''; item._radioDisabled = radioOpts.checkMethod && !radioOpts.checkMethod({ row: row }); break; default: if (opts.original) { cellValue = (0, _util.getCellValue)(row, column); } else { cellValue = $xetable.getCellLabel(row, column); if (column.type === 'html') { htmlCellElem.innerHTML = cellValue; cellValue = htmlCellElem.innerText.trim(); } else { var cell = $xetable.getCell(row, column); if (cell) { cellValue = cell.innerText.trim(); } } } } } item[column.id] = _xeUtils.default.toValueString(cellValue); }); return item; }); }; var getExportData = function (opts) { var columns = opts.columns, dataFilterMethod = opts.dataFilterMethod; var datas = opts.data; if (dataFilterMethod) { datas = datas.filter(function (row, index) { return dataFilterMethod({ row: row, $rowIndex: index }); }); } return getLabelData(opts, columns, datas); }; var getFooterCellValue = function (opts, items, column) { var columnOpts = computeColumnOpts.value; var renderOpts = column.editRender || column.cellRender; var footLabelMethod = column.footerExportMethod; if (!footLabelMethod && renderOpts && renderOpts.name) { var compConf = _vXETable.VXETable.renderer.get(renderOpts.name); if (compConf) { footLabelMethod = compConf.footerExportMethod; } } if (!footLabelMethod) { footLabelMethod = columnOpts.footerExportMethod; } var _columnIndex = $xetable.getVTColumnIndex(column); var cellValue = footLabelMethod ? footLabelMethod({ $table: $xetable, items: items, itemIndex: _columnIndex, _columnIndex: _columnIndex, column: column, options: opts }) : _xeUtils.default.toValueString(items[_columnIndex]); return cellValue; }; var toCsv = function (opts, columns, datas) { var content = csvBOM; if (opts.isHeader) { content += columns.map(function (column) { return toTxtCellLabel(getHeaderTitle(opts, column)); }).join(',') + enterSymbol; } datas.forEach(function (row) { content += columns.map(function (column) { return toTxtCellLabel(getCsvCellTypeLabel(column, row[column.id])); }).join(',') + enterSymbol; }); if (opts.isFooter) { var footerTableData = reactData.footerTableData; var footers = getFooterData(opts, footerTableData); footers.forEach(function (rows) { content += columns.map(function (column) { return toTxtCellLabel(getFooterCellValue(opts, rows, column)); }).join(',') + enterSymbol; }); } return content; }; var toTxt = function (opts, columns, datas) { var content = ''; if (opts.isHeader) { content += columns.map(function (column) { return toTxtCellLabel(getHeaderTitle(opts, column)); }).join('\t') + enterSymbol; } datas.forEach(function (row) { content += columns.map(function (column) { return toTxtCellLabel(row[column.id]); }).join('\t') + enterSymbol; }); if (opts.isFooter) { var footerTableData = reactData.footerTableData; var footers = getFooterData(opts, footerTableData); footers.forEach(function (rows) { content += columns.map(function (column) { return toTxtCellLabel(getFooterCellValue(opts, rows, column)); }).join(',') + enterSymbol; }); } return content; }; var hasEllipsis = function (column, property, allColumnOverflow) { var columnOverflow = column[property]; var headOverflow = _xeUtils.default.isUndefined(columnOverflow) || _xeUtils.default.isNull(columnOverflow) ? allColumnOverflow : columnOverflow; var showEllipsis = headOverflow === 'ellipsis'; var showTitle = headOverflow === 'title'; var showTooltip = headOverflow === true || headOverflow === 'tooltip'; var isEllipsis = showTitle || showTooltip || showEllipsis; // 虚拟滚动不支持动态高度 var scrollXLoad = reactData.scrollXLoad, scrollYLoad = reactData.scrollYLoad; if ((scrollXLoad || scrollYLoad) && !isEllipsis) { isEllipsis = true; } return isEllipsis; }; var toHtml = function (opts, columns, datas) { var id = props.id, border = props.border, treeConfig = props.treeConfig, allHeaderAlign = props.headerAlign, allAlign = props.align, allFooterAlign = props.footerAlign, allColumnOverflow = props.showOverflow, allColumnHeaderOverflow = props.showHeaderOverflow; var isAllSelected = reactData.isAllSelected, isIndeterminate = reactData.isIndeterminate, mergeList = reactData.mergeList; var treeOpts = computeTreeOpts.value; var isPrint = opts.print, isHeader = opts.isHeader, isFooter = opts.isFooter, isColgroup = opts.isColgroup, isMerge = opts.isMerge, colgroups = opts.colgroups, original = opts.original; var allCls = 'check-all'; var clss = ['vxe-table', "border--".concat(toTableBorder(border)), isPrint ? 'is--print' : '', isHeader ? 'is--header' : ''].filter(function (cls) { return cls; }); var tables = ["<table class=\"".concat(clss.join(' '), "\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"), "<colgroup>".concat(columns.map(function (column) { return "<col style=\"width:".concat(column.renderWidth, "px\">"); }).join(''), "</colgroup>")]; if (isHeader) { tables.push('<thead>'); if (isColgroup && !original) { colgroups.forEach(function (cols) { tables.push("<tr>".concat(cols.map(function (column) { var headAlign = column.headerAlign || column.align || allHeaderAlign || allAlign; var classNames = hasEllipsis(column, 'showHeaderOverflow', allColumnHeaderOverflow) ? ['col--ellipsis'] : []; var cellTitle = getHeaderTitle(opts, column); var childWidth = 0; var countChild = 0; _xeUtils.default.eachTree([column], function (item) { if (!item.childNodes || !column.childNodes.length) { countChild++; } childWidth += item.renderWidth; }, { children: 'childNodes' }); var cellWidth = childWidth - countChild; if (headAlign) { classNames.push("col--".concat(headAlign)); } if (column.type === 'checkbox') { return "<th class=\"".concat(classNames.join(' '), "\" colspan=\"").concat(column._colSpan, "\" rowspan=\"").concat(column._rowSpan, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(cellWidth, "px\""), "><input type=\"checkbox\" class=\"").concat(allCls, "\" ").concat(isAllSelected ? 'checked' : '', "><span>").concat(cellTitle, "</span></div></th>"); } return "<th class=\"".concat(classNames.join(' '), "\" colspan=\"").concat(column._colSpan, "\" rowspan=\"").concat(column._rowSpan, "\" title=\"").concat(cellTitle, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(cellWidth, "px\""), "><span>").concat((0, _utils.formatText)(cellTitle, true), "</span></div></th>"); }).join(''), "</tr>")); }); } else { tables.push("<tr>".concat(columns.map(function (column) { var headAlign = column.headerAlign || column.align || allHeaderAlign || allAlign; var classNames = hasEllipsis(column, 'showHeaderOverflow', allColumnHeaderOverflow) ? ['col--ellipsis'] : []; var cellTitle = getHeaderTitle(opts, column); if (headAlign) { classNames.push("col--".concat(headAlign)); } if (column.type === 'checkbox') { return "<th class=\"".concat(classNames.join(' '), "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><input type=\"checkbox\" class=\"").concat(allCls, "\" ").concat(isAllSelected ? 'checked' : '', "><span>").concat(cellTitle, "</span></div></th>"); } return "<th class=\"".concat(classNames.join(' '), "\" title=\"").concat(cellTitle, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><span>").concat((0, _utils.formatText)(cellTitle, true), "</span></div></th>"); }).join(''), "</tr>")); } tables.push('</thead>'); } if (datas.length) { tables.push('<tbody>'); if (treeConfig) { datas.forEach(function (item) { tables.push('<tr>' + columns.map(function (column) { var cellAlign = column.align || allAlign; var classNames = hasEllipsis(column, 'showOverflow', allColumnOverflow) ? ['col--ellipsis'] : []; var cellValue = item[column.id]; if (cellAlign) { classNames.push("col--".concat(cellAlign)); } if (column.treeNode) { var treeIcon = ''; if (item._hasChild) { treeIcon = "<i class=\"".concat(item._expand ? 'vxe-table--tree-fold-icon' : 'vxe-table--tree-unfold-icon', "\"></i>"); } classNames.push('vxe-table--tree-node'); if (column.type === 'radio') { return "<td class=\"".concat(classNames.join(' '), "\" title=\"").concat(cellValue, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><div class=\"vxe-table--tree-node-wrapper\" style=\"padding-left: ").concat(item._level * treeOpts.indent, "px\"><div class=\"vxe-table--tree-icon-wrapper\">").concat(treeIcon, "</div><div class=\"vxe-table--tree-cell\"><input type=\"radio\" name=\"radio_").concat(id, "\" ").concat(item._radioDisabled ? 'disabled ' : '').concat(getBooleanValue(cellValue) ? 'checked' : '', "><span>").concat(item._radioLabel, "</span></div></div></div></td>"); } else if (column.type === 'checkbox') { return "<td class=\"".concat(classNames.join(' '), "\" title=\"").concat(cellValue, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><div class=\"vxe-table--tree-node-wrapper\" style=\"padding-left: ").concat(item._level * treeOpts.indent, "px\"><div class=\"vxe-table--tree-icon-wrapper\">").concat(treeIcon, "</div><div class=\"vxe-table--tree-cell\"><input type=\"checkbox\" ").concat(item._checkboxDisabled ? 'disabled ' : '').concat(getBooleanValue(cellValue) ? 'checked' : '', "><span>").concat(item._checkboxLabel, "</span></div></div></div></td>"); } return "<td class=\"".concat(classNames.join(' '), "\" title=\"").concat(cellValue, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><div class=\"vxe-table--tree-node-wrapper\" style=\"padding-left: ").concat(item._level * treeOpts.indent, "px\"><div class=\"vxe-table--tree-icon-wrapper\">").concat(treeIcon, "</div><div class=\"vxe-table--tree-cell\">").concat(cellValue, "</div></div></div></td>"); } if (column.type === 'radio') { return "<td class=\"".concat(classNames.join(' '), "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><input type=\"radio\" name=\"radio_").concat(id, "\" ").concat(item._radioDisabled ? 'disabled ' : '').concat(getBooleanValue(cellValue) ? 'checked' : '', "><span>").concat(item._radioLabel, "</span></div></td>"); } else if (column.type === 'checkbox') { return "<td class=\"".concat(classNames.join(' '), "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><input type=\"checkbox\" ").concat(item._checkboxDisabled ? 'disabled ' : '').concat(getBooleanValue(cellValue) ? 'checked' : '', "><span>").concat(item._checkboxLabel, "</span></div></td>"); } return "<td class=\"".concat(classNames.join(' '), "\" title=\"").concat(cellValue, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), ">").concat((0, _utils.formatText)(cellValue, true), "</div></td>"); }).join('') + '</tr>'); }); } else { datas.forEach(function (item) { tables.push('<tr>' + columns.map(function (column) { var cellAlign = column.align || allAlign; var classNames = hasEllipsis(column, 'showOverflow', allColumnOverflow) ? ['col--ellipsis'] : []; var cellValue = item[column.id]; var rowSpan = 1; var colSpan = 1; if (isMerge && mergeList.length) { var _rowIndex = $xetable.getVTRowIndex(item._row); var _columnIndex = $xetable.getVTColumnIndex(column); var spanRest = (0, _util.mergeBodyMethod)(mergeList, _rowIndex, _columnIndex); if (spanRest) { var rowspan = spanRest.rowspan, colspan = spanRest.colspan; if (!rowspan || !colspan) { return ''; } if (rowspan > 1) { rowSpan = rowspan; } if (colspan > 1) { colSpan = colspan; } } } if (cellAlign) { classNames.push("col--".concat(cellAlign)); } if (column.type === 'radio') { return "<td class=\"".concat(classNames.join(' '), "\" rowspan=\"").concat(rowSpan, "\" colspan=\"").concat(colSpan, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><input type=\"radio\" name=\"radio_").concat(id, "\" ").concat(item._radioDisabled ? 'disabled ' : '').concat(getBooleanValue(cellValue) ? 'checked' : '', "><span>").concat(item._radioLabel, "</span></div></td>"); } else if (column.type === 'checkbox') { return "<td class=\"".concat(classNames.join(' '), "\" rowspan=\"").concat(rowSpan, "\" colspan=\"").concat(colSpan, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), "><input type=\"checkbox\" ").concat(item._checkboxDisabled ? 'disabled ' : '').concat(getBooleanValue(cellValue) ? 'checked' : '', "><span>").concat(item._checkboxLabel, "</span></div></td>"); } return "<td class=\"".concat(classNames.join(' '), "\" rowspan=\"").concat(rowSpan, "\" colspan=\"").concat(colSpan, "\" title=\"").concat(cellValue, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), ">").concat((0, _utils.formatText)(cellValue, true), "</div></td>"); }).join('') + '</tr>'); }); } tables.push('</tbody>'); } if (isFooter) { var footerTableData = reactData.footerTableData; var footers = getFooterData(opts, footerTableData); if (footers.length) { tables.push('<tfoot>'); footers.forEach(function (rows) { tables.push("<tr>".concat(columns.map(function (column) { var footAlign = column.footerAlign || column.align || allFooterAlign || allAlign; var classNames = hasEllipsis(column, 'showOverflow', allColumnOverflow) ? ['col--ellipsis'] : []; var cellValue = getFooterCellValue(opts, rows, column); if (footAlign) { classNames.push("col--".concat(footAlign)); } return "<td class=\"".concat(classNames.join(' '), "\" title=\"").concat(cellValue, "\"><div ").concat(isPrint ? '' : "style=\"width: ".concat(column.renderWidth, "px\""), ">").concat((0, _utils.formatText)(cellValue, true), "</div></td>"); }).join(''), "</tr>")); }); tables.push('</tfoot>'); } } // 是否半选状态 var script = !isAllSelected && isIndeterminate ? "<script>(function(){var a=document.querySelector(\".".concat(allCls, "\");if(a){a.indeterminate=true}})()</script>") : ''; tables.push('</table>', script); return isPrint ? tables.join('') : (0, _util2.createHtmlPage)(opts, tables.join('')); }; var toXML = function (opts, columns, datas) { var xml = ['<?xml version="1.0"?>', '<?mso-application progid="Excel.Sheet"?>', '<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">', '<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">', '<Version>16.00</Version>', '</DocumentProperties>', '<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">', '<WindowHeight>7920</WindowHeight>', '<WindowWidth>21570</WindowWidth>', '<WindowTopX>32767</WindowTopX>', '<WindowTopY>32767</WindowTopY>', '<ProtectStructure>False</ProtectStructure>', '<ProtectWindows>False</ProtectWindows>', '</ExcelWorkbook>', "<Worksheet ss:Name=\"".concat(opts.sheetName, "\">"), '<Table>', columns.map(function (column) { return "<Column ss:Width=\"".concat(column.renderWidth, "\"/>"); }).join('')].join(''); if (opts.isHeader) { xml += "<Row>".concat(columns.map(function (column) { return "<Cell><Data ss:Type=\"String\">".concat(getHeaderTitle(opts, column), "</Data></Cell>"); }).join(''), "</Row>"); } datas.forEach(function (row) { xml += '<Row>' + columns.map(function (column) { return "<Cell><Data ss:Type=\"String\">".concat(row[column.id], "</Data></Cell>"); }).join('') + '</Row>'; }); if (opts.isFooter) { var footerTableData = reactData.footerTableData; var footers = getFooterData(opts, footerTableData); footers.forEach(function (rows) { xml += "<Row>".concat(columns.map(function (column) { return "<Cell><Data ss:Type=\"String\">".concat(getFooterCellValue(opts, rows, column), "</Data></Cell>"); }).join(''), "</Row>"); }); } return "".concat(xml, "</Table></Worksheet></Workbook>"); }; var getContent = function (opts, columns, datas) { if (columns.length) { switch (opts.type) { case 'csv': return toCsv(opts, columns, datas); case 'txt': return toTxt(opts, columns, datas); case 'html': return toHtml(opts, columns, datas); case 'xml': return toXML(opts, columns, datas); } } return ''; }; var downloadFile = function (opts, content) { var filename = opts.filename, type = opts.type, download = opts.download; if (!download) { var blob = (0, _util2.getExportBlobByContent)(content, opts); return Promise.resolve({ type: type, content: content, blob: blob }); } (0, _util2.saveLocalFile)({ filename: filename, type: type, content: content }).then(function () { if (opts.message !== false) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ content: _conf.default.i18n('vxe.table.expSuccess'), status: 'success' }); } }); }; var handleExport = function (opts) { var remote = opts.remote, columns = opts.columns, colgroups = opts.colgroups, exportMethod = opts.exportMethod, afterExportMethod = opts.afterExportMethod; return new Promise(function (resolve) { if (remote) { var params = { options: opts, $table: $xetable, $grid: $xegrid }; resolve(exportMethod ? exportMethod(params) : params); } else { var datas_1 = getExportData(opts); resolve($xetable.preventEvent(null, 'event.export', { options: opts, columns: columns, colgroups: colgroups, datas: datas_1 }, function () { return downloadFile(opts, getContent(opts, columns, datas_1)); })); } }).then(function (params) { clearColumnConvert(columns); if (!opts.print) { if (afterExportMethod) { afterExportMethod({ status: true, options: opts, $table: $xetable, $grid: $xegrid }); } } return Object.assign({ status: true }, params); }).catch(function () { clearColumnConvert(columns); if (!opts.print) { if (afterExportMethod) { afterExportMethod({ status: false, options: opts, $table: $xetable, $grid: $xegrid }); } } var params = { status: false }; return Promise.reject(params); }); }; var handleImport = function (content, opts) { var tableFullColumn = internalData.tableFullColumn, _importResolve = internalData._importResolve, _importReject = internalData._importReject; var rest = { fields: [], rows: [] }; switch (opts.type) { case 'csv': rest = parseCsv(tableFullColumn, content); break; case 'txt': rest = parseTxt(tableFullColumn, content); break; case 'html': rest = parseHTML(tableFullColumn, content); break; case 'xml': rest = parseXML(tableFullColumn, content); break; } var fields = rest.fields, rows = rest.rows; var status = checkImportData(tableFullColumn, fields); if (status) { $xetable.createData(rows).then(function (data) { var loadRest; if (opts.mode === 'insert') { loadRest = $xetable.insert(data); } else { loadRest = $xetable.reloadData(data); } if (opts.message !== false) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ content: _conf.default.i18n('vxe.table.impSuccess', [rows.length]), status: 'success' }); } return loadRest.then(function () { if (_importResolve) { _importResolve({ status: true }); } }); }); } else if (opts.message !== false) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ content: _conf.default.i18n('vxe.error.impFields'), status: 'error' }); if (_importReject) { _importReject({ status: false }); } } }; var handleFileImport = function (file, opts) { var importMethod = opts.importMethod, afterImportMethod = opts.afterImportMethod; var _a = (0, _utils.parseFile)(file), type = _a.type, filename = _a.filename; // 检查类型,如果为自定义导出,则不需要校验类型 if (!importMethod && !_xeUtils.default.includes(_vXETable.VXETable.globalConfs.importTypes, type)) { if (opts.message !== false) { // 检测弹窗模块 if (process.env.NODE_ENV === 'development') { if (!_vXETable.VXETable.modal) { (0, _log.errLog)('vxe.error.reqModule', ['Modal']); } } _vXETable.VXETable.modal.message({ content: _conf.default.i18n('vxe.error.notType', [type]), status: 'error' }); } var params = { status: false }; return Promise.reject(params); } var rest = new Promise(function (resolve, reject) { var _importResolve = function (params) { resolve(params); internalData._importResolve = null; internalData._importReject = null; }; var _importReject = function (params) { reject(params); internalData._importResolve = null; internalData._importReject = null; }; internalData._importResolve = _importResolve; internalData._importReject = _importReject; if (window.FileReader) { var options_1 = Object.assign({ mode: 'insert' }, opts, { type: type, filename: filename }); if (options_1.remote) { if (importMethod) { Promise.resolve(importMethod({ file: file, options: options_1, $table: $xetable })).then(function () { _importResolve({ status: true }); }).catch(function () { _importResolve({ status: true }); }); } else { _importResolve({ status: true }); } } else { var tableFullColumn = internalData.tableFullColumn; $xetable.preventEvent(null, 'event.import', { file: file, options: options_1, columns: tableFullColumn }, function () { var reader = new FileReader(); reader.onerror = function () { (0, _log.errLog)('vxe.error.notType', [type]); _importReject({ status: false }); }; reader.onload = function (e) { handleImport(e.target.result, options_1); }; reader.readAsText(file, options_1.encoding || 'UTF-8'); }); } } else { // 不支持的浏览器 if (process.env.NODE_ENV === 'development') { (0, _log.errLog)('vxe.error.notExp'); } _importResolve({ status: true }); } }); return rest.then(function () { if (afterImportMethod) { afterImportMethod({ status: true, options: opts, $table: $xetable }); } }).catch(function (e) { if (afterImportMethod) { afterImportMethod({ status: false, options: opts, $table: $xetable }); } return Promise.reject(e); }); }; var handleExportAndPrint = function (options, isPrint) { var treeConfig = props.treeConfig, showHeader = props.showHeader, showFooter = props.showFooter; var initStore = reactData.initStore, mergeList = reactData.mergeList, isGroup = reactData.isGroup, footerTableData = reactData.footerTableData, exportStore = reactData.exportStore, exportParams = reactData.exportParams; var collectColumn = internalData.collectColumn; var hasTree = treeConfig; var customOpts = computeCustomOpts.value; var selectRecords = $xetable.getCheckboxRecords(); var hasFooter = !!footerTableData.length; var hasMerge = !hasTree && mergeList.length; var defOpts = Object.assign({ message: true, isHeader: showHeader, isFooter: showFooter }, options); var types = defOpts.types || _vXETable.VXETable.globalConfs.exportTypes; var modes = defOpts.modes; var checkMethod = customOpts.checkMethod; var exportColumns = collectColumn.slice(0); var columns = defOpts.columns; // 处理类型 var typeList = types.map(function (value) { return { value: value, label: "vxe.export.types.".concat(value) }; }); var modeList = modes.map(function (value) { return { value: value, label: "vxe.export.modes.".concat(value) }; }); // 默认选中 _xeUtils.default.eachTree(exportColumns, function (column, index, items, path, parent) { var isColGroup = column.children && column.children.length; if (isColGroup || defaultFilterExportColumn(column)) { column.checked = columns ? columns.some(function (item) { if ((0, _util.isColumnInfo)(item)) { return column === item; } else if (_xeUtils.default.isString(item)) { return column.field === item; } else { var colid = item.id || item.colId; var type = item.type; var field = item.property || item.field; if (colid) { return column.id === colid; } else if (field && type) { return column.property === field && column.type === type; } else if (field) { return column.property === field; } else if (type) { return column.type === type; } } return false; }) : column.visible; column.halfChecked = false; column.disabled = parent && parent.disabled || (checkMethod ? !checkMethod({ column: column }) : false); } }); // 更新条件 Object.assign(exportStore, { columns: exportColumns, typeList: typeList, modeList: modeList, hasFooter: hasFooter, hasMerge: hasMerge, hasTree: hasTree, isPrint: isPrint, hasColgroup: isGroup, visible: true }); // 默认参数 Object.assign(exportParams, { mode: selectRecords.length ? 'selected' : 'current' }, defOpts); if (modes.indexOf(exportParams.mode) === -1) { exportParams.mode = modes[0]; } if (types.indexOf(exportParams.type) === -1) { exportParams.type = types[0]; } initStore.export = true; return (0, _vue.nextTick)(); }; var exportMethods = { /** * 导出文件,支持 csv/html/xml/txt * 如果是树表格,则默认是导出所有节点 * 如果是启用了虚拟滚动,则只能导出数据源,可以配合 dataFilterMethod 函数自行转换数据 * @param {Object} options 参数 */ exportData: function (options) { var treeConfig = props.treeConfig; var isGroup = reactData.isGroup, tableGroupColumn = reactData.tableGroupColumn; var tableFullColumn = internalData.tableFullColumn, afterFullData = internalData.afterFullData; var exportOpts = computeExportOpts.value; var treeOpts = computeTreeOpts.value; var opts = Object.assign({ // filename: '', // sheetName: '', // original: false, // message: false, isHeader: true, isFooter: true, isColgroup: true, // isMerge: false, // isAllExpand: false, download: true, type: 'csv', mode: 'current' // data: null, // remote: false, // dataFilterMethod: null, // footerFilterMethod: null, // exportMethod: null, // columnFilterMethod: null, // beforeExportMethod: null, // afterExportMethod: null }, exportOpts, { print: false }, options); var type = opts.type, mode = opts.mode, columns = opts.columns, original = opts.original, beforeExportMethod = opts.beforeExportMethod; var groups = []; var customCols = columns && columns.length ? columns : null; var columnFilterMethod = opts.columnFilterMethod; // 如果设置源数据,则默认导出设置了字段的列 if (!customCols && !columnFilterMethod) { columnFilterMethod = original ? function (_a) { var column = _a.column; return column.property; } : function (_a) { var column = _a.column; return defaultFilterExportColumn(column); }; } if (customCols) { opts._isCustomColumn = true; groups = _xeUtils.default.searchTree(_xeUtils.default.mapTree(customCols, function (item) { var targetColumn; if (item) { if ((0, _util.isColumnInfo)(item)) { targetColumn = item; } else if (_xeUtils.defa