diff --git a/build/type-safe.json b/build/type-safe.json index 289377133e..4f8638accd 100644 --- a/build/type-safe.json +++ b/build/type-safe.json @@ -23,6 +23,7 @@ "packages/components/slot/", "packages/components/tag/", "packages/components/teleport/", + "packages/components/upload/", "packages/constants", "packages/element-plus", "packages/hooks", diff --git a/packages/components/upload/src/upload-content.ts b/packages/components/upload/src/upload-content.ts index b17edf69d1..3e14164325 100644 --- a/packages/components/upload/src/upload-content.ts +++ b/packages/components/upload/src/upload-content.ts @@ -1,5 +1,5 @@ import { NOOP } from '@vue/shared' -import { buildProps, definePropType } from '@element-plus/utils' +import { buildProps, definePropType, mutable } from '@element-plus/utils' import { uploadBaseProps } from './upload' import type { ExtractPropTypes } from 'vue' @@ -14,6 +14,13 @@ import type { UploadAjaxError } from './ajax' export const uploadContentProps = buildProps({ ...uploadBaseProps, + + // override + fileList: { + type: definePropType(Array), + default: () => mutable([] as const), + }, + beforeUpload: { type: definePropType(Function), default: NOOP, diff --git a/packages/components/upload/src/upload.ts b/packages/components/upload/src/upload.ts index b0c547e25b..250ac63f8e 100644 --- a/packages/components/upload/src/upload.ts +++ b/packages/components/upload/src/upload.ts @@ -33,12 +33,15 @@ export interface UploadFile { name: string percentage?: number status: UploadStatus - size: number + size?: number response?: unknown uid: number url?: string - raw: UploadRawFile + raw?: UploadRawFile } +export type UploadUserFile = Omit & + Partial> + export type UploadFiles = UploadFile[] export interface UploadRawFile extends File { uid: number @@ -117,7 +120,7 @@ export const uploadBaseProps = buildProps({ default: 'select', }, fileList: { - type: definePropType(Array), + type: definePropType(Array), default: () => mutable([] as const), }, autoUpload: { diff --git a/packages/components/upload/src/use-handlers.ts b/packages/components/upload/src/use-handlers.ts index b78707d7e1..f5263f1b88 100644 --- a/packages/components/upload/src/use-handlers.ts +++ b/packages/components/upload/src/use-handlers.ts @@ -138,7 +138,7 @@ export const useHandlers = ( function submit() { uploadFiles.value .filter(({ status }) => status === 'ready') - .forEach(({ raw }) => uploadRef.value?.upload(raw)) + .forEach(({ raw }) => raw && uploadRef.value?.upload(raw)) } watch( @@ -166,11 +166,12 @@ export const useHandlers = ( () => props.fileList, (fileList) => { for (const file of fileList) { - file.uid = genFileId() + file.uid ||= genFileId() file.status ||= 'success' } + uploadFiles.value = fileList as UploadFiles }, - { immediate: true } + { immediate: true, deep: true } ) return {