UNPKG

tdesign-mobile-vue

Version:
1 lines 38.6 kB
{"version":3,"file":"main.mjs","sources":["../../../../node_modules/@babel/runtime/helpers/esm/toArray.js","../../../../src/_common/js/upload/main.ts"],"sourcesContent":["import arrayWithHoles from \"./arrayWithHoles.js\";\nimport iterableToArray from \"./iterableToArray.js\";\nimport unsupportedIterableToArray from \"./unsupportedIterableToArray.js\";\nimport nonIterableRest from \"./nonIterableRest.js\";\nfunction _toArray(r) {\n return arrayWithHoles(r) || iterableToArray(r) || unsupportedIterableToArray(r) || nonIterableRest();\n}\nexport { _toArray as default };","import { isFunction, isNumber } from 'lodash-es';\n/* eslint-disable no-param-reassign */\nimport { getCurrentDate, isOverSizeLimit } from './utils';\nimport xhr from './xhr';\nimport log from '../log/log';\nimport {\n UploadFile,\n SizeLimitObj,\n FileChangeParams,\n FileChangeReturn,\n RequestMethodResponse,\n HandleUploadParams,\n SuccessContext,\n handleSuccessParams,\n UploadTriggerUploadText,\n ErrorContext,\n ResponseType,\n} from './types';\n\nexport interface BeforeUploadExtra {\n /** 图片文件大小限制 */\n sizeLimit?: number | SizeLimitObj;\n /** 上传文件之前的钩子,参数为上传的文件,返回值决定是否上传 */\n beforeUpload?: (file: UploadFile) => boolean | Promise<boolean>;\n}\n\nexport type BeforeUploadPromiseList = [Promise<SizeLimitObj>, undefined | Promise<boolean>];\n\nexport function handleBeforeUpload(file: UploadFile, params: BeforeUploadExtra): Promise<[SizeLimitObj, boolean]> {\n const { sizeLimit, beforeUpload } = params;\n // 文件大小校验\n const sizePromise = new Promise<SizeLimitObj>((resolve) => {\n let result: SizeLimitObj = null;\n if (sizeLimit) {\n const sizeLimitObj: SizeLimitObj = isNumber(sizeLimit) ? { size: sizeLimit, unit: 'KB' } : sizeLimit;\n const limit = isOverSizeLimit(file.size, sizeLimitObj.size, sizeLimitObj.unit);\n if (limit) {\n result = sizeLimitObj;\n }\n }\n resolve(result);\n });\n\n // 自定义校验\n const promiseList: BeforeUploadPromiseList = [sizePromise, undefined];\n if (isFunction(beforeUpload)) {\n const r = beforeUpload(file);\n const p =\n r instanceof Promise\n ? r\n : new Promise<boolean>((resolve) => {\n resolve(r);\n });\n promiseList[1] = p;\n }\n\n // 同时进行文件大小校验和自定义校验函数\n return new Promise((resolve) => {\n Promise.all(promiseList).then((r) => {\n resolve(r);\n });\n });\n}\n\nexport interface OnErrorParams extends ErrorContext {\n formatResponse?: HandleUploadParams['formatResponse'];\n}\n\nexport function handleError(options: OnErrorParams) {\n const { event, files, response, XMLHttpRequest, formatResponse } = options;\n let res = response;\n if (isFunction(formatResponse)) {\n res = formatResponse(response, { file: files[0], currentFiles: files });\n }\n files.forEach((file) => {\n file.status = 'fail';\n file.response = res;\n });\n return { response: res, event, files, XMLHttpRequest };\n}\n\nexport function handleSuccess(params: handleSuccessParams) {\n const { event, files, response, XMLHttpRequest } = params;\n if (files?.length <= 0) {\n log.error('Upload', 'Empty File in Success Callback');\n }\n files.forEach((file) => {\n file.percent = 100;\n file.status = 'success';\n delete file.response?.error;\n });\n const res = response;\n files[0].url = res.url || files[0].url;\n return { response: res, event, files, XMLHttpRequest };\n}\n\nexport type UploadRequestReturn = {\n status?: 'fail' | 'success';\n /** 上传失败的文件,需等待继续上传 */\n failedFiles?: UploadFile[];\n data?: SuccessContext;\n /** 批量文件上传,一个文件一个请求的场景下,响应结果的列表 */\n list?: UploadRequestReturn[];\n};\n\nexport function handleRequestMethodResponse(res: RequestMethodResponse) {\n if (!res) {\n log.error('Upload', '`requestMethodResponse` is required.');\n return false;\n }\n if (!res.status) {\n log.error('Upload', '`requestMethodResponse.status` is missing, which value only can be `success` or `fail`');\n return false;\n }\n if (!['success', 'fail'].includes(res.status)) {\n log.error(\n 'Upload',\n \"`requestMethodResponse.status` must be `success` or `fail`, examples `{ status: 'success', response: { url: '' } }`\"\n );\n return false;\n }\n if (res.status === 'success' && (!res.response || (!res.response.url && !res.response.files))) {\n log.warn(\n 'Upload',\n '`requestMethodResponse.response.url` or `requestMethodResponse.response.files` is required if `status` is `success`'\n );\n }\n return true;\n}\n\n/**\n * 一次上传请求的返回结果\n */\nexport function uploadOneRequest(params: HandleUploadParams): Promise<UploadRequestReturn> {\n const { action, toUploadFiles, requestMethod } = params;\n return new Promise<UploadRequestReturn>((resolve) => {\n if (!action && !requestMethod) {\n log.error('Upload', 'one of action and requestMethod must be exist.');\n resolve({});\n return;\n }\n if (!toUploadFiles || !toUploadFiles.length) {\n log.warn('Upload', 'No files need to be uploaded');\n resolve({});\n return;\n }\n toUploadFiles.forEach((file) => {\n file.status = 'progress';\n });\n // 自定义上传方法\n if (requestMethod) {\n requestMethod(params.multiple ? toUploadFiles : toUploadFiles[0]).then((res) => {\n if (!handleRequestMethodResponse(res)) {\n resolve({});\n return;\n }\n let response = (res.response || {}) as ResponseType;\n if (isFunction(params.formatResponse)) {\n response = params.formatResponse(response, { file: toUploadFiles[0], currentFiles: toUploadFiles });\n }\n if (res.status === 'fail') {\n response.error = res.error || response.error;\n }\n let resultFiles: UploadFile[] = [];\n if (res.status === 'success' && response.files) {\n // 一个请求上传并返回多个文件\n resultFiles = response.files.map((file: UploadFile) => {\n const fileInfo = toUploadFiles.find(\n (toFile) => (file.name && toFile.name === file.name) || (file.raw && toFile.raw === file.raw)\n );\n return {\n ...fileInfo,\n ...file,\n status: res.status,\n response,\n };\n });\n } else {\n // 一个请求上传并返回一个文件\n toUploadFiles.forEach((file) => {\n file.status = res.status;\n file.response = response;\n file.url = response.url;\n file.percent = res.status === 'success' ? 100 : 0;\n // 如果上传请求返回结果没有上传日期,则使用电脑当前日期显示\n file.uploadTime = response?.uploadTime || getCurrentDate();\n });\n resultFiles = toUploadFiles;\n }\n const result = {\n response,\n file: resultFiles[0],\n files: resultFiles,\n };\n if (res.status === 'success') {\n params.onResponseSuccess?.(result);\n } else if (res.status === 'fail') {\n params.onResponseError?.(result);\n }\n resolve({\n status: res.status,\n data: result,\n });\n });\n } else {\n const xhrReq = xhr({\n action: params.action,\n files: params.toUploadFiles,\n useMockProgress: params.useMockProgress,\n mockProgressDuration: params.mockProgressDuration,\n onError: (p: ErrorContext) => {\n const r = handleError({ ...p, formatResponse: params.formatResponse });\n params.onResponseError?.(r);\n resolve({ status: 'fail', data: r });\n },\n onProgress: params.onResponseProgress,\n onSuccess: (p: SuccessContext) => {\n const { formatResponse } = params;\n let res = p.response;\n if (isFunction(formatResponse)) {\n res = formatResponse(p.response, {\n file: p.file,\n currentFiles: p.files,\n });\n }\n if (res.error) {\n const r = handleError({ ...p, response: res });\n params.onResponseError?.(r);\n resolve({ status: 'fail', data: r });\n } else {\n p.file.response = res;\n p.files[0].response = res;\n const r = handleSuccess({ ...p, response: res });\n params.onResponseSuccess?.(r);\n resolve({ status: 'success', data: r });\n }\n },\n formatRequest: params.formatRequest,\n data: params.data,\n name: params.name,\n headers: params.headers,\n withCredentials: params.withCredentials,\n method: params.method,\n });\n params.setXhrObject?.({\n files: params.toUploadFiles,\n xhrReq,\n });\n }\n });\n}\n\nfunction updateUploadedFiles(uploadFiles: UploadFile[], resultFiles: UploadFile[]) {\n const existFiles = uploadFiles.filter((t) => t.url);\n const newFiles = existFiles;\n for (let i = 0, len = resultFiles.length; i < len; i++) {\n const file = resultFiles[i];\n const index = uploadFiles.findIndex(\n (item) => (item.raw && item.raw === file.raw) || (item.name && item.name === file.name)\n );\n const tmpFile = index >= 0 ? { ...uploadFiles[index], ...file } : file;\n newFiles.push(tmpFile);\n }\n return newFiles;\n}\n\n/**\n * 可能单个文件上传,也可能批量文件一次性上传\n * 返回上传成功或上传失败的文件列表\n */\nexport function upload(params: HandleUploadParams): Promise<UploadRequestReturn> {\n const { uploadAllFilesInOneRequest, toUploadFiles, uploadedFiles, isBatchUpload } = params;\n // 一批文件上传,部分文件失败,重新上传失败的文件\n const thisUploadFiles = toUploadFiles.filter((t) => !t.response || (t.response && !t.response.error));\n return new Promise((resolve) => {\n // 所有文件一次性上传\n if (uploadAllFilesInOneRequest || !params.multiple) {\n uploadOneRequest(params).then((r) => {\n if (r.status === 'success') {\n r.data.files =\n isBatchUpload || !params.multiple ? r.data.files : updateUploadedFiles(uploadedFiles, r.data.files);\n }\n const failedFiles = r.status === 'fail' ? r.data.files : [];\n resolve({ ...r, failedFiles });\n });\n return;\n }\n // 一个文件一个文件上传\n const list = thisUploadFiles.map((file) => uploadOneRequest({ ...params, toUploadFiles: [file] }));\n Promise.all(list).then((arr) => {\n const files: UploadFile[] = [];\n const failedFiles: UploadFile[] = [];\n arr.forEach((one) => {\n if (one.status === 'success') {\n files.push(one.data.files[0]);\n } else if (one.status === 'fail') {\n failedFiles.push(one.data.files[0]);\n }\n });\n const tFiles = params.autoUpload ? uploadedFiles.concat(files) : uploadedFiles;\n const newFiles = isBatchUpload || !params.multiple ? files : tFiles;\n resolve({\n status: files.length ? 'success' : 'fail',\n data: {\n files: newFiles,\n },\n // 上传失败的文件,需等待继续上传\n failedFiles,\n list: arr,\n });\n });\n });\n}\n\nexport function formatToUploadFile(\n files: File[],\n format: FileChangeParams['format'],\n status: UploadFile['status'] = undefined,\n percent = 0\n) {\n return files.map((fileRaw: File) => {\n let file: UploadFile = fileRaw;\n if (isFunction(format)) {\n file = format(fileRaw);\n }\n const uploadFile: UploadFile = {\n raw: fileRaw,\n lastModified: fileRaw.lastModified,\n name: fileRaw.name,\n size: fileRaw.size,\n type: fileRaw.type,\n percent,\n status,\n ...file,\n };\n return uploadFile;\n });\n}\n\nexport function validateFile(params: FileChangeParams): Promise<FileChangeReturn> {\n const { files, uploadValue, max, allowUploadDuplicateFile, capture = '' } = params;\n return new Promise((resolve) => {\n // 是否允许相同的文件名存在\n let tmpFiles = files.filter((file) => {\n // capture 明确指定后,一定是调用设备的媒体设备(比如:摄像头)捕获上传文件,该类文件跳过重复文件名校验\n if (allowUploadDuplicateFile || !!capture) return true;\n\n const sameNameFile = uploadValue.find((t) => t.name === file.name);\n return !sameNameFile;\n });\n\n let hasSameNameFile = false;\n if (tmpFiles.length < files.length) {\n hasSameNameFile = true;\n }\n if (!tmpFiles.length) {\n const tFiles = formatToUploadFile(files, params.format, params.autoUpload ? 'progress' : 'waiting');\n resolve({ hasSameNameFile, file: tFiles?.[0], files: tFiles, validateResult: { type: 'FILTER_FILE_SAME_NAME' } });\n return;\n }\n // 上传文件数量限制\n let lengthOverLimit = false;\n if (max && tmpFiles.length && !params.isBatchUpload) {\n const tmpFilesLenToBeAdded = tmpFiles.length;\n tmpFiles = tmpFiles.slice(0, max - uploadValue.length);\n if (tmpFilesLenToBeAdded + uploadValue.length > max) {\n lengthOverLimit = true;\n }\n }\n\n // 格式化文件对象\n const formattedFiles = formatToUploadFile(tmpFiles, params.format, params.autoUpload ? 'progress' : 'waiting');\n\n // 全量文件,一波校验,整体上传 或 终止上传\n let allFileValidatePromise;\n if (params.beforeAllFilesUpload) {\n const r = params.beforeAllFilesUpload?.(formattedFiles);\n allFileValidatePromise =\n r instanceof Promise\n ? r\n : new Promise((resolve) => {\n resolve(r);\n });\n }\n\n // 单文件合法性校验,一个文件校验不通过其他文件可继续上传\n const promiseList = formattedFiles.map(\n (file: UploadFile) =>\n new Promise((resolve) => {\n handleBeforeUpload(file, { beforeUpload: params.beforeUpload, sizeLimit: params.sizeLimit }).then(\n ([sizeResult, customResult]) => {\n if (sizeResult) {\n resolve({ file, validateResult: { type: 'FILE_OVER_SIZE_LIMIT', extra: sizeResult } });\n } else if (customResult === false) {\n resolve({ file, validateResult: { type: 'CUSTOM_BEFORE_UPLOAD' } });\n }\n resolve({ file });\n }\n );\n })\n );\n Promise.all([allFileValidatePromise].concat(promiseList)).then((results) => {\n const [allFilesResult, ...others] = results;\n // 如果 beforeAllFilesUpload 校验未通过\n if (allFilesResult === false) {\n resolve({\n lengthOverLimit,\n hasSameNameFile,\n validateResult: { type: 'BEFORE_ALL_FILES_UPLOAD' },\n files: formattedFiles,\n });\n } else {\n resolve({\n lengthOverLimit,\n hasSameNameFile,\n fileValidateList: others,\n files: formattedFiles,\n });\n }\n });\n });\n}\n\nexport function getFilesAndErrors(\n fileValidateList: FileChangeReturn[],\n getError: (p: { [key: string]: any }) => string\n) {\n const sizeLimitErrors: FileChangeReturn[] = [];\n const beforeUploadErrorFiles: UploadFile[] = [];\n const toFiles: UploadFile[] = [];\n fileValidateList.forEach((oneFile) => {\n if (oneFile.validateResult?.type === 'CUSTOM_BEFORE_UPLOAD') {\n beforeUploadErrorFiles.push(oneFile.file);\n return;\n }\n if (oneFile.validateResult?.type === 'FILE_OVER_SIZE_LIMIT') {\n if (!oneFile.file.response) {\n oneFile.file.response = {};\n }\n oneFile.file.response.error = oneFile.file.response.error || getError(oneFile.validateResult.extra);\n sizeLimitErrors.push(oneFile);\n return;\n }\n toFiles.push(oneFile.file);\n });\n\n return { sizeLimitErrors, beforeUploadErrorFiles, toFiles };\n}\n\n/**\n * 获取文件上传触发元素文本 在全局配置中的字段\n */\nexport function getTriggerTextField(p: {\n status: 'success' | 'fail' | 'progress' | 'waiting';\n multiple: boolean;\n autoUpload: boolean;\n isBatchUpload: boolean;\n}): keyof UploadTriggerUploadText {\n if (p.isBatchUpload && p.status) return 'reupload';\n if (p.status === 'fail') return 'reupload';\n if (p.status === 'progress') return 'uploading';\n if (p.status === 'success' || (!p.autoUpload && p.status === 'waiting')) {\n return p.multiple ? 'continueUpload' : 'reupload';\n }\n return 'fileInput';\n}\n\nexport interface GetDisplayFilesParams {\n multiple: boolean;\n autoUpload: boolean;\n isBatchUpload: boolean;\n uploadValue: UploadFile[];\n toUploadFiles: UploadFile[];\n}\n\n/**\n * 获取文件列表显示\n */\nexport function getDisplayFiles(params: GetDisplayFilesParams) {\n const { multiple, uploadValue, toUploadFiles, autoUpload } = params;\n const waitingUploadFiles = autoUpload ? toUploadFiles : toUploadFiles.filter((file) => file.status !== 'success');\n if (multiple && !params.isBatchUpload) {\n if (!autoUpload) return uploadValue;\n return (waitingUploadFiles.length ? uploadValue.concat(waitingUploadFiles) : uploadValue) || [];\n }\n return (waitingUploadFiles.length ? waitingUploadFiles : uploadValue) || [];\n}\n"],"names":["_toArray","r","arrayWithHoles","iterableToArray","unsupportedIterableToArray","nonIterableRest","handleBeforeUpload","file","params","sizeLimit","beforeUpload","sizePromise","Promise","resolve","result","sizeLimitObj","isNumber","size","unit","limit","isOverSizeLimit","promiseList","isFunction","p","all","then","handleError","options","event","files","response","XMLHttpRequest","formatResponse","res","currentFiles","forEach","status","handleSuccess","length","log","error","_file$response","percent","url","handleRequestMethodResponse","includes","warn","uploadOneRequest","action","toUploadFiles","requestMethod","multiple","resultFiles","map","fileInfo","find","toFile","name","raw","_objectSpread","_response","uploadTime","getCurrentDate","_params$onResponseSuc","onResponseSuccess","call","_params$onResponseErr","onResponseError","data","_params$setXhrObject","xhrReq","xhr","useMockProgress","mockProgressDuration","onError","_params$onResponseErr2","onProgress","onResponseProgress","onSuccess","_params$onResponseErr3","_params$onResponseSuc2","formatRequest","headers","withCredentials","method","setXhrObject","updateUploadedFiles","uploadFiles","existFiles","filter","t","newFiles","_loop","i","index","findIndex","item","tmpFile","push","len","upload","uploadAllFilesInOneRequest","uploadedFiles","isBatchUpload","thisUploadFiles","failedFiles","list","arr","one","tFiles","autoUpload","concat","formatToUploadFile","format","arguments","undefined","fileRaw","uploadFile","lastModified","type","validateFile","uploadValue","max","allowUploadDuplicateFile","_params$capture","capture","tmpFiles","sameNameFile","hasSameNameFile","validateResult","lengthOverLimit","tmpFilesLenToBeAdded","slice","formattedFiles","allFileValidatePromise","beforeAllFilesUpload","_params$beforeAllFile","_ref","_ref2","_slicedToArray","sizeResult","customResult","extra","results","_results","allFilesResult","others","_arrayLikeToArray","fileValidateList","getFilesAndErrors","getError","sizeLimitErrors","beforeUploadErrorFiles","toFiles","oneFile","_oneFile$validateResu","_oneFile$validateResu2","getTriggerTextField","getDisplayFiles","waitingUploadFiles"],"mappings":"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"}