cloud-web-corejs 1.0.54-dev.757 → 1.0.54-dev.759

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.
@@ -1,502 +1,502 @@
1
- /**version-1.0*/
2
- import {read, utils} from 'xlsx'
3
-
4
- let tmixins = {};
5
- var XLSX = window.XLSX || {read, utils};
6
- import {
7
- getToken
8
- } from '../../utils/auth';
9
- import { getErrorMsg } from '@base/utils/index.js'
10
-
11
- let configUtil = {
12
- baseUrl: process.env.VUE_APP_BASE_API,
13
- XLSX,
14
- getToken
15
- };
16
- // importTimer / loadingObj 原为模块级单例:两个导入弹窗并存时后者覆盖前者引用,
17
- // 前一个 interval(100ms/次)与 loading 永久失控——已改为实例属性 this.importTimer / this.loadingObj
18
- tmixins = {
19
- name: 'excelImport',
20
- props: ['param'],
21
- data() {
22
- return {
23
- excTime: 0,
24
- showImportDialog: false,
25
- showImportDialog2: false,
26
- falseValue: false,
27
- fileRaw: false,
28
- isEnd: false,
29
- currentIndex: 0,
30
- excelTemplate: "",
31
- prefix: '/user',
32
- dataSize: 0,
33
- totalSuccessNum: 0,
34
- totalErrorNum: 0,
35
- percentageNum: 0,
36
- successRows: [],
37
- failRows: [],
38
- oriCols: [],
39
- showImportResult: false,
40
- resultType: '',
41
- option: {},
42
- showContent: false,
43
- resOption: {}
44
- }
45
- },
46
- created() {
47
-
48
- },
49
- beforeDestroy() {
50
- this.clearImportTimer()
51
- },
52
- methods: {
53
- initResGird() {
54
- var that = this;
55
- let tableRef = 'resGrid';
56
- let columns = [{
57
- type: 'checkbox',
58
- fixed: 'left',
59
- width: 48,
60
- resizable: false,
61
- headerClassName: 'vxe-hcs',
62
- className: 'vxe-hcs'
63
- },
64
- {
65
- field: 'impNumber',
66
- title: this.$t2('行号', 'components.excelImport.impNumber'),
67
- width: 100,
68
- fixed: 'left'
69
- },
70
- {
71
- field: '_resultContent',
72
- title: this.$t2('结果', 'components.excelImport.resultContent'),
73
- width: 250,
74
- fixed: 'left',
75
- slots: {
76
- default: ({
77
- row,
78
- $rowIndex,
79
- $table
80
- }) => {
81
- return that.handleRes(row._resultContent);
82
- }
83
- }
84
- }
85
- ];
86
- let cCols = this.oriCols.map((oriCol, index) => {
87
- let col = {
88
- field: oriCol.field,
89
- title: oriCol.title,
90
- width: 150
91
- };
92
- if (index == 0) {
93
- col.fixed = 'left';
94
- }
95
- return col;
96
- });
97
- columns = columns.concat(cCols);
98
-
99
- let tableOption = {
100
- vue: this,
101
- tableRef: tableRef,
102
- tableNameRequired: false,
103
- columns: columns,
104
- config: {
105
- toolbarConfig: {
106
- custom: false
107
- }
108
- }
109
- };
110
-
111
- this.$vxeTableUtil.initVxeTable(tableOption).then(opts => {
112
- this.resOption = opts;
113
- });
114
- },
115
- exc() {
116
- this.option = this.param;
117
- this.showContent = true;
118
- this.showImportDialog = true;
119
- this.showImportDialog2 = false;
120
- },
121
- showSuccessResult() {
122
- this.showImportResult = true;
123
- this.resultType = 1;
124
- this.$nextTick(() => {
125
- this.initResGird();
126
- this.$nextTick(() => {
127
- let tDatas = this.successRows.map((item, index) => {
128
- // item.id = index;
129
- return item;
130
- });
131
- this.$refs.resGrid.loadData(tDatas);
132
- });
133
- });
134
- },
135
- showErrorResult() {
136
- this.showImportResult = true;
137
- this.resultType = 0;
138
- this.$nextTick(() => {
139
- this.initResGird();
140
- this.$nextTick(() => {
141
- let tDatas = this.failRows.map((item, index) => {
142
- // item.id = index;
143
- return item;
144
- });
145
- this.$refs.resGrid.loadData(tDatas);
146
- });
147
- });
148
- },
149
- fileChange(file) {
150
- if (file) {
151
- this.fileRaw = file.raw;
152
- } else {
153
- this.fileRaw = false;
154
- }
155
- },
156
- dialogClose1() {
157
- this.$emit("update:visiable", false);
158
- this.showContent = false;
159
- },
160
- async dialogPrimary1() {
161
- let that = this;
162
- let option = this.option;
163
- let saveUrl = option.saveUrl;
164
- if (!saveUrl) {
165
- this.dialogPrimary3();
166
- return false;
167
- }
168
-
169
- if (!(this.fileRaw)) {
170
- this.$baseAlert(this.$t2('请上传附件', 'components.excelImport.warmMsg1'));
171
- return false;
172
- }
173
- this.createImportTimer();
174
- this.showImportDialog = false;
175
- if (!option.onConfirm) {
176
- this.showImportDialog2 = true;
177
- }
178
- this.$nextTick(() => {
179
- try {
180
- this.readExcel(this.fileRaw, function (resultData) {
181
- if (option.onConfirm) {
182
- option.onConfirm(resultData.data, that.fileRaw);
183
- } else {
184
- that.syncDataForImport({
185
- multi: false,
186
- data: resultData,
187
- saveUrl: saveUrl
188
- });
189
- }
190
- });
191
- } catch (et) {
192
- that.clearImportTimer();
193
- console.error(et);
194
- }
195
- });
196
- },
197
- async langdialogPrimary() {
198
- let that = this;
199
- let option = this.option;
200
- let saveUrl = option.saveUrl;
201
- if (!saveUrl) {
202
- this.dialogPrimary3();
203
- return false;
204
- }
205
-
206
- if (!(this.fileRaw)) {
207
- this.$baseAlert(this.$t2('请上传附件', 'components.excelImport.warmMsg1'));
208
- return false;
209
- }
210
- this.createImportTimer();
211
- this.showImportDialog = false;
212
- if (!option.onConfirm) {
213
- this.showImportDialog2 = true;
214
- }
215
- this.$nextTick(() => {
216
- try {
217
- this.readExcel(this.fileRaw, function (resultData) {
218
- if (option.onConfirm) {
219
- option.onConfirm(resultData.data, that.fileRaw);
220
- } else {
221
- that.syncDataForImport({
222
- multi: false,
223
- data: resultData,
224
- saveUrl: saveUrl
225
- });
226
- }
227
- });
228
- } catch (et) {
229
- that.clearImportTimer();
230
- console.error(et);
231
- }
232
- });
233
- },
234
- dialogClose2() {
235
- this.clearImportTimer();
236
- this.showImportDialog2 = false;
237
- this.showContent = false;
238
- this.option.callback && this.option.callback();
239
- },
240
- dialogPrimary2() {
241
- this.clearImportTimer();
242
- this.showImportDialog2 = false;
243
- this.showContent = false;
244
- this.option.callback && this.option.callback(this.resultData);
245
- },
246
- async readExcel(file, callback) {
247
- let that = this;
248
- let option = this.option;
249
-
250
- const fileReader = new FileReader();
251
- fileReader.onload = async (ev) => {
252
- var resultData;
253
- try {
254
- /*const arrayBuffer = ev.target.result;
255
- const decoder = new TextDecoder('gbk'); // 指定为 GBK 编码
256
- const fileContent = decoder.decode(arrayBuffer);*/
257
-
258
- let fileContent = ev.target.result
259
- const data = JSON.parse(fileContent);
260
-
261
- var titles = Object.keys(data[0]);
262
- var fields = titles;
263
- var columns = [];
264
- var cols = fields.map(item => {
265
- return {
266
- field: item,
267
- title: item,
268
- width: 100,
269
- }
270
- });
271
- var oriCols = JSON.parse(JSON.stringify(cols));//列信息
272
- this.oriCols = oriCols;
273
-
274
- resultData = {
275
- data: data,
276
- titles: titles,
277
- fields: fields,
278
- oriCols: oriCols
279
- };
280
- this.resultData = resultData;
281
- callback(resultData);
282
- } catch (et) {
283
- that.showContent = false;
284
- that.clearImportTimer();
285
- console.error(et)
286
- }
287
- };
288
- // fileReader.readAsBinaryString(file);
289
- fileReader.readAsText(file, 'UTF-8');
290
-
291
-
292
- },
293
- syncDataForImport(opts) {
294
- let that = this;
295
- var multi = this.option.multi;
296
- var resultData = opts.data;
297
- var datas = resultData.data;
298
- var titles = resultData.titles;
299
- var fields = resultData.fields;
300
- let uniqueFields = resultData.uniqueFields || [];
301
- var saveUrl = opts.saveUrl;
302
- var size = datas.length;
303
- var index = 0;
304
- var successNum = 0;
305
- var failNum = 0;
306
- var dialogObj = this.$refs.importDialog.$el;
307
- var successNumObj = dialogObj.querySelector(".successNum");
308
- var failNumObj = dialogObj.querySelector(".failNum");
309
- var percentageObj = dialogObj.querySelector(".percentage");
310
- var doneNumObj = dialogObj.querySelector(".doneNum");
311
- dialogObj.querySelector(".dataSize").innerText = size;
312
-
313
- that.successRows = [];
314
- that.failRows = [];
315
-
316
- var multiSize = opts.multiSize || 2;
317
-
318
- let groupIndex = 0;
319
- let groupDatas = [];
320
-
321
- var compareV = function (property) {
322
- return function (a, b) {
323
- var value1 = a[property];
324
- var value2 = b[property];
325
- return value1 - value2;
326
- }
327
- }
328
-
329
- var prevHandleData = function (percentageStr, excNum) {
330
-
331
- successNumObj.innerText = successNum;
332
- failNumObj.innerText = failNum;
333
- doneNumObj.innerText = successNum + failNum;
334
- that.percentageNum = percentageStr;
335
- let isEnd = false;
336
- if (uniqueFields.length) {
337
- isEnd = groupIndex + 1 >= groupDatas.length;
338
- } else {
339
- isEnd = index + excNum >= size;
340
- }
341
- if (!isEnd) {
342
- index = index + excNum;
343
- groupIndex = groupIndex + 1;
344
- setTimeout(function () {
345
- handleData();
346
- }, 1);
347
- } else {
348
- setTimeout(function () {
349
- that.clearImportTimer();
350
- }, 300);
351
- }
352
- };
353
-
354
- let getDefaultValue = (row) => {
355
- let value = null;
356
- let defaultValue = this.option.defaultValue;
357
- if (defaultValue) {
358
- if (typeof defaultValue == "function") {
359
- value = defaultValue(row) || {};
360
- } else {
361
- value = defaultValue || {};
362
- }
363
- }
364
- return value;
365
- }
366
-
367
- let handleData = () => {
368
- if (!that.isEnd && index < size) {
369
- let a = 1
370
- var param;
371
- var excNum;
372
-
373
- var data = datas[index];
374
- data.impSeq = index;
375
- data.impNumber = index + 1;
376
- excNum = 1;
377
- datas[index] = data;
378
-
379
- param = data;
380
- let defaultValue = getDefaultValue(data);
381
- if (defaultValue) {
382
- Object.assign(param, defaultValue);
383
- }
384
-
385
- var percentageStr = parseInt((index + excNum) * 100 / size);
386
- if (param == null || param.length == 0) {
387
- if (that.showContent) {
388
- prevHandleData(percentageStr, excNum);
389
- }
390
- return;
391
- }
392
-
393
- that.$http({
394
- url: saveUrl,
395
- method: "post",
396
- data: param,
397
- resultType: "special",
398
- modal: false,
399
- callback: (resultMsg) => {
400
- var data = datas[index];
401
- data._resultType = resultMsg.type;
402
- data._resultContent = (resultMsg.type == "success") ? this.$t2('导入成功', 'components.excelImport.importSucess') : resultMsg.content;
403
-
404
- if (resultMsg.type == "success") {
405
- successNum++;
406
- that.successRows.push(data);
407
- } else {
408
- failNum++;
409
- that.failRows.push(data);
410
- }
411
- if (that.showContent) {
412
- prevHandleData(percentageStr, excNum);
413
- }
414
- }
415
- }).catch(function (et) {
416
- that.isEnd = true;
417
- that.clearImportTimer();
418
- console.error(et);
419
- });
420
- }
421
- }
422
- handleData();
423
- },
424
- handleRes(val) {
425
- /* var content = val;
426
- var text = content;
427
- if (content && content.indexOf("Exception") >= 0) {
428
- var index0 = content.lastIndexOf("*]");
429
- if (index0 >= 0) {
430
- text = content.substr(index0);
431
- if (text) {
432
- var index1 = text.indexOf("Exception:");
433
- if (index1 >= 0) {
434
- text = text.substr(index1 + 10);
435
- }
436
- }
437
- }
438
- } */
439
- let text = getErrorMsg(val)
440
- return text;
441
- },
442
- exportToExcel() {
443
- let str = this.resultType === 1 ? this.$t2('成功', 'components.excelImport.success') : this.$t2('失败', 'components.excelImport.fail');
444
- let fileName = this.$t2('导入结果导出', 'components.excelImport.exportFileName') + '(' + str + ')';
445
- let $grid = this.$refs.resGrid;
446
- let columns = $grid.getColumns();
447
- if (columns && columns.length) {
448
- let fields = columns.filter((item, index) => {
449
- return index > 0 && item.property;
450
- }).map((item, index) => {
451
- return item.property;
452
- });
453
- this.$refs.resGrid.exportData({
454
- filename: fileName,
455
- mode: 'all',
456
- type: 'csv',
457
- columns: fields
458
- });
459
- }
460
- },
461
- createImportTimer() {
462
- this.excTime = 0;
463
- let beginTime = new Date().getTime();
464
- this.importTimer = setInterval(() => {
465
- let nowTime = new Date().getTime();
466
- let diffTime = (nowTime - beginTime) / 1000;
467
- this.$set(this, 'excTime', this.$baseLodash.round(diffTime, 2));
468
- }, 100);
469
- },
470
- clearImportTimer() {
471
- clearInterval(this.importTimer);
472
- this.importTimer = null;
473
- this.loadingObj && this.loadingObj.close();
474
- this.loadingObj = null;
475
- },
476
- async dialogPrimary3() {
477
- if (!(this.fileRaw)) {
478
- this.$baseAlert(this.$t2('请上传附件', 'components.excelImport.warmMsg1'));
479
- return false;
480
- }
481
- let that = this;
482
- let option = this.option;
483
- this.loadingObj = this.$baseLoading({
484
- target: document.body,
485
- background: 'unset'
486
- });
487
- this.readExcel(this.fileRaw, function (resultData) {
488
- try {
489
- if (option.callback && option.callback(resultData) !== false) {
490
- that.showImportDialog = false;
491
- }
492
- } catch (et) {
493
- console.error(et);
494
- }
495
- setTimeout(function () {
496
- that.loadingObj && that.loadingObj.close();
497
- }, 200);
498
- });
499
- }
500
- }
501
- };
502
- export const mixins = tmixins;
1
+ /**version-1.0*/
2
+ import {read, utils} from 'xlsx'
3
+
4
+ let tmixins = {};
5
+ var XLSX = window.XLSX || {read, utils};
6
+ import {
7
+ getToken
8
+ } from '../../utils/auth';
9
+ import { getErrorMsg } from '@base/utils/index.js'
10
+
11
+ let configUtil = {
12
+ baseUrl: process.env.VUE_APP_BASE_API,
13
+ XLSX,
14
+ getToken
15
+ };
16
+ // importTimer / loadingObj 原为模块级单例:两个导入弹窗并存时后者覆盖前者引用,
17
+ // 前一个 interval(100ms/次)与 loading 永久失控——已改为实例属性 this.importTimer / this.loadingObj
18
+ tmixins = {
19
+ name: 'excelImport',
20
+ props: ['param'],
21
+ data() {
22
+ return {
23
+ excTime: 0,
24
+ showImportDialog: false,
25
+ showImportDialog2: false,
26
+ falseValue: false,
27
+ fileRaw: false,
28
+ isEnd: false,
29
+ currentIndex: 0,
30
+ excelTemplate: "",
31
+ prefix: '/user',
32
+ dataSize: 0,
33
+ totalSuccessNum: 0,
34
+ totalErrorNum: 0,
35
+ percentageNum: 0,
36
+ successRows: [],
37
+ failRows: [],
38
+ oriCols: [],
39
+ showImportResult: false,
40
+ resultType: '',
41
+ option: {},
42
+ showContent: false,
43
+ resOption: {}
44
+ }
45
+ },
46
+ created() {
47
+
48
+ },
49
+ beforeDestroy() {
50
+ this.clearImportTimer()
51
+ },
52
+ methods: {
53
+ initResGird() {
54
+ var that = this;
55
+ let tableRef = 'resGrid';
56
+ let columns = [{
57
+ type: 'checkbox',
58
+ fixed: 'left',
59
+ width: 48,
60
+ resizable: false,
61
+ headerClassName: 'vxe-hcs',
62
+ className: 'vxe-hcs'
63
+ },
64
+ {
65
+ field: 'impNumber',
66
+ title: this.$t2('行号', 'components.excelImport.impNumber'),
67
+ width: 100,
68
+ fixed: 'left'
69
+ },
70
+ {
71
+ field: '_resultContent',
72
+ title: this.$t2('结果', 'components.excelImport.resultContent'),
73
+ width: 250,
74
+ fixed: 'left',
75
+ slots: {
76
+ default: ({
77
+ row,
78
+ $rowIndex,
79
+ $table
80
+ }) => {
81
+ return that.handleRes(row._resultContent);
82
+ }
83
+ }
84
+ }
85
+ ];
86
+ let cCols = this.oriCols.map((oriCol, index) => {
87
+ let col = {
88
+ field: oriCol.field,
89
+ title: oriCol.title,
90
+ width: 150
91
+ };
92
+ if (index == 0) {
93
+ col.fixed = 'left';
94
+ }
95
+ return col;
96
+ });
97
+ columns = columns.concat(cCols);
98
+
99
+ let tableOption = {
100
+ vue: this,
101
+ tableRef: tableRef,
102
+ tableNameRequired: false,
103
+ columns: columns,
104
+ config: {
105
+ toolbarConfig: {
106
+ custom: false
107
+ }
108
+ }
109
+ };
110
+
111
+ this.$vxeTableUtil.initVxeTable(tableOption).then(opts => {
112
+ this.resOption = opts;
113
+ });
114
+ },
115
+ exc() {
116
+ this.option = this.param;
117
+ this.showContent = true;
118
+ this.showImportDialog = true;
119
+ this.showImportDialog2 = false;
120
+ },
121
+ showSuccessResult() {
122
+ this.showImportResult = true;
123
+ this.resultType = 1;
124
+ this.$nextTick(() => {
125
+ this.initResGird();
126
+ this.$nextTick(() => {
127
+ let tDatas = this.successRows.map((item, index) => {
128
+ // item.id = index;
129
+ return item;
130
+ });
131
+ this.$refs.resGrid.loadData(tDatas);
132
+ });
133
+ });
134
+ },
135
+ showErrorResult() {
136
+ this.showImportResult = true;
137
+ this.resultType = 0;
138
+ this.$nextTick(() => {
139
+ this.initResGird();
140
+ this.$nextTick(() => {
141
+ let tDatas = this.failRows.map((item, index) => {
142
+ // item.id = index;
143
+ return item;
144
+ });
145
+ this.$refs.resGrid.loadData(tDatas);
146
+ });
147
+ });
148
+ },
149
+ fileChange(file) {
150
+ if (file) {
151
+ this.fileRaw = file.raw;
152
+ } else {
153
+ this.fileRaw = false;
154
+ }
155
+ },
156
+ dialogClose1() {
157
+ this.$emit("update:visiable", false);
158
+ this.showContent = false;
159
+ },
160
+ async dialogPrimary1() {
161
+ let that = this;
162
+ let option = this.option;
163
+ let saveUrl = option.saveUrl;
164
+ if (!saveUrl) {
165
+ this.dialogPrimary3();
166
+ return false;
167
+ }
168
+
169
+ if (!(this.fileRaw)) {
170
+ this.$baseAlert(this.$t2('请上传附件', 'components.excelImport.warmMsg1'));
171
+ return false;
172
+ }
173
+ this.createImportTimer();
174
+ this.showImportDialog = false;
175
+ if (!option.onConfirm) {
176
+ this.showImportDialog2 = true;
177
+ }
178
+ this.$nextTick(() => {
179
+ try {
180
+ this.readExcel(this.fileRaw, function (resultData) {
181
+ if (option.onConfirm) {
182
+ option.onConfirm(resultData.data, that.fileRaw);
183
+ } else {
184
+ that.syncDataForImport({
185
+ multi: false,
186
+ data: resultData,
187
+ saveUrl: saveUrl
188
+ });
189
+ }
190
+ });
191
+ } catch (et) {
192
+ that.clearImportTimer();
193
+ console.error(et);
194
+ }
195
+ });
196
+ },
197
+ async langdialogPrimary() {
198
+ let that = this;
199
+ let option = this.option;
200
+ let saveUrl = option.saveUrl;
201
+ if (!saveUrl) {
202
+ this.dialogPrimary3();
203
+ return false;
204
+ }
205
+
206
+ if (!(this.fileRaw)) {
207
+ this.$baseAlert(this.$t2('请上传附件', 'components.excelImport.warmMsg1'));
208
+ return false;
209
+ }
210
+ this.createImportTimer();
211
+ this.showImportDialog = false;
212
+ if (!option.onConfirm) {
213
+ this.showImportDialog2 = true;
214
+ }
215
+ this.$nextTick(() => {
216
+ try {
217
+ this.readExcel(this.fileRaw, function (resultData) {
218
+ if (option.onConfirm) {
219
+ option.onConfirm(resultData.data, that.fileRaw);
220
+ } else {
221
+ that.syncDataForImport({
222
+ multi: false,
223
+ data: resultData,
224
+ saveUrl: saveUrl
225
+ });
226
+ }
227
+ });
228
+ } catch (et) {
229
+ that.clearImportTimer();
230
+ console.error(et);
231
+ }
232
+ });
233
+ },
234
+ dialogClose2() {
235
+ this.clearImportTimer();
236
+ this.showImportDialog2 = false;
237
+ this.showContent = false;
238
+ this.option.callback && this.option.callback();
239
+ },
240
+ dialogPrimary2() {
241
+ this.clearImportTimer();
242
+ this.showImportDialog2 = false;
243
+ this.showContent = false;
244
+ this.option.callback && this.option.callback(this.resultData);
245
+ },
246
+ async readExcel(file, callback) {
247
+ let that = this;
248
+ let option = this.option;
249
+
250
+ const fileReader = new FileReader();
251
+ fileReader.onload = async (ev) => {
252
+ var resultData;
253
+ try {
254
+ /*const arrayBuffer = ev.target.result;
255
+ const decoder = new TextDecoder('gbk'); // 指定为 GBK 编码
256
+ const fileContent = decoder.decode(arrayBuffer);*/
257
+
258
+ let fileContent = ev.target.result
259
+ const data = JSON.parse(fileContent);
260
+
261
+ var titles = Object.keys(data[0]);
262
+ var fields = titles;
263
+ var columns = [];
264
+ var cols = fields.map(item => {
265
+ return {
266
+ field: item,
267
+ title: item,
268
+ width: 100,
269
+ }
270
+ });
271
+ var oriCols = JSON.parse(JSON.stringify(cols));//列信息
272
+ this.oriCols = oriCols;
273
+
274
+ resultData = {
275
+ data: data,
276
+ titles: titles,
277
+ fields: fields,
278
+ oriCols: oriCols
279
+ };
280
+ this.resultData = resultData;
281
+ callback(resultData);
282
+ } catch (et) {
283
+ that.showContent = false;
284
+ that.clearImportTimer();
285
+ console.error(et)
286
+ }
287
+ };
288
+ // fileReader.readAsBinaryString(file);
289
+ fileReader.readAsText(file, 'UTF-8');
290
+
291
+
292
+ },
293
+ syncDataForImport(opts) {
294
+ let that = this;
295
+ var multi = this.option.multi;
296
+ var resultData = opts.data;
297
+ var datas = resultData.data;
298
+ var titles = resultData.titles;
299
+ var fields = resultData.fields;
300
+ let uniqueFields = resultData.uniqueFields || [];
301
+ var saveUrl = opts.saveUrl;
302
+ var size = datas.length;
303
+ var index = 0;
304
+ var successNum = 0;
305
+ var failNum = 0;
306
+ var dialogObj = this.$refs.importDialog.$el;
307
+ var successNumObj = dialogObj.querySelector(".successNum");
308
+ var failNumObj = dialogObj.querySelector(".failNum");
309
+ var percentageObj = dialogObj.querySelector(".percentage");
310
+ var doneNumObj = dialogObj.querySelector(".doneNum");
311
+ dialogObj.querySelector(".dataSize").innerText = size;
312
+
313
+ that.successRows = [];
314
+ that.failRows = [];
315
+
316
+ var multiSize = opts.multiSize || 2;
317
+
318
+ let groupIndex = 0;
319
+ let groupDatas = [];
320
+
321
+ var compareV = function (property) {
322
+ return function (a, b) {
323
+ var value1 = a[property];
324
+ var value2 = b[property];
325
+ return value1 - value2;
326
+ }
327
+ }
328
+
329
+ var prevHandleData = function (percentageStr, excNum) {
330
+
331
+ successNumObj.innerText = successNum;
332
+ failNumObj.innerText = failNum;
333
+ doneNumObj.innerText = successNum + failNum;
334
+ that.percentageNum = percentageStr;
335
+ let isEnd = false;
336
+ if (uniqueFields.length) {
337
+ isEnd = groupIndex + 1 >= groupDatas.length;
338
+ } else {
339
+ isEnd = index + excNum >= size;
340
+ }
341
+ if (!isEnd) {
342
+ index = index + excNum;
343
+ groupIndex = groupIndex + 1;
344
+ setTimeout(function () {
345
+ handleData();
346
+ }, 1);
347
+ } else {
348
+ setTimeout(function () {
349
+ that.clearImportTimer();
350
+ }, 300);
351
+ }
352
+ };
353
+
354
+ let getDefaultValue = (row) => {
355
+ let value = null;
356
+ let defaultValue = this.option.defaultValue;
357
+ if (defaultValue) {
358
+ if (typeof defaultValue == "function") {
359
+ value = defaultValue(row) || {};
360
+ } else {
361
+ value = defaultValue || {};
362
+ }
363
+ }
364
+ return value;
365
+ }
366
+
367
+ let handleData = () => {
368
+ if (!that.isEnd && index < size) {
369
+ let a = 1
370
+ var param;
371
+ var excNum;
372
+
373
+ var data = datas[index];
374
+ data.impSeq = index;
375
+ data.impNumber = index + 1;
376
+ excNum = 1;
377
+ datas[index] = data;
378
+
379
+ param = data;
380
+ let defaultValue = getDefaultValue(data);
381
+ if (defaultValue) {
382
+ Object.assign(param, defaultValue);
383
+ }
384
+
385
+ var percentageStr = parseInt((index + excNum) * 100 / size);
386
+ if (param == null || param.length == 0) {
387
+ if (that.showContent) {
388
+ prevHandleData(percentageStr, excNum);
389
+ }
390
+ return;
391
+ }
392
+
393
+ that.$http({
394
+ url: saveUrl,
395
+ method: "post",
396
+ data: param,
397
+ resultType: "special",
398
+ modal: false,
399
+ callback: (resultMsg) => {
400
+ var data = datas[index];
401
+ data._resultType = resultMsg.type;
402
+ data._resultContent = (resultMsg.type == "success") ? this.$t2('导入成功', 'components.excelImport.importSucess') : resultMsg.content;
403
+
404
+ if (resultMsg.type == "success") {
405
+ successNum++;
406
+ that.successRows.push(data);
407
+ } else {
408
+ failNum++;
409
+ that.failRows.push(data);
410
+ }
411
+ if (that.showContent) {
412
+ prevHandleData(percentageStr, excNum);
413
+ }
414
+ }
415
+ }).catch(function (et) {
416
+ that.isEnd = true;
417
+ that.clearImportTimer();
418
+ console.error(et);
419
+ });
420
+ }
421
+ }
422
+ handleData();
423
+ },
424
+ handleRes(val) {
425
+ /* var content = val;
426
+ var text = content;
427
+ if (content && content.indexOf("Exception") >= 0) {
428
+ var index0 = content.lastIndexOf("*]");
429
+ if (index0 >= 0) {
430
+ text = content.substr(index0);
431
+ if (text) {
432
+ var index1 = text.indexOf("Exception:");
433
+ if (index1 >= 0) {
434
+ text = text.substr(index1 + 10);
435
+ }
436
+ }
437
+ }
438
+ } */
439
+ let text = getErrorMsg(val)
440
+ return text;
441
+ },
442
+ exportToExcel() {
443
+ let str = this.resultType === 1 ? this.$t2('成功', 'components.excelImport.success') : this.$t2('失败', 'components.excelImport.fail');
444
+ let fileName = this.$t2('导入结果导出', 'components.excelImport.exportFileName') + '(' + str + ')';
445
+ let $grid = this.$refs.resGrid;
446
+ let columns = $grid.getColumns();
447
+ if (columns && columns.length) {
448
+ let fields = columns.filter((item, index) => {
449
+ return index > 0 && item.property;
450
+ }).map((item, index) => {
451
+ return item.property;
452
+ });
453
+ this.$refs.resGrid.exportData({
454
+ filename: fileName,
455
+ mode: 'all',
456
+ type: 'csv',
457
+ columns: fields
458
+ });
459
+ }
460
+ },
461
+ createImportTimer() {
462
+ this.excTime = 0;
463
+ let beginTime = new Date().getTime();
464
+ this.importTimer = setInterval(() => {
465
+ let nowTime = new Date().getTime();
466
+ let diffTime = (nowTime - beginTime) / 1000;
467
+ this.$set(this, 'excTime', this.$baseLodash.round(diffTime, 2));
468
+ }, 100);
469
+ },
470
+ clearImportTimer() {
471
+ clearInterval(this.importTimer);
472
+ this.importTimer = null;
473
+ this.loadingObj && this.loadingObj.close();
474
+ this.loadingObj = null;
475
+ },
476
+ async dialogPrimary3() {
477
+ if (!(this.fileRaw)) {
478
+ this.$baseAlert(this.$t2('请上传附件', 'components.excelImport.warmMsg1'));
479
+ return false;
480
+ }
481
+ let that = this;
482
+ let option = this.option;
483
+ this.loadingObj = this.$baseLoading({
484
+ target: document.body,
485
+ background: 'unset'
486
+ });
487
+ this.readExcel(this.fileRaw, function (resultData) {
488
+ try {
489
+ if (option.callback && option.callback(resultData) !== false) {
490
+ that.showImportDialog = false;
491
+ }
492
+ } catch (et) {
493
+ console.error(et);
494
+ }
495
+ setTimeout(function () {
496
+ that.loadingObj && that.loadingObj.close();
497
+ }, 200);
498
+ });
499
+ }
500
+ }
501
+ };
502
+ export const mixins = tmixins;