venus-design 1.0.77 → 1.0.79

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.
@@ -229,6 +229,9 @@ var VenusForm = /*#__PURE__*/forwardRef(function (props, ref) {
229
229
  if (fieldIds.includes(node.fieldId)) {
230
230
  //@ts-ignore
231
231
  node.nonEditableScene = disabled ? 'EDIT' : null;
232
+ } else {
233
+ //@ts-ignore
234
+ node.nonEditableScene = null;
232
235
  }
233
236
  });
234
237
  return clone;
@@ -242,6 +245,9 @@ var VenusForm = /*#__PURE__*/forwardRef(function (props, ref) {
242
245
  if (!fieldIds.includes(node.fieldId)) {
243
246
  //@ts-ignore
244
247
  node.nonEditableScene = disabled ? 'EDIT' : null;
248
+ } else {
249
+ //@ts-ignore
250
+ node.nonEditableScene = null;
245
251
  }
246
252
  });
247
253
  return clone;
@@ -5,6 +5,8 @@ import "antd/es/button/style";
5
5
  import _Button from "antd/es/button";
6
6
  import "antd/es/tooltip/style";
7
7
  import _Tooltip from "antd/es/tooltip";
8
+ import "antd/es/progress/style";
9
+ import _Progress from "antd/es/progress";
8
10
  import "antd/es/message/style";
9
11
  import _message from "antd/es/message";
10
12
  import "antd/es/upload/style";
@@ -50,6 +52,7 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
50
52
  _useState6 = _slicedToArray(_useState5, 2),
51
53
  level = _useState6[0],
52
54
  setLevel = _useState6[1];
55
+
53
56
  // 外部只给“已完成”数据,用 map 快速索引
54
57
  useEffect(function () {
55
58
  var outerMap = new Map(
@@ -69,53 +72,91 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
69
72
  });
70
73
  });
71
74
  }, [props.value, level]);
