tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 35.5 kB
Source Map (JSON)
{"version":3,"file":"useUpload.mjs","sources":["../../../src/upload/hooks/useUpload.ts"],"sourcesContent":["import { computed, h, ref, shallowRef, toRefs, ComputedRef, Ref, ShallowRef } from 'vue';\nimport { isFunction, isString } from 'lodash-es';\nimport { SizeLimitObj, TdUploadProps, UploadChangeContext, UploadFile, UploadRemoveContext } from '../type';\nimport useVModel from '../../hooks/useVModel';\nimport {\n formatToUploadFile,\n getDisplayFiles,\n validateFile,\n upload,\n getFilesAndErrors,\n} from '../../_common/js/upload/main';\nimport {\n FileChangeReturn,\n InnerProgressContext,\n OnResponseErrorContext,\n SuccessContext,\n} from '../../_common/js/upload/types';\nimport { getFileList, getFileUrlByFileRaw } from '../../_common/js/upload/utils';\n\n// @ts-ignore\nexport type ValidateParams = Parameters<TdUploadProps['onValidate']>[0];\n\nexport default function useUpload(props: TdUploadProps): {\n toUploadFiles: ShallowRef<UploadFile[]>;\n uploadValue: Ref<UploadFile[]>;\n displayFiles: ComputedRef<UploadFile[]>;\n sizeOverLimitMessage: Ref<string>;\n uploading: Ref<boolean>;\n inputRef: Ref<HTMLInputElement>;\n disabled: Ref<boolean>;\n xhrReq: ShallowRef<{ files: UploadFile[]; xhrReq: XMLHttpRequest }[]>;\n uploadFilePercent: (params: { file: UploadFile; percent: number }) => void;\n uploadFiles: (toFiles?: UploadFile[]) => void;\n onFileChange: (files: File[]) => void;\n onNormalFileChange: (e: Event) => void;\n onInnerRemove: (context: UploadRemoveContext) => void;\n cancelUpload: (context?: { file?: UploadFile; e?: MouseEvent }) => void;\n} {\n const inputRef = ref<HTMLInputElement>();\n const { disabled, autoUpload, isBatchUpload, multiple, files, modelValue, defaultFiles } = toRefs(props);\n const [uploadValue, setUploadValue] = useVModel(files, modelValue, defaultFiles.value, props.onChange, 'files');\n const xhrReq = shallowRef<{ files: UploadFile[]; xhrReq: XMLHttpRequest }[]>([]);\n const toUploadFiles = shallowRef<UploadFile[]>([]);\n const sizeOverLimitMessage = ref('');\n\n const uploading = ref(false);\n\n // 文件列表显示的内容(自动上传和非自动上传有所不同)\n const displayFiles: ComputedRef<UploadFile[]> = computed(() => {\n return getDisplayFiles({\n multiple: multiple?.value || false,\n toUploadFiles: toUploadFiles.value,\n uploadValue: uploadValue.value as UploadFile[],\n autoUpload: autoUpload?.value || false,\n isBatchUpload: isBatchUpload?.value || false,\n });\n });\n\n const uploadFilePercent = (params: { file: UploadFile; percent: number }) => {\n const { file, percent } = params;\n const index = toUploadFiles.value.findIndex((item) => file.raw === item.raw);\n toUploadFiles.value[index] = { ...toUploadFiles.value[index], percent };\n };\n\n const updateFilesProgress = () => {\n if (props.autoUpload) {\n toUploadFiles.value = [...toUploadFiles.value];\n }\n };\n\n const onResponseError = (p: OnResponseErrorContext) => {\n if (!p || !p.files || !p.files[0]) return;\n const { response, event, files } = p;\n updateFilesProgress();\n props.onOneFileFail?.({\n e: event,\n file: files?.[0],\n currentFiles: files,\n failedFiles: files,\n response,\n });\n // 单选或多文件替换,需要清空上一次上传成功的文件\n if (!props.multiple || props.isBatchUpload) {\n setUploadValue([], {\n trigger: 'progress-fail',\n e: p.event,\n file: p.files[0],\n });\n }\n };\n\n // 多文件上传场景,单个文件进度\n const onResponseProgress = (p: InnerProgressContext) => {\n updateFilesProgress();\n props.onProgress?.({\n e: p.event,\n file: p.file,\n currentFiles: p.files as UploadFile[],\n percent: p.percent,\n type: p.type,\n XMLHttpRequest: p.XMLHttpRequest,\n });\n };\n\n // 多文件上传场景,单个文件上传成功后\n const onResponseSuccess = (p: SuccessContext) => {\n // 只有多个上传请求同时触发时才需 onOneFileSuccess\n if (props.multiple && !props.uploadAllFilesInOneRequest) {\n updateFilesProgress();\n props.onOneFileSuccess?.({\n e: p.event,\n file: (p.files as UploadFile[])[0],\n response: p.response,\n });\n }\n };\n\n // 处理正则表达式\n const t = function <T>(pattern: T, ...args: any[]) {\n const [data] = args;\n if (isString(pattern)) {\n if (!data) return pattern;\n const regular = /\\{\\s*([\\w-]+)\\s*\\}/g;\n const translated = pattern.replace(regular, (match, key) => {\n if (data) {\n return String(data[key]);\n }\n return '';\n });\n return translated;\n }\n if (isFunction(pattern)) {\n // 重要:组件的渲染必须存在参数 h,不能移除\n if (!args.length) return pattern(h);\n return pattern(...args);\n }\n return '';\n };\n\n function getSizeLimitError(sizeLimitObj: SizeLimitObj): string {\n const limit = sizeLimitObj;\n return limit.message\n ? t(limit.message, { sizeLimit: limit.size })\n : `${t('', { sizeLimit: limit.size })} ${limit.unit}`;\n }\n\n const handleNotAutoUpload = (toFiles: UploadFile[]) => {\n const tmpFiles =\n props.multiple && !isBatchUpload?.value ? (uploadValue?.value as UploadFile[]).concat(toFiles) : toFiles;\n if (!tmpFiles.length) return;\n const list = tmpFiles.map(\n (file) =>\n new Promise((resolve) => {\n getFileUrlByFileRaw(file.raw as File).then((url) => {\n resolve({ ...file, url: file.url || url });\n });\n }),\n );\n Promise.all(list).then((files) => {\n setUploadValue(files as UploadFile[], {\n trigger: 'add',\n index: (uploadValue.value as UploadFile[]).length,\n file: toFiles[0],\n files: toFiles,\n });\n });\n toUploadFiles.value = [];\n };\n\n const onFileChange = (files: File[]) => {\n if (disabled?.value) return;\n const params = { currentSelectedFiles: formatToUploadFile([...files], props.format) };\n props.onSelectChange?.([...files], params);\n validateFile({\n uploadValue: uploadValue.value as UploadFile[],\n files: [...files],\n allowUploadDuplicateFile: props.allowUploadDuplicateFile,\n capture: props.capture,\n max: props.max,\n sizeLimit: props.sizeLimit,\n isBatchUpload: isBatchUpload?.value,\n autoUpload: autoUpload?.value,\n format: props.format,\n beforeUpload: props.beforeUpload,\n beforeAllFilesUpload: props.beforeAllFilesUpload,\n }).then((args) => {\n // 自定义全文件校验不通过\n if (args.validateResult?.type === 'BEFORE_ALL_FILES_UPLOAD') {\n const params: ValidateParams = { type: 'BEFORE_ALL_FILES_UPLOAD', files: args.files as UploadFile[] };\n props.onValidate?.(params);\n return;\n }\n // 文件数量校验不通过\n if (args.lengthOverLimit) {\n const params: ValidateParams = { type: 'FILES_OVER_LENGTH_LIMIT', files: args.files as UploadFile[] };\n props.onValidate?.(params);\n if (!(args.files as UploadFile[]).length) return;\n }\n // 过滤相同的文件名\n if (args.hasSameNameFile) {\n const params: ValidateParams = { type: 'FILTER_FILE_SAME_NAME', files: args.files as UploadFile[] };\n props.onValidate?.(params);\n }\n // 文件大小校验结果处理(已过滤超出限制的文件)\n if (args.fileValidateList instanceof Array) {\n const { sizeLimitErrors, beforeUploadErrorFiles, toFiles } = getFilesAndErrors(\n args.fileValidateList,\n // @ts-ignore\n getSizeLimitError,\n );\n const tmpWaitingFiles = autoUpload?.value ? toFiles : toUploadFiles.value.concat(toFiles);\n toUploadFiles.value = tmpWaitingFiles;\n props.onWaitingUploadFilesChange?.({ files: tmpWaitingFiles, trigger: 'validate' });\n // 文件大小处理\n if (sizeLimitErrors[0]) {\n sizeOverLimitMessage.value = sizeLimitErrors[0]?.file?.response?.error;\n props.onValidate?.({\n type: 'FILE_OVER_SIZE_LIMIT',\n files: sizeLimitErrors.map((t) => t.file) as FileChangeReturn[],\n });\n } else {\n sizeOverLimitMessage.value = '';\n // 自定义方法 beforeUpload 拦截的文件\n if (beforeUploadErrorFiles.length) {\n const params: ValidateParams = { type: 'CUSTOM_BEFORE_UPLOAD', files: beforeUploadErrorFiles };\n props.onValidate?.(params);\n }\n }\n // 如果是自动上传\n if (autoUpload?.value) {\n uploadFiles(tmpWaitingFiles);\n } else {\n handleNotAutoUpload(tmpWaitingFiles);\n }\n }\n });\n\n // 清空 <input type=\"file\"> 元素的文件,避免出现重复文件无法选择的情况\n if (inputRef.value) {\n inputRef.value.value = '';\n }\n };\n\n const onNormalFileChange = (e: Event) => {\n const fileList = getFileList((e.target as HTMLInputElement).files as FileList);\n onFileChange?.(fileList);\n };\n\n /**\n * 上传文件。对外暴露方法,修改时需谨慎\n * @param toFiles 本地上传的文件列表\n */\n function uploadFiles(toFiles?: UploadFile[]) {\n const notUploadedFiles = (uploadValue.value as UploadFile[]).filter((t) => t.status !== 'success');\n const files = autoUpload?.value ? toFiles || toUploadFiles.value : notUploadedFiles;\n if (!files || !files.length) return;\n uploading.value = true;\n xhrReq.value = [];\n upload({\n action: props.action,\n headers: props.headers,\n method: props.method,\n name: props.name,\n withCredentials: props.withCredentials,\n uploadedFiles: uploadValue.value as UploadFile[],\n toUploadFiles: files,\n multiple: props.multiple,\n isBatchUpload: isBatchUpload?.value,\n autoUpload: props.autoUpload,\n uploadAllFilesInOneRequest: props.uploadAllFilesInOneRequest,\n useMockProgress: props.useMockProgress,\n data: props.data,\n mockProgressDuration: props.mockProgressDuration,\n requestMethod: props.requestMethod,\n formatRequest: props.formatRequest,\n formatResponse: props.formatResponse,\n onResponseProgress,\n onResponseSuccess,\n onResponseError,\n setXhrObject: (xhr) => {\n if (xhr.files[0]?.raw && xhrReq.value.find((item) => item.files[0]?.raw === xhr.files[0].raw)) return;\n xhrReq.value = xhrReq.value.concat(xhr);\n },\n }).then(\n // 多文件场景时,全量文件完成后\n ({ status, data, list, failedFiles }) => {\n uploading.value = false;\n if (status === 'success') {\n if (props.autoUpload) {\n setUploadValue([...(data?.files as UploadFile[])], {\n trigger: 'add',\n file: (data?.files as UploadFile[])[0],\n });\n }\n xhrReq.value = [];\n props.onSuccess?.({\n fileList: data?.files,\n currentFiles: files,\n file: files[0],\n // 只有全部请求完成后,才会存在该字段\n // @ts-ignore\n results: list?.map((t) => t.data),\n // 单文件单请求有一个 response,多文件多请求有多个 response\n response: data?.response || list?.map((t) => t.data?.response),\n XMLHttpRequest: data?.XMLHttpRequest,\n });\n } else if (failedFiles?.[0]) {\n props.onFail?.({\n e: data?.event,\n file: failedFiles[0],\n failedFiles,\n currentFiles: files,\n response: data?.response,\n XMLHttpRequest: data?.XMLHttpRequest,\n });\n }\n\n // 非自动上传,文件都在 uploadValue,不涉及 toUploadFiles\n if (autoUpload?.value) {\n toUploadFiles.value = failedFiles as UploadFile[];\n props.onWaitingUploadFilesChange?.({ files: failedFiles as UploadFile[], trigger: 'uploaded' });\n }\n },\n );\n }\n\n function onInnerRemove(p: UploadRemoveContext) {\n sizeOverLimitMessage.value = '';\n p.e.stopPropagation?.();\n const changePrams: UploadChangeContext = {\n e: p.e,\n trigger: 'remove',\n index: p.index,\n file: p.file,\n };\n // remove all files for batchUpload\n if (props.isBatchUpload || !props.multiple) {\n toUploadFiles.value = [];\n props.onWaitingUploadFilesChange?.({ files: [], trigger: 'remove' });\n setUploadValue([], changePrams);\n } else if (!props.autoUpload) {\n (uploadValue.value as UploadFile[]).splice(p.index, 1);\n setUploadValue([...(uploadValue.value as UploadFile[])], changePrams);\n } else {\n // autoUpload 场景下, p.index < uploadValue.length 表示移除已经上传成功的文件;反之表示移除待上传列表文件\n // eslint-disable-next-line\n if (p.index < (uploadValue.value as UploadFile[]).length) {\n (uploadValue.value as UploadFile[]).splice(p.index, 1);\n setUploadValue([...(uploadValue.value as UploadFile[])], changePrams);\n } else {\n // @ts-ignore\n toUploadFiles.value.splice(p.index - uploadValue.value.length, 1);\n toUploadFiles.value = [...toUploadFiles.value];\n props.onWaitingUploadFilesChange?.({ files: [...toUploadFiles.value], trigger: 'remove' });\n }\n }\n props.onRemove?.(p);\n }\n\n const cancelUpload = (context?: { file?: UploadFile; e?: MouseEvent }) => {\n xhrReq.value?.forEach((item) => {\n item.xhrReq?.abort();\n });\n uploading.value = false;\n\n if (autoUpload?.value) {\n toUploadFiles.value = toUploadFiles.value.map((item) => ({ ...item, status: 'waiting' }));\n } else {\n setUploadValue(\n (uploadValue.value as UploadFile[]).map((item) => {\n if (item.status !== 'success') {\n return { ...item, status: 'waiting' };\n }\n return item;\n }),\n { trigger: 'abort' },\n );\n }\n\n if (context?.file && !autoUpload?.value) {\n onInnerRemove?.({ file: context.file, e: context.e as MouseEvent, index: 0 });\n }\n\n props.onCancelUpload?.();\n };\n\n return {\n toUploadFiles,\n uploadValue,\n displayFiles,\n sizeOverLimitMessage,\n uploading,\n inputRef,\n disabled,\n xhrReq,\n uploadFilePercent,\n uploadFiles,\n onFileChange,\n onNormalFileChange,\n onInnerRemove,\n cancelUpload,\n };\n}\n"],"names":["useUpload","props","inputRef","ref","_toRefs","toRefs","disabled","autoUpload","isBatchUpload","multiple","files","modelValue","defaultFiles","_useVModel","useVModel","value","onChange","_useVModel2","_slicedToArray","uploadValue","setUploadValue","xhrReq","shallowRef","toUploadFiles","sizeOverLimitMessage","uploading","displayFiles","computed","getDisplayFiles","uploadFilePercent","params","file","percent","index","findIndex","item","raw","_objectSpread","updateFilesProgress","_toConsumableArray","onResponseError","p","_props$onOneFileFail","response","event","onOneFileFail","call","e","currentFiles","failedFiles","trigger","onResponseProgress","_props$onProgress","onProgress","type","XMLHttpRequest","onResponseSuccess","uploadAllFilesInOneRequest","_props$onOneFileSucce","onOneFileSuccess","t","pattern","_len","arguments","length","args","Array","_key","data","isString","regular","translated","replace","match","key","String","isFunction","h","apply","getSizeLimitError","sizeLimitObj","limit","message","sizeLimit","size","unit","handleNotAutoUpload","toFiles","tmpFiles","concat","list","map","Promise","resolve","getFileUrlByFileRaw","then","url","all","onFileChange","_props$onSelectChange","currentSelectedFiles","formatToUploadFile","format","onSelectChange","validateFile","allowUploadDuplicateFile","capture","max","beforeUpload","beforeAllFilesUpload","_args$validateResult","validateResult","_props$onValidate","onValidate","lengthOverLimit","_props$onValidate2","hasSameNameFile","_props$onValidate3","fileValidateList","_props$onWaitingUploa","_getFilesAndErrors","getFilesAndErrors","sizeLimitErrors","beforeUploadErrorFiles","tmpWaitingFiles","onWaitingUploadFilesChange","_sizeLimitErrors$","_props$onValidate4","error","_props$onValidate5","uploadFiles","onNormalFileChange","fileList","getFileList","target","notUploadedFiles","filter","status","upload","action","headers","method","name","withCredentials","uploadedFiles","useMockProgress","mockProgressDuration","requestMethod","formatRequest","formatResponse","setXhrObject","xhr","_xhr$files$","find","_item$files$","_ref","_props$onSuccess","onSuccess","results","_t2$data","_props$onFail","onFail","_props$onWaitingUploa2","onInnerRemove","_p$e$stopPropagation","_p$e","_props$onRemove","stopPropagation","changePrams","_props$onWaitingUploa3","splice","_props$onWaitingUploa4","onRemove","cancelUpload","context","_xhrReq$value","_props$onCancelUpload","forEach","_item$xhrReq","abort","onCancelUpload"],"mappings":"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"}