Files
vxe-table/lib/export/src/methods.js
xuliangzhan 9a2a3bca1d update
2019-08-29 22:02:02 +08:00

172 lines
4.8 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _xeUtils = _interopRequireDefault(require("xe-utils/methods/xe-utils"));
var _tools = require("../../tools");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function getCsvContent($table, opts, oColumns, oData) {
var isOriginal = opts.original;
var tableElem = $table.$el;
var _getCsvData = getCsvData(opts, oData, oColumns, tableElem),
columns = _getCsvData.columns,
datas = _getCsvData.datas;
var content = "\uFEFF";
if (opts.isHeader) {
content += columns.map(function (_ref) {
var own = _ref.own;
return _tools.UtilTools.getFuncText(own.title || own.label);
}).join(',') + '\n';
}
datas.forEach(function (row, rowIndex) {
if (isOriginal) {
content += columns.map(function (column) {
if (column.type === 'index') {
return "\"".concat(column.indexMethod ? column.indexMethod(rowIndex) : rowIndex + 1, "\"");
}
return "\"".concat(_tools.UtilTools.getCellValue(row, column) || '', "\"");
}).join(',') + '\n';
} else {
content += columns.map(function (column) {
return "\"".concat(row[column.id], "\"");
}).join(',') + '\n';
}
});
if (opts.isFooter) {
$table.footerData.forEach(function (rows) {
content += rows.join(',') + '\n';
});
}
return content;
}
function downloadCsc(opts, content) {
if (!opts.download) {
return Promise.resolve(content);
}
if (navigator.msSaveBlob && window.Blob) {
navigator.msSaveBlob(new Blob([content], {
type: 'text/csv'
}), opts.filename);
} else if (_tools.DomTools.browse['-ms']) {
var win = window.top.open('about:blank', '_blank');
win.document.charset = 'utf-8';
win.document.write(content);
win.document.close();
win.document.execCommand('SaveAs', opts.filename);
win.close();
} else {
var linkElem = document.createElement('a');
linkElem.target = '_blank';
linkElem.download = opts.filename;
linkElem.href = getCsvUrl(opts, content);
document.body.appendChild(linkElem);
linkElem.click();
document.body.removeChild(linkElem);
}
}
function getCsvLabelData(columns, oData, tableElem) {
var trElemList = tableElem.querySelectorAll('.vxe-table--body-wrapper.body--wrapper .vxe-body--row');
return Array.from(trElemList).map(function (trElem) {
var item = {};
columns.forEach(function (column) {
var cell = trElem.querySelector(".".concat(column.id));
item[column.id] = cell ? cell.innerText.trim() : '';
});
return item;
});
}
function getCsvData(opts, oData, oColumns, tableElem) {
var isOriginal = opts.original;
var columns = opts.columns ? opts.columns : oColumns;
if (opts.columnFilterMethod) {
columns = columns.filter(opts.columnFilterMethod);
}
var datas = opts.data ? opts.data : isOriginal ? oData : getCsvLabelData(columns, oData, tableElem);
if (opts.dataFilterMethod) {
datas = datas.filter(opts.dataFilterMethod);
}
return {
columns: columns,
datas: datas
};
}
function getCsvUrl(opts, content) {
if (window.Blob && window.URL && window.URL.createObjectURL && !_tools.DomTools.browse.safari) {
return URL.createObjectURL(new Blob([content], {
type: 'text/csv'
}));
}
return "data:attachment/csv;charset=utf-8,".concat(encodeURIComponent(content));
}
var _default = {
/**
* 导出 csv 文件
* 如果是树表格,则默认是导出所有节点
* 如果是启用了可视渲染,则只能导出数据源,可以配合 dataFilterMethod 函数自行转换数据
*/
exportCsv: function exportCsv(options) {
var visibleColumn = this.visibleColumn,
scrollXLoad = this.scrollXLoad,
scrollYLoad = this.scrollYLoad,
treeConfig = this.treeConfig;
var opts = Object.assign({
filename: 'table.csv',
original: !!treeConfig,
isHeader: true,
isFooter: true,
download: true,
data: null,
columns: null,
columnFilterMethod: function columnFilterMethod(column) {
return ['index', 'selection', 'radio'].indexOf(column.type) === -1 && column.property;
},
dataFilterMethod: null
}, options);
if (opts.filename.indexOf('.csv') === -1) {
opts.filename += '.csv';
}
if (!opts.original) {
if (scrollXLoad || scrollYLoad) {
opts.original = true;
_tools.UtilTools.warn('vxe.error.scrollOriginal');
}
}
var columns = visibleColumn;
var oData = this.tableFullData;
if (treeConfig) {
oData = _xeUtils.default.toTreeArray(oData, treeConfig);
}
return downloadCsc(opts, getCsvContent(this, opts, columns, oData));
}
};
exports.default = _default;