@fonixtree/magic-design 0.1.12 → 0.1.13

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.
@@ -0,0 +1,532 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.calFileMd5Fn = calFileMd5Fn;
7
+ exports.checkFileFn = checkFileFn;
8
+ exports.fileUpload = exports.chunksUpload = void 0;
9
+ exports.sliceFileUploadFn = sliceFileUploadFn;
10
+ exports.sliceFn = sliceFn;
11
+ exports.tellBackendMergeFn = tellBackendMergeFn;
12
+ exports.uploadFileCheck = void 0;
13
+
14
+ var _antd = require("antd");
15
+
16
+ var _sparkMd = _interopRequireDefault(require("spark-md5"));
17
+
18
+ var _commonUtil = require("src/components/utils/commonUtil");
19
+
20
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
21
+
22
+ var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
23
+ function adopt(value) {
24
+ return value instanceof P ? value : new P(function (resolve) {
25
+ resolve(value);
26
+ });
27
+ }
28
+
29
+ return new (P || (P = Promise))(function (resolve, reject) {
30
+ function fulfilled(value) {
31
+ try {
32
+ step(generator.next(value));
33
+ } catch (e) {
34
+ reject(e);
35
+ }
36
+ }
37
+
38
+ function rejected(value) {
39
+ try {
40
+ step(generator["throw"](value));
41
+ } catch (e) {
42
+ reject(e);
43
+ }
44
+ }
45
+
46
+ function step(result) {
47
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
48
+ }
49
+
50
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
51
+ });
52
+ };
53
+
54
+ var __generator = void 0 && (void 0).__generator || function (thisArg, body) {
55
+ var _ = {
56
+ label: 0,
57
+ sent: function sent() {
58
+ if (t[0] & 1) throw t[1];
59
+ return t[1];
60
+ },
61
+ trys: [],
62
+ ops: []
63
+ },
64
+ f,
65
+ y,
66
+ t,
67
+ g;
68
+ return g = {
69
+ next: verb(0),
70
+ "throw": verb(1),
71
+ "return": verb(2)
72
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
73
+ return this;
74
+ }), g;
75
+
76
+ function verb(n) {
77
+ return function (v) {
78
+ return step([n, v]);
79
+ };
80
+ }
81
+
82
+ function step(op) {
83
+ if (f) throw new TypeError("Generator is already executing.");
84
+
85
+ while (_) {
86
+ try {
87
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
88
+ if (y = 0, t) op = [op[0] & 2, t.value];
89
+
90
+ switch (op[0]) {
91
+ case 0:
92
+ case 1:
93
+ t = op;
94
+ break;
95
+
96
+ case 4:
97
+ _.label++;
98
+ return {
99
+ value: op[1],
100
+ done: false
101
+ };
102
+
103
+ case 5:
104
+ _.label++;
105
+ y = op[1];
106
+ op = [0];
107
+ continue;
108
+
109
+ case 7:
110
+ op = _.ops.pop();
111
+
112
+ _.trys.pop();
113
+
114
+ continue;
115
+
116
+ default:
117
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
118
+ _ = 0;
119
+ continue;
120
+ }
121
+
122
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
123
+ _.label = op[1];
124
+ break;
125
+ }
126
+
127
+ if (op[0] === 6 && _.label < t[1]) {
128
+ _.label = t[1];
129
+ t = op;
130
+ break;
131
+ }
132
+
133
+ if (t && _.label < t[2]) {
134
+ _.label = t[2];
135
+
136
+ _.ops.push(op);
137
+
138
+ break;
139
+ }
140
+
141
+ if (t[2]) _.ops.pop();
142
+
143
+ _.trys.pop();
144
+
145
+ continue;
146
+ }
147
+
148
+ op = body.call(thisArg, _);
149
+ } catch (e) {
150
+ op = [6, e];
151
+ y = 0;
152
+ } finally {
153
+ f = t = 0;
154
+ }
155
+ }
156
+
157
+ if (op[0] & 5) throw op[1];
158
+ return {
159
+ value: op[0] ? op[1] : void 0,
160
+ done: true
161
+ };
162
+ }
163
+ };
164
+
165
+ // 定义文件上传状态码
166
+ var fileStatus = {
167
+ 0: '文件不存在(没有上传过)',
168
+ 1: '文件已存在(曾经上传过)',
169
+ 2: '文件不完整(曾经上传中断过,可继续上传)'
170
+ };
171
+ /**
172
+ * 发请求,校验文件是否上传过,分三种情况:见:fileStatus
173
+ * */
174
+
175
+ function checkFileFn(_a) {
176
+ var fileMd5 = _a.fileMd5,
177
+ contentCatgId = _a.contentCatgId,
178
+ fileName = _a.fileName;
179
+ return __awaiter(this, void 0, void 0, function () {
180
+ return __generator(this, function (_b) {
181
+ switch (_b.label) {
182
+ case 0:
183
+ return [4
184
+ /*yield*/
185
+ , (0, _commonUtil.commonFetch)('/designer/v1/bigfile/check', {
186
+ fileHash: fileMd5,
187
+ contentCatgId: contentCatgId,
188
+ fileName: fileName
189
+ }, 'post')];
190
+
191
+ case 1:
192
+ return [2
193
+ /*return*/
194
+ , _b.sent()];
195
+ }
196
+ });
197
+ });
198
+ } // 文件分片函数
199
+
200
+
201
+ function sliceFn(file, chunkSize) {
202
+ var result = []; // 从第0字节开始切割,一次切割1 * 1024 * 1024字节
203
+
204
+ for (var i = 0; i < file.size; i += chunkSize) {
205
+ result.push(file.slice(i, i + chunkSize));
206
+ }
207
+
208
+ return result;
209
+ }
210
+ /**
211
+ * 分片上传请求接口
212
+ * */
213
+
214
+
215
+ function sliceFileUploadFn(formData) {
216
+ return __awaiter(this, void 0, void 0, function () {
217
+ return __generator(this, function (_a) {
218
+ switch (_a.label) {
219
+ case 0:
220
+ return [4
221
+ /*yield*/
222
+ , (0, _commonUtil.commonFetch)('/designer/v1/bigfile/upload', formData, 'post')];
223
+
224
+ case 1:
225
+ return [2
226
+ /*return*/
227
+ , _a.sent()];
228
+ }
229
+ });
230
+ });
231
+ }
232
+ /**
233
+ * 告知后端要去合并前端上传的文件了
234
+ * */
235
+
236
+
237
+ function tellBackendMergeFn(_a) {
238
+ var fileName = _a.fileName,
239
+ contentCatgId = _a.contentCatgId,
240
+ fileMd5 = _a.fileMd5,
241
+ chunks = _a.chunks;
242
+ return __awaiter(this, void 0, void 0, function () {
243
+ return __generator(this, function (_b) {
244
+ switch (_b.label) {
245
+ case 0:
246
+ return [4
247
+ /*yield*/
248
+ , (0, _commonUtil.commonFetch)('/designer/v1/bigfile/merge', {
249
+ fileHash: fileMd5,
250
+ contentCatgId: contentCatgId,
251
+ fileName: fileName,
252
+ chunks: chunks
253
+ }, 'post')];
254
+
255
+ case 1:
256
+ return [2
257
+ /*return*/
258
+ , _b.sent()];
259
+ }
260
+ });
261
+ });
262
+ }
263
+ /**
264
+ * 计算文件的md5值的函数
265
+ * chunks是blob数组,提前切割好备用 例:[Blob, ... , Blob]
266
+ * progressCallbackFn进度回调函数
267
+ * */
268
+
269
+
270
+ function calFileMd5Fn(chunks, progressCallbackFn) {
271
+ return new Promise(function (resolve, reject) {
272
+ // 准备从第0块开始读
273
+ var currentChunk = 0; // 实例化SparkMD5用于计算文件hash值
274
+
275
+ var spark = new _sparkMd["default"].ArrayBuffer(); // 实例化文件阅读器用于读取blob二进制文件
276
+
277
+ var fileReader = new FileReader(); // 兜一下错
278
+
279
+ fileReader.onerror = reject; // 文件读取器的onload方法表示读取完成,只要读取就会触发
280
+
281
+ fileReader.onload = function (e) {
282
+ if (progressCallbackFn) {
283
+ progressCallbackFn(Math.ceil(currentChunk / chunks.length * 100)); // 抛出一个函数,用于告知进度
284
+ }
285
+
286
+ spark.append(e.target.result); // 将二进制文件追加到spark中(官方方法)
287
+
288
+ currentChunk += 1; // 这个读完就加1,读取下一个blob
289
+ // 若未读取到最后一块,就继续读取;否则读取完成,Promise带出结果
290
+
291
+ if (currentChunk < chunks.length) {
292
+ fileReader.readAsArrayBuffer(chunks[currentChunk]);
293
+ } else {
294
+ resolve(spark.end()); // resolve出去告知结果
295
+ }
296
+ }; // 文件读取器的readAsArrayBuffer方法开始读取文件,从blob数组中的第0项开始
297
+
298
+
299
+ fileReader.readAsArrayBuffer(chunks[currentChunk]);
300
+ });
301
+ }
302
+ /**
303
+ * 第三步,上传文件(分片上传,一片文件就是一个请求)
304
+ * */
305
+
306
+
307
+ var fileUpload = function fileUpload(_a, cb) {
308
+ var formDataList = _a.formDataList,
309
+ fileName = _a.fileName,
310
+ contentCatgId = _a.contentCatgId,
311
+ fileMd5 = _a.fileMd5,
312
+ chunks = _a.chunks;
313
+ return __awaiter(void 0, void 0, void 0, function () {
314
+ var count, requestListFn, res, error_1;
315
+ return __generator(this, function (_b) {
316
+ switch (_b.label) {
317
+ case 0:
318
+ count = 0;
319
+ requestListFn = formDataList.map(function (_a) {
320
+ var formData = _a.formData;
321
+ return __awaiter(void 0, void 0, void 0, function () {
322
+ var res;
323
+ return __generator(this, function (_b) {
324
+ switch (_b.label) {
325
+ case 0:
326
+ return [4
327
+ /*yield*/
328
+ , sliceFileUploadFn(formData)];
329
+
330
+ case 1:
331
+ res = _b.sent();
332
+ count += 1;
333
+ cb(count / formDataList.length * 100);
334
+ return [2
335
+ /*return*/
336
+ , res];
337
+ }
338
+ });
339
+ });
340
+ });
341
+ _b.label = 1;
342
+
343
+ case 1:
344
+ _b.trys.push([1, 4,, 5]);
345
+
346
+ return [4
347
+ /*yield*/
348
+ , Promise.all(requestListFn)];
349
+
350
+ case 2:
351
+ _b.sent();
352
+
353
+ return [4
354
+ /*yield*/
355
+ , tellBackendMergeFn({
356
+ contentCatgId: contentCatgId,
357
+ fileName: fileName,
358
+ fileMd5: fileMd5,
359
+ chunks: chunks
360
+ })];
361
+
362
+ case 3:
363
+ res = _b.sent();
364
+
365
+ if (res.uploadState === 0) {
366
+ console.log('文件并合成功');
367
+ }
368
+
369
+ return [3
370
+ /*break*/
371
+ , 5];
372
+
373
+ case 4:
374
+ error_1 = _b.sent();
375
+
376
+ _antd.message.warning(fileStatus[res.uploadState]);
377
+
378
+ return [3
379
+ /*break*/
380
+ , 5];
381
+
382
+ case 5:
383
+ return [2
384
+ /*return*/
385
+ ];
386
+ }
387
+ });
388
+ });
389
+ };
390
+
391
+ exports.fileUpload = fileUpload;
392
+
393
+ var uploadFileCheck = function uploadFileCheck(_a, chunks, fileName, cb) {
394
+ var fileMd5 = _a.fileMd5,
395
+ contentCatgId = _a.contentCatgId;
396
+ return __awaiter(void 0, void 0, void 0, function () {
397
+ var doneFileList, res, formDataList;
398
+ return __generator(this, function (_b) {
399
+ switch (_b.label) {
400
+ case 0:
401
+ doneFileList = [];
402
+ return [4
403
+ /*yield*/
404
+ , checkFileFn({
405
+ fileMd5: fileMd5,
406
+ contentCatgId: contentCatgId,
407
+ fileName: fileName
408
+ })];
409
+
410
+ case 1:
411
+ res = _b.sent();
412
+ console.log('res: ', res); // 等于1曾经上传过,不需要再上传了
413
+
414
+ if (res.uploadState == 1) {
415
+ _antd.message.warning(fileStatus[res.uploadState]);
416
+
417
+ return [2
418
+ /*return*/
419
+ ]; // 拦截停下
420
+ } // 等于2表示曾经上传过一部分,现在要继续上传
421
+
422
+
423
+ if (res.uploadState == 2) {
424
+ // 若是文件曾上传过一部分,后端会返回上传过得部分的文件索引,前端通过索引可以知道哪些
425
+ // 上传过,做一个过滤,已上传的文件就不用继续上传了,上传未上传过的文件片
426
+ doneFileList = res.chunkNames.map(function (item) {
427
+ return item * 1; // 后端给到的是字符串索引,这里转成数字索引
428
+ });
429
+ console.log(fileStatus[res.uploadState]);
430
+ } // 等于0表示没有上传过,直接上传
431
+
432
+
433
+ if (res.uploadState == 0) {
434
+ console.log(fileStatus[res.uploadState]);
435
+ }
436
+
437
+ formDataList = []; // 说明没有上传过,组装一下,直接使用
438
+
439
+ if (doneFileList.length == 0) {
440
+ formDataList = chunks.map(function (item, index) {
441
+ // 后端接参大致有:文件片、文件分的片数、每次上传是第几片(索引)、文件名、此完整大文件hash值
442
+ // 具体后端定义的参数prop属性名,看他们如何定义的,这个无妨...
443
+ var formData = new FormData();
444
+ formData.append('file', item); // 使用FormData可以将blob文件转成二进制binary
445
+
446
+ formData.append('chunks', chunks.length);
447
+ formData.append('chunk', index);
448
+ formData.append('contentCatgId', contentCatgId);
449
+ formData.append('fileName', fileName);
450
+ formData.append('fileHash', fileMd5);
451
+ return {
452
+ formData: formData
453
+ };
454
+ });
455
+ } // 说明曾经上传过,需要过滤一下,曾经上传过的就不用再上传了
456
+ else {
457
+ formDataList = chunks.filter(function (_, index) {
458
+ return !doneFileList.includes(index);
459
+ }).map(function (item, index) {
460
+ var formData = new FormData();
461
+ formData.append('file', item); // 使用FormData可以将blob文件转成二进制binary
462
+
463
+ formData.append('chunks', chunks.length);
464
+ formData.append('chunk', index);
465
+ formData.append('contentCatgId', contentCatgId);
466
+ formData.append('fileName', fileName);
467
+ formData.append('fileHash', fileMd5);
468
+ return {
469
+ formData: formData
470
+ };
471
+ });
472
+ }
473
+
474
+ return [4
475
+ /*yield*/
476
+ , fileUpload({
477
+ formDataList: formDataList,
478
+ fileName: fileName,
479
+ contentCatgId: contentCatgId,
480
+ fileMd5: fileMd5,
481
+ chunks: chunks.length
482
+ }, cb)];
483
+
484
+ case 2:
485
+ _b.sent();
486
+
487
+ return [2
488
+ /*return*/
489
+ ];
490
+ }
491
+ });
492
+ });
493
+ };
494
+
495
+ exports.uploadFileCheck = uploadFileCheck;
496
+
497
+ var chunksUpload = function chunksUpload(_a, cb) {
498
+ var file = _a.file,
499
+ contentCatgId = _a.contentCatgId;
500
+ return __awaiter(void 0, void 0, void 0, function () {
501
+ var CHUNK_SIZE, chunks, fileMd5;
502
+ return __generator(this, function (_b) {
503
+ switch (_b.label) {
504
+ case 0:
505
+ CHUNK_SIZE = 5 * 1024 * 1024;
506
+ chunks = sliceFn(file, CHUNK_SIZE);
507
+ return [4
508
+ /*yield*/
509
+ , calFileMd5Fn(chunks)];
510
+
511
+ case 1:
512
+ fileMd5 = _b.sent();
513
+ return [4
514
+ /*yield*/
515
+ , uploadFileCheck({
516
+ fileMd5: fileMd5,
517
+ contentCatgId: contentCatgId
518
+ }, chunks, file.name, cb)];
519
+
520
+ case 2:
521
+ _b.sent(); // 然后执行文件检查操作
522
+
523
+
524
+ return [2
525
+ /*return*/
526
+ ];
527
+ }
528
+ });
529
+ });
530
+ };
531
+
532
+ exports.chunksUpload = chunksUpload;
@@ -622,7 +622,7 @@ function (_super) {
622
622
  },
