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.
Files changed (120) hide show
  1. package/lib/WithStore.js +1 -1
  2. package/lib/WithStore.js.map +2 -2
  3. package/lib/components/DatePicker.js +3 -1
  4. package/lib/components/DatePicker.js.map +2 -2
  5. package/lib/components/Progress.js +3 -4
  6. package/lib/components/Progress.js.map +2 -2
  7. package/lib/components/TabsTransfer.d.ts +22 -3
  8. package/lib/components/TabsTransfer.js +149 -42
  9. package/lib/components/TabsTransfer.js.map +2 -2
  10. package/lib/components/Tree.js +3 -1
  11. package/lib/components/Tree.js.map +2 -2
  12. package/lib/components/formula/Editor.js +4 -4
  13. package/lib/components/formula/Editor.js.map +2 -2
  14. package/lib/components/formula/VariableList.d.ts +63 -4
  15. package/lib/components/formula/VariableList.js +23 -8
  16. package/lib/components/formula/VariableList.js.map +2 -2
  17. package/lib/helper.css +1 -1
  18. package/lib/helper.css.map +1 -1
  19. package/lib/index.js +1 -1
  20. package/lib/renderers/Date.js +6 -1
  21. package/lib/renderers/Date.js.map +2 -2
  22. package/lib/renderers/Form/NestedSelect.d.ts +1 -1
  23. package/lib/renderers/Form/NestedSelect.js +7 -2
  24. package/lib/renderers/Form/NestedSelect.js.map +2 -2
  25. package/lib/renderers/Form/TabsTransfer.d.ts +6 -1
  26. package/lib/renderers/Form/TabsTransfer.js +155 -6
  27. package/lib/renderers/Form/TabsTransfer.js.map +2 -2
  28. package/lib/renderers/Form/TabsTransferPicker.d.ts +2 -2
  29. package/lib/renderers/Form/TabsTransferPicker.js +4 -4
  30. package/lib/renderers/Form/TabsTransferPicker.js.map +2 -2
  31. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  32. package/lib/renderers/Form/index.js +6 -2
  33. package/lib/renderers/Form/index.js.map +2 -2
  34. package/lib/renderers/Markdown.js +4 -3
  35. package/lib/renderers/Markdown.js.map +2 -2
  36. package/lib/renderers/Nav.d.ts +21 -20
  37. package/lib/renderers/Nav.js +8 -1
  38. package/lib/renderers/Nav.js.map +2 -2
  39. package/lib/renderers/Page.js +1 -1
  40. package/lib/renderers/Page.js.map +2 -2
  41. package/lib/renderers/Service.js +1 -1
  42. package/lib/renderers/Service.js.map +2 -2
  43. package/lib/renderers/Table/exportExcel.d.ts +6 -0
  44. package/lib/renderers/Table/exportExcel.js +288 -0
  45. package/lib/renderers/Table/exportExcel.js.map +13 -0
  46. package/lib/renderers/Table/index.d.ts +1 -1
  47. package/lib/renderers/Table/index.js +4 -251
  48. package/lib/renderers/Table/index.js.map +2 -2
  49. package/lib/themes/ang-ie11.css +112 -36
  50. package/lib/themes/ang.css +100 -21
  51. package/lib/themes/ang.css.map +1 -1
  52. package/lib/themes/antd-ie11.css +112 -36
  53. package/lib/themes/antd.css +100 -21
  54. package/lib/themes/antd.css.map +1 -1
  55. package/lib/themes/cxd-ie11.css +97 -21
  56. package/lib/themes/cxd.css +100 -21
  57. package/lib/themes/cxd.css.map +1 -1
  58. package/lib/themes/dark-ie11.css +112 -36
  59. package/lib/themes/dark.css +100 -21
  60. package/lib/themes/dark.css.map +1 -1
  61. package/lib/themes/default-ie11.css +97 -21
  62. package/lib/themes/default.css +100 -21
  63. package/lib/themes/default.css.map +1 -1
  64. package/lib/utils/api.js +35 -6
  65. package/lib/utils/api.js.map +2 -2
  66. package/package.json +1 -1
  67. package/schema.json +1 -1
  68. package/scss/_properties.scss +4 -0
  69. package/scss/components/_formula.scss +77 -12
  70. package/scss/components/_progress.scss +2 -7
  71. package/scss/components/form/_date.scss +1 -0
  72. package/scss/components/form/_transfer.scss +21 -0
  73. package/scss/helper/layout/_display.scss +1 -1
  74. package/sdk/ang-ie11.css +130 -36
  75. package/sdk/ang.css +118 -21
  76. package/sdk/antd-ie11.css +130 -36
  77. package/sdk/antd.css +118 -21
  78. package/sdk/barcode.js +51 -51
  79. package/sdk/charts.js +14 -14
  80. package/sdk/codemirror.js +7 -7
  81. package/sdk/color-picker.js +65 -65
  82. package/sdk/cropperjs.js +2 -2
  83. package/sdk/cxd-ie11.css +115 -21
  84. package/sdk/cxd.css +118 -21
  85. package/sdk/dark-ie11.css +130 -36
  86. package/sdk/dark.css +118 -21
  87. package/sdk/exceljs.js +1 -1
  88. package/sdk/helper.css +1 -1
  89. package/sdk/helper.css.map +1 -1
  90. package/sdk/markdown.js +69 -69
  91. package/sdk/papaparse.js +1 -1
  92. package/sdk/renderers/Form/CityDB.js +1 -1
  93. package/sdk/rest.js +17 -17
  94. package/sdk/rich-text.js +62 -62
  95. package/sdk/sdk-ie11.css +115 -21
  96. package/sdk/sdk.css +118 -21
  97. package/sdk/sdk.js +1270 -1268
  98. package/sdk/thirds/hls.js/hls.js +1 -1
  99. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  100. package/sdk/tinymce.js +57 -57
  101. package/src/WithStore.tsx +1 -1
  102. package/src/components/DatePicker.tsx +2 -1
  103. package/src/components/Progress.tsx +6 -4
  104. package/src/components/TabsTransfer.tsx +253 -143
  105. package/src/components/Tree.tsx +3 -1
  106. package/src/components/formula/Editor.tsx +12 -5
  107. package/src/components/formula/VariableList.tsx +55 -21
  108. package/src/renderers/Date.tsx +14 -1
  109. package/src/renderers/Form/NestedSelect.tsx +11 -2
  110. package/src/renderers/Form/TabsTransfer.tsx +174 -11
  111. package/src/renderers/Form/TabsTransferPicker.tsx +5 -10
  112. package/src/renderers/Form/TreeSelect.tsx +15 -12
  113. package/src/renderers/Form/index.tsx +37 -16
  114. package/src/renderers/Markdown.tsx +4 -5
  115. package/src/renderers/Nav.tsx +7 -1
  116. package/src/renderers/Page.tsx +9 -2
  117. package/src/renderers/Service.tsx +8 -2
  118. package/src/renderers/Table/exportExcel.ts +289 -0
  119. package/src/renderers/Table/index.tsx +5 -252
  120. 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": "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",
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
- var rows, tmpStore, filename, res, workbook, worksheet, exportColumnNames, filteredColumns, firstRowLabels, firstRow, remoteMappingCache, rowIndex, _i, rows_1, row, sheetRow, columIndex, _a, filteredColumns_1, column, name, value, type, imageData, imageDimensions, imageWidth, imageHeight, imageMaxSize, imageMatch, imageExt, imageId, linkURL, e_1, linkURL, map, source, sourceValue, mapKey, res, viewValue, buffer, blob;
1105
- var _b, _c;
1106
- return (0, tslib_1.__generator)(this, function (_d) {
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
  }