venus-design 1.0.77 → 1.0.78
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,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
|
-
/*
|
|
80
|
-
var
|
|
81
|
-
|
|
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
|
-
|
|
87
|
-
|
|
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
|
-
/*
|
|
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
|
-
|
|
97
|
-
|
|
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
|
|
141
|
+
var _ref2, _dataLevel$target$fil2;
|
|
103
142
|
target.fileId = f.response.data.fileId;
|
|
104
|
-
target.secId = (
|
|
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
|
-
/*
|
|
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
|
-
|
|
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
|
-
/*
|
|
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
|
|
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
|
|
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
|
|
213
|
+
var _ref4, _dataLevel$f$fileId;
|
|
173
214
|
var key = f.fileId || f.uid;
|
|
174
215
|
// 更新 secId
|
|
175
|
-
f.secId = (
|
|
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
|
|
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
|
|
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;
|
|
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)
|
|
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
|
}
|