fan-standard-comp 3.2.2 → 3.2.3

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.
@@ -5,10 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = void 0;
8
- require("antd/es/upload/style");
9
- var _upload = _interopRequireDefault(require("antd/es/upload"));
10
8
  require("antd/es/button/style");
11
9
  var _button = _interopRequireDefault(require("antd/es/button"));
10
+ require("antd/es/upload/style");
11
+ var _upload = _interopRequireDefault(require("antd/es/upload"));
12
12
  require("antd/es/message/style");
13
13
  var _message2 = _interopRequireDefault(require("antd/es/message"));
14
14
  var _tslib = require("tslib");
@@ -17,6 +17,7 @@ var _icons = require("@ant-design/icons");
17
17
  var _util = require("./util");
18
18
  require("./style/index.less");
19
19
  var _ImagePreview = _interopRequireDefault(require("../../ImageGallery/ImagePreview"));
20
+ var _antdImgCrop = _interopRequireDefault(require("antd-img-crop"));
20
21
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
21
22
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
22
23
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -44,7 +45,12 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
44
45
  size = _props$size === void 0 ? 2 * 1024 * 1024 : _props$size,
45
46
  onPreview = props.onPreview,
46
47
  beforeUpload = props.beforeUpload,
47
- limit = props.limit;
48
+ limit = props.limit,
49
+ maxCount = props.maxCount,
50
+ viewOnly = props.viewOnly,
51
+ crop = props.crop,
52
+ cropConfig = props.cropConfig,
53
+ otherProps = (0, _tslib.__rest)(props, ["accept", "extraExt", "fileType", "className", "isOnly", "children", "onChange", "value", "size", "onPreview", "beforeUpload", "limit", "maxCount", "viewOnly", "crop", "cropConfig"]);
48
54
  // 图片预览数据
49
55
  // const [showConfig, setShowConfig] = useState({ visible: false, url: '' })
50
56
  // 用于展示的缩略图
@@ -61,6 +67,26 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
61
67
  _useState6 = _slicedToArray(_useState5, 2),
62
68
  previewCurrent = _useState6[0],
63
69
  setPreviewerCurrent = _useState6[1];
70
+ var _useState7 = (0, _react.useState)(null),
71
+ _useState8 = _slicedToArray(_useState7, 2),
72
+ cropFile = _useState8[0],
73
+ setCropFile = _useState8[1]; // 存储裁剪的图片file信息
74
+ var maxCountLimit = (0, _react.useMemo)(function () {
75
+ if (isOnly) {
76
+ return 1;
77
+ }
78
+ return maxCount || limit;
79
+ }, [isOnly, limit, maxCount]);
80
+ var splitAccept = (0, _react.useMemo)(function () {
81
+ var res = (0, _util.getAccept)(fileType);
82
+ if (extraExt) {
83
+ res = res + ',' + extraExt;
84
+ }
85
+ if (accept) {
86
+ res = res + ',' + accept;
87
+ }
88
+ return res;
89
+ }, [fileType, extraExt]);
64
90
  (0, _react.useEffect)(function () {
65
91
  if (!value) {
66
92
  setUploaderFileList([]);
@@ -75,7 +101,7 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
75
101
  file.uid = file.uid || "".concat(S4(), "-").concat(S4());
76
102
  file.url = file.downloadUrl || file.url;
77
103
  file.status = 'done';
78
- file.previewUrl = file.downloadUrl || file.url; // 给预览地址
104
+ file.previewUrl = file.previewUrl || file.downloadUrl || file.url; // 给预览地址
79
105
  return file;
80
106
  }));
81
107
  return;
@@ -86,7 +112,7 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
86
112
  uid: "".concat(S4(), "-").concat(S4()),
87
113
  url: value.downloadUrl || value.url,
88
114
  status: 'done',
89
- previewUrl: value.downloadUrl || value.url
115
+ previewUrl: value.previewUrl || value.downloadUrl || value.url
90
116
  }, value)]);
91
117
  /* eslint-enable no-multi-spaces */
92
118
  return;
@@ -102,16 +128,6 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
102
128
  return;
103
129
  }
104
130
  }, [value]);
