vxe-table-plugin-export-xlsx-xhx 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Xu Liangzhan
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # vxe-table-plugin-export-xlsx
2
+
3
+ [![gitee star](https://gitee.com/xuliangzhan_admin/vxe-table-plugin-export-xlsx/badge/star.svg?theme=dark)](https://gitee.com/xuliangzhan_admin/vxe-table-plugin-export-xlsx/stargazers)
4
+ [![npm version](https://img.shields.io/npm/v/vxe-table-plugin-export-xlsx.svg?style=flat-square)](https://www.npmjs.org/package/vxe-table-plugin-export-xlsx)
5
+ [![npm downloads](https://img.shields.io/npm/dm/vxe-table-plugin-export-xlsx.svg?style=flat-square)](http://npm-stat.com/charts.html?package=vxe-table-plugin-export-xlsx)
6
+ [![gzip size: JS](http://img.badgesize.io/https://unpkg.com/vxe-table-plugin-export-xlsx/dist/index.min.js?compression=gzip&label=gzip%20size:%20JS)](https://unpkg.com/vxe-table-plugin-export-xlsx/dist/index.min.js)
7
+ [![npm license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/xuliangzhan/vxe-table-plugin-export-xlsx/blob/master/LICENSE)
8
+
9
+ 基于 [vxe-table](https://github.com/xuliangzhan/vxe-table) 表格的增强插件,支持导出 xlsx 格式
10
+
11
+ ## Installing
12
+
13
+ ```shell
14
+ npm install xe-utils vxe-table vxe-table-plugin-export-xlsx xlsx
15
+ ```
16
+
17
+ ```javascript
18
+ import Vue from 'vue'
19
+ import VXETable from 'vxe-table'
20
+ import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx'
21
+
22
+ Vue.use(VXETable)
23
+ VXETable.use(VXETablePluginExportXLSX)
24
+ ```
25
+
26
+ ## Demo
27
+
28
+ ```html
29
+ <vxe-toolbar>
30
+ <template v-slot:buttons>
31
+ <vxe-button @click="exportEvent">导出.xlsx</vxe-button>
32
+ </template>
33
+ </vxe-toolbar>
34
+
35
+ <vxe-table
36
+ border
37
+ ref="xTable"
38
+ height="600"
39
+ :data="tableData">
40
+ <vxe-table-column type="index" width="60"></vxe-table-column>
41
+ <vxe-table-column field="name" title="Name"></vxe-table-column>
42
+ <vxe-table-column field="age" title="Age"></vxe-table-column>
43
+ <vxe-table-column field="date" title="Date"></vxe-table-column>
44
+ </vxe-table>
45
+ ```
46
+
47
+ ```javascript
48
+ export default {
49
+ data () {
50
+ return {
51
+ tableData: [
52
+ {
53
+ id: 100,
54
+ name: 'test',
55
+ age: 26,
56
+ date: null
57
+ }
58
+ ]
59
+ }
60
+ },
61
+ methods: {
62
+ exportEvent() {
63
+ this.$refs.xTable.exportData({
64
+ filename: 'export',
65
+ sheetName: 'Sheet1',
66
+ type: 'xlsx'
67
+ })
68
+ }
69
+ }
70
+ }
71
+ ```
72
+
73
+ ## License
74
+
75
+ MIT License, 2019-present, Xu Liangzhan
package/depend.ts ADDED
@@ -0,0 +1,4 @@
1
+ import XEUtils from 'xe-utils/methods/xe-utils'
2
+ import dependencies from 'vxe-table/lib/utils/dependencies'
3
+
4
+ XEUtils.mixin(dependencies)
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = exports.VXETablePluginExportXLSX = void 0;
7
+
8
+ var _xeUtils = _interopRequireDefault(require("xe-utils/methods/xe-utils"));
9
+
10
+ var _xlsx = _interopRequireDefault(require("xlsx"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
13
+
14
+ /* eslint-disable no-unused-vars */
15
+
16
+ /* eslint-enable no-unused-vars */
17
+ var _vxetable;
18
+
19
+ function getFooterCellValue($table, opts, rows, column) {
20
+ var cellValue = _xeUtils["default"].toString(rows[$table.$getColumnIndex(column)]);
21
+
22
+ return cellValue;
23
+ }
24
+
25
+ function toBuffer(wbout) {
26
+ var buf = new ArrayBuffer(wbout.length);
27
+ var view = new Uint8Array(buf);
28
+
29
+ for (var index = 0; index !== wbout.length; ++index) {
30
+ view[index] = wbout.charCodeAt(index) & 0xFF;
31
+ }
32
+
33
+ return buf;
34
+ }
35
+
36
+ function exportXLSX(params) {
37
+ var $table = params.$table,
38
+ options = params.options,
39
+ columns = params.columns,
40
+ datas = params.datas;
41
+ var sheetName = options.sheetName,
42
+ type = options.type,
43
+ isHeader = options.isHeader,
44
+ isFooter = options.isFooter,
45
+ original = options.original,
46
+ message = options.message,
47
+ footerFilterMethod = options.footerFilterMethod;
48
+ var colHead = {};
49
+ var footList = [];
50
+ var rowList = datas;
51
+
52
+ if (isHeader) {
53
+ columns.forEach(function (column) {
54
+ colHead[column.id] = _xeUtils["default"].toString(original ? column.property : column.getTitle());
55
+ });
56
+ }
57
+
58
+ if (isFooter) {
59
+ var _$table$getTableData = $table.getTableData(),
60
+ footerData = _$table$getTableData.footerData;
61
+
62
+ var footers = footerFilterMethod ? footerData.filter(footerFilterMethod) : footerData;
63
+ footers.forEach(function (rows) {
64
+ var item = {};
65
+ columns.forEach(function (column) {
66
+ item[column.id] = getFooterCellValue($table, options, rows, column);
67
+ });
68
+ footList.push(item);
69
+ });
70
+ }
71
+
72
+ var book = _xlsx["default"].utils.book_new();
73
+
74
+ var sheet = _xlsx["default"].utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList).concat(footList), {
75
+ skipHeader: true
76
+ }); // 转换数据
77
+
78
+
79
+ _xlsx["default"].utils.book_append_sheet(book, sheet, sheetName);
80
+
81
+ var wbout = _xlsx["default"].write(book, {
82
+ bookType: type,
83
+ bookSST: false,
84
+ type: 'binary'
85
+ });
86
+
87
+ var blob = new Blob([toBuffer(wbout)], {
88
+ type: 'application/octet-stream'
89
+ }); // 保存导出
90
+
91
+ downloadFile(blob, options);
92
+
93
+ if (message !== false) {
94
+ _vxetable.modal.message({
95
+ message: _vxetable.t('vxe.table.expSuccess'),
96
+ status: 'success'
97
+ });
98
+ }
99
+ }
100
+
101
+ function downloadFile(blob, options) {
102
+ if (window.Blob) {
103
+ var filename = options.filename,
104
+ type = options.type;
105
+
106
+ if (navigator.msSaveBlob) {
107
+ navigator.msSaveBlob(blob, "".concat(filename, ".").concat(type));
108
+ } else {
109
+ var linkElem = document.createElement('a');
110
+ linkElem.target = '_blank';
111
+ linkElem.download = "".concat(filename, ".").concat(type);
112
+ linkElem.href = URL.createObjectURL(blob);
113
+ document.body.appendChild(linkElem);
114
+ linkElem.click();
115
+ document.body.removeChild(linkElem);
116
+ }
117
+ } else {
118
+ console.error(_vxetable.t('vxe.error.notExp'));
119
+ }
120
+ }
121
+
122
+ function replaceDoubleQuotation(val) {
123
+ return val.replace(/^"/, '').replace(/"$/, '');
124
+ }
125
+
126
+ function parseCsv(columns, content) {
127
+ var list = content.split('\n');
128
+ var fields = [];
129
+ var rows = [];
130
+
131
+ if (list.length) {
132
+ var rList = list.slice(1);
133
+ list[0].split(',').map(replaceDoubleQuotation);
134
+ rList.forEach(function (r) {
135
+ if (r) {
136
+ var item = {};
137
+ r.split(',').forEach(function (val, colIndex) {
138
+ if (fields[colIndex]) {
139
+ item[fields[colIndex]] = replaceDoubleQuotation(val);
140
+ }
141
+ });
142
+ rows.push(item);
143
+ }
144
+ });
145
+ }
146
+
147
+ return {
148
+ fields: fields,
149
+ rows: rows
150
+ };
151
+ }
152
+
153
+ function checkImportData(columns, fields, rows) {
154
+ var tableFields = [];
155
+ columns.forEach(function (column) {
156
+ var field = column.property;
157
+
158
+ if (field) {
159
+ tableFields.push(field);
160
+ }
161
+ });
162
+ return tableFields.every(function (field) {
163
+ return fields.includes(field);
164
+ });
165
+ }
166
+
167
+ function importXLSX(params) {
168
+ var columns = params.columns,
169
+ options = params.options,
170
+ file = params.file;
171
+ var $table = params.$table;
172
+ var _importResolve = $table._importResolve;
173
+ var fileReader = new FileReader();
174
+
175
+ fileReader.onload = function (e) {
176
+ var workbook = _xlsx["default"].read(e.target.result, {
177
+ type: 'binary'
178
+ });
179
+
180
+ var csvData = _xlsx["default"].utils.sheet_to_csv(workbook.Sheets.Sheet1);
181
+
182
+ var _parseCsv = parseCsv(columns, csvData),
183
+ fields = _parseCsv.fields,
184
+ rows = _parseCsv.rows;
185
+
186
+ var status = checkImportData(columns, fields, rows);
187
+
188
+ if (status) {
189
+ $table.createData(rows).then(function (data) {
190
+ if (options.mode === 'append') {
191
+ $table.insertAt(data, -1);
192
+ } else {
193
+ $table.reloadData(data);
194
+ }
195
+ });
196
+
197
+ if (options.message !== false) {
198
+ _vxetable.modal.message({
199
+ message: _xeUtils["default"].template(_vxetable.t('vxe.table.impSuccess'), [rows.length]),
200
+ status: 'success'
201
+ });
202
+ }
203
+ } else if (options.message !== false) {
204
+ _vxetable.modal.message({
205
+ message: _vxetable.t('vxe.error.impFields'),
206
+ status: 'error'
207
+ });
208
+ }
209
+
210
+ if (_importResolve) {
211
+ _importResolve(status);
212
+
213
+ $table._importResolve = null;
214
+ }
215
+ };
216
+
217
+ fileReader.readAsBinaryString(file);
218
+ }
219
+
220
+ function handleImportEvent(params) {
221
+ if (params.options.type === 'xlsx') {
222
+ importXLSX(params);
223
+ return false;
224
+ }
225
+ }
226
+
227
+ function handleExportEvent(params) {
228
+ if (params.options.type === 'xlsx') {
229
+ exportXLSX(params);
230
+ return false;
231
+ }
232
+ }
233
+ /**
234
+ * 基于 vxe-table 表格的增强插件,支持导出 xlsx 格式
235
+ */
236
+
237
+
238
+ var VXETablePluginExportXLSX = {
239
+ install: function install(xtable) {
240
+ var interceptor = xtable.interceptor;
241
+ _vxetable = xtable;
242
+ Object.assign(xtable.types, {
243
+ xlsx: 1
244
+ });
245
+ interceptor.mixin({
246
+ 'event.import': handleImportEvent,
247
+ 'event.export': handleExportEvent
248
+ });
249
+ }
250
+ };
251
+ exports.VXETablePluginExportXLSX = VXETablePluginExportXLSX;
252
+
253
+ if (typeof window !== 'undefined' && window.VXETable) {
254
+ window.VXETable.use(VXETablePluginExportXLSX);
255
+ }
256
+
257
+ var _default = VXETablePluginExportXLSX;
258
+ exports["default"] = _default;
259
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbIl92eGV0YWJsZSIsImdldEZvb3RlckNlbGxWYWx1ZSIsIiR0YWJsZSIsIm9wdHMiLCJyb3dzIiwiY29sdW1uIiwiY2VsbFZhbHVlIiwiWEVVdGlscyIsInRvU3RyaW5nIiwiJGdldENvbHVtbkluZGV4IiwidG9CdWZmZXIiLCJ3Ym91dCIsImJ1ZiIsIkFycmF5QnVmZmVyIiwibGVuZ3RoIiwidmlldyIsIlVpbnQ4QXJyYXkiLCJpbmRleCIsImNoYXJDb2RlQXQiLCJleHBvcnRYTFNYIiwicGFyYW1zIiwib3B0aW9ucyIsImNvbHVtbnMiLCJkYXRhcyIsInNoZWV0TmFtZSIsInR5cGUiLCJpc0hlYWRlciIsImlzRm9vdGVyIiwib3JpZ2luYWwiLCJtZXNzYWdlIiwiZm9vdGVyRmlsdGVyTWV0aG9kIiwiY29sSGVhZCIsImZvb3RMaXN0Iiwicm93TGlzdCIsImZvckVhY2giLCJpZCIsInByb3BlcnR5IiwiZ2V0VGl0bGUiLCJnZXRUYWJsZURhdGEiLCJmb290ZXJEYXRhIiwiZm9vdGVycyIsImZpbHRlciIsIml0ZW0iLCJwdXNoIiwiYm9vayIsIlhMU1giLCJ1dGlscyIsImJvb2tfbmV3Iiwic2hlZXQiLCJqc29uX3RvX3NoZWV0IiwiY29uY2F0Iiwic2tpcEhlYWRlciIsImJvb2tfYXBwZW5kX3NoZWV0Iiwid3JpdGUiLCJib29rVHlwZSIsImJvb2tTU1QiLCJibG9iIiwiQmxvYiIsImRvd25sb2FkRmlsZSIsIm1vZGFsIiwidCIsInN0YXR1cyIsIndpbmRvdyIsImZpbGVuYW1lIiwibmF2aWdhdG9yIiwibXNTYXZlQmxvYiIsImxpbmtFbGVtIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFyZ2V0IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImNvbnNvbGUiLCJlcnJvciIsInJlcGxhY2VEb3VibGVRdW90YXRpb24iLCJ2YWwiLCJyZXBsYWNlIiwicGFyc2VDc3YiLCJjb250ZW50IiwibGlzdCIsInNwbGl0IiwiZmllbGRzIiwickxpc3QiLCJzbGljZSIsIm1hcCIsInIiLCJjb2xJbmRleCIsImNoZWNrSW1wb3J0RGF0YSIsInRhYmxlRmllbGRzIiwiZmllbGQiLCJldmVyeSIsImluY2x1ZGVzIiwiaW1wb3J0WExTWCIsImZpbGUiLCJfaW1wb3J0UmVzb2x2ZSIsImZpbGVSZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiZSIsIndvcmtib29rIiwicmVhZCIsInJlc3VsdCIsImNzdkRhdGEiLCJzaGVldF90b19jc3YiLCJTaGVldHMiLCJTaGVldDEiLCJjcmVhdGVEYXRhIiwidGhlbiIsImRhdGEiLCJtb2RlIiwiaW5zZXJ0QXQiLCJyZWxvYWREYXRhIiwidGVtcGxhdGUiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJoYW5kbGVJbXBvcnRFdmVudCIsImhhbmRsZUV4cG9ydEV2ZW50IiwiVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYIiwiaW5zdGFsbCIsInh0YWJsZSIsImludGVyY2VwdG9yIiwiT2JqZWN0IiwiYXNzaWduIiwidHlwZXMiLCJ4bHN4IiwibWl4aW4iLCJWWEVUYWJsZSIsInVzZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQVNBOzs7O0FBVkE7O0FBV0E7QUFFQSxJQUFJQSxTQUFKOztBQUVBLFNBQVNDLGtCQUFULENBQTZCQyxNQUE3QixFQUE0Q0MsSUFBNUMsRUFBZ0VDLElBQWhFLEVBQTZFQyxNQUE3RSxFQUFpRztBQUMvRixNQUFJQyxTQUFTLEdBQUdDLG9CQUFRQyxRQUFSLENBQWlCSixJQUFJLENBQUNGLE1BQU0sQ0FBQ08sZUFBUCxDQUF1QkosTUFBdkIsQ0FBRCxDQUFyQixDQUFoQjs7QUFDQSxTQUFPQyxTQUFQO0FBQ0Q7O0FBRUQsU0FBU0ksUUFBVCxDQUFtQkMsS0FBbkIsRUFBNkI7QUFDM0IsTUFBSUMsR0FBRyxHQUFHLElBQUlDLFdBQUosQ0FBZ0JGLEtBQUss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QTRCckcsTUFBNUIsRUFBMkQ7QUFDekQsTUFBSUEsTUFBTSxDQUFDQyxPQUFQLENBQWVJLElBQWYsS0FBd0IsTUFBNUIsRUFBb0M7QUFDbENOLElBQUFBLFVBQVUsQ0FBQ0MsTUFBRCxDQUFWO0FBQ0EsV0FBTyxLQUFQO0FBQ0Q7QUFDRjtBQUVEOzs7OztBQUdPLElBQU1zRyx3QkFBd0IsR0FBRztBQUN0Q0MsRUFBQUEsT0FEc0MsbUJBQzdCQyxNQUQ2QixFQUNOO0FBQUEsUUFDdEJDLFdBRHNCLEdBQ05ELE1BRE0sQ0FDdEJDLFdBRHNCO0FBRTlCN0gsSUFBQUEsU0FBUyxHQUFHNEgsTUFBWjtBQUNBRSxJQUFBQSxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsTUFBTSxDQUFDSSxLQUFyQixFQUE0QjtBQUFFQyxNQUFBQSxJQUFJLEVBQUU7QUFBUixLQUE1QjtBQUNBSixJQUFBQSxXQUFXLENBQUNLLEtBQVosQ0FBa0I7QUFDaEIsc0JBQWdCVixpQkFEQTtBQUVoQixzQkFBZ0JDO0FBRkEsS0FBbEI7QUFJRDtBQVRxQyxDQUFqQzs7O0FBWVAsSUFBSSxPQUFPM0QsTUFBUCxLQUFrQixXQUFsQixJQUFpQ0EsTUFBTSxDQUFDcUUsUUFBNUMsRUFBc0Q7QUFDcERyRSxFQUFBQSxNQUFNLENBQUNxRSxRQUFQLENBQWdCQyxHQUFoQixDQUFvQlYsd0JBQXBCO0FBQ0Q7O2VBRWNBLHdCIiwiZmlsZSI6ImluZGV4LmNvbW1vbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmltcG9ydCBYRVV0aWxzIGZyb20gJ3hlLXV0aWxzL21ldGhvZHMveGUtdXRpbHMnXHJcbmltcG9ydCB7XHJcbiAgVlhFVGFibGUsXHJcbiAgVGFibGUsXHJcbiAgSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMsXHJcbiAgSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMsXHJcbiAgQ29sdW1uQ29uZmlnLFxyXG4gIEV4cG9ydE9wdG9uc1xyXG59IGZyb20gJ3Z4ZS10YWJsZS9saWIvdnhlLXRhYmxlJ1xyXG5pbXBvcnQgWExTWCBmcm9tICd4bHN4J1xyXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXHJcblxyXG5sZXQgX3Z4ZXRhYmxlOiB0eXBlb2YgVlhFVGFibGVcclxuXHJcbmZ1bmN0aW9uIGdldEZvb3RlckNlbGxWYWx1ZSAoJHRhYmxlOiBUYWJsZSwgb3B0czogRXhwb3J0T3B0b25zLCByb3dzOiBhbnlbXSwgY29sdW1uOiBDb2x1bW5Db25maWcpIHtcclxuICB2YXIgY2VsbFZhbHVlID0gWEVVdGlscy50b1N0cmluZyhyb3dzWyR0YWJsZS4kZ2V0Q29sdW1uSW5kZXgoY29sdW1uKV0pXHJcbiAgcmV0dXJuIGNlbGxWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b0J1ZmZlciAod2JvdXQ6IGFueSkge1xyXG4gIGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIod2JvdXQubGVuZ3RoKVxyXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleCkgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkZcclxuICByZXR1cm4gYnVmXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4cG9ydFhMU1ggKHBhcmFtczogSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMpIHtcclxuICBjb25zdCB7ICR0YWJsZSwgb3B0aW9ucywgY29sdW1ucywgZGF0YXMgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IHsgc2hlZXROYW1lLCB0eXBlLCBpc0hlYWRlciwgaXNGb290ZXIsIG9yaWdpbmFsLCBtZXNzYWdlLCBmb290ZXJGaWx0ZXJNZXRob2QgfSA9IG9wdGlvbnNcclxuICBjb25zdCBjb2xIZWFkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cclxuICBjb25zdCBmb290TGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW11cclxuICBjb25zdCByb3dMaXN0ID0gZGF0YXNcclxuICBpZiAoaXNIZWFkZXIpIHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGNvbEhlYWRbY29sdW1uLmlkXSA9IFhFVXRpbHMudG9TdHJpbmcob3JpZ2luYWwgPyBjb2x1bW4ucHJvcGVydHkgOiBjb2x1bW4uZ2V0VGl0bGUoKSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIGlmIChpc0Zvb3Rlcikge1xyXG4gICAgY29uc3QgeyBmb290ZXJEYXRhIH0gPSAkdGFibGUuZ2V0VGFibGVEYXRhKClcclxuICAgIGNvbnN0IGZvb3RlcnMgPSBmb290ZXJGaWx0ZXJNZXRob2QgPyBmb290ZXJEYXRhLmZpbHRlcihmb290ZXJGaWx0ZXJNZXRob2QpIDogZm9vdGVyRGF0YVxyXG4gICAgZm9vdGVycy5mb3JFYWNoKChyb3dzKSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW06IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxyXG4gICAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGl0ZW1bY29sdW1uLmlkXSA9IGdldEZvb3RlckNlbGxWYWx1ZSgkdGFibGUsIG9wdGlvbnMsIHJvd3MsIGNvbHVtbilcclxuICAgICAgfSlcclxuICAgICAgZm9vdExpc3QucHVzaChpdGVtKVxyXG4gICAgfSlcclxuICB9XHJcbiAgY29uc3QgYm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKVxyXG4gIGNvbnN0IHNoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KChpc0hlYWRlciA/IFtjb2xIZWFkXSA6IFtdKS5jb25jYXQocm93TGlzdCkuY29uY2F0KGZvb3RMaXN0KSwgeyBza2lwSGVhZGVyOiB0cnVlIH0pXHJcbiAgLy8g6L2s5o2i5pWw5o2uXHJcbiAgWExTWC51dGlscy5ib29rX2FwcGVuZF9zaGVldChib29rLCBzaGVldCwgc2hlZXROYW1lKVxyXG4gIGNvbnN0IHdib3V0ID0gWExTWC53cml0ZShib29rLCB7IGJvb2tUeXBlOiB0eXBlLCBib29rU1NUOiBmYWxzZSwgdHlwZTogJ2JpbmFyeScgfSlcclxuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3RvQnVmZmVyKHdib3V0KV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSlcclxuICAvLyDkv53lrZjlr7zlh7pcclxuICBkb3dubG9hZEZpbGUoYmxvYiwgb3B0aW9ucylcclxuICBpZiAobWVzc2FnZSAhPT0gZmFsc2UpIHtcclxuICAgIF92eGV0YWJsZS5tb2RhbC5tZXNzYWdlKHsgbWVzc2FnZTogX3Z4ZXRhYmxlLnQoJ3Z4ZS50YWJsZS5leHBTdWNjZXNzJyksIHN0YXR1czogJ3N1Y2Nlc3MnIH0pXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBkb3dubG9hZEZpbGUgKGJsb2I6IEJsb2IsIG9wdGlvbnM6IEV4cG9ydE9wdG9ucykge1xyXG4gIGlmICh3aW5kb3cuQmxvYikge1xyXG4gICAgY29uc3QgeyBmaWxlbmFtZSwgdHlwZSB9ID0gb3B0aW9uc1xyXG4gICAgaWYgKG5hdmlnYXRvci5tc1NhdmVCbG9iKSB7XHJcbiAgICAgIG5hdmlnYXRvci5tc1NhdmVCbG9iKGJsb2IsIGAke2ZpbGVuYW1lfS4ke3R5cGV9YClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBsaW5rRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxyXG4gICAgICBsaW5rRWxlbS50YXJnZXQgPSAnX2JsYW5rJ1xyXG4gICAgICBsaW5rRWxlbS5kb3dubG9hZCA9IGAke2ZpbGVuYW1lfS4ke3R5cGV9YFxyXG4gICAgICBsaW5rRWxlbS5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmtFbGVtKVxyXG4gICAgICBsaW5rRWxlbS5jbGljaygpXHJcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGlua0VsZW0pXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoX3Z4ZXRhYmxlLnQoJ3Z4ZS5lcnJvci5ub3RFeHAnKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlcGxhY2VEb3VibGVRdW90YXRpb24gKHZhbDogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIHZhbC5yZXBsYWNlKC9eXCIvLCAnJykucmVwbGFjZSgvXCIkLywgJycpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ3N2IChjb2x1bW5zOiBDb2x1bW5Db25maWdbXSwgY29udGVudDogc3RyaW5nKSB7XHJcbiAgY29uc3QgbGlzdCA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpXHJcbiAgY29uc3QgZmllbGRzOiBzdHJpbmdbXSA9IFtdXHJcbiAgY29uc3Qgcm93czogYW55W10gPSBbXVxyXG4gIGlmIChsaXN0Lmxlbmd0aCkge1xyXG4gICAgY29uc3Qgckxpc3QgPSBsaXN0LnNsaWNlKDEpXHJcbiAgICBsaXN0WzBdLnNwbGl0KCcsJykubWFwKHJlcGxhY2VEb3VibGVRdW90YXRpb24pXHJcbiAgICByTGlzdC5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgIGlmIChyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9XHJcbiAgICAgICAgci5zcGxpdCgnLCcpLmZvckVhY2goKHZhbCwgY29sSW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmIChmaWVsZHNbY29sSW5kZXhdKSB7XHJcbiAgICAgICAgICAgIGl0ZW1bZmllbGRzW2NvbEluZGV4XV0gPSByZXBsYWNlRG91YmxlUXVvdGF0aW9uKHZhbClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIHJvd3MucHVzaChpdGVtKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICByZXR1cm4geyBmaWVsZHMsIHJvd3MgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0ltcG9ydERhdGEgKGNvbHVtbnM6IENvbHVtbkNvbmZpZ1tdLCBmaWVsZHM6IHN0cmluZ1tdLCByb3dzOiBhbnlbXSkge1xyXG4gIGxldCB0YWJsZUZpZWxkczogc3RyaW5nW10gPSBbXVxyXG4gIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICBsZXQgZmllbGQgPSBjb2x1bW4ucHJvcGVydHlcclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0YWJsZUZpZWxkcy5wdXNoKGZpZWxkKVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgcmV0dXJuIHRhYmxlRmllbGRzLmV2ZXJ5KChmaWVsZCkgPT4gZmllbGRzLmluY2x1ZGVzKGZpZWxkKSlcclxufVxyXG5cclxuZnVuY3Rpb24gaW1wb3J0WExTWCAocGFyYW1zOiBJbnRlcmNlcHRvckltcG9ydFBhcmFtcykge1xyXG4gIGNvbnN0IHsgY29sdW1ucywgb3B0aW9ucywgZmlsZSB9ID0gcGFyYW1zXHJcbiAgY29uc3QgJHRhYmxlOiBhbnkgPSBwYXJhbXMuJHRhYmxlXHJcbiAgY29uc3QgeyBfaW1wb3J0UmVzb2x2ZSB9ID0gJHRhYmxlXHJcbiAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcclxuICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHdvcmtib29rID0gWExTWC5yZWFkKGUudGFyZ2V0LnJlc3VsdCwgeyB0eXBlOiAnYmluYXJ5JyB9KVxyXG4gICAgY29uc3QgY3N2RGF0YTogc3RyaW5nID0gWExTWC51dGlscy5zaGVldF90b19jc3Yod29ya2Jvb2suU2hlZXRzLlNoZWV0MSlcclxuICAgIGNvbnN0IHsgZmllbGRzLCByb3dzIH0gPSBwYXJzZUNzdihjb2x1bW5zLCBjc3ZEYXRhKVxyXG4gICAgY29uc3Qgc3RhdHVzID0gY2hlY2tJbXBvcnREYXRhKGNvbHVtbnMsIGZpZWxkcywgcm93cylcclxuICAgIGlmIChzdGF0dXMpIHtcclxuICAgICAgJHRhYmxlLmNyZWF0ZURhdGEocm93cylcclxuICAgICAgICAudGhlbigoZGF0YTogYW55W10pID0+IHtcclxuICAgICAgICAgIGlmIChvcHRpb25zLm1vZGUgPT09ICdhcHBlbmQnKSB7XHJcbiAgICAgICAgICAgICR0YWJsZS5pbnNlcnRBdChkYXRhLCAtMSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICR0YWJsZS5yZWxvYWREYXRhKGRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IFhFVXRpbHMudGVtcGxhdGUoX3Z4ZXRhYmxlLnQoJ3Z4ZS50YWJsZS5pbXBTdWNjZXNzJyksIFtyb3dzLmxlbmd0aF0pLCBzdGF0dXM6ICdzdWNjZXNzJyB9KVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcclxuICAgICAgX3Z4ZXRhYmxlLm1vZGFsLm1lc3NhZ2UoeyBtZXNzYWdlOiBfdnhldGFibGUudCgndnhlLmVycm9yLmltcEZpZWxkcycpLCBzdGF0dXM6ICdlcnJvcicgfSlcclxuICAgIH1cclxuICAgIGlmIChfaW1wb3J0UmVzb2x2ZSkge1xyXG4gICAgICBfaW1wb3J0UmVzb2x2ZShzdGF0dXMpXHJcbiAgICAgICR0YWJsZS5faW1wb3J0UmVzb2x2ZSA9IG51bGxcclxuICAgIH1cclxuICB9XHJcbiAgZmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSlcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlSW1wb3J0RXZlbnQgKHBhcmFtczogSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMpIHtcclxuICBpZiAocGFyYW1zLm9wdGlvbnMudHlwZSA9PT0gJ3hsc3gnKSB7XHJcbiAgICBpbXBvcnRYTFNYKHBhcmFtcylcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlRXhwb3J0RXZlbnQgKHBhcmFtczogSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMpIHtcclxuICBpZiAocGFyYW1zLm9wdGlvbnMudHlwZSA9PT0gJ3hsc3gnKSB7XHJcbiAgICBleHBvcnRYTFNYKHBhcmFtcylcclxuICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOWfuuS6jiB2eGUtdGFibGUg6KGo5qC855qE5aKe5by65o+S5Lu277yM5pSv5oyB5a+85Ye6IHhsc3gg5qC85byPXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYID0ge1xyXG4gIGluc3RhbGwgKHh0YWJsZTogdHlwZW9mIFZYRVRhYmxlKSB7XHJcbiAgICBjb25zdCB7IGludGVyY2VwdG9yIH0gPSB4dGFibGVcclxuICAgIF92eGV0YWJsZSA9IHh0YWJsZVxyXG4gICAgT2JqZWN0LmFzc2lnbih4dGFibGUudHlwZXMsIHsgeGxzeDogMSB9KVxyXG4gICAgaW50ZXJjZXB0b3IubWl4aW4oe1xyXG4gICAgICAnZXZlbnQuaW1wb3J0JzogaGFuZGxlSW1wb3J0RXZlbnQsXHJcbiAgICAgICdldmVudC5leHBvcnQnOiBoYW5kbGVFeHBvcnRFdmVudFxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuVlhFVGFibGUpIHtcclxuICB3aW5kb3cuVlhFVGFibGUudXNlKFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWClcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYXHJcbiJdfQ==
package/dist/index.js ADDED
@@ -0,0 +1,270 @@
1
+ (function (global, factory) {
2
+ if (typeof define === "function" && define.amd) {
3
+ define("vxe-table-plugin-export-xlsx", ["exports", "xe-utils", "xlsx"], factory);
4
+ } else if (typeof exports !== "undefined") {
5
+ factory(exports, require("xe-utils"), require("xlsx"));
6
+ } else {
7
+ var mod = {
8
+ exports: {}
9
+ };
10
+ factory(mod.exports, global.XEUtils, global.XLSX);
11
+ global.VXETablePluginExportXLSX = mod.exports.default;
12
+ }
13
+ })(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, _xeUtils, _xlsx) {
14
+ "use strict";
15
+
16
+ Object.defineProperty(_exports, "__esModule", {
17
+ value: true
18
+ });
19
+ _exports["default"] = _exports.VXETablePluginExportXLSX = void 0;
20
+ _xeUtils = _interopRequireDefault(_xeUtils);
21
+ _xlsx = _interopRequireDefault(_xlsx);
22
+
23
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
24
+
25
+ /* eslint-disable no-unused-vars */
26
+
27
+ /* eslint-enable no-unused-vars */
28
+ var _vxetable;
29
+
30
+ function getFooterCellValue($table, opts, rows, column) {
31
+ var cellValue = _xeUtils["default"].toString(rows[$table.$getColumnIndex(column)]);
32
+
33
+ return cellValue;
34
+ }
35
+
36
+ function toBuffer(wbout) {
37
+ var buf = new ArrayBuffer(wbout.length);
38
+ var view = new Uint8Array(buf);
39
+
40
+ for (var index = 0; index !== wbout.length; ++index) {
41
+ view[index] = wbout.charCodeAt(index) & 0xFF;
42
+ }
43
+
44
+ return buf;
45
+ }
46
+
47
+ function exportXLSX(params) {
48
+ var $table = params.$table,
49
+ options = params.options,
50
+ columns = params.columns,
51
+ datas = params.datas;
52
+ var sheetName = options.sheetName,
53
+ type = options.type,
54
+ isHeader = options.isHeader,
55
+ isFooter = options.isFooter,
56
+ original = options.original,
57
+ message = options.message,
58
+ footerFilterMethod = options.footerFilterMethod;
59
+ var colHead = {};
60
+ var footList = [];
61
+ var rowList = datas;
62
+
63
+ if (isHeader) {
64
+ columns.forEach(function (column) {
65
+ colHead[column.id] = _xeUtils["default"].toString(original ? column.property : column.getTitle());
66
+ });
67
+ }
68
+
69
+ if (isFooter) {
70
+ var _$table$getTableData = $table.getTableData(),
71
+ footerData = _$table$getTableData.footerData;
72
+
73
+ var footers = footerFilterMethod ? footerData.filter(footerFilterMethod) : footerData;
74
+ footers.forEach(function (rows) {
75
+ var item = {};
76
+ columns.forEach(function (column) {
77
+ item[column.id] = getFooterCellValue($table, options, rows, column);
78
+ });
79
+ footList.push(item);
80
+ });
81
+ }
82
+
83
+ var book = _xlsx["default"].utils.book_new();
84
+
85
+ var sheet = _xlsx["default"].utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList).concat(footList), {
86
+ skipHeader: true
87
+ }); // 转换数据
88
+
89
+
90
+ _xlsx["default"].utils.book_append_sheet(book, sheet, sheetName);
91
+
92
+ var wbout = _xlsx["default"].write(book, {
93
+ bookType: type,
94
+ bookSST: false,
95
+ type: 'binary'
96
+ });
97
+
98
+ var blob = new Blob([toBuffer(wbout)], {
99
+ type: 'application/octet-stream'
100
+ }); // 保存导出
101
+
102
+ downloadFile(blob, options);
103
+
104
+ if (message !== false) {
105
+ _vxetable.modal.message({
106
+ message: _vxetable.t('vxe.table.expSuccess'),
107
+ status: 'success'
108
+ });
109
+ }
110
+ }
111
+
112
+ function downloadFile(blob, options) {
113
+ if (window.Blob) {
114
+ var filename = options.filename,
115
+ type = options.type;
116
+
117
+ if (navigator.msSaveBlob) {
118
+ navigator.msSaveBlob(blob, "".concat(filename, ".").concat(type));
119
+ } else {
120
+ var linkElem = document.createElement('a');
121
+ linkElem.target = '_blank';
122
+ linkElem.download = "".concat(filename, ".").concat(type);
123
+ linkElem.href = URL.createObjectURL(blob);
124
+ document.body.appendChild(linkElem);
125
+ linkElem.click();
126
+ document.body.removeChild(linkElem);
127
+ }
128
+ } else {
129
+ console.error(_vxetable.t('vxe.error.notExp'));
130
+ }
131
+ }
132
+
133
+ function replaceDoubleQuotation(val) {
134
+ return val.replace(/^"/, '').replace(/"$/, '');
135
+ }
136
+
137
+ function parseCsv(columns, content) {
138
+ var list = content.split('\n');
139
+ var fields = [];
140
+ var rows = [];
141
+
142
+ if (list.length) {
143
+ var rList = list.slice(1);
144
+ list[0].split(',').map(replaceDoubleQuotation);
145
+ rList.forEach(function (r) {
146
+ if (r) {
147
+ var item = {};
148
+ r.split(',').forEach(function (val, colIndex) {
149
+ if (fields[colIndex]) {
150
+ item[fields[colIndex]] = replaceDoubleQuotation(val);
151
+ }
152
+ });
153
+ rows.push(item);
154
+ }
155
+ });
156
+ }
157
+
158
+ return {
159
+ fields: fields,
160
+ rows: rows
161
+ };
162
+ }
163
+
164
+ function checkImportData(columns, fields, rows) {
165
+ var tableFields = [];
166
+ columns.forEach(function (column) {
167
+ var field = column.property;
168
+
169
+ if (field) {
170
+ tableFields.push(field);
171
+ }
172
+ });
173
+ return tableFields.every(function (field) {
174
+ return fields.includes(field);
175
+ });
176
+ }
177
+
178
+ function importXLSX(params) {
179
+ var columns = params.columns,
180
+ options = params.options,
181
+ file = params.file;
182
+ var $table = params.$table;
183
+ var _importResolve = $table._importResolve;
184
+ var fileReader = new FileReader();
185
+
186
+ fileReader.onload = function (e) {
187
+ var workbook = _xlsx["default"].read(e.target.result, {
188
+ type: 'binary'
189
+ });
190
+
191
+ var csvData = _xlsx["default"].utils.sheet_to_csv(workbook.Sheets.Sheet1);
192
+
193
+ var _parseCsv = parseCsv(columns, csvData),
194
+ fields = _parseCsv.fields,
195
+ rows = _parseCsv.rows;
196
+
197
+ var status = checkImportData(columns, fields, rows);
198
+
199
+ if (status) {
200
+ $table.createData(rows).then(function (data) {
201
+ if (options.mode === 'append') {
202
+ $table.insertAt(data, -1);
203
+ } else {
204
+ $table.reloadData(data);
205
+ }
206
+ });
207
+
208
+ if (options.message !== false) {
209
+ _vxetable.modal.message({
210
+ message: _xeUtils["default"].template(_vxetable.t('vxe.table.impSuccess'), [rows.length]),
211
+ status: 'success'
212
+ });
213
+ }
214
+ } else if (options.message !== false) {
215
+ _vxetable.modal.message({
216
+ message: _vxetable.t('vxe.error.impFields'),
217
+ status: 'error'
218
+ });
219
+ }
220
+
221
+ if (_importResolve) {
222
+ _importResolve(status);
223
+
224
+ $table._importResolve = null;
225
+ }
226
+ };
227
+
228
+ fileReader.readAsBinaryString(file);
229
+ }
230
+
231
+ function handleImportEvent(params) {
232
+ if (params.options.type === 'xlsx') {
233
+ importXLSX(params);
234
+ return false;
235
+ }
236
+ }
237
+
238
+ function handleExportEvent(params) {
239
+ if (params.options.type === 'xlsx') {
240
+ exportXLSX(params);
241
+ return false;
242
+ }
243
+ }
244
+ /**
245
+ * 基于 vxe-table 表格的增强插件,支持导出 xlsx 格式
246
+ */
247
+
248
+
249
+ var VXETablePluginExportXLSX = {
250
+ install: function install(xtable) {
251
+ var interceptor = xtable.interceptor;
252
+ _vxetable = xtable;
253
+ Object.assign(xtable.types, {
254
+ xlsx: 1
255
+ });
256
+ interceptor.mixin({
257
+ 'event.import': handleImportEvent,
258
+ 'event.export': handleExportEvent
259
+ });
260
+ }
261
+ };
262
+ _exports.VXETablePluginExportXLSX = VXETablePluginExportXLSX;
263
+
264
+ if (typeof window !== 'undefined' && window.VXETable) {
265
+ window.VXETable.use(VXETablePluginExportXLSX);
266
+ }
267
+
268
+ var _default = VXETablePluginExportXLSX;
269
+ _exports["default"] = _default;
270
+ });
@@ -0,0 +1 @@
1
+ !function(e,t){if("function"==typeof define&&define.amd)define("vxe-table-plugin-export-xlsx",["exports","xe-utils","xlsx"],t);else if("undefined"!=typeof exports)t(exports,require("xe-utils"),require("xlsx"));else{var o={exports:{}};t(o.exports,e.XEUtils,e.XLSX),e.VXETablePluginExportXLSX=o.exports.default}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,function(e,h,y){"use strict";function t(e){return e&&e.__esModule?e:{default:e}}var w;function o(e){var i=e.$table,t=e.options,o=e.columns,n=e.datas,a=t.sheetName,r=t.type,s=t.isHeader,l=t.isFooter,u=t.original,f=t.message,c=t.footerFilterMethod,d={},p=[],v=n;if(s&&o.forEach(function(e){d[e.id]=h.default.toString(u?e.property:e.getTitle())}),l){var m=i.getTableData().footerData;(c?m.filter(c):m).forEach(function(a){var r={};o.forEach(function(e){var t,o,n;r[e.id]=(t=i,o=a,n=e,h.default.toString(o[t.$getColumnIndex(n)]))}),p.push(r)})}var x=y.default.utils.book_new(),g=y.default.utils.json_to_sheet((s?[d]:[]).concat(v).concat(p),{skipHeader:!0});y.default.utils.book_append_sheet(x,g,a);var b=y.default.write(x,{bookType:r,bookSST:!1,type:"binary"});!function(e,t){if(window.Blob){var o=t.filename,n=t.type;if(navigator.msSaveBlob)navigator.msSaveBlob(e,"".concat(o,".").concat(n));else{var a=document.createElement("a");a.target="_blank",a.download="".concat(o,".").concat(n),a.href=URL.createObjectURL(e),document.body.appendChild(a),a.click(),document.body.removeChild(a)}}else console.error(w.t("vxe.error.notExp"))}(new Blob([function(e){for(var t=new ArrayBuffer(e.length),o=new Uint8Array(t),n=0;n!==e.length;++n)o[n]=255&e.charCodeAt(n);return t}(b)],{type:"application/octet-stream"}),t),!1!==f&&w.modal.message({message:w.t("vxe.table.expSuccess"),status:"success"})}function d(e){return e.replace(/^"/,"").replace(/"$/,"")}function n(e){var l=e.columns,u=e.options,t=e.file,f=e.$table,c=f._importResolve,o=new FileReader;o.onload=function(e){var t,o,n=y.default.read(e.target.result,{type:"binary"}),a=function(e){var t=e.split("\n"),n=[],a=[];if(t.length){var o=t.slice(1);t[0].split(",").map(d),o.forEach(function(e){if(e){var o={};e.split(",").forEach(function(e,t){n[t]&&(o[n[t]]=d(e))}),a.push(o)}})}return{fields:n,rows:a}}(y.default.utils.sheet_to_csv(n.Sheets.Sheet1)),r=a.fields,i=a.rows,s=(t=r,o=[],l.forEach(function(e){var t=e.property;t&&o.push(t)}),o.every(function(e){return t.includes(e)}));s?(f.createData(i).then(function(e){"append"===u.mode?f.insertAt(e,-1):f.reloadData(e)}),!1!==u.message&&w.modal.message({message:h.default.template(w.t("vxe.table.impSuccess"),[i.length]),status:"success"})):!1!==u.message&&w.modal.message({message:w.t("vxe.error.impFields"),status:"error"}),c&&(c(s),f._importResolve=null)},o.readAsBinaryString(t)}function a(e){if("xlsx"===e.options.type)return n(e),!1}function r(e){if("xlsx"===e.options.type)return o(e),!1}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.VXETablePluginExportXLSX=void 0,h=t(h),y=t(y);var i={install:function(e){var t=e.interceptor;w=e,Object.assign(e.types,{xlsx:1}),t.mixin({"event.import":a,"event.export":r})}};e.VXETablePluginExportXLSX=i,"undefined"!=typeof window&&window.VXETable&&window.VXETable.use(i);var s=i;e.default=s});