72
- // 上传完成后,更新 fileList 里的信息
73
75
  var onChange = function onChange(info) {
76
+ var file = info.file,
77
+ newFileList = info.fileList;
78
+
79
+ /* 0. 预计算:外部已完成的密级映射 */
74
80
  var dataLevel = [];
75
81
  (props.value || []).forEach(function (v) {
76
82
  dataLevel[v.id] = v.secId;
77
83
  });
78
84
 
79
- /* ---------- 1. 收集本次失败的 uid ---------- */
80
- var failedUids = [];
81
- info.fileList.forEach(function (f) {
82
- if (f.response && !f.response.success) {
83
- failedUids.push(f.uid);
84
- }
85
+ /* 0.5 如果 antd 已经标记为 error,直接删掉(保持原来“失败物理删除”逻辑)*/
86
+ var cleanedList = newFileList.filter(function (f) {
87
+ return f.status !== 'error';
85
88
  });
86
- if (failedUids.length) {
87
- _message.warning('文件上传失败!请重新上传');
89
+
90
+ /* 1. 用清理后的列表继续走你原有逻辑 */
91
+ setFileList(cleanedList);
92
+
93
+ /* 2. 仅当“当前文件” done 时,再决定 success / error */
94
+ if (file.status === 'done' && file.response) {
95
+ if (file.response.success) {
96
+ /* 2.1 真正成功 -> 补充 fileId 与密级 */
97
+ setFileList(function (prev) {
98
+ var map = new Map(prev.map(function (f) {
99
+ return [f.uid, f];
100
+ }));
101
+ var target = map.get(file.uid);
102
+ if (target) {
103
+ var _ref, _dataLevel$target$fil;
104
+ target.status = 'done';
105
+ target.percent = 100;
106
+ target.fileId = file.response.data.fileId;
107
+ target.secId = (_ref = (_dataLevel$target$fil = dataLevel[target.fileId]) !== null && _dataLevel$target$fil !== void 0 ? _dataLevel$target$fil :
108
+ // 外部表单里已有
109
+ level && level[target.fileId]) !== null && _ref !== void 0 ? _ref :
110
+ // 组件内刚选的
111
+ undefined;
112
+ }
113
+ return Array.from(map.values());
114
+ });
115
+ } else {
116
+ /* 2.2 后端明确失败 -> 标红但不删除(也可删除,按你原逻辑)*/
117
+ setFileList(function (prev) {
118
+ var map = new Map(prev.map(function (f) {
119
+ return [f.uid, f];
120
+ }));
121
+ var target = map.get(file.uid);
122
+ if (target) target.status = 'error';
123
+ return Array.from(map.values());
124
+ });
125
+ _message.error(file.response.message || '文件上传失败!请重新上传');
126
+ }
88
127
  }
89
128
 
90
- /* ---------- 2. 双键 Map:优先 fileId,其次 uid ---------- */
129
+ /* 3. 用你原来的“双键 Map”再合并一次,保证 fileId / secId 不丢 */
91
130
  var fileMap = new Map();
92
131
  fileList.forEach(function (f) {
93
132
  var key = f.fileId || f.uid;
94
133
  fileMap.set(key, f);
95
134
  });
96
- // 上传完成后,更新 fileList 里的信息
97
- info.fileList.forEach(function (f) {
135
+ //@ts-ignore
136
+ newFileList.forEach(function (f) {
98
137
  var _f$response;
99
138
  var key = f.fileId || f.uid;
100
139
  var target = _objectSpread({}, f);
101
140
  if ((_f$response = f.response) !== null && _f$response !== void 0 && _f$response.success) {
102
- var _ref, _dataLevel$target$fil;
141
+ var _ref2, _dataLevel$target$fil2;
103
142
  target.fileId = f.response.data.fileId;
104
- target.secId = (_ref = (_dataLevel$target$fil = dataLevel[target.fileId]) !== null && _dataLevel$target$fil !== void 0 ? _dataLevel$target$fil : level && level[target.fileId]) !== null && _ref !== void 0 ? _ref : undefined;
143
+ target.secId = (_ref2 = (_dataLevel$target$fil2 = dataLevel[target.fileId]) !== null && _dataLevel$target$fil2 !== void 0 ? _dataLevel$target$fil2 : level && level[target.fileId]) !== null && _ref2 !== void 0 ? _ref2 : undefined;
105
144
  }
106
145
  fileMap.set(key, target);
107
146
  });
108
147
 
109
- /* ---------- 3. 把失败项从 Map 里删掉 ---------- */
148
+ /* 4. 把失败的项物理删除(同原逻辑)*/
149
+ var failedUids = [];
150
+ newFileList.forEach(function (f) {
151
+ if (f.response && !f.response.success) failedUids.push(f.uid);
152
+ });
110
153
  failedUids.forEach(function (uid) {
111
- var key = uid; // 失败文件一定没有 fileId,直接用 uid
112
- fileMap.delete(key);
154
+ return fileMap.delete(uid);
113
155
  });
114
- // 4. 合并 Map 里的项
115
156
  var merged = Array.from(fileMap.values());
116
157
  setFileList(merged);
117
158
 
118
- /* ---------- 4. 写给表单的依旧是“已完成” ---------- */
159
+ /* 5. 只回写“已完成”给表单 */
119
160
  propsOnChange(merged.filter(function (f) {
120
161
  var _f$response2;
121
162
  return f.fileId || ((_f$response2 = f.response) === null || _f$response2 === void 0 ? void 0 : _f$response2.success);
@@ -129,7 +170,7 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
129
170
  };
130
171
  //删除文件
131
172
  var onRemove = /*#__PURE__*/function () {
132
- var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(file) {
173
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(file) {
133
174
  var res;
134
175
  return _regeneratorRuntime().wrap(function _callee$(_context) {
135
176
  while (1) switch (_context.prev = _context.next) {
@@ -153,7 +194,7 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
153
194
  }, _callee);
154
195
  }));
155
196
  return function onRemove(_x) {
156
- return _ref2.apply(this, arguments);
197
+ return _ref3.apply(this, arguments);
157
198
  };
158
199
  }();
159
200
  /*
@@ -169,10 +210,10 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
169
210
  /* 1. 双键 Map 去重:优先 fileId,其次 uid */
170
211
  var fileMap = new Map();
171
212
  fileList.forEach(function (f) {
172
- var _ref3, _dataLevel$f$fileId;
213
+ var _ref4, _dataLevel$f$fileId;
173
214
  var key = f.fileId || f.uid;
174
215
  // 更新 secId
175
- f.secId = (_ref3 = (_dataLevel$f$fileId = dataLevel[f.fileId]) !== null && _dataLevel$f$fileId !== void 0 ? _dataLevel$f$fileId : level && level[f.fileId]) !== null && _ref3 !== void 0 ? _ref3 : undefined;
216
+ f.secId = (_ref4 = (_dataLevel$f$fileId = dataLevel[f.fileId]) !== null && _dataLevel$f$fileId !== void 0 ? _dataLevel$f$fileId : level && level[f.fileId]) !== null && _ref4 !== void 0 ? _ref4 : undefined;
176
217
  fileMap.set(key, f);
177
218
  });
178
219
  var merged = Array.from(fileMap.values());
@@ -193,7 +234,7 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
193
234
  * 选择密级
194
235
  */
195
236
  var onSelectLevel = /*#__PURE__*/function () {
196
- var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(v, file) {
237
+ var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(v, file) {
197
238
  var _file$response;
198
239
  var key, fileId;
199
240
  return _regeneratorRuntime().wrap(function _callee2$(_context2) {
@@ -220,17 +261,16 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
220
261
  }, _callee2);
221
262
  }));
222
263
  return function onSelectLevel(_x2, _x3) {
223
- return _ref4.apply(this, arguments);
264
+ return _ref5.apply(this, arguments);
224
265
  };
225
266
  }();
226
- //上传前的控制
267
+ /* ---------- 2. beforeUpload:强制 status=uploading ---------- */
227
268
  var handleBeforeUpload = function handleBeforeUpload(file) {
228
269
  if (file.size > MAX_SIZE) {
229
270
  _message.error('文件大小不能超过 100MB');
230
- return _Upload.LIST_IGNORE; // Ant Design 中阻止上传
231
- // 或者 return false; // 原生 input 阻止上传
271
+ return _Upload.LIST_IGNORE;
232
272
  }
233
- return true;
273
+ return true; // 继续上传
234
274
  };
235
275
  var Component = props.component && props.component == "Dragger" ? Dragger : _Upload;
236
276
  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Spin, {
@@ -238,25 +278,10 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
238
278
  }, /*#__PURE__*/React.createElement(Component, _extends({
239
279
  beforeUpload: handleBeforeUpload,
240
280
  disabled: props.disabled,
241
- showUploadList: {
242
- showDownloadIcon: true,
243
- downloadIcon: function downloadIcon(file) {
244
- return /*#__PURE__*/React.createElement(DownLoad, {
245
- hideProgress: true,
246
- params: {
247
- method: 'get'
248
- },
249
- fileName: function fileName() {
250
- return file.name;
251
- },
252
- text: /*#__PURE__*/React.createElement("a", {
253
- rel: "noopener noreferrer"
254
- }, /*#__PURE__*/React.createElement(DownloadOutlined, null)),
255
- loadUrl: downloadFile(file.fileId)
256
- });
257
- }
258
- },
259
281
  itemRender: function itemRender(originNode, file, fileList, actions) {
282
+ /* 上传中 / 成功 / 失败 不同 UI */
283
+ var uploading = file.status === 'uploading';
284
+ var error = file.status === 'error';
260
285
  return /*#__PURE__*/React.createElement(FileCard, {
261
286
  key: "".concat(file.fileId || file.uid),
262
287
  style: {
@@ -266,7 +291,21 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
266
291
  }, /*#__PURE__*/React.createElement(FileInfo, null, /*#__PURE__*/React.createElement("span", {
267
292
  className: "name",
268
293
  title: file.name
269
- }, file.name)), /*#__PURE__*/React.createElement(Actions, null, /*#__PURE__*/React.createElement(Item, {
294
+ }, file.name), uploading && /*#__PURE__*/React.createElement("div", {
295
+ style: {
296
+ width: 180,
297
+ marginTop: 4
298
+ }
299
+ }, /*#__PURE__*/React.createElement(_Progress, {
300
+ percent: Math.round(file.percent || 0),
301
+ size: "small",
302
+ strokeColor: "#1890ff"
303
+ })), error && /*#__PURE__*/React.createElement("span", {
304
+ style: {
305
+ color: '#ff4d4f',
306
+ fontSize: 12
307
+ }
308
+ }, "\u4E0A\u4F20\u5931\u8D25")), /*#__PURE__*/React.createElement(Actions, null, /*#__PURE__*/React.createElement(Item, {
270
309
  layout: "horizontal"
271
310
  // 关键:让表单知道这是 fileList[index].secId
272
311
  ,
@@ -288,7 +327,7 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
288
327
  style: {
289
328
  width: 120
290
329
  }
291
- })), /*#__PURE__*/React.createElement(_Tooltip, {
330
+ })), !uploading && /*#__PURE__*/React.createElement(_Tooltip, {
292
331
  title: "\u4E0B\u8F7D"
293
332
  }, /*#__PURE__*/React.createElement("a", {
294
333
  href: downloadFile(file.fileId),
@@ -299,7 +338,7 @@ var VenusUploadSecLevel = function VenusUploadSecLevel(props) {
299
338
  style: {
300
339
  color: 'red'
301
340
  },
302
- disabled: props.disabled,
341
+ disabled: props.disabled || uploading,
303
342
  onClick: function onClick() {
304
343
  return onRemove(file);
305
344
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "venus-design",
3
- "version": "1.0.77",
3
+ "version": "1.0.79",
4
4
  "description": "venus all compoments",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",