105
- var splitAccept = (0, _react.useMemo)(function () {
106
- var res = (0, _util.getAccept)(fileType);
107
- if (extraExt) {
108
- res = res + ',' + extraExt;
109
- }
110
- if (accept) {
111
- res = res + ',' + accept;
112
- }
113
- return res;
114
- }, [fileType, extraExt]);
115
131
  // 点击文件链接或预览图标时的回调
116
132
  var handlePreview = (0, _react.useCallback)(function (file, files) {
117
133
  return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
@@ -119,10 +135,10 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
119
135
  return _regeneratorRuntime().wrap(function _callee$(_context) {
120
136
  while (1) switch (_context.prev = _context.next) {
121
137
  case 0:
122
- _context.next = 2;
123
- return fileListPreviewer(_toConsumableArray(files));
124
- case 2:
125
- pList = _context.sent;
138
+ // 方式一:直接全部转换成base64后再打开预览(问题:会出现时间过长)
139
+ // const pList: any = await fileListPreviewer([...files])
140
+ // 方式三:上传时已经转换过
141
+ pList = _toConsumableArray(files);
126
142
  setUploaderFileList(pList);
127
143
  setPreviewerCurrent(pList.findIndex(function (item) {
128
144
  return item.uid === file.uid;
@@ -156,7 +172,7 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
156
172
  // console.log('file', file.uid)
157
173
  // const previewItem = pList.find((item: FileTypeProps) => item.uid === file.uid)
158
174
  // setShowConfig({ visible: true, url: previewItem.previewUrl })
159
- case 6:
175
+ case 4:
160
176
  case "end":
161
177
  return _context.stop();
162
178
  }
@@ -164,17 +180,17 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
164
180
  }));
165
181
  }, []);
166
182
  // 检查文件是否规范
167
- var handleCheck = (0, _react.useCallback)(function (file) {
168
- var isLtSize = file.size < size;
169
- if (!isLtSize) {
170
- _message2.default.error("\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7".concat(Math.round(size / 1024 / 1024 * 100) / 100, "MB!"));
171
- return false;
172
- }
173
- return true;
174
- }, [fileType, size]);
183
+ // const handleCheck = useCallback((file: any) => {
184
+ // const isLtSize = file.size < size;
185
+ // if (!isLtSize) {
186
+ // message.error(`文件大小不能超过${Math.round(((size / 1024) / 1024) * 100) / 100}MB!`);
187
+ // return false;
188
+ // }
189
+ // return true;
190
+ // }, [fileType, size])
175
191
  var handleChange = (0, _react.useCallback)(function (res) {
176
192
  return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
177
- var isOk, result, list;
193
+ var result, fileRes, matchAddIndex, matchAdd;
178
194
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
179
195
  while (1) switch (_context2.prev = _context2.next) {
180
196
  case 0:
@@ -183,99 +199,123 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
183
199
  break;
184
200
  }
185
201
  setUploaderFileList(res.fileList);
186
- onChange && onChange(isOnly ? res.fileList[0] && res.fileList[0].originFileObj : res.fileList);
202
+ // onChange && onChange(isOnly ? res.fileList[0] && res.fileList[0].originFileObj : res.fileList)
203
+ onChange && onChange(res.fileList, res);
187
204
  return _context2.abrupt("return");
188
205
  case 4:
189
- isOk = handleCheck(res.file);
190
- if (isOk) {
191
- list = res.fileList.map(function (file) {
192
- if (!file.previewUrl) {
193
- console.log('无预览URL', file);
194
- }
195
- // if (!file.url) {
196
- // file.url = file.thumbUrl
197
- // }
198
- return file;
199
- }); // const previewUrls = ( res.fileList || []).map((item: any) => {
200
- // return getPreviewInfo(item)
201
- // });
202
- // let resultList = await Promise.all(previewUrls).catch((err) => {
203
- // console.log('Promise.all==>转换base64失败', err)
204
- // })
205
- result = _toConsumableArray(list || []);
206
- setUploaderFileList(result);
207
- onChange && onChange(isOnly ? result[0] && result[0].originFileObj : result);
206
+ result = []; // 裁剪模式下,把裁剪后的文件信息传过来
207
+ if (crop && cropFile) {
208
+ res.file = cropFile;
208
209
  }
209
- case 6:
210
+ _context2.next = 8;
211
+ return (0, _util.getBase64)(res.file);
212
+ case 8:
213
+ fileRes = _context2.sent;
214
+ matchAddIndex = res.fileList.findIndex(function (item) {
215
+ return item.uid === res.file.uid;
216
+ });
217
+ matchAdd = res.fileList[matchAddIndex];
218
+ matchAdd.previewUrl = fileRes === null || fileRes === void 0 ? void 0 : fileRes.url; // 预览URL
219
+ if (crop && cropFile) {
220
+ // 将当前裁剪后的文件传出来
221
+ matchAdd.originFileObj = res.file;
222
+ matchAdd.size = res.file.size;
223
+ matchAdd.lastModified = res.file.lastModified;
224
+ matchAdd.lastModifiedDate = res.file.lastModifiedDate;
225
+ }
226
+ res.fileList.splice(matchAddIndex, 1, matchAdd);
227
+ result = _toConsumableArray(res.fileList || []);
228
+ setUploaderFileList(result);
229
+ setCropFile(null);
230
+ onChange && onChange(isOnly ? result[0] && result[0].originFileObj : result, res);
231
+ // const isOk = handleCheck(res.file)
232
+ // if (isOk) {
233
+ // let result: any = []
234
+ // const fileRes = await getBase64(res.file)
235
+ // const matchAddIndex = res.fileList.findIndex((item: any) => item.uid === res.file.uid)
236
+ // const matchAdd = res.fileList[matchAddIndex]
237
+ // console.log('matchAdd', matchAdd, maxCountLimit)
238
+ // matchAdd.previewUrl = fileRes?.url
239
+ // res.fileList.splice(matchAddIndex, 1, matchAdd)
240
+ // result = [...(res.fileList || [])]
241
+ // setUploaderFileList(result)
242
+ // onChange && onChange(isOnly ? result[0] && result[0].originFileObj : result, res)
243
+ // }
244
+ case 18:
210
245
  case "end":
211
246
  return _context2.stop();
212
247
  }
213
248
  }, _callee2);
214
249
  }));
