amis 1.8.0-beta.13 → 1.8.0-beta.17
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/lib/WithStore.js +1 -1
- package/lib/WithStore.js.map +2 -2
- package/lib/components/DatePicker.js +3 -1
- package/lib/components/DatePicker.js.map +2 -2
- package/lib/components/Progress.js +3 -4
- package/lib/components/Progress.js.map +2 -2
- package/lib/components/TabsTransfer.d.ts +22 -3
- package/lib/components/TabsTransfer.js +149 -42
- package/lib/components/TabsTransfer.js.map +2 -2
- package/lib/components/Tree.js +3 -1
- package/lib/components/Tree.js.map +2 -2
- package/lib/components/formula/Editor.js +4 -4
- package/lib/components/formula/Editor.js.map +2 -2
- package/lib/components/formula/VariableList.d.ts +63 -4
- package/lib/components/formula/VariableList.js +23 -8
- package/lib/components/formula/VariableList.js.map +2 -2
- package/lib/helper.css +1 -1
- package/lib/helper.css.map +1 -1
- package/lib/index.js +1 -1
- package/lib/renderers/Date.js +6 -1
- package/lib/renderers/Date.js.map +2 -2
- package/lib/renderers/Form/NestedSelect.d.ts +1 -1
- package/lib/renderers/Form/NestedSelect.js +7 -2
- package/lib/renderers/Form/NestedSelect.js.map +2 -2
- package/lib/renderers/Form/TabsTransfer.d.ts +6 -1
- package/lib/renderers/Form/TabsTransfer.js +155 -6
- package/lib/renderers/Form/TabsTransfer.js.map +2 -2
- package/lib/renderers/Form/TabsTransferPicker.d.ts +2 -2
- package/lib/renderers/Form/TabsTransferPicker.js +4 -4
- package/lib/renderers/Form/TabsTransferPicker.js.map +2 -2
- package/lib/renderers/Form/TreeSelect.js.map +2 -2
- package/lib/renderers/Form/index.js +6 -2
- package/lib/renderers/Form/index.js.map +2 -2
- package/lib/renderers/Markdown.js +4 -3
- package/lib/renderers/Markdown.js.map +2 -2
- package/lib/renderers/Nav.d.ts +21 -20
- package/lib/renderers/Nav.js +8 -1
- package/lib/renderers/Nav.js.map +2 -2
- package/lib/renderers/Page.js +1 -1
- package/lib/renderers/Page.js.map +2 -2
- package/lib/renderers/Service.js +1 -1
- package/lib/renderers/Service.js.map +2 -2
- package/lib/renderers/Table/exportExcel.d.ts +6 -0
- package/lib/renderers/Table/exportExcel.js +288 -0
- package/lib/renderers/Table/exportExcel.js.map +13 -0
- package/lib/renderers/Table/index.d.ts +1 -1
- package/lib/renderers/Table/index.js +4 -251
- package/lib/renderers/Table/index.js.map +2 -2
- package/lib/themes/ang-ie11.css +112 -36
- package/lib/themes/ang.css +100 -21
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +112 -36
- package/lib/themes/antd.css +100 -21
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +97 -21
- package/lib/themes/cxd.css +100 -21
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +112 -36
- package/lib/themes/dark.css +100 -21
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default-ie11.css +97 -21
- package/lib/themes/default.css +100 -21
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/api.js +35 -6
- package/lib/utils/api.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +1 -1
- package/scss/_properties.scss +4 -0
- package/scss/components/_formula.scss +77 -12
- package/scss/components/_progress.scss +2 -7
- package/scss/components/form/_date.scss +1 -0
- package/scss/components/form/_transfer.scss +21 -0
- package/scss/helper/layout/_display.scss +1 -1
- package/sdk/ang-ie11.css +130 -36
- package/sdk/ang.css +118 -21
- package/sdk/antd-ie11.css +130 -36
- package/sdk/antd.css +118 -21
- package/sdk/barcode.js +51 -51
- package/sdk/charts.js +14 -14
- package/sdk/codemirror.js +7 -7
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +115 -21
- package/sdk/cxd.css +118 -21
- package/sdk/dark-ie11.css +130 -36
- package/sdk/dark.css +118 -21
- package/sdk/exceljs.js +1 -1
- package/sdk/helper.css +1 -1
- package/sdk/helper.css.map +1 -1
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +17 -17
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +115 -21
- package/sdk/sdk.css +118 -21
- package/sdk/sdk.js +1270 -1268
- package/sdk/thirds/hls.js/hls.js +1 -1
- package/sdk/thirds/mpegts.js/mpegts.js +1 -1
- package/sdk/tinymce.js +57 -57
- package/src/WithStore.tsx +1 -1
- package/src/components/DatePicker.tsx +2 -1
- package/src/components/Progress.tsx +6 -4
- package/src/components/TabsTransfer.tsx +253 -143
- package/src/components/Tree.tsx +3 -1
- package/src/components/formula/Editor.tsx +12 -5
- package/src/components/formula/VariableList.tsx +55 -21
- package/src/renderers/Date.tsx +14 -1
- package/src/renderers/Form/NestedSelect.tsx +11 -2
- package/src/renderers/Form/TabsTransfer.tsx +174 -11
- package/src/renderers/Form/TabsTransferPicker.tsx +5 -10
- package/src/renderers/Form/TreeSelect.tsx +15 -12
- package/src/renderers/Form/index.tsx +37 -16
- package/src/renderers/Markdown.tsx +4 -5
- package/src/renderers/Nav.tsx +7 -1
- package/src/renderers/Page.tsx +9 -2
- package/src/renderers/Service.tsx +8 -2
- package/src/renderers/Table/exportExcel.ts +289 -0
- package/src/renderers/Table/index.tsx +5 -252
- package/src/utils/api.ts +42 -10
@@ -0,0 +1,288 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* 导出 Excel 功能
|
4
|
+
*/
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.exportExcel = void 0;
|
7
|
+
var tslib_1 = require("tslib");
|
8
|
+
var tpl_1 = require("../../utils/tpl");
|
9
|
+
require("./ColumnToggler");
|
10
|
+
var table_1 = require("../../store/table");
|
11
|
+
var file_saver_1 = require("file-saver");
|
12
|
+
var helper_1 = require("../../utils/helper");
|
13
|
+
var tpl_builtin_1 = require("../../utils/tpl-builtin");
|
14
|
+
var image_1 = require("../../utils/image");
|
15
|
+
var mobx_state_tree_1 = require("mobx-state-tree");
|
16
|
+
var moment_1 = (0, tslib_1.__importDefault)(require("moment"));
|
17
|
+
/**
|
18
|
+
* 将 url 转成绝对地址
|
19
|
+
*/
|
20
|
+
var getAbsoluteUrl = (function () {
|
21
|
+
var link;
|
22
|
+
return function (url) {
|
23
|
+
if (!link)
|
24
|
+
link = document.createElement('a');
|
25
|
+
link.href = url;
|
26
|
+
return link.href;
|
27
|
+
};
|
28
|
+
})();
|
29
|
+
function exportExcel(ExcelJS, props, toolbar) {
|
30
|
+
var _a, _b;
|
31
|
+
return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
|
32
|
+
var store, env, cx, __, data, columns, rows, tmpStore, filename, res, workbook, worksheet, exportColumnNames, filteredColumns, firstRowLabels, firstRow, remoteMappingCache, rowIndex, _i, rows_1, row, sheetRow, columIndex, _c, filteredColumns_1, column, name, value, type, imageData, imageDimensions, imageWidth, imageHeight, imageMaxSize, imageMatch, imageExt, imageId, linkURL, e_1, linkURL, map, source, sourceValue, mapKey, res, viewValue, viewValue, _d, fromNow, _e, format, _f, valueFormat, ISODate, NormalDate, buffer, blob;
|
33
|
+
return (0, tslib_1.__generator)(this, function (_g) {
|
34
|
+
switch (_g.label) {
|
35
|
+
case 0:
|
36
|
+
store = props.store, env = props.env, cx = props.classnames, __ = props.translate, data = props.data;
|
37
|
+
columns = store.filteredColumns || [];
|
38
|
+
rows = [];
|
39
|
+
filename = 'data';
|
40
|
+
if (!(typeof toolbar === 'object' && toolbar.api)) return [3 /*break*/, 2];
|
41
|
+
return [4 /*yield*/, env.fetcher(toolbar.api, data)];
|
42
|
+
case 1:
|
43
|
+
res = _g.sent();
|
44
|
+
if (!res.data) {
|
45
|
+
env.notify('warning', __('placeholder.noData'));
|
46
|
+
return [2 /*return*/];
|
47
|
+
}
|
48
|
+
if (Array.isArray(res.data)) {
|
49
|
+
rows = res.data;
|
50
|
+
}
|
51
|
+
else {
|
52
|
+
rows = res.data.rows || res.data.items;
|
53
|
+
}
|
54
|
+
// 因为很多方法是 store 里的,所以需要构建 store 来处理
|
55
|
+
tmpStore = table_1.TableStore.create((0, mobx_state_tree_1.getSnapshot)(store));
|
56
|
+
tmpStore.initRows(rows);
|
57
|
+
rows = tmpStore.rows;
|
58
|
+
return [3 /*break*/, 3];
|
59
|
+
case 2:
|
60
|
+
rows = store.rows;
|
61
|
+
_g.label = 3;
|
62
|
+
case 3:
|
63
|
+
if (typeof toolbar === 'object' && toolbar.filename) {
|
64
|
+
filename = (0, tpl_1.filter)(toolbar.filename, data, '| raw');
|
65
|
+
}
|
66
|
+
if (rows.length === 0) {
|
67
|
+
env.notify('warning', __('placeholder.noData'));
|
68
|
+
return [2 /*return*/];
|
69
|
+
}
|
70
|
+
workbook = new ExcelJS.Workbook();
|
71
|
+
worksheet = workbook.addWorksheet('sheet', {
|
72
|
+
properties: { defaultColWidth: 15 }
|
73
|
+
});
|
74
|
+
worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];
|
75
|
+
exportColumnNames = toolbar.columns;
|
76
|
+
if ((0, tpl_builtin_1.isPureVariable)(exportColumnNames)) {
|
77
|
+
exportColumnNames = (0, tpl_builtin_1.resolveVariableAndFilter)(exportColumnNames, data, '| raw');
|
78
|
+
}
|
79
|
+
// 自定义导出列配置
|
80
|
+
if (toolbar.exportColumns && Array.isArray(toolbar.exportColumns)) {
|
81
|
+
columns = toolbar.exportColumns;
|
82
|
+
}
|
83
|
+
filteredColumns = exportColumnNames
|
84
|
+
? columns.filter(function (column) {
|
85
|
+
var filterColumnsNames = exportColumnNames;
|
86
|
+
if (column.name && filterColumnsNames.indexOf(column.name) !== -1) {
|
87
|
+
return true;
|
88
|
+
}
|
89
|
+
return false;
|
90
|
+
})
|
91
|
+
: columns;
|
92
|
+
firstRowLabels = filteredColumns.map(function (column) {
|
93
|
+
return column.label;
|
94
|
+
});
|
95
|
+
firstRow = worksheet.getRow(1);
|
96
|
+
firstRow.values = firstRowLabels;
|
97
|
+
worksheet.autoFilter = {
|
98
|
+
from: {
|
99
|
+
row: 1,
|
100
|
+
column: 1
|
101
|
+
},
|
102
|
+
to: {
|
103
|
+
row: 1,
|
104
|
+
column: firstRowLabels.length
|
105
|
+
}
|
106
|
+
};
|
107
|
+
remoteMappingCache = {};
|
108
|
+
rowIndex = 1;
|
109
|
+
_i = 0, rows_1 = rows;
|
110
|
+
_g.label = 4;
|
111
|
+
case 4:
|
112
|
+
if (!(_i < rows_1.length)) return [3 /*break*/, 19];
|
113
|
+
row = rows_1[_i];
|
114
|
+
rowIndex += 1;
|
115
|
+
sheetRow = worksheet.getRow(rowIndex);
|
116
|
+
columIndex = 0;
|
117
|
+
_c = 0, filteredColumns_1 = filteredColumns;
|
118
|
+
_g.label = 5;
|
119
|
+
case 5:
|
120
|
+
if (!(_c < filteredColumns_1.length)) return [3 /*break*/, 18];
|
121
|
+
column = filteredColumns_1[_c];
|
122
|
+
columIndex += 1;
|
123
|
+
name = column.name;
|
124
|
+
value = (0, helper_1.getVariable)(row.data, name);
|
125
|
+
if (typeof value === 'undefined' && !column.tpl) {
|
126
|
+
return [3 /*break*/, 17];
|
127
|
+
}
|
128
|
+
// 处理合并单元格
|
129
|
+
if (name in row.rowSpans) {
|
130
|
+
if (row.rowSpans[name] === 0) {
|
131
|
+
return [3 /*break*/, 17];
|
132
|
+
}
|
133
|
+
else {
|
134
|
+
// start row, start column, end row, end column
|
135
|
+
worksheet.mergeCells(rowIndex, columIndex, rowIndex + row.rowSpans[name] - 1, columIndex);
|
136
|
+
}
|
137
|
+
}
|
138
|
+
type = column.type || 'plain';
|
139
|
+
if (!(type === 'image' && value)) return [3 /*break*/, 11];
|
140
|
+
_g.label = 6;
|
141
|
+
case 6:
|
142
|
+
_g.trys.push([6, 9, , 10]);
|
143
|
+
return [4 /*yield*/, (0, image_1.toDataURL)(value)];
|
144
|
+
case 7:
|
145
|
+
imageData = _g.sent();
|
146
|
+
return [4 /*yield*/, (0, image_1.getImageDimensions)(imageData)];
|
147
|
+
case 8:
|
148
|
+
imageDimensions = _g.sent();
|
149
|
+
imageWidth = imageDimensions.width;
|
150
|
+
imageHeight = imageDimensions.height;
|
151
|
+
imageMaxSize = 100;
|
152
|
+
if (imageWidth > imageHeight) {
|
153
|
+
if (imageWidth > imageMaxSize) {
|
154
|
+
imageHeight = (imageMaxSize * imageHeight) / imageWidth;
|
155
|
+
imageWidth = imageMaxSize;
|
156
|
+
}
|
157
|
+
}
|
158
|
+
else {
|
159
|
+
if (imageHeight > imageMaxSize) {
|
160
|
+
imageWidth = (imageMaxSize * imageWidth) / imageHeight;
|
161
|
+
imageHeight = imageMaxSize;
|
162
|
+
}
|
163
|
+
}
|
164
|
+
imageMatch = imageData.match(/data:image\/(.*);/);
|
165
|
+
imageExt = 'png';
|
166
|
+
if (imageMatch) {
|
167
|
+
imageExt = imageMatch[1];
|
168
|
+
}
|
169
|
+
// 目前 excel 只支持这些格式,所以其它格式直接输出 url
|
170
|
+
if (imageExt != 'png' && imageExt != 'jpeg' && imageExt != 'gif') {
|
171
|
+
sheetRow.getCell(columIndex).value = value;
|
172
|
+
return [3 /*break*/, 17];
|
173
|
+
}
|
174
|
+
imageId = workbook.addImage({
|
175
|
+
base64: imageData,
|
176
|
+
extension: imageExt
|
177
|
+
});
|
178
|
+
linkURL = getAbsoluteUrl(value);
|
179
|
+
worksheet.addImage(imageId, {
|
180
|
+
// 这里坐标位置是从 0 开始的,所以要减一
|
181
|
+
tl: { col: columIndex - 1, row: rowIndex - 1 },
|
182
|
+
ext: {
|
183
|
+
width: imageWidth,
|
184
|
+
height: imageHeight
|
185
|
+
},
|
186
|
+
hyperlinks: {
|
187
|
+
tooltip: linkURL
|
188
|
+
}
|
189
|
+
});
|
190
|
+
return [3 /*break*/, 10];
|
191
|
+
case 9:
|
192
|
+
e_1 = _g.sent();
|
193
|
+
console.warn(e_1.stack);
|
194
|
+
return [3 /*break*/, 10];
|
195
|
+
case 10: return [3 /*break*/, 17];
|
196
|
+
case 11:
|
197
|
+
if (!(type == 'link')) return [3 /*break*/, 12];
|
198
|
+
linkURL = getAbsoluteUrl(value);
|
199
|
+
sheetRow.getCell(columIndex).value = {
|
200
|
+
text: value,
|
201
|
+
hyperlink: linkURL
|
202
|
+
};
|
203
|
+
return [3 /*break*/, 17];
|
204
|
+
case 12:
|
205
|
+
if (!(type === 'mapping')) return [3 /*break*/, 16];
|
206
|
+
map = column.map;
|
207
|
+
source = column.source;
|
208
|
+
if (!source) return [3 /*break*/, 15];
|
209
|
+
sourceValue = source;
|
210
|
+
if ((0, tpl_builtin_1.isPureVariable)(source)) {
|
211
|
+
sourceValue = (0, tpl_builtin_1.resolveVariableAndFilter)(source, data, '| raw');
|
212
|
+
}
|
213
|
+
mapKey = JSON.stringify(source);
|
214
|
+
if (!(mapKey in remoteMappingCache)) return [3 /*break*/, 13];
|
215
|
+
map = remoteMappingCache[mapKey];
|
216
|
+
return [3 /*break*/, 15];
|
217
|
+
case 13: return [4 /*yield*/, env.fetcher(sourceValue, data)];
|
218
|
+
case 14:
|
219
|
+
res = _g.sent();
|
220
|
+
if (res.data) {
|
221
|
+
remoteMappingCache[mapKey] = res.data;
|
222
|
+
map = res.data;
|
223
|
+
}
|
224
|
+
_g.label = 15;
|
225
|
+
case 15:
|
226
|
+
if (typeof value !== 'undefined' && map && ((_a = map[value]) !== null && _a !== void 0 ? _a : map['*'])) {
|
227
|
+
viewValue = (_b = map[value]) !== null && _b !== void 0 ? _b : (value === true && map['1']
|
228
|
+
? map['1']
|
229
|
+
: value === false && map['0']
|
230
|
+
? map['0']
|
231
|
+
: map['*']);
|
232
|
+
sheetRow.getCell(columIndex).value = (0, helper_1.removeHTMLTag)(viewValue);
|
233
|
+
}
|
234
|
+
else {
|
235
|
+
sheetRow.getCell(columIndex).value = (0, helper_1.removeHTMLTag)(value);
|
236
|
+
}
|
237
|
+
return [3 /*break*/, 17];
|
238
|
+
case 16:
|
239
|
+
if (type === 'date') {
|
240
|
+
viewValue = void 0;
|
241
|
+
_d = column, fromNow = _d.fromNow, _e = _d.format, format = _e === void 0 ? 'YYYY-MM-DD' : _e, _f = _d.valueFormat, valueFormat = _f === void 0 ? 'X' : _f;
|
242
|
+
if (value) {
|
243
|
+
ISODate = (0, moment_1.default)(value, moment_1.default.ISO_8601);
|
244
|
+
NormalDate = (0, moment_1.default)(value, valueFormat);
|
245
|
+
viewValue = ISODate.isValid()
|
246
|
+
? ISODate.format(format)
|
247
|
+
: NormalDate.isValid()
|
248
|
+
? NormalDate.format(format)
|
249
|
+
: false;
|
250
|
+
}
|
251
|
+
if (fromNow) {
|
252
|
+
viewValue = (0, moment_1.default)(value).fromNow();
|
253
|
+
}
|
254
|
+
if (viewValue) {
|
255
|
+
sheetRow.getCell(columIndex).value = viewValue;
|
256
|
+
}
|
257
|
+
}
|
258
|
+
else {
|
259
|
+
if (column.tpl) {
|
260
|
+
sheetRow.getCell(columIndex).value = (0, helper_1.removeHTMLTag)((0, tpl_1.filter)(column.tpl, (0, helper_1.createObject)(data, row.data)));
|
261
|
+
}
|
262
|
+
else {
|
263
|
+
sheetRow.getCell(columIndex).value = value;
|
264
|
+
}
|
265
|
+
}
|
266
|
+
_g.label = 17;
|
267
|
+
case 17:
|
268
|
+
_c++;
|
269
|
+
return [3 /*break*/, 5];
|
270
|
+
case 18:
|
271
|
+
_i++;
|
272
|
+
return [3 /*break*/, 4];
|
273
|
+
case 19: return [4 /*yield*/, workbook.xlsx.writeBuffer()];
|
274
|
+
case 20:
|
275
|
+
buffer = _g.sent();
|
276
|
+
if (buffer) {
|
277
|
+
blob = new Blob([buffer], {
|
278
|
+
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
279
|
+
});
|
280
|
+
(0, file_saver_1.saveAs)(blob, filename + '.xlsx');
|
281
|
+
}
|
282
|
+
return [2 /*return*/];
|
283
|
+
}
|
284
|
+
});
|
285
|
+
});
|
286
|
+
}
|
287
|
+
exports.exportExcel = exportExcel;
|
288
|
+
//# sourceMappingURL=./renderers/Table/exportExcel.js.map
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{
|
2
|
+
"version": 3,
|
3
|
+
"file": "exportExcel.js",
|
4
|
+
"sourceRoot": "",
|
5
|
+
"sources": [
|
6
|
+
"/src/renderers/Table/exportExcel.ts"
|
7
|
+
],
|
8
|
+
"names": [],
|
9
|
+
"mappings": ";AAAA;;GAEG;;;;AAEH,uCAAuC;AACvC,2BAAyB;AACzB,2CAA6C;AAC7C,yCAAkC;AAClC,6CAA4E;AAC5E,uDAGiC;AAEjC,2CAAgE;AAGhE,mDAA4C;AAE5C,+DAA4B;AAG5B;;GAEG;AACH,IAAM,cAAc,GAAG,CAAC;IACtB,IAAI,IAAuB,CAAC;IAC5B,OAAO,UAAU,GAAW;QAC1B,IAAI,CAAC,IAAI;YAAE,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC,CAAC,EAAE,CAAC;AAEL,SAAsB,WAAW,CAC/B,OAAY,EACZ,KAAiB,EACjB,OAA2B;;;;;;;oBAEpB,KAAK,GAA8C,KAAK,MAAnD,EAAE,GAAG,GAAyC,KAAK,IAA9C,EAAc,EAAE,GAAyB,KAAK,WAA9B,EAAa,EAAE,GAAU,KAAK,UAAf,EAAE,IAAI,GAAI,KAAK,KAAT,CAAU;oBAC5D,OAAO,GAAG,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;oBAEtC,IAAI,GAAG,EAAE,CAAC;oBAEV,QAAQ,GAAG,MAAM,CAAC;yBAElB,CAAA,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAA,EAA1C,wBAA0C;oBAChC,qBAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAA;;oBAA1C,GAAG,GAAG,SAAoC;oBAChD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;wBACb,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;wBAChD,sBAAO;qBACR;oBACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;wBAC3B,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;qBACjB;yBAAM;wBACL,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;qBACxC;oBACD,oCAAoC;oBACpC,QAAQ,GAAG,kBAAU,CAAC,MAAM,CAAC,IAAA,6BAAW,EAAC,KAAK,CAAC,CAAC,CAAC;oBACjD,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;oBACxB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;;;oBAErB,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;;;oBAGpB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE;wBACnD,QAAQ,GAAG,IAAA,YAAM,EAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;qBACpD;oBAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;wBACrB,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;wBAChD,sBAAO;qBACR;oBAEK,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAClC,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE;wBAC/C,UAAU,EAAE,EAAC,eAAe,EAAE,EAAE,EAAC;qBAClC,CAAC,CAAC;oBACH,SAAS,CAAC,KAAK,GAAG,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;oBAExD,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;oBAExC,IAAI,IAAA,4BAAc,EAAC,iBAAiB,CAAC,EAAE;wBACrC,iBAAiB,GAAG,IAAA,sCAAwB,EAC1C,iBAAiB,EACjB,IAAI,EACJ,OAAO,CACR,CAAC;qBACH;oBAED,WAAW;oBACX,IAAI,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;wBACjE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;qBACjC;oBAEK,eAAe,GAAG,iBAAiB;wBACvC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM;4BACnB,IAAM,kBAAkB,GAAG,iBAAkB,CAAC;4BAC9C,IAAI,MAAM,CAAC,IAAI,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;gCACjE,OAAO,IAAI,CAAC;6BACb;4BACD,OAAO,KAAK,CAAC;wBACf,CAAC,CAAC;wBACJ,CAAC,CAAC,OAAO,CAAC;oBAEN,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,UAAA,MAAM;wBAC/C,OAAO,MAAM,CAAC,KAAK,CAAC;oBACtB,CAAC,CAAC,CAAC;oBACG,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACrC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC;oBACjC,SAAS,CAAC,UAAU,GAAG;wBACrB,IAAI,EAAE;4BACJ,GAAG,EAAE,CAAC;4BACN,MAAM,EAAE,CAAC;yBACV;wBACD,EAAE,EAAE;4BACF,GAAG,EAAE,CAAC;4BACN,MAAM,EAAE,cAAc,CAAC,MAAM;yBAC9B;qBACF,CAAC;oBAEI,kBAAkB,GAAQ,EAAE,CAAC;oBAE/B,QAAQ,GAAG,CAAC,CAAC;0BACK,EAAJ,aAAI;;;yBAAJ,CAAA,kBAAI,CAAA;oBAAX,GAAG;oBACZ,QAAQ,IAAI,CAAC,CAAC;oBACR,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACxC,UAAU,GAAG,CAAC,CAAC;0BACiB,EAAf,mCAAe;;;yBAAf,CAAA,6BAAe,CAAA;oBAAzB,MAAM;oBACf,UAAU,IAAI,CAAC,CAAC;oBACV,IAAI,GAAG,MAAM,CAAC,IAAK,CAAC;oBACpB,KAAK,GAAG,IAAA,oBAAW,EAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC1C,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,CAAE,MAAoB,CAAC,GAAG,EAAE;wBAC9D,yBAAS;qBACV;oBACD,UAAU;oBACV,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE;wBACxB,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;4BAC5B,yBAAS;yBACV;6BAAM;4BACL,+CAA+C;4BAC/C,SAAS,CAAC,UAAU,CAClB,QAAQ,EACR,UAAU,EACV,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EACjC,UAAU,CACX,CAAC;yBACH;qBACF;oBAEK,IAAI,GAAI,MAAqB,CAAC,IAAI,IAAI,OAAO,CAAC;yBAEhD,CAAA,IAAI,KAAK,OAAO,IAAI,KAAK,CAAA,EAAzB,yBAAyB;;;;oBAEP,qBAAM,IAAA,iBAAS,EAAC,KAAK,CAAC,EAAA;;oBAAlC,SAAS,GAAG,SAAsB;oBAChB,qBAAM,IAAA,0BAAkB,EAAC,SAAS,CAAC,EAAA;;oBAArD,eAAe,GAAG,SAAmC;oBACvD,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC;oBACnC,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;oBAEnC,YAAY,GAAG,GAAG,CAAC;oBACzB,IAAI,UAAU,GAAG,WAAW,EAAE;wBAC5B,IAAI,UAAU,GAAG,YAAY,EAAE;4BAC7B,WAAW,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,UAAU,CAAC;4BACxD,UAAU,GAAG,YAAY,CAAC;yBAC3B;qBACF;yBAAM;wBACL,IAAI,WAAW,GAAG,YAAY,EAAE;4BAC9B,UAAU,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC;4BACvD,WAAW,GAAG,YAAY,CAAC;yBAC5B;qBACF;oBACK,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;oBACpD,QAAQ,GAAG,KAAK,CAAC;oBACrB,IAAI,UAAU,EAAE;wBACd,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;qBAC1B;oBACD,kCAAkC;oBAClC,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI,KAAK,EAAE;wBAChE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;wBAC3C,yBAAS;qBACV;oBACK,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC;wBAChC,MAAM,EAAE,SAAS;wBACjB,SAAS,EAAE,QAAQ;qBACpB,CAAC,CAAC;oBACG,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;wBAC1B,uBAAuB;wBACvB,EAAE,EAAE,EAAC,GAAG,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,EAAE,QAAQ,GAAG,CAAC,EAAC;wBAC5C,GAAG,EAAE;4BACH,KAAK,EAAE,UAAU;4BACjB,MAAM,EAAE,WAAW;yBACpB;wBACD,UAAU,EAAE;4BACV,OAAO,EAAE,OAAO;yBACjB;qBACF,CAAC,CAAC;;;;oBAEH,OAAO,CAAC,IAAI,CAAC,GAAC,CAAC,KAAK,CAAC,CAAC;;;;yBAEf,CAAA,IAAI,IAAI,MAAM,CAAA,EAAd,yBAAc;oBACjB,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;oBACtC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG;wBACnC,IAAI,EAAE,KAAK;wBACX,SAAS,EAAE,OAAO;qBACnB,CAAC;;;yBACO,CAAA,IAAI,KAAK,SAAS,CAAA,EAAlB,yBAAkB;oBAEvB,GAAG,GAAI,MAAwB,CAAC,GAAG,CAAC;oBAClC,MAAM,GAAI,MAAwB,CAAC,MAAM,CAAC;yBAC5C,MAAM,EAAN,yBAAM;oBACJ,WAAW,GAAG,MAAM,CAAC;oBACzB,IAAI,IAAA,4BAAc,EAAC,MAAM,CAAC,EAAE;wBAC1B,WAAW,GAAG,IAAA,sCAAwB,EACpC,MAAgB,EAChB,IAAI,EACJ,OAAO,CACR,CAAC;qBACH;oBAEK,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;yBAClC,CAAA,MAAM,IAAI,kBAAkB,CAAA,EAA5B,yBAA4B;oBAC9B,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;;yBAErB,qBAAM,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAA;;oBAA1C,GAAG,GAAG,SAAoC;oBAChD,IAAI,GAAG,CAAC,IAAI,EAAE;wBACZ,kBAAkB,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;wBACtC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;qBAChB;;;oBAIL,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,GAAG,IAAI,CAAC,MAAA,GAAG,CAAC,KAAK,CAAC,mCAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE;wBAC7D,SAAS,GACb,MAAA,GAAG,CAAC,KAAK,CAAC,mCACV,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC;4BACzB,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;4BACV,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,CAAC;gCAC7B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;gCACV,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;wBAChB,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,IAAA,sBAAa,EAAC,SAAS,CAAC,CAAC;qBAC/D;yBAAM;wBACL,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,IAAA,sBAAa,EAAC,KAAK,CAAC,CAAC;qBAC3D;;;oBACI,IAAI,IAAI,KAAK,MAAM,EAAE;wBACtB,SAAS,SAAA,CAAC;wBACR,KAIF,MAAoB,EAHtB,OAAO,aAAA,EACP,cAAqB,EAArB,MAAM,mBAAG,YAAY,KAAA,EACrB,mBAAiB,EAAjB,WAAW,mBAAG,GAAG,KAAA,CACM;wBACzB,IAAI,KAAK,EAAE;4BACL,OAAO,GAAG,IAAA,gBAAM,EAAC,KAAK,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC;4BACzC,UAAU,GAAG,IAAA,gBAAM,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;4BAE5C,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE;gCAC3B,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;gCACxB,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE;oCACtB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;oCAC3B,CAAC,CAAC,KAAK,CAAC;yBACX;wBAED,IAAI,OAAO,EAAE;4BACX,SAAS,GAAG,IAAA,gBAAM,EAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;yBACrC;wBACD,IAAI,SAAS,EAAE;4BACb,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;yBAChD;qBACF;yBAAM;wBACL,IAAK,MAAoB,CAAC,GAAG,EAAE;4BAC7B,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,IAAA,sBAAa,EAChD,IAAA,YAAM,EAAE,MAAoB,CAAC,GAAG,EAAE,IAAA,qBAAY,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAChE,CAAC;yBACH;6BAAM;4BACL,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;yBAC5C;qBACF;;;oBApJkB,IAAe,CAAA;;;oBAJpB,IAAI,CAAA;;yBA4JP,qBAAM,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAA;;oBAA1C,MAAM,GAAG,SAAiC;oBAEhD,IAAI,MAAM,EAAE;wBACN,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;4BAC5B,IAAI,EAAE,mEAAmE;yBAC1E,CAAC,CAAC;wBACH,IAAA,mBAAM,EAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;qBAClC;;;;;CACF;AA9PD,kCA8PC",
|
10
|
+
"sourcesContent": [
|
11
|
+
"/**\n * 导出 Excel 功能\n */\n\nimport {filter} from '../../utils/tpl';\nimport './ColumnToggler';\nimport {TableStore} from '../../store/table';\nimport {saveAs} from 'file-saver';\nimport {getVariable, removeHTMLTag, createObject} from '../../utils/helper';\nimport {\n isPureVariable,\n resolveVariableAndFilter\n} from '../../utils/tpl-builtin';\nimport {BaseSchema} from '../../Schema';\nimport {toDataURL, getImageDimensions} from '../../utils/image';\nimport {TplSchema} from '../Tpl';\nimport {MappingSchema} from '../Mapping';\nimport {getSnapshot} from 'mobx-state-tree';\nimport {DateSchema} from '../Date';\nimport moment from 'moment';\nimport type {TableProps, ExportExcelToolbar} from './index';\n\n/**\n * 将 url 转成绝对地址\n */\nconst getAbsoluteUrl = (function () {\n let link: HTMLAnchorElement;\n return function (url: string) {\n if (!link) link = document.createElement('a');\n link.href = url;\n return link.href;\n };\n})();\n\nexport async function exportExcel(\n ExcelJS: any,\n props: TableProps,\n toolbar: ExportExcelToolbar\n) {\n const {store, env, classnames: cx, translate: __, data} = props;\n let columns = store.filteredColumns || [];\n\n let rows = [];\n let tmpStore;\n let filename = 'data';\n // 支持配置 api 远程获取\n if (typeof toolbar === 'object' && toolbar.api) {\n const res = await env.fetcher(toolbar.api, data);\n if (!res.data) {\n env.notify('warning', __('placeholder.noData'));\n return;\n }\n if (Array.isArray(res.data)) {\n rows = res.data;\n } else {\n rows = res.data.rows || res.data.items;\n }\n // 因为很多方法是 store 里的,所以需要构建 store 来处理\n tmpStore = TableStore.create(getSnapshot(store));\n tmpStore.initRows(rows);\n rows = tmpStore.rows;\n } else {\n rows = store.rows;\n }\n\n if (typeof toolbar === 'object' && toolbar.filename) {\n filename = filter(toolbar.filename, data, '| raw');\n }\n\n if (rows.length === 0) {\n env.notify('warning', __('placeholder.noData'));\n return;\n }\n\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet('sheet', {\n properties: {defaultColWidth: 15}\n });\n worksheet.views = [{state: 'frozen', xSplit: 0, ySplit: 1}];\n\n let exportColumnNames = toolbar.columns;\n\n if (isPureVariable(exportColumnNames)) {\n exportColumnNames = resolveVariableAndFilter(\n exportColumnNames,\n data,\n '| raw'\n );\n }\n\n // 自定义导出列配置\n if (toolbar.exportColumns && Array.isArray(toolbar.exportColumns)) {\n columns = toolbar.exportColumns;\n }\n\n const filteredColumns = exportColumnNames\n ? columns.filter(column => {\n const filterColumnsNames = exportColumnNames!;\n if (column.name && filterColumnsNames.indexOf(column.name) !== -1) {\n return true;\n }\n return false;\n })\n : columns;\n\n const firstRowLabels = filteredColumns.map(column => {\n return column.label;\n });\n const firstRow = worksheet.getRow(1);\n firstRow.values = firstRowLabels;\n worksheet.autoFilter = {\n from: {\n row: 1,\n column: 1\n },\n to: {\n row: 1,\n column: firstRowLabels.length\n }\n };\n // 用于 mapping source 的情况\n const remoteMappingCache: any = {};\n // 数据从第二行开始\n let rowIndex = 1;\n for (const row of rows) {\n rowIndex += 1;\n const sheetRow = worksheet.getRow(rowIndex);\n let columIndex = 0;\n for (const column of filteredColumns) {\n columIndex += 1;\n const name = column.name!;\n const value = getVariable(row.data, name);\n if (typeof value === 'undefined' && !(column as TplSchema).tpl) {\n continue;\n }\n // 处理合并单元格\n if (name in row.rowSpans) {\n if (row.rowSpans[name] === 0) {\n continue;\n } else {\n // start row, start column, end row, end column\n worksheet.mergeCells(\n rowIndex,\n columIndex,\n rowIndex + row.rowSpans[name] - 1,\n columIndex\n );\n }\n }\n\n const type = (column as BaseSchema).type || 'plain';\n // TODO: 这里很多组件都是拷贝对应渲染的逻辑实现的,导致\n if (type === 'image' && value) {\n try {\n const imageData = await toDataURL(value);\n const imageDimensions = await getImageDimensions(imageData);\n let imageWidth = imageDimensions.width;\n let imageHeight = imageDimensions.height;\n // 限制一下图片高宽\n const imageMaxSize = 100;\n if (imageWidth > imageHeight) {\n if (imageWidth > imageMaxSize) {\n imageHeight = (imageMaxSize * imageHeight) / imageWidth;\n imageWidth = imageMaxSize;\n }\n } else {\n if (imageHeight > imageMaxSize) {\n imageWidth = (imageMaxSize * imageWidth) / imageHeight;\n imageHeight = imageMaxSize;\n }\n }\n const imageMatch = imageData.match(/data:image\\/(.*);/);\n let imageExt = 'png';\n if (imageMatch) {\n imageExt = imageMatch[1];\n }\n // 目前 excel 只支持这些格式,所以其它格式直接输出 url\n if (imageExt != 'png' && imageExt != 'jpeg' && imageExt != 'gif') {\n sheetRow.getCell(columIndex).value = value;\n continue;\n }\n const imageId = workbook.addImage({\n base64: imageData,\n extension: imageExt\n });\n const linkURL = getAbsoluteUrl(value);\n worksheet.addImage(imageId, {\n // 这里坐标位置是从 0 开始的,所以要减一\n tl: {col: columIndex - 1, row: rowIndex - 1},\n ext: {\n width: imageWidth,\n height: imageHeight\n },\n hyperlinks: {\n tooltip: linkURL\n }\n });\n } catch (e) {\n console.warn(e.stack);\n }\n } else if (type == 'link') {\n const linkURL = getAbsoluteUrl(value);\n sheetRow.getCell(columIndex).value = {\n text: value,\n hyperlink: linkURL\n };\n } else if (type === 'mapping') {\n // 拷贝自 Mapping.tsx\n let map = (column as MappingSchema).map;\n const source = (column as MappingSchema).source;\n if (source) {\n let sourceValue = source;\n if (isPureVariable(source)) {\n sourceValue = resolveVariableAndFilter(\n source as string,\n data,\n '| raw'\n );\n }\n\n const mapKey = JSON.stringify(source);\n if (mapKey in remoteMappingCache) {\n map = remoteMappingCache[mapKey];\n } else {\n const res = await env.fetcher(sourceValue, data);\n if (res.data) {\n remoteMappingCache[mapKey] = res.data;\n map = res.data;\n }\n }\n }\n\n if (typeof value !== 'undefined' && map && (map[value] ?? map['*'])) {\n const viewValue =\n map[value] ??\n (value === true && map['1']\n ? map['1']\n : value === false && map['0']\n ? map['0']\n : map['*']); // 兼容平台旧用法:即 value 为 true 时映射 1 ,为 false 时映射 0\n sheetRow.getCell(columIndex).value = removeHTMLTag(viewValue);\n } else {\n sheetRow.getCell(columIndex).value = removeHTMLTag(value);\n }\n } else if (type === 'date') {\n let viewValue;\n const {\n fromNow,\n format = 'YYYY-MM-DD',\n valueFormat = 'X'\n } = column as DateSchema;\n if (value) {\n let ISODate = moment(value, moment.ISO_8601);\n let NormalDate = moment(value, valueFormat);\n\n viewValue = ISODate.isValid()\n ? ISODate.format(format)\n : NormalDate.isValid()\n ? NormalDate.format(format)\n : false;\n }\n\n if (fromNow) {\n viewValue = moment(value).fromNow();\n }\n if (viewValue) {\n sheetRow.getCell(columIndex).value = viewValue;\n }\n } else {\n if ((column as TplSchema).tpl) {\n sheetRow.getCell(columIndex).value = removeHTMLTag(\n filter((column as TplSchema).tpl, createObject(data, row.data))\n );\n } else {\n sheetRow.getCell(columIndex).value = value;\n }\n }\n }\n }\n\n const buffer = await workbook.xlsx.writeBuffer();\n\n if (buffer) {\n var blob = new Blob([buffer], {\n type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n });\n saveAs(blob, filename + '.xlsx');\n }\n}\n"
|
12
|
+
]
|
13
|
+
}
|
@@ -257,7 +257,7 @@ export interface TableProps extends RendererProps {
|
|
257
257
|
reUseRow?: boolean;
|
258
258
|
itemBadge?: BadgeSchema;
|
259
259
|
}
|
260
|
-
declare type ExportExcelToolbar = SchemaNode & {
|
260
|
+
export declare type ExportExcelToolbar = SchemaNode & {
|
261
261
|
api?: SchemaApi;
|
262
262
|
columns?: string[];
|
263
263
|
exportColumns?: any[];
|
@@ -11,7 +11,6 @@ require("./ColumnToggler");
|
|
11
11
|
var Checkbox_1 = (0, tslib_1.__importDefault)(require("../../components/Checkbox"));
|
12
12
|
var Button_1 = (0, tslib_1.__importDefault)(require("../../components/Button"));
|
13
13
|
var table_1 = require("../../store/table");
|
14
|
-
var file_saver_1 = require("file-saver");
|
15
14
|
var helper_1 = require("../../utils/helper");
|
16
15
|
var tpl_builtin_1 = require("../../utils/tpl-builtin");
|
17
16
|
var debounce_1 = (0, tslib_1.__importDefault)(require("lodash/debounce"));
|
@@ -24,24 +23,12 @@ Object.defineProperty(exports, "TableCell", { enumerable: true, get: function ()
|
|
24
23
|
var HeadCellFilterDropdown_1 = require("./HeadCellFilterDropdown");
|
25
24
|
var HeadCellSearchDropdown_1 = require("./HeadCellSearchDropdown");
|
26
25
|
var TableContent_1 = require("./TableContent");
|
27
|
-
var image_1 = require("../../utils/image");
|
28
26
|
var TableBody_1 = require("./TableBody");
|
29
27
|
var mobx_state_tree_1 = require("mobx-state-tree");
|
30
28
|
var ColumnToggler_1 = (0, tslib_1.__importDefault)(require("./ColumnToggler"));
|
31
29
|
var offset_1 = (0, tslib_1.__importDefault)(require("../../utils/offset"));
|
32
30
|
var dom_1 = require("../../utils/dom");
|
33
|
-
|
34
|
-
* 将 url 转成绝对地址
|
35
|
-
*/
|
36
|
-
var getAbsoluteUrl = (function () {
|
37
|
-
var link;
|
38
|
-
return function (url) {
|
39
|
-
if (!link)
|
40
|
-
link = document.createElement('a');
|
41
|
-
link.href = url;
|
42
|
-
return link.href;
|
43
|
-
};
|
44
|
-
})();
|
31
|
+
var exportExcel_1 = require("./exportExcel");
|
45
32
|
var Table = /** @class */ (function (_super) {
|
46
33
|
(0, tslib_1.__extends)(Table, _super);
|
47
34
|
function Table(props) {
|
@@ -1101,243 +1088,9 @@ var Table = /** @class */ (function (_super) {
|
|
1101
1088
|
return render('exportExcel', (0, tslib_1.__assign)((0, tslib_1.__assign)({ label: __('CRUD.exportExcel') }, toolbar), { type: 'button' }), {
|
1102
1089
|
onAction: function () {
|
1103
1090
|
Promise.resolve().then(function () { return new Promise(function(resolve){require(['exceljs'], function(ret) {resolve(tslib_1.__importStar(ret));})}); }).then(function (ExcelJS) { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
|
1104
|
-
|
1105
|
-
|
1106
|
-
|
1107
|
-
switch (_d.label) {
|
1108
|
-
case 0:
|
1109
|
-
rows = [];
|
1110
|
-
filename = 'data';
|
1111
|
-
if (!(typeof toolbar === 'object' && toolbar.api)) return [3 /*break*/, 2];
|
1112
|
-
return [4 /*yield*/, env.fetcher(toolbar.api, data)];
|
1113
|
-
case 1:
|
1114
|
-
res = _d.sent();
|
1115
|
-
if (!res.data) {
|
1116
|
-
env.notify('warning', __('placeholder.noData'));
|
1117
|
-
return [2 /*return*/];
|
1118
|
-
}
|
1119
|
-
if (Array.isArray(res.data)) {
|
1120
|
-
rows = res.data;
|
1121
|
-
}
|
1122
|
-
else {
|
1123
|
-
rows = res.data.rows || res.data.items;
|
1124
|
-
}
|
1125
|
-
// 因为很多方法是 store 里的,所以需要构建 store 来处理
|
1126
|
-
tmpStore = table_1.TableStore.create((0, mobx_state_tree_1.getSnapshot)(store));
|
1127
|
-
tmpStore.initRows(rows);
|
1128
|
-
rows = tmpStore.rows;
|
1129
|
-
return [3 /*break*/, 3];
|
1130
|
-
case 2:
|
1131
|
-
rows = store.rows;
|
1132
|
-
_d.label = 3;
|
1133
|
-
case 3:
|
1134
|
-
if (typeof toolbar === 'object' && toolbar.filename) {
|
1135
|
-
filename = (0, tpl_1.filter)(toolbar.filename, data, '| raw');
|
1136
|
-
}
|
1137
|
-
if (rows.length === 0) {
|
1138
|
-
env.notify('warning', __('placeholder.noData'));
|
1139
|
-
return [2 /*return*/];
|
1140
|
-
}
|
1141
|
-
workbook = new ExcelJS.Workbook();
|
1142
|
-
worksheet = workbook.addWorksheet('sheet', {
|
1143
|
-
properties: { defaultColWidth: 15 }
|
1144
|
-
});
|
1145
|
-
worksheet.views = [{ state: 'frozen', xSplit: 0, ySplit: 1 }];
|
1146
|
-
exportColumnNames = toolbar.columns;
|
1147
|
-
if ((0, tpl_builtin_1.isPureVariable)(exportColumnNames)) {
|
1148
|
-
exportColumnNames = (0, tpl_builtin_1.resolveVariableAndFilter)(exportColumnNames, data, '| raw');
|
1149
|
-
}
|
1150
|
-
// 自定义导出列配置
|
1151
|
-
if (toolbar.exportColumns && Array.isArray(toolbar.exportColumns)) {
|
1152
|
-
columns = toolbar.exportColumns;
|
1153
|
-
}
|
1154
|
-
filteredColumns = exportColumnNames
|
1155
|
-
? columns.filter(function (column) {
|
1156
|
-
var filterColumnsNames = exportColumnNames;
|
1157
|
-
if (column.name &&
|
1158
|
-
filterColumnsNames.indexOf(column.name) !== -1) {
|
1159
|
-
return true;
|
1160
|
-
}
|
1161
|
-
return false;
|
1162
|
-
})
|
1163
|
-
: columns;
|
1164
|
-
firstRowLabels = filteredColumns.map(function (column) {
|
1165
|
-
return column.label;
|
1166
|
-
});
|
1167
|
-
firstRow = worksheet.getRow(1);
|
1168
|
-
firstRow.values = firstRowLabels;
|
1169
|
-
worksheet.autoFilter = {
|
1170
|
-
from: {
|
1171
|
-
row: 1,
|
1172
|
-
column: 1
|
1173
|
-
},
|
1174
|
-
to: {
|
1175
|
-
row: 1,
|
1176
|
-
column: firstRowLabels.length
|
1177
|
-
}
|
1178
|
-
};
|
1179
|
-
remoteMappingCache = {};
|
1180
|
-
rowIndex = 1;
|
1181
|
-
_i = 0, rows_1 = rows;
|
1182
|
-
_d.label = 4;
|
1183
|
-
case 4:
|
1184
|
-
if (!(_i < rows_1.length)) return [3 /*break*/, 19];
|
1185
|
-
row = rows_1[_i];
|
1186
|
-
rowIndex += 1;
|
1187
|
-
sheetRow = worksheet.getRow(rowIndex);
|
1188
|
-
columIndex = 0;
|
1189
|
-
_a = 0, filteredColumns_1 = filteredColumns;
|
1190
|
-
_d.label = 5;
|
1191
|
-
case 5:
|
1192
|
-
if (!(_a < filteredColumns_1.length)) return [3 /*break*/, 18];
|
1193
|
-
column = filteredColumns_1[_a];
|
1194
|
-
columIndex += 1;
|
1195
|
-
name = column.name;
|
1196
|
-
value = (0, helper_1.getVariable)(row.data, name);
|
1197
|
-
if (typeof value === 'undefined' &&
|
1198
|
-
!column.tpl) {
|
1199
|
-
return [3 /*break*/, 17];
|
1200
|
-
}
|
1201
|
-
// 处理合并单元格
|
1202
|
-
if (name in row.rowSpans) {
|
1203
|
-
if (row.rowSpans[name] === 0) {
|
1204
|
-
return [3 /*break*/, 17];
|
1205
|
-
}
|
1206
|
-
else {
|
1207
|
-
// start row, start column, end row, end column
|
1208
|
-
worksheet.mergeCells(rowIndex, columIndex, rowIndex + row.rowSpans[name] - 1, columIndex);
|
1209
|
-
}
|
1210
|
-
}
|
1211
|
-
type = column.type || 'plain';
|
1212
|
-
if (!(type === 'image' && value)) return [3 /*break*/, 11];
|
1213
|
-
_d.label = 6;
|
1214
|
-
case 6:
|
1215
|
-
_d.trys.push([6, 9, , 10]);
|
1216
|
-
return [4 /*yield*/, (0, image_1.toDataURL)(value)];
|
1217
|
-
case 7:
|
1218
|
-
imageData = _d.sent();
|
1219
|
-
return [4 /*yield*/, (0, image_1.getImageDimensions)(imageData)];
|
1220
|
-
case 8:
|
1221
|
-
imageDimensions = _d.sent();
|
1222
|
-
imageWidth = imageDimensions.width;
|
1223
|
-
imageHeight = imageDimensions.height;
|
1224
|
-
imageMaxSize = 100;
|
1225
|
-
if (imageWidth > imageHeight) {
|
1226
|
-
if (imageWidth > imageMaxSize) {
|
1227
|
-
imageHeight = (imageMaxSize * imageHeight) / imageWidth;
|
1228
|
-
imageWidth = imageMaxSize;
|
1229
|
-
}
|
1230
|
-
}
|
1231
|
-
else {
|
1232
|
-
if (imageHeight > imageMaxSize) {
|
1233
|
-
imageWidth = (imageMaxSize * imageWidth) / imageHeight;
|
1234
|
-
imageHeight = imageMaxSize;
|
1235
|
-
}
|
1236
|
-
}
|
1237
|
-
imageMatch = imageData.match(/data:image\/(.*);/);
|
1238
|
-
imageExt = 'png';
|
1239
|
-
if (imageMatch) {
|
1240
|
-
imageExt = imageMatch[1];
|
1241
|
-
}
|
1242
|
-
// 目前 excel 只支持这些格式,所以其它格式直接输出 url
|
1243
|
-
if (imageExt != 'png' &&
|
1244
|
-
imageExt != 'jpeg' &&
|
1245
|
-
imageExt != 'gif') {
|
1246
|
-
sheetRow.getCell(columIndex).value = value;
|
1247
|
-
return [3 /*break*/, 17];
|
1248
|
-
}
|
1249
|
-
imageId = workbook.addImage({
|
1250
|
-
base64: imageData,
|
1251
|
-
extension: imageExt
|
1252
|
-
});
|
1253
|
-
linkURL = getAbsoluteUrl(value);
|
1254
|
-
worksheet.addImage(imageId, {
|
1255
|
-
// 这里坐标位置是从 0 开始的,所以要减一
|
1256
|
-
tl: { col: columIndex - 1, row: rowIndex - 1 },
|
1257
|
-
ext: {
|
1258
|
-
width: imageWidth,
|
1259
|
-
height: imageHeight
|
1260
|
-
},
|
1261
|
-
hyperlinks: {
|
1262
|
-
tooltip: linkURL
|
1263
|
-
}
|
1264
|
-
});
|
1265
|
-
return [3 /*break*/, 10];
|
1266
|
-
case 9:
|
1267
|
-
e_1 = _d.sent();
|
1268
|
-
console.warn(e_1.stack);
|
1269
|
-
return [3 /*break*/, 10];
|
1270
|
-
case 10: return [3 /*break*/, 17];
|
1271
|
-
case 11:
|
1272
|
-
if (!(type == 'link')) return [3 /*break*/, 12];
|
1273
|
-
linkURL = getAbsoluteUrl(value);
|
1274
|
-
sheetRow.getCell(columIndex).value = {
|
1275
|
-
text: value,
|
1276
|
-
hyperlink: linkURL
|
1277
|
-
};
|
1278
|
-
return [3 /*break*/, 17];
|
1279
|
-
case 12:
|
1280
|
-
if (!(type === 'mapping')) return [3 /*break*/, 16];
|
1281
|
-
map = column.map;
|
1282
|
-
source = column.source;
|
1283
|
-
if (!source) return [3 /*break*/, 15];
|
1284
|
-
sourceValue = source;
|
1285
|
-
if ((0, tpl_builtin_1.isPureVariable)(source)) {
|
1286
|
-
sourceValue = (0, tpl_builtin_1.resolveVariableAndFilter)(source, data, '| raw');
|
1287
|
-
}
|
1288
|
-
mapKey = JSON.stringify(source);
|
1289
|
-
if (!(mapKey in remoteMappingCache)) return [3 /*break*/, 13];
|
1290
|
-
map = remoteMappingCache[mapKey];
|
1291
|
-
return [3 /*break*/, 15];
|
1292
|
-
case 13: return [4 /*yield*/, env.fetcher(sourceValue, data)];
|
1293
|
-
case 14:
|
1294
|
-
res = _d.sent();
|
1295
|
-
if (res.data) {
|
1296
|
-
remoteMappingCache[mapKey] = res.data;
|
1297
|
-
map = res.data;
|
1298
|
-
}
|
1299
|
-
_d.label = 15;
|
1300
|
-
case 15:
|
1301
|
-
if (typeof value !== 'undefined' &&
|
1302
|
-
map &&
|
1303
|
-
((_b = map[value]) !== null && _b !== void 0 ? _b : map['*'])) {
|
1304
|
-
viewValue = (_c = map[value]) !== null && _c !== void 0 ? _c : (value === true && map['1']
|
1305
|
-
? map['1']
|
1306
|
-
: value === false && map['0']
|
1307
|
-
? map['0']
|
1308
|
-
: map['*']);
|
1309
|
-
sheetRow.getCell(columIndex).value =
|
1310
|
-
(0, helper_1.removeHTMLTag)(viewValue);
|
1311
|
-
}
|
1312
|
-
else {
|
1313
|
-
sheetRow.getCell(columIndex).value = (0, helper_1.removeHTMLTag)(value);
|
1314
|
-
}
|
1315
|
-
return [3 /*break*/, 17];
|
1316
|
-
case 16:
|
1317
|
-
if (column.tpl) {
|
1318
|
-
sheetRow.getCell(columIndex).value = (0, helper_1.removeHTMLTag)((0, tpl_1.filter)(column.tpl, (0, helper_1.createObject)(data, row.data)));
|
1319
|
-
}
|
1320
|
-
else {
|
1321
|
-
sheetRow.getCell(columIndex).value = value;
|
1322
|
-
}
|
1323
|
-
_d.label = 17;
|
1324
|
-
case 17:
|
1325
|
-
_a++;
|
1326
|
-
return [3 /*break*/, 5];
|
1327
|
-
case 18:
|
1328
|
-
_i++;
|
1329
|
-
return [3 /*break*/, 4];
|
1330
|
-
case 19: return [4 /*yield*/, workbook.xlsx.writeBuffer()];
|
1331
|
-
case 20:
|
1332
|
-
buffer = _d.sent();
|
1333
|
-
if (buffer) {
|
1334
|
-
blob = new Blob([buffer], {
|
1335
|
-
type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
1336
|
-
});
|
1337
|
-
(0, file_saver_1.saveAs)(blob, filename + '.xlsx');
|
1338
|
-
}
|
1339
|
-
return [2 /*return*/];
|
1340
|
-
}
|
1091
|
+
return (0, tslib_1.__generator)(this, function (_a) {
|
1092
|
+
(0, exportExcel_1.exportExcel)(ExcelJS, this.props, toolbar);
|
1093
|
+
return [2 /*return*/];
|
1341
1094
|
});
|
1342
1095
|
}); });
|
1343
1096
|
}
|