import { UploadUserFile } from 'element-plus'; import { UploadRawFile, UploadRequestOptions } from 'element-plus/es/components/upload/src/upload'; import { Awaitable } from 'element-plus/es/utils'; export type UploadValue = UploadUserFile; export interface UploadProps { modelValue?: UploadValue[]; /** * text 普通按钮, picture-card 照片墙 */ listType?: 'text' | 'picture-card'; /** * 多选 */ multiple?: boolean; /** * 文件数量限制 */ limit?: number; /** * 禁用 */ disabled?: boolean; /** * 选择图片后自动上传 */ autoUpload?: boolean; /** * 文件选择类型限制 */ accept?: string; /** * 文件大小限制 KB */ maxSize?: number; /** * 文件大小限制 KB */ minSize?: number; /** * 文件上传前置拦截 * @param rawFile */ beforeUpload?: (rawFile: UploadRawFile) => Awaitable; /** * 自定义上传方法 (https://github.com/element-plus/element-plus/blob/dev/packages/components/upload/src/ajax.ts#L55) * @param options */ httpRequest?: (options: UploadRequestOptions) => XMLHttpRequest | Promise; /** * 上传组件大小 */ size?: 'small' | 'default' | 'large'; /** * 是否启用拖拽上传 */ drag?: boolean; } export interface UploadEmits { /** * 需要手动定义 不然类型推导会报错 */ (e: 'update:modelValue', value: UploadValue): void; /** * 文件大小超出限额时的钩子函数 */ (e: 'exceed', file: File[], fileList: UploadValue[]): void; } export interface UploadExposes { /** * 手动上传文件列表 */ submit: () => void; /** * 清空已上传的文件列表 */ clearFiles: () => void; } export type UploadSlots = { default: () => any; };