ydb-components-material 0.1.200 → 0.1.202
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/build/docs/404.html +3 -3
- package/build/docs/_demos/:uuid +3 -3
- package/build/docs/colorful-button.html +3 -3
- package/build/docs/colorful-input.html +3 -3
- package/build/docs/index.html +3 -3
- package/build/docs/{umi.c6775933.css → umi.a4eecfb4.css} +1 -1
- package/build/docs/{umi.1b673d4e.js → umi.fcaa9315.js} +1 -1
- package/build/docs/~demos/:uuid.html +3 -3
- package/build/docs/~demos/colorful-button-demo.html +3 -3
- package/build/docs/~demos/colorful-input-demo.html +3 -3
- package/build/lowcode/assets-daily.json +11 -11
- package/build/lowcode/assets-dev.json +2 -2
- package/build/lowcode/assets-prod.json +11 -11
- package/build/lowcode/meta.js +1 -1
- package/build/lowcode/render/default/view.css +1 -1
- package/build/lowcode/render/default/view.js +1 -1
- package/build/lowcode/view.css +1 -1
- package/build/lowcode/view.js +1 -1
- package/dist/BizComps.css +1 -1
- package/dist/BizComps.js +1 -1
- package/dist/BizComps.js.map +1 -1
- package/es/components/file-list/index.js +19 -14
- package/es/components/file-list/merge.d.ts +1 -0
- package/es/components/file-list/merge.js +113 -41
- package/es/components/file-list/merge.scss +18 -0
- package/es/components/sign-file/mobile.js +0 -1
- package/lib/components/file-list/index.js +19 -14
- package/lib/components/file-list/merge.d.ts +1 -0
- package/lib/components/file-list/merge.js +114 -42
- package/lib/components/file-list/merge.scss +18 -0
- package/lib/components/sign-file/mobile.js +0 -1
- package/lowcode_es/meta.js +1 -1
- package/lowcode_lib/meta.js +1 -1
- package/package.json +3 -3
|
@@ -200,6 +200,18 @@ var FileList = function FileList(_ref) {
|
|
|
200
200
|
handleChange(value, 0, curMerge.index, curMerge.subIndex);
|
|
201
201
|
setShowMerge(false);
|
|
202
202
|
};
|
|
203
|
+
|
|
204
|
+
// 删除之后调用:只要没到 10 个上限,就保证末尾是一个空槽(渲染成「上传材料」按钮)。
|
|
205
|
+
// 末尾已经是空槽或列表为空(空列表也要补一个)时按需处理,已达上限则不动。
|
|
206
|
+
var ensureEmptySlot = function ensureEmptySlot(list) {
|
|
207
|
+
if (list.length >= 10) return list;
|
|
208
|
+
var last = list[list.length - 1];
|
|
209
|
+
if (last && !last.fileId) return list;
|
|
210
|
+
list.push({
|
|
211
|
+
fileId: ''
|
|
212
|
+
});
|
|
213
|
+
return list;
|
|
214
|
+
};
|
|
203
215
|
var handleChange = function handleChange(value, fileIndex, index, subIndex) {
|
|
204
216
|
console.log('handleChange', value, fileIndex, index, subIndex);
|
|
205
217
|
// 先找到一级目录
|
|
@@ -210,14 +222,9 @@ var FileList = function FileList(_ref) {
|
|
|
210
222
|
if (!value) {
|
|
211
223
|
oneLevelItem.subMaterials[subIndex].isSmart = false;
|
|
212
224
|
oneLevelItem.subMaterials[subIndex].isShareFile = false;
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
fileId: ''
|
|
217
|
-
}];
|
|
218
|
-
} else {
|
|
219
|
-
oneLevelItem.subMaterials[subIndex].fileList.splice(fileIndex, 1);
|
|
220
|
-
}
|
|
225
|
+
oneLevelItem.subMaterials[subIndex].fileList.splice(fileIndex, 1);
|
|
226
|
+
// 删完保证末尾还有「上传材料」按钮
|
|
227
|
+
ensureEmptySlot(oneLevelItem.subMaterials[subIndex].fileList);
|
|
221
228
|
} else {
|
|
222
229
|
// 如果当前这个位置的fileId是空的。说明这次修改是新增
|
|
223
230
|
var isAdd = !oneLevelItem.subMaterials[subIndex].fileList[fileIndex].fileId;
|
|
@@ -233,11 +240,8 @@ var FileList = function FileList(_ref) {
|
|
|
233
240
|
oneLevelItem.isSmart = false;
|
|
234
241
|
oneLevelItem.isShareFile = false;
|
|
235
242
|
oneLevelItem.fileList.splice(fileIndex, 1);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
fileId: ''
|
|
239
|
-
});
|
|
240
|
-
}
|
|
243
|
+
// 删完保证末尾还有「上传材料」按钮
|
|
244
|
+
ensureEmptySlot(oneLevelItem.fileList);
|
|
241
245
|
} else {
|
|
242
246
|
// 如果当前这个位置的fileId是空的。说明这次修改是新增
|
|
243
247
|
var _isAdd = !oneLevelItem.fileList[fileIndex].fileId;
|
|
@@ -445,7 +449,8 @@ var FileList = function FileList(_ref) {
|
|
|
445
449
|
tokenTY: tokenTY,
|
|
446
450
|
materialName: curMerge.materialName,
|
|
447
451
|
openLoading: openLoading,
|
|
448
|
-
closeLoading: closeLoading
|
|
452
|
+
closeLoading: closeLoading,
|
|
453
|
+
isPC: isPC
|
|
449
454
|
}));
|
|
450
455
|
};
|
|
451
456
|
export default FileList;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _Message from "@alifd/next/es/message";
|
|
1
2
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
3
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
4
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
@@ -18,19 +19,23 @@ var Merge = function Merge(_ref) {
|
|
|
18
19
|
tokenTY = _ref.tokenTY,
|
|
19
20
|
openLoading = _ref.openLoading,
|
|
20
21
|
closeLoading = _ref.closeLoading,
|
|
21
|
-
close = _ref.close
|
|
22
|
+
close = _ref.close,
|
|
23
|
+
isPC = _ref.isPC;
|
|
22
24
|
var _useState = useState(''),
|
|
23
25
|
viewUrl = _useState[0],
|
|
24
26
|
setViewUrl = _useState[1];
|
|
25
|
-
var _useState2 = useState(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
var _useState3 = useState(
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
var _useState4 = useState(
|
|
32
|
-
|
|
33
|
-
|
|
27
|
+
var _useState2 = useState(false),
|
|
28
|
+
isShowPreview = _useState2[0],
|
|
29
|
+
setIsShowPreview = _useState2[1];
|
|
30
|
+
var _useState3 = useState(''),
|
|
31
|
+
viewPdfUrl = _useState3[0],
|
|
32
|
+
setViewPdfUrl = _useState3[1];
|
|
33
|
+
var _useState4 = useState(null),
|
|
34
|
+
blob = _useState4[0],
|
|
35
|
+
setBlob = _useState4[1];
|
|
36
|
+
var _useState5 = useState(fileList),
|
|
37
|
+
materialList = _useState5[0],
|
|
38
|
+
setMaterialList = _useState5[1];
|
|
34
39
|
|
|
35
40
|
// 置顶
|
|
36
41
|
var top = function top(index) {
|
|
@@ -185,9 +190,9 @@ var Merge = function Merge(_ref) {
|
|
|
185
190
|
};
|
|
186
191
|
|
|
187
192
|
// 核心:多张图片合并PDF
|
|
188
|
-
var
|
|
193
|
+
var buildPdfBlob = /*#__PURE__*/function () {
|
|
189
194
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
190
|
-
var pdf, i, fileUrl, _blob, file, img, targetWidth, scale, targetHeight
|
|
195
|
+
var pdf, i, fileUrl, _blob, file, img, targetWidth, scale, targetHeight;
|
|
191
196
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
192
197
|
while (1) switch (_context2.prev = _context2.next) {
|
|
193
198
|
case 0:
|
|
@@ -238,56 +243,112 @@ var Merge = function Merge(_ref) {
|
|
|
238
243
|
_context2.next = 1;
|
|
239
244
|
break;
|
|
240
245
|
case 5:
|
|
241
|
-
|
|
242
|
-
pdfBlob = pdf.output('blob');
|
|
243
|
-
setBlob(pdfBlob);
|
|
244
|
-
|
|
245
|
-
// 2. 创建 Blob URL
|
|
246
|
-
blobUrl = URL.createObjectURL(pdfBlob);
|
|
247
|
-
setViewPdfUrl(blobUrl);
|
|
246
|
+
return _context2.abrupt("return", pdf.output('blob'));
|
|
248
247
|
case 6:
|
|
249
248
|
case "end":
|
|
250
249
|
return _context2.stop();
|
|
251
250
|
}
|
|
252
251
|
}, _callee2);
|
|
253
252
|
}));
|
|
254
|
-
return function
|
|
253
|
+
return function buildPdfBlob() {
|
|
255
254
|
return _ref3.apply(this, arguments);
|
|
256
255
|
};
|
|
257
256
|
}();
|
|
258
|
-
|
|
257
|
+
|
|
258
|
+
// PC:先拼出 PDF,再用 iframe 交给浏览器内置的 PDF 查看器预览
|
|
259
|
+
var imgsToPdf = /*#__PURE__*/function () {
|
|
259
260
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
260
|
-
var
|
|
261
|
+
var pdfBlob;
|
|
261
262
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
262
263
|
while (1) switch (_context3.prev = _context3.next) {
|
|
264
|
+
case 0:
|
|
265
|
+
_context3.next = 1;
|
|
266
|
+
return buildPdfBlob();
|
|
267
|
+
case 1:
|
|
268
|
+
pdfBlob = _context3.sent;
|
|
269
|
+
setBlob(pdfBlob);
|
|
270
|
+
setViewPdfUrl(URL.createObjectURL(pdfBlob));
|
|
271
|
+
setIsShowPreview(true);
|
|
272
|
+
case 2:
|
|
273
|
+
case "end":
|
|
274
|
+
return _context3.stop();
|
|
275
|
+
}
|
|
276
|
+
}, _callee3);
|
|
277
|
+
}));
|
|
278
|
+
return function imgsToPdf() {
|
|
279
|
+
return _ref4.apply(this, arguments);
|
|
280
|
+
};
|
|
281
|
+
}();
|
|
282
|
+
|
|
283
|
+
// 移动端:WebView 没有内置 PDF 查看器(iframe 里的 blob PDF 渲染不出来),
|
|
284
|
+
// 直接按顺序滚动预览图片,内容与 PDF 一致;PDF 留到点「确认无误」时再生成
|
|
285
|
+
var openImgPreview = function openImgPreview() {
|
|
286
|
+
return setIsShowPreview(true);
|
|
287
|
+
};
|
|
288
|
+
var previewMaterial = function previewMaterial() {
|
|
289
|
+
return isPC ? imgsToPdf() : openImgPreview();
|
|
290
|
+
};
|
|
291
|
+
var uploadPdf = /*#__PURE__*/function () {
|
|
292
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
293
|
+
var pdfBlob, formData, response, res, _t2, _t3;
|
|
294
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
295
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
263
296
|
case 0:
|
|
264
297
|
openLoading();
|
|
298
|
+
_context4.prev = 1;
|
|
299
|
+
_t2 = blob;
|
|
300
|
+
if (_t2) {
|
|
301
|
+
_context4.next = 3;
|
|
302
|
+
break;
|
|
303
|
+
}
|
|
304
|
+
_context4.next = 2;
|
|
305
|
+
return buildPdfBlob();
|
|
306
|
+
case 2:
|
|
307
|
+
_t2 = _context4.sent;
|
|
308
|
+
case 3:
|
|
309
|
+
pdfBlob = _t2;
|
|
310
|
+
if (!blob) setBlob(pdfBlob);
|
|
265
311
|
formData = new FormData();
|
|
266
|
-
formData.append('file',
|
|
312
|
+
formData.append('file', pdfBlob, materialName + '.pdf');
|
|
267
313
|
formData.append('open', true);
|
|
268
|
-
|
|
314
|
+
_context4.next = 4;
|
|
315
|
+
return fetch(baseUrl + "/declaration/material/file/files/api", {
|
|
269
316
|
method: 'POST',
|
|
270
317
|
body: formData,
|
|
271
318
|
headers: {
|
|
272
319
|
'Authorization': tokenTY || ''
|
|
273
320
|
}
|
|
274
|
-
}).then(function (response) {
|
|
275
|
-
return response.json();
|
|
276
|
-
}).then(function (res) {
|
|
277
|
-
console.log(res);
|
|
278
|
-
valChange(_extends({}, res, {
|
|
279
|
-
fileName: materialName + '.pdf'
|
|
280
|
-
}));
|
|
281
|
-
closeLoading();
|
|
282
321
|
});
|
|
283
|
-
case
|
|
322
|
+
case 4:
|
|
323
|
+
response = _context4.sent;
|
|
324
|
+
_context4.next = 5;
|
|
325
|
+
return response.json();
|
|
326
|
+
case 5:
|
|
327
|
+
res = _context4.sent;
|
|
328
|
+
console.log(res);
|
|
329
|
+
valChange(_extends({}, res, {
|
|
330
|
+
fileName: materialName + '.pdf'
|
|
331
|
+
}));
|
|
332
|
+
_context4.next = 7;
|
|
333
|
+
break;
|
|
334
|
+
case 6:
|
|
335
|
+
_context4.prev = 6;
|
|
336
|
+
_t3 = _context4["catch"](1);
|
|
337
|
+
console.error(_t3);
|
|
338
|
+
_Message.error('生成或上传失败,请重试');
|
|
339
|
+
case 7:
|
|
340
|
+
_context4.prev = 7;
|
|
341
|
+
// 原来只在成功分支里关,失败时全屏 loading 会一直挂着
|
|
342
|
+
closeLoading();
|
|
343
|
+
return _context4.finish(7);
|
|
344
|
+
case 8:
|
|
284
345
|
case "end":
|
|
285
|
-
return
|
|
346
|
+
return _context4.stop();
|
|
286
347
|
}
|
|
287
|
-
},
|
|
348
|
+
}, _callee4, null, [[1, 6, 7, 8]]);
|
|
288
349
|
}));
|
|
289
350
|
return function uploadPdf() {
|
|
290
|
-
return
|
|
351
|
+
return _ref5.apply(this, arguments);
|
|
291
352
|
};
|
|
292
353
|
}();
|
|
293
354
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -355,7 +416,7 @@ var Merge = function Merge(_ref) {
|
|
|
355
416
|
onClick: close
|
|
356
417
|
}, "\u4E0A\u4E00\u6B65"), /*#__PURE__*/React.createElement("div", {
|
|
357
418
|
className: "preview btn",
|
|
358
|
-
onClick:
|
|
419
|
+
onClick: previewMaterial
|
|
359
420
|
}, "\u9884\u89C8\u6750\u6599")), viewUrl && /*#__PURE__*/React.createElement("div", {
|
|
360
421
|
className: "viewImg"
|
|
361
422
|
}, /*#__PURE__*/React.createElement(CloseOutlined, {
|
|
@@ -367,15 +428,26 @@ var Merge = function Merge(_ref) {
|
|
|
367
428
|
className: "view",
|
|
368
429
|
src: viewUrl,
|
|
369
430
|
alt: ""
|
|
370
|
-
})),
|
|
431
|
+
})), isShowPreview && /*#__PURE__*/React.createElement("div", {
|
|
371
432
|
className: "view_pdf"
|
|
372
|
-
}, /*#__PURE__*/React.createElement("iframe", {
|
|
433
|
+
}, isPC ? /*#__PURE__*/React.createElement("iframe", {
|
|
373
434
|
src: viewPdfUrl + '#toolbar=0&navpanes=0&scrollbar=0&messages=0&statusbar=0',
|
|
374
435
|
id: "iframe",
|
|
375
436
|
frameBorder: "0",
|
|
376
437
|
height: "95%",
|
|
377
438
|
width: "100%"
|
|
378
|
-
})
|
|
439
|
+
}) :
|
|
440
|
+
/*#__PURE__*/
|
|
441
|
+
// 移动端 WebView 没有内置 PDF 查看器,iframe 里的 blob PDF 渲染不出来,改为直接滚动预览图片
|
|
442
|
+
React.createElement("div", {
|
|
443
|
+
className: "view_imgs"
|
|
444
|
+
}, materialList.map(function (item) {
|
|
445
|
+
return /*#__PURE__*/React.createElement("img", {
|
|
446
|
+
key: item.fileId,
|
|
447
|
+
src: item.fileUrl,
|
|
448
|
+
alt: ""
|
|
449
|
+
});
|
|
450
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
379
451
|
className: "bottom_btn",
|
|
380
452
|
style: {
|
|
381
453
|
background: '#fff',
|
|
@@ -384,7 +456,7 @@ var Merge = function Merge(_ref) {
|
|
|
384
456
|
}, /*#__PURE__*/React.createElement("div", {
|
|
385
457
|
className: "previous btn",
|
|
386
458
|
onClick: function onClick() {
|
|
387
|
-
return
|
|
459
|
+
return setIsShowPreview(false);
|
|
388
460
|
}
|
|
389
461
|
}, "\u8FD4\u56DE\u4FEE\u6539"), /*#__PURE__*/React.createElement("div", {
|
|
390
462
|
className: "preview btn",
|
|
@@ -112,6 +112,24 @@
|
|
|
112
112
|
height: 100%;
|
|
113
113
|
z-index: 999;
|
|
114
114
|
}
|
|
115
|
+
// 移动端:按顺序滚动预览待合并的图片(代替渲染不出来的 PDF iframe)
|
|
116
|
+
.view_imgs {
|
|
117
|
+
height: 100%;
|
|
118
|
+
box-sizing: border-box;
|
|
119
|
+
overflow-y: auto;
|
|
120
|
+
-webkit-overflow-scrolling: touch;
|
|
121
|
+
background: #ffffff;
|
|
122
|
+
// 底部留出固定按钮的位置,别让最后一张图被压住
|
|
123
|
+
padding: 12px 12px 100px;
|
|
124
|
+
|
|
125
|
+
img {
|
|
126
|
+
display: block;
|
|
127
|
+
width: 100%;
|
|
128
|
+
margin-bottom: 12px;
|
|
129
|
+
border-radius: 4px;
|
|
130
|
+
background: #ffffff;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
115
133
|
.viewImg {
|
|
116
134
|
background-color: #3333336a;
|
|
117
135
|
position: fixed;
|
|
@@ -22,7 +22,6 @@ var SignFileMobile = function SignFileMobile(props) {
|
|
|
22
22
|
var _useSignFile = useSignFile(props, {
|
|
23
23
|
withThumbnail: true
|
|
24
24
|
}),
|
|
25
|
-
fileName = _useSignFile.fileName,
|
|
26
25
|
originalFileId = _useSignFile.originalFileId,
|
|
27
26
|
guideImg = _useSignFile.guideImg,
|
|
28
27
|
thumbnail = _useSignFile.thumbnail,
|
|
@@ -206,6 +206,18 @@ var FileList = function FileList(_ref) {
|
|
|
206
206
|
handleChange(value, 0, curMerge.index, curMerge.subIndex);
|
|
207
207
|
setShowMerge(false);
|
|
208
208
|
};
|
|
209
|
+
|
|
210
|
+
// 删除之后调用:只要没到 10 个上限,就保证末尾是一个空槽(渲染成「上传材料」按钮)。
|
|
211
|
+
// 末尾已经是空槽或列表为空(空列表也要补一个)时按需处理,已达上限则不动。
|
|
212
|
+
var ensureEmptySlot = function ensureEmptySlot(list) {
|
|
213
|
+
if (list.length >= 10) return list;
|
|
214
|
+
var last = list[list.length - 1];
|
|
215
|
+
if (last && !last.fileId) return list;
|
|
216
|
+
list.push({
|
|
217
|
+
fileId: ''
|
|
218
|
+
});
|
|
219
|
+
return list;
|
|
220
|
+
};
|
|
209
221
|
var handleChange = function handleChange(value, fileIndex, index, subIndex) {
|
|
210
222
|
console.log('handleChange', value, fileIndex, index, subIndex);
|
|
211
223
|
// 先找到一级目录
|
|
@@ -216,14 +228,9 @@ var FileList = function FileList(_ref) {
|
|
|
216
228
|
if (!value) {
|
|
217
229
|
oneLevelItem.subMaterials[subIndex].isSmart = false;
|
|
218
230
|
oneLevelItem.subMaterials[subIndex].isShareFile = false;
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
fileId: ''
|
|
223
|
-
}];
|
|
224
|
-
} else {
|
|
225
|
-
oneLevelItem.subMaterials[subIndex].fileList.splice(fileIndex, 1);
|
|
226
|
-
}
|
|
231
|
+
oneLevelItem.subMaterials[subIndex].fileList.splice(fileIndex, 1);
|
|
232
|
+
// 删完保证末尾还有「上传材料」按钮
|
|
233
|
+
ensureEmptySlot(oneLevelItem.subMaterials[subIndex].fileList);
|
|
227
234
|
} else {
|
|
228
235
|
// 如果当前这个位置的fileId是空的。说明这次修改是新增
|
|
229
236
|
var isAdd = !oneLevelItem.subMaterials[subIndex].fileList[fileIndex].fileId;
|
|
@@ -239,11 +246,8 @@ var FileList = function FileList(_ref) {
|
|
|
239
246
|
oneLevelItem.isSmart = false;
|
|
240
247
|
oneLevelItem.isShareFile = false;
|
|
241
248
|
oneLevelItem.fileList.splice(fileIndex, 1);
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
fileId: ''
|
|
245
|
-
});
|
|
246
|
-
}
|
|
249
|
+
// 删完保证末尾还有「上传材料」按钮
|
|
250
|
+
ensureEmptySlot(oneLevelItem.fileList);
|
|
247
251
|
} else {
|
|
248
252
|
// 如果当前这个位置的fileId是空的。说明这次修改是新增
|
|
249
253
|
var _isAdd = !oneLevelItem.fileList[fileIndex].fileId;
|
|
@@ -451,7 +455,8 @@ var FileList = function FileList(_ref) {
|
|
|
451
455
|
tokenTY: tokenTY,
|
|
452
456
|
materialName: curMerge.materialName,
|
|
453
457
|
openLoading: openLoading,
|
|
454
|
-
closeLoading: closeLoading
|
|
458
|
+
closeLoading: closeLoading,
|
|
459
|
+
isPC: isPC
|
|
455
460
|
}));
|
|
456
461
|
};
|
|
457
462
|
var _default = exports["default"] = FileList;
|
|
@@ -4,6 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
exports.__esModule = true;
|
|
5
5
|
exports["default"] = void 0;
|
|
6
6
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
7
|
+
var _message = _interopRequireDefault(require("@alifd/next/lib/message"));
|
|
7
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
9
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
9
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -13,7 +14,7 @@ var _reactBeautifulDnd = require("react-beautiful-dnd");
|
|
|
13
14
|
var _icons = require("@ant-design/icons");
|
|
14
15
|
var _jspdf = _interopRequireDefault(require("jspdf"));
|
|
15
16
|
require("./merge.scss");
|
|
16
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var
|
|
17
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t4 in e) "default" !== _t4 && {}.hasOwnProperty.call(e, _t4) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t4)) && (i.get || i.set) ? o(f, _t4, i) : f[_t4] = e[_t4]); return f; })(e, t); }
|
|
17
18
|
// 1. 引入 useState
|
|
18
19
|
|
|
19
20
|
var Merge = function Merge(_ref) {
|
|
@@ -26,19 +27,23 @@ var Merge = function Merge(_ref) {
|
|
|
26
27
|
tokenTY = _ref.tokenTY,
|
|
27
28
|
openLoading = _ref.openLoading,
|
|
28
29
|
closeLoading = _ref.closeLoading,
|
|
29
|
-
close = _ref.close
|
|
30
|
+
close = _ref.close,
|
|
31
|
+
isPC = _ref.isPC;
|
|
30
32
|
var _useState = (0, _react.useState)(''),
|
|
31
33
|
viewUrl = _useState[0],
|
|
32
34
|
setViewUrl = _useState[1];
|
|
33
|
-
var _useState2 = (0, _react.useState)(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
var _useState3 = (0, _react.useState)(
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
var _useState4 = (0, _react.useState)(
|
|
40
|
-
|
|
41
|
-
|
|
35
|
+
var _useState2 = (0, _react.useState)(false),
|
|
36
|
+
isShowPreview = _useState2[0],
|
|
37
|
+
setIsShowPreview = _useState2[1];
|
|
38
|
+
var _useState3 = (0, _react.useState)(''),
|
|
39
|
+
viewPdfUrl = _useState3[0],
|
|
40
|
+
setViewPdfUrl = _useState3[1];
|
|
41
|
+
var _useState4 = (0, _react.useState)(null),
|
|
42
|
+
blob = _useState4[0],
|
|
43
|
+
setBlob = _useState4[1];
|
|
44
|
+
var _useState5 = (0, _react.useState)(fileList),
|
|
45
|
+
materialList = _useState5[0],
|
|
46
|
+
setMaterialList = _useState5[1];
|
|
42
47
|
|
|
43
48
|
// 置顶
|
|
44
49
|
var top = function top(index) {
|
|
@@ -193,9 +198,9 @@ var Merge = function Merge(_ref) {
|
|
|
193
198
|
};
|
|
194
199
|
|
|
195
200
|
// 核心:多张图片合并PDF
|
|
196
|
-
var
|
|
201
|
+
var buildPdfBlob = /*#__PURE__*/function () {
|
|
197
202
|
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
198
|
-
var pdf, i, fileUrl, _blob, file, img, targetWidth, scale, targetHeight
|
|
203
|
+
var pdf, i, fileUrl, _blob, file, img, targetWidth, scale, targetHeight;
|
|
199
204
|
return _regenerator["default"].wrap(function (_context2) {
|
|
200
205
|
while (1) switch (_context2.prev = _context2.next) {
|
|
201
206
|
case 0:
|
|
@@ -246,56 +251,112 @@ var Merge = function Merge(_ref) {
|
|
|
246
251
|
_context2.next = 1;
|
|
247
252
|
break;
|
|
248
253
|
case 5:
|
|
249
|
-
|
|
250
|
-
pdfBlob = pdf.output('blob');
|
|
251
|
-
setBlob(pdfBlob);
|
|
252
|
-
|
|
253
|
-
// 2. 创建 Blob URL
|
|
254
|
-
blobUrl = URL.createObjectURL(pdfBlob);
|
|
255
|
-
setViewPdfUrl(blobUrl);
|
|
254
|
+
return _context2.abrupt("return", pdf.output('blob'));
|
|
256
255
|
case 6:
|
|
257
256
|
case "end":
|
|
258
257
|
return _context2.stop();
|
|
259
258
|
}
|
|
260
259
|
}, _callee2);
|
|
261
260
|
}));
|
|
262
|
-
return function
|
|
261
|
+
return function buildPdfBlob() {
|
|
263
262
|
return _ref3.apply(this, arguments);
|
|
264
263
|
};
|
|
265
264
|
}();
|
|
266
|
-
|
|
265
|
+
|
|
266
|
+
// PC:先拼出 PDF,再用 iframe 交给浏览器内置的 PDF 查看器预览
|
|
267
|
+
var imgsToPdf = /*#__PURE__*/function () {
|
|
267
268
|
var _ref4 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
268
|
-
var
|
|
269
|
+
var pdfBlob;
|
|
269
270
|
return _regenerator["default"].wrap(function (_context3) {
|
|
270
271
|
while (1) switch (_context3.prev = _context3.next) {
|
|
272
|
+
case 0:
|
|
273
|
+
_context3.next = 1;
|
|
274
|
+
return buildPdfBlob();
|
|
275
|
+
case 1:
|
|
276
|
+
pdfBlob = _context3.sent;
|
|
277
|
+
setBlob(pdfBlob);
|
|
278
|
+
setViewPdfUrl(URL.createObjectURL(pdfBlob));
|
|
279
|
+
setIsShowPreview(true);
|
|
280
|
+
case 2:
|
|
281
|
+
case "end":
|
|
282
|
+
return _context3.stop();
|
|
283
|
+
}
|
|
284
|
+
}, _callee3);
|
|
285
|
+
}));
|
|
286
|
+
return function imgsToPdf() {
|
|
287
|
+
return _ref4.apply(this, arguments);
|
|
288
|
+
};
|
|
289
|
+
}();
|
|
290
|
+
|
|
291
|
+
// 移动端:WebView 没有内置 PDF 查看器(iframe 里的 blob PDF 渲染不出来),
|
|
292
|
+
// 直接按顺序滚动预览图片,内容与 PDF 一致;PDF 留到点「确认无误」时再生成
|
|
293
|
+
var openImgPreview = function openImgPreview() {
|
|
294
|
+
return setIsShowPreview(true);
|
|
295
|
+
};
|
|
296
|
+
var previewMaterial = function previewMaterial() {
|
|
297
|
+
return isPC ? imgsToPdf() : openImgPreview();
|
|
298
|
+
};
|
|
299
|
+
var uploadPdf = /*#__PURE__*/function () {
|
|
300
|
+
var _ref5 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
301
|
+
var pdfBlob, formData, response, res, _t2, _t3;
|
|
302
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
303
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
271
304
|
case 0:
|
|
272
305
|
openLoading();
|
|
306
|
+
_context4.prev = 1;
|
|
307
|
+
_t2 = blob;
|
|
308
|
+
if (_t2) {
|
|
309
|
+
_context4.next = 3;
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
_context4.next = 2;
|
|
313
|
+
return buildPdfBlob();
|
|
314
|
+
case 2:
|
|
315
|
+
_t2 = _context4.sent;
|
|
316
|
+
case 3:
|
|
317
|
+
pdfBlob = _t2;
|
|
318
|
+
if (!blob) setBlob(pdfBlob);
|
|
273
319
|
formData = new FormData();
|
|
274
|
-
formData.append('file',
|
|
320
|
+
formData.append('file', pdfBlob, materialName + '.pdf');
|
|
275
321
|
formData.append('open', true);
|
|
276
|
-
|
|
322
|
+
_context4.next = 4;
|
|
323
|
+
return fetch(baseUrl + "/declaration/material/file/files/api", {
|
|
277
324
|
method: 'POST',
|
|
278
325
|
body: formData,
|
|
279
326
|
headers: {
|
|
280
327
|
'Authorization': tokenTY || ''
|
|
281
328
|
}
|
|
282
|
-
}).then(function (response) {
|
|
283
|
-
return response.json();
|
|
284
|
-
}).then(function (res) {
|
|
285
|
-
console.log(res);
|
|
286
|
-
valChange((0, _extends2["default"])({}, res, {
|
|
287
|
-
fileName: materialName + '.pdf'
|
|
288
|
-
}));
|
|
289
|
-
closeLoading();
|
|
290
329
|
});
|
|
291
|
-
case
|
|
330
|
+
case 4:
|
|
331
|
+
response = _context4.sent;
|
|
332
|
+
_context4.next = 5;
|
|
333
|
+
return response.json();
|
|
334
|
+
case 5:
|
|
335
|
+
res = _context4.sent;
|
|
336
|
+
console.log(res);
|
|
337
|
+
valChange((0, _extends2["default"])({}, res, {
|
|
338
|
+
fileName: materialName + '.pdf'
|
|
339
|
+
}));
|
|
340
|
+
_context4.next = 7;
|
|
341
|
+
break;
|
|
342
|
+
case 6:
|
|
343
|
+
_context4.prev = 6;
|
|
344
|
+
_t3 = _context4["catch"](1);
|
|
345
|
+
console.error(_t3);
|
|
346
|
+
_message["default"].error('生成或上传失败,请重试');
|
|
347
|
+
case 7:
|
|
348
|
+
_context4.prev = 7;
|
|
349
|
+
// 原来只在成功分支里关,失败时全屏 loading 会一直挂着
|
|
350
|
+
closeLoading();
|
|
351
|
+
return _context4.finish(7);
|
|
352
|
+
case 8:
|
|
292
353
|
case "end":
|
|
293
|
-
return
|
|
354
|
+
return _context4.stop();
|
|
294
355
|
}
|
|
295
|
-
},
|
|
356
|
+
}, _callee4, null, [[1, 6, 7, 8]]);
|
|
296
357
|
}));
|
|
297
358
|
return function uploadPdf() {
|
|
298
|
-
return
|
|
359
|
+
return _ref5.apply(this, arguments);
|
|
299
360
|
};
|
|
300
361
|
}();
|
|
301
362
|
return /*#__PURE__*/React.createElement("div", {
|
|
@@ -363,7 +424,7 @@ var Merge = function Merge(_ref) {
|
|
|
363
424
|
onClick: close
|
|
364
425
|
}, "\u4E0A\u4E00\u6B65"), /*#__PURE__*/React.createElement("div", {
|
|
365
426
|
className: "preview btn",
|
|
366
|
-
onClick:
|
|
427
|
+
onClick: previewMaterial
|
|
367
428
|
}, "\u9884\u89C8\u6750\u6599")), viewUrl && /*#__PURE__*/React.createElement("div", {
|
|
368
429
|
className: "viewImg"
|
|
369
430
|
}, /*#__PURE__*/React.createElement(_icons.CloseOutlined, {
|
|
@@ -375,15 +436,26 @@ var Merge = function Merge(_ref) {
|
|
|
375
436
|
className: "view",
|
|
376
437
|
src: viewUrl,
|
|
377
438
|
alt: ""
|
|
378
|
-
})),
|
|
439
|
+
})), isShowPreview && /*#__PURE__*/React.createElement("div", {
|
|
379
440
|
className: "view_pdf"
|
|
380
|
-
}, /*#__PURE__*/React.createElement("iframe", {
|
|
441
|
+
}, isPC ? /*#__PURE__*/React.createElement("iframe", {
|
|
381
442
|
src: viewPdfUrl + '#toolbar=0&navpanes=0&scrollbar=0&messages=0&statusbar=0',
|
|
382
443
|
id: "iframe",
|
|
383
444
|
frameBorder: "0",
|
|
384
445
|
height: "95%",
|
|
385
446
|
width: "100%"
|
|
386
|
-
})
|
|
447
|
+
}) :
|
|
448
|
+
/*#__PURE__*/
|
|
449
|
+
// 移动端 WebView 没有内置 PDF 查看器,iframe 里的 blob PDF 渲染不出来,改为直接滚动预览图片
|
|
450
|
+
React.createElement("div", {
|
|
451
|
+
className: "view_imgs"
|
|
452
|
+
}, materialList.map(function (item) {
|
|
453
|
+
return /*#__PURE__*/React.createElement("img", {
|
|
454
|
+
key: item.fileId,
|
|
455
|
+
src: item.fileUrl,
|
|
456
|
+
alt: ""
|
|
457
|
+
});
|
|
458
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
387
459
|
className: "bottom_btn",
|
|
388
460
|
style: {
|
|
389
461
|
background: '#fff',
|
|
@@ -392,7 +464,7 @@ var Merge = function Merge(_ref) {
|
|
|
392
464
|
}, /*#__PURE__*/React.createElement("div", {
|
|
393
465
|
className: "previous btn",
|
|
394
466
|
onClick: function onClick() {
|
|
395
|
-
return
|
|
467
|
+
return setIsShowPreview(false);
|
|
396
468
|
}
|
|
397
469
|
}, "\u8FD4\u56DE\u4FEE\u6539"), /*#__PURE__*/React.createElement("div", {
|
|
398
470
|
className: "preview btn",
|