vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
899 lines • 69.3 kB
JavaScript
import { inject, nextTick } from 'vue';
import XEUtils from 'xe-utils';
import GlobalConfig from '../../v-x-e-table/src/conf';
import { VXETable } from '../../v-x-e-table';
import { isColumnInfo, mergeBodyMethod, getCellValue } from '../../table/src/util';
import { parseFile, formatText } from '../../tools/utils';
import { warnLog, errLog } from '../../tools/log';
import { readLocalFile, handlePrint, saveLocalFile, createHtmlPage, getExportBlobByContent } from './util';
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.uniqueId());
}
function replaceTxtCell(cell, vMaps) {
return cell.replace(/#\d+@\d+/g, function (key) { return XEUtils.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.arrayEach(getElementsByTagName(theadNodes[0], 'tr'), function (rowNode) {
XEUtils.arrayEach(getElementsByTagName(rowNode, 'th'), function (cellNode) {
fields.push(cellNode.textContent);
});
});
var tbodyNodes = getElementsByTagName(tableNodes[0], 'tbody');
if (tbodyNodes.length) {
XEUtils.arrayEach(getElementsByTagName(tbodyNodes[0], 'tr'), function (rowNode) {
var item = {};
XEUtils.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.arrayEach(getElementsByTagName(rowNodes[0], 'Cell'), function (cellNode) {
fields.push(cellNode.textContent);
});
XEUtils.arrayEach(rowNodes, function (rowNode, index) {
if (index) {
var item_2 = {};
var cellNodes = getElementsByTagName(rowNode, 'Cell');
XEUtils.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.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 = 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.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.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.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.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.get(row, radioOpts.labelField) : '';
item_3._radioDisabled = radioOpts.checkMethod && !radioOpts.checkMethod({ row: row });
break;
default:
if (opts.original) {
cellValue = 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.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.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.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.get(row, radioOpts.labelField) : '';
item._radioDisabled = radioOpts.checkMethod && !radioOpts.checkMethod({ row: row });
break;
default:
if (opts.original) {
cellValue = 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.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.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.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.isUndefined(columnOverflow) || XEUtils.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.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(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(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(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 = 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(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(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('') : 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 = getExportBlobByContent(content, opts);
return Promise.resolve({ type: type, content: content, blob: blob });
}
saveLocalFile({ filename: filename, type: type, content: content }).then(function () {
if (opts.message !== false) {
// 检测弹窗模块
if (process.env.NODE_ENV === 'development') {
if (!VXETable.modal) {
errLog('vxe.error.reqModule', ['Modal']);
}
}
VXETable.modal.message({ content: GlobalConfig.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.modal) {
errLog('vxe.error.reqModule', ['Modal']);
}
}
VXETable.modal.message({ content: GlobalConfig.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.modal) {
errLog('vxe.error.reqModule', ['Modal']);
}
}
VXETable.modal.message({ content: GlobalConfig.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 = parseFile(file), type = _a.type, filename = _a.filename;
// 检查类型,如果为自定义导出,则不需要校验类型
if (!importMethod && !XEUtils.includes(VXETable.globalConfs.importTypes, type)) {
if (opts.message !== false) {
// 检测弹窗模块
if (process.env.NODE_ENV === 'development') {
if (!VXETable.modal) {
errLog('vxe.error.reqModule', ['Modal']);
}
}
VXETable.modal.message({ content: GlobalConfig.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 () {
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') {
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, footerT