215
- }, [isOnly, handleCheck, uploaderFileList]);
216
- var getPreviewInfo = function getPreviewInfo(file) {
217
- return new Promise(function (resolve, reject) {
218
- return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
219
- var res;
220
- return _regeneratorRuntime().wrap(function _callee3$(_context3) {
221
- while (1) switch (_context3.prev = _context3.next) {
222
- case 0:
223
- if (!(!file.url && !file.previewUrl)) {
224
- _context3.next = 8;
225
- break;
226
- }
227
- _context3.next = 3;
228
- return (0, _util.getBase64)(file.originFileObj);
229
- case 3:
230
- res = _context3.sent;
231
- if (res && res.status === 'success') {
232
- file.previewUrl = res.url;
233
- }
234
- // console.log('转换成功', file)
235
- resolve(Object.assign({}, file));
236
- _context3.next = 10;
237
- break;
238
- case 8:
239
- if (!file.previewUrl) {
240
- file.previewUrl = file.url;
241
- }
242
- // 已经转换过,无需再转换
243
- // console.log('已经转换过,无需再转换', file)
244
- resolve(Object.assign({}, file));
245
- case 10:
246
- case "end":
247
- return _context3.stop();
248
- }
249
- }, _callee3);
250
- }));
251
- });
250
+ }, [isOnly, uploaderFileList, maxCountLimit, crop, cropFile]);
251
+ //
252
+ // const getPreviewInfo = (file: any) => {
253
+ // return new Promise(async (resolve, reject) => {
254
+ // if (!file.url && !file.previewUrl) {
255
+ // const res = await getBase64(file.originFileObj);
256
+ // if (res && res.status === 'success') {
257
+ // file.previewUrl = res.url;
258
+ // }
259
+ // // console.log('转换成功', file)
260
+ // resolve({ ...file })
261
+ // } else {
262
+ // if (!file.previewUrl) {
263
+ // file.previewUrl = file.url
264
+ // }
265
+ // // 已经转换过,无需再转换
266
+ // // console.log('已经转换过,无需再转换', file)
267
+ // resolve({ ...file })
268
+ // }
269
+ // })
270
+ // }
271
+ // const fileListPreviewer = async (files?: any) => {
272
+ // const previewUrls = (files || []).map((item: any) => {
273
+ // return getPreviewInfo(item)
274
+ // });
275
+ // let resultList = await Promise.all(previewUrls).catch((err) => {
276
+ // console.log('Promise.all==>转换base64失败', err)
277
+ // });
278
+ // return resultList
279
+ // }
280
+ var handleClose = function handleClose() {
281
+ setShowPreview(false);
252
282
  };
