From c997f662e871ae587ca3da1fb9b576b41b743e51 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E6=9D=A8?= <1711467488@qq.com>
Date: Fri, 9 Feb 2018 15:42:28 +0800
Subject: [PATCH] no message
Former-commit-id: 408058fab164d62f8a60dcb3abbac19a0464dec1
Former-commit-id: ec41a7db6766d29a89679ed3769fad5ead12058a
Former-commit-id: 0f4d0fbaa32e40973b79ad12a1a90c3035106a68
---
src/components/core/Icon/index.vue | 15 ++++
src/components/core/index.js | 1 +
src/pages/demo/plugins/tableExport/demo.vue | 18 +++++
src/utils/csv.js | 62 ++++++++++++++++
src/utils/export-csv.js | 82 +++++++++++++++++++++
5 files changed, 178 insertions(+)
create mode 100644 src/components/core/Icon/index.vue
create mode 100755 src/utils/csv.js
create mode 100755 src/utils/export-csv.js
diff --git a/src/components/core/Icon/index.vue b/src/components/core/Icon/index.vue
new file mode 100644
index 00000000..130e662f
--- /dev/null
+++ b/src/components/core/Icon/index.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
diff --git a/src/components/core/index.js b/src/components/core/index.js
index eb482520..d52e9302 100644
--- a/src/components/core/index.js
+++ b/src/components/core/index.js
@@ -3,6 +3,7 @@ import Vue from 'vue'
Vue.component('Container', resolve => { require(['@/components/core/Container'], resolve) })
Vue.component('CountUp', resolve => { require(['@/components/core/CountUp'], resolve) })
Vue.component('Highlight', resolve => { require(['@/components/core/Highlight'], resolve) })
+Vue.component('Icon', resolve => { require(['@/components/core/Icon'], resolve) })
Vue.component('IconSelect', resolve => { require(['@/components/core/IconSelect/index.vue'], resolve) })
Vue.component('Markdown', resolve => { require(['@/components/core/Markdown'], resolve) })
Vue.component('QuillEditor', resolve => { require(['@/components/core/QuillEditor'], resolve) })
diff --git a/src/pages/demo/plugins/tableExport/demo.vue b/src/pages/demo/plugins/tableExport/demo.vue
index e764f249..ea6377e4 100644
--- a/src/pages/demo/plugins/tableExport/demo.vue
+++ b/src/pages/demo/plugins/tableExport/demo.vue
@@ -4,6 +4,12 @@
slot="header"
title="基本示例">
+
+
+
+ exportCsv
+
+
diff --git a/src/utils/csv.js b/src/utils/csv.js
new file mode 100755
index 00000000..d8f300b3
--- /dev/null
+++ b/src/utils/csv.js
@@ -0,0 +1,62 @@
+/*
+ inspired by https://www.npmjs.com/package/react-csv-downloader
+ now removed from Github
+ inspired by https://github.com/iview/iview
+*/
+
+/* eslint-disable */
+
+const newLine = '\r\n';
+const appendLine = (content, row, { separator, quoted }) => {
+ const line = row.map(data => {
+ if (!quoted) return data;
+ // quote data
+ data = typeof data === 'string' ? data.replace(/"/g, '"') : data;
+ return `"${data}"`;
+ });
+ content.push(line.join(separator));
+};
+
+const defaults = {
+ separator: ',',
+ quoted: false
+};
+
+export default function csv(columns, datas, options, noHeader = false) {
+ options = Object.assign({}, defaults, options);
+ let columnOrder;
+ const content = [];
+ const column = [];
+
+ if (columns) {
+ columnOrder = columns.map(v => {
+ if (typeof v === 'string') return v;
+ if (!noHeader) {
+ column.push(typeof v.title !== 'undefined' ? v.title : v.key);
+ }
+ return v.key;
+ });
+ if (column.length > 0) appendLine(content, column, options);
+ } else {
+ columnOrder = [];
+ datas.forEach(v => {
+ if (!Array.isArray(v)) {
+ columnOrder = columnOrder.concat(Object.keys(v));
+ }
+ });
+ if (columnOrder.length > 0) {
+ columnOrder = columnOrder.filter((value, index, self) => self.indexOf(value) === index);
+ if (!noHeader) appendLine(content, columnOrder, options);
+ }
+ }
+
+ if (Array.isArray(datas)) {
+ datas.forEach(row => {
+ if (!Array.isArray(row)) {
+ row = columnOrder.map(k => (typeof row[k] !== 'undefined' ? row[k] : ''));
+ }
+ appendLine(content, row, options);
+ });
+ }
+ return content.join(newLine);
+}
diff --git a/src/utils/export-csv.js b/src/utils/export-csv.js
new file mode 100755
index 00000000..edb4a74d
--- /dev/null
+++ b/src/utils/export-csv.js
@@ -0,0 +1,82 @@
+/*
+ https://github.com/iview/iview
+*/
+
+/* eslint-disable */
+
+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) {
+ 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);
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+ }
+ }
+};
+
+export default csv;
\ No newline at end of file