@@ -205,6 +205,15 @@ const onBeforeIsPromise = ({
205
205
)
206
206
}
207
207
208
+ const isAcceptType = ( acceptArray , file , constants , fileType ) => {
209
+ return acceptArray . some ( ( type ) => {
210
+ if ( type . toLowerCase ( ) === constants . IMAGE_TYPE ) {
211
+ return constants . FILE_TYPE . PICTURE . split ( '/' ) . includes ( fileType )
212
+ }
213
+ return new RegExp ( `(${ type . trim ( ) } )$` , 'i' ) . test ( file . name )
214
+ } )
215
+ }
216
+
208
217
const getFileType = ( { file } : { file : IFileUploadFile } ) : string => {
209
218
const { name, url } = file
210
219
let fileType = ''
@@ -241,7 +250,7 @@ export const beforeUpload =
241
250
t,
242
251
state
243
252
} : Pick < IFileUploadRenderlessParams , 'props' | 'api' | 'constants' | 't' | 'state' > & IFileUploadModalVm ) =>
244
- ( file : IFileUploadFile , autoRemove : boolean , doUpload : Function ) => {
253
+ ( file : IFileUploadFile , autoRemove : boolean , doUpload : Function , isMergeUpload = false ) => {
245
254
if ( state . isEdm && file . name . length > 255 ) {
246
255
remove ( { api, file, autoRemove } )
247
256
return Modal . message ( {
@@ -254,16 +263,29 @@ export const beforeUpload =
254
263
let isValid = true
255
264
const accept = state . isEdm ? state . accept : props . accept
256
265
const types = constants . FILE_TYPE [ state . triggerClickType . toUpperCase ( ) ]
257
- const fileType = getFileType ( { file } )
258
-
259
- if ( accept ) {
260
- const isExist = accept . split ( ',' ) . some ( ( type ) => {
261
- if ( type . toLowerCase ( ) === constants . IMAGE_TYPE ) {
262
- return constants . FILE_TYPE . PICTURE . split ( '/' ) . includes ( fileType )
266
+ const acceptArray = accept ? accept . split ( ',' ) : [ ]
267
+ let fileType = ''
268
+ if ( isMergeUpload ) {
269
+ const fileRow = [ ]
270
+ fileType = file . raw . flatMap ( ( f ) => {
271
+ const type = getFileType ( { file : f } )
272
+ if ( accept ) {
273
+ const isExist = isAcceptType ( acceptArray , f , constants , type )
274
+ isExist ? fileRow . push ( f ) : remove ( { api, file : f , autoRemove } )
263
275
}
264
- return new RegExp ( `( ${ type . trim ( ) } )$` , 'i' ) . test ( file . name )
276
+ return type
265
277
} )
266
- ! isExist && ( isValid = false )
278
+ if ( ! fileRow . length ) {
279
+ isValid = false
280
+ }
281
+ file . raw = fileRow
282
+ } else {
283
+ fileType = getFileType ( { file } )
284
+
285
+ if ( accept ) {
286
+ const isExist = isAcceptType ( acceptArray , file , constants , fileType )
287
+ ! isExist && ( isValid = false )
288
+ }
267
289
}
268
290
269
291
if ( state . triggerClickType && types ) {
@@ -612,7 +634,7 @@ export const handleStart =
612
634
const handler = ( file ) =>
613
635
vm . $refs [ constants . UPLOAD_INNER ] . $refs [ constants . UPLOAD_INNER_TEMPLATE ] . upload ( file . raw )
614
636
615
- rawFiles . length && api . beforeUpload ( { raw : rawFiles } , true , handler )
637
+ rawFiles . length && api . beforeUpload ( { raw : rawFiles } , true , handler , true )
616
638
} else {
617
639
rawFiles . forEach ( ( rawFile ) => {
618
640
const file = api . getFile ( rawFile )
0 commit comments