253
- var fileListPreviewer = function fileListPreviewer(files) {
254
- return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
255
- var previewUrls, resultList;
256
- return _regeneratorRuntime().wrap(function _callee4$(_context4) {
257
- while (1) switch (_context4.prev = _context4.next) {
283
+ var handleBeforeUpload = (0, _react.useCallback)(function (file) {
284
+ return (0, _tslib.__awaiter)(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
285
+ var isLtSize;
286
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
287
+ while (1) switch (_context3.prev = _context3.next) {
258
288
  case 0:
259
- previewUrls = (files || []).map(function (item) {
260
- return getPreviewInfo(item);
261
- });
262
- _context4.next = 3;
263
- return Promise.all(previewUrls).catch(function (err) {
264
- console.log('Promise.all==>转换base64失败', err);
265
- });
266
- case 3:
267
- resultList = _context4.sent;
268
- return _context4.abrupt("return", resultList);
269
- case 5:
289
+ //限制图片 格式、size、分辨率
290
+ // const isJPG = file.type === 'image/jpeg';
291
+ // const isJPEG = file.type === 'image/jpeg';
292
+ // const isGIF = file.type === 'image/gif';
293
+ // const isPNG = file.type === 'image/png';
294
+ // if (!(isJPG || isJPEG || isGIF || isPNG)) {
295
+ // message.error("上传图片的格式不正确,不是JPG、JPEG、GIF、PNG");
296
+ // return false;
297
+ // }
298
+ isLtSize = file.size < size;
299
+ if (isLtSize) {
300
+ _context3.next = 4;
301
+ break;
302
+ }
303
+ _message2.default.error("\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7".concat(Math.round(size / 1024 / 1024 * 100) / 100, "MB!"));
304
+ // 如果直接返回false或者true,还是会触发额外的onChange,所以需要改成 Upload.LIST_IGNORE
305
+ return _context3.abrupt("return", _upload.default.LIST_IGNORE);
306
+ case 4:
307
+ // 存储裁剪后的文件信息(只有fileType=image,且在单选情况下才可以)
308
+ if (crop && fileType === 'image') {
309
+ setCropFile(file);
310
+ }
311
+ return _context3.abrupt("return", false);
312
+ case 6:
270
313
  case "end":
271
- return _context4.stop();
314
+ return _context3.stop();
272
315
  }
273
- }, _callee4);
316
+ }, _callee3);
274
317
  }));
275
- };
276
- var handleClose = function handleClose() {
277
- setShowPreview(false);
278
- };
318
+ }, [fileType, size, crop]);
279
319
  // 渲染预览窗口
280
320
  /* const renderPreviewComponent = useMemo(
281
321
  () => {
@@ -298,7 +338,7 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
298
338
  )*/
