mirror of
https://gitee.com/xuliangzhan_admin/vxe-table.git
synced 2026-01-21 05:27:57 +08:00
172 lines
4.8 KiB
JavaScript
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; |