623
623
  pause: function pause() {
624
624
  if (_this.aliPlayer) {
625
- _this.aliPlayer.play();
625
+ _this.aliPlayer.pause();
626
626
  }
627
627
 
628
628
  if (_this.ytPlayer) {
@@ -710,7 +710,8 @@ function (_super) {
710
710
  }, /*#__PURE__*/_react["default"].createElement(_antd.ConfigProvider, {
711
711
  getPopupContainer: function getPopupContainer(triggerNode) {
712
712
  return triggerNode ? triggerNode.parentNode : document.querySelector('[magic_design]');
713
- }
713
+ },
714
+ prefixCls: "cylon"
714
715
  }, /*#__PURE__*/_react["default"].createElement("div", {
715
716
  magic_design: ""
716
717
  }, /*#__PURE__*/_react["default"].createElement("div", {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fonixtree/magic-design",
3
3
  "author": "Cylon Team",
4
- "version": "0.1.12",
4
+ "version": "0.1.13",
5
5
  "description": "Magic Design",
6
6
  "license": "MIT",
7
7
  "module": "es/index.js",
@@ -35,7 +35,8 @@
35
35
  "react-slick": "^0.29.0",
36
36
  "replace": "^1.2.1",
37
37
  "shortid": "^2.2.16",
38
- "slick-carousel": "^1.8.1"
38
+ "slick-carousel": "^1.8.1",
39
+ "spark-md5": "^3.0.2"
39
40
  },
40
41
  "peerDependencies": {
41
42
  "react": ">=16.11.0",