299
339
  var renderChildrenComponent = (0, _react.useMemo)(function () {
300
340
  var renderButton = function renderButton() {
301
- if (fileType === 'image' || fileType === 'svg') {
341
+ if (fileType === 'image' || fileType === 'svg' || fileType === 'video') {
302
342
  return /*#__PURE__*/_react.default.createElement("div", {
303
343
  className: 'spec-uploader-control'
304
344
  }, /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null), /*#__PURE__*/_react.default.createElement("div", {
@@ -309,28 +349,33 @@ var Uploader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
309
349
  className: 'spec-uploader-button'
310
350
  }, /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null), "\u70B9\u51FB\u9009\u62E9");
311
351
  };
312
- if (isOnly && uploaderFileList.length === 1 || limit && uploaderFileList.length === limit) {
352
+ if (maxCountLimit && uploaderFileList.length === maxCountLimit) {
313
353
  return null;
314
354
  }
315
355
  if (children) {
316
356
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, " ", children, " ");
317
357
  }
318
358
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, renderButton());
319
- }, [fileType, isOnly, children, uploaderFileList, limit]);
320
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_upload.default, Object.assign({}, props, {
321
- ref: ref,
322
- accept: splitAccept,
323
- fileList: uploaderFileList,
324
- listType: fileType === 'image' || fileType === 'svg' ? 'picture-card' : 'text',
325
- className: "spec-uploader ".concat(className),
326
- onPreview: onPreview ? onPreview : fileType === 'image' || fileType === 'svg' ? function (file) {
327
- return handlePreview(file, uploaderFileList);
328
- } : function () {},
329
- beforeUpload: beforeUpload ? beforeUpload : function () {
330
- return false;
331
- },
332
- onChange: handleChange
333
- }), renderChildrenComponent), (fileType === 'image' || fileType === 'svg') && showPreview && /*#__PURE__*/_react.default.createElement(_ImagePreview.default, {
359
+ }, [fileType, children, uploaderFileList, maxCountLimit]);
360
+ var RenderUpload = function RenderUpload() {
361
+ return /*#__PURE__*/_react.default.createElement(_upload.default, Object.assign({}, otherProps, {
362
+ disabled: otherProps.disabled || viewOnly,
363
+ maxCount: maxCountLimit,
364
+ ref: ref,
365
+ accept: splitAccept,
366
+ fileList: uploaderFileList,
367
+ listType: fileType === 'image' || fileType === 'svg' ? 'picture-card' : 'text',
368
+ className: "spec-uploader ".concat(className),
369
+ onPreview: onPreview ? onPreview : fileType === 'image' || fileType === 'svg' ? function (file) {
370
+ return handlePreview(file, uploaderFileList);
371
+ } : function () {},
372
+ beforeUpload: beforeUpload ? beforeUpload : handleBeforeUpload,
373
+ onChange: handleChange
374
+ }), viewOnly ? null : renderChildrenComponent);
375
+ };
376
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null,
377
+ // multiple 情况下不可用
378
+ !(otherProps === null || otherProps === void 0 ? void 0 : otherProps.multiple) && fileType === 'image' && crop ? /*#__PURE__*/_react.default.createElement(_antdImgCrop.default, Object.assign({}, cropConfig || {}), RenderUpload()) : RenderUpload(), (fileType === 'image' || fileType === 'svg') && showPreview && /*#__PURE__*/_react.default.createElement(_ImagePreview.default, {
334
379
  hasThumbnail: true,
335
380
  open: showPreview,
336
381
  onClose: handleClose,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fan-standard-comp",
3
- "version": "3.2.2",
3
+ "version": "3.2.3",
4
4
  "description": "FZ standard-comp,basic of antd4.0 and custom component.",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -21,7 +21,7 @@
21
21
  "package:build:publish": "father-build && webpack && npm version patch && npm publish",
22
22
  "package:build:no-dist:publish": "father-build && npm version patch && npm publish",
23
23
  "build:package:to-rgz": "npm run package:build && node copyPackage.js && npm run package-to-tgz",
24
- "package-to-tgz": "tar -czf fan-standard-comp-3.2.2-beta.1.tgz package && yarn"
24
+ "package-to-tgz": "tar -czf fan-standard-comp-3.2.3-beta.1.tgz package"
25
25
  },
26
26
  "author": "shomychen",
27
27
  "license": "ISC",
@@ -44,6 +44,7 @@
44
44
  "@babel/helper-define-map": "^7.18.6",
45
45
  "@babel/helper-hoist-variables": "^7.24.7",
46
46
  "ant-design-draggable-modal": "^1.0.0",
47
+ "antd-img-crop": "^4.23.0",
47
48
  "css-loader": "3.6.0",
48
49
  "file-loader": "6.2.0",
49
50
  "less-loader": "5.0.0",