Table support export .csv file

Table support export .csv file
This commit is contained in:
梁灏 2016-12-09 13:24:39 +08:00
parent 2f0b086d60
commit 43509ad876
5 changed files with 304 additions and 36 deletions

View file

@ -0,0 +1,77 @@
function has (browser) {
const ua = navigator.userAgent;
if (browser === 'ie') {
const isIE = ua.indexOf('compatible') > -1 && ua.indexOf('MSIE') > -1;
if (isIE) {
const reIE = new RegExp("MSIE (\\d+\\.\\d+);");
reIE.test(ua);
return parseFloat(RegExp["$1"]);
} else {
return false
}
} else {
return ua.indexOf(browser) > -1;
}
}
const csv = {
_isIE11 () {
let iev = 0;
const ieold = (/MSIE (\d+\.\d+);/.test(navigator.userAgent));
const trident = !!navigator.userAgent.match(/Trident\/7.0/);
const rv = navigator.userAgent.indexOf("rv:11.0");
if (ieold) {
iev = Number(RegExp.$1);
}
if (navigator.appVersion.indexOf("MSIE 10") !== -1) {
iev = 10;
}
if (trident && rv !== -1) {
iev = 11;
}
return iev === 11;
},
_isEdge () {
return /Edge/.test(navigator.userAgent);
},
_getDownloadUrl (text) {
const BOM = "\uFEFF";
// Add BOM to text for open in excel correctly
if (window.Blob && window.URL && window.URL.createObjectURL && !has('Safari')) {
const csvData = new Blob([BOM + text], { type: 'text/csv' });
return URL.createObjectURL(csvData);
} else {
return 'data:attachment/csv;charset=utf-8,' + BOM + encodeURIComponent(text);
}
},
download (filename, text) {
if (has('ie') && has('ie') < 10) {
// has module unable identify ie11 and Edge
const oWin = window.top.open("about:blank", "_blank");
oWin.document.charset = 'utf-8';
oWin.document.write(text);
oWin.document.close();
oWin.document.execCommand('SaveAs', filename);
oWin.close();
} else if (has("ie") === 10 || this._isIE11() || this._isEdge()) {
const BOM = "\uFEFF";
const csvData = new Blob([BOM + text], { type: 'text/csv' });
navigator.msSaveBlob(csvData, filename);
} else {
const link = document.createElement('a');
link.download = filename;
link.href = this._getDownloadUrl(text);
link.target = '_blank';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}
}
};
export default csv;

View file

@ -73,6 +73,8 @@
import tableHead from './table-head.vue';
import tableBody from './table-body.vue';
import { oneOf, getStyle, deepCopy } from '../../utils/assist';
import Csv from '../../utils/csv';
import ExportCsv from './export-csv';
const prefixCls = 'ivu-table';
export default {
@ -516,6 +518,32 @@
}
});
return left.concat(center).concat(right);
},
exportCsv (params) {
if (params.filename) {
if (params.filename.indexOf('.csv') === -1) {
params.filename += '.csv';
}
} else {
params.filename = 'table.csv';
}
let columns = [];
let datas = [];
if (params.columns && params.data) {
columns = params.columns;
datas = params.data;
} else {
columns = this.columns;
if (!('original' in params)) params.original = true;
datas = params.original ? this.data : this.rebuildData;
}
let noHeader = false;
if ('noHeader' in params) noHeader = params.noHeader;
const data = Csv(columns, datas, ',', noHeader);
ExportCsv.download(params.filename, data);
}
},
compiled () {