UNPKG

tdesign-mobile-vue

Version:
1 lines 12.6 kB
{"version":3,"file":"xhr.mjs","sources":["../../../../src/_common/js/upload/xhr.ts"],"sourcesContent":["import { isFunction } from 'lodash-es';\n/* eslint-disable no-param-reassign */\nimport log from '../log/log';\nimport { UploadFile, XhrOptions } from './types';\nimport { getCurrentDate } from './utils';\n\nexport default function xhr({\n method = 'POST',\n action,\n withCredentials = false,\n headers = {},\n data = {},\n file,\n files = [],\n name = 'file',\n useMockProgress = true,\n mockProgressDuration = 300,\n formatRequest,\n onError,\n onProgress,\n onSuccess,\n}: XhrOptions) {\n // support files\n const innerFiles: UploadFile[] = files || [];\n let percent = 0;\n\n // eslint-disable-next-line no-shadow\n const xhr = new XMLHttpRequest();\n if (withCredentials) {\n xhr.withCredentials = true;\n }\n\n let timer1: NodeJS.Timeout;\n let timer2: NodeJS.Timeout;\n if (useMockProgress && files[0]?.status === 'progress') {\n // 超过 500 毫秒再开启虚拟进度\n const timer2 = setTimeout(() => {\n // 只有真实进度一直不存在时才需要模拟进度\n timer1 = setInterval(() => {\n if (percent + 10 < 100) {\n percent = Math.max(percent + 10, percent);\n if (files[0] && percent !== files[0].percent) {\n files[0].percent = percent;\n onProgress({\n percent,\n file: file || innerFiles[0],\n files: innerFiles.map((file) => ({ ...file, percent })),\n type: 'mock',\n XMLHttpRequest: xhr,\n });\n }\n } else {\n clearInterval(timer1);\n }\n }, mockProgressDuration);\n clearTimeout(timer2);\n }, mockProgressDuration);\n }\n\n let requestData: { [key: string]: any } = {};\n if (data) {\n const extraData = isFunction(data) ? data(innerFiles) : data;\n Object.assign(requestData, extraData);\n }\n innerFiles.forEach((file, index) => {\n const fileField = innerFiles.length > 1 ? `${name}[${index}]` : name;\n requestData[fileField] = file.raw;\n });\n if (innerFiles.length === 1) {\n requestData[name] = innerFiles[0].raw;\n } else {\n requestData[name] = innerFiles.map((file) => file.raw);\n }\n requestData.length = innerFiles.length;\n\n if (formatRequest) {\n requestData = formatRequest(requestData);\n }\n\n // set send data\n const formData = new FormData();\n Object.keys(requestData).forEach((key) => {\n formData.append(key, requestData[key]);\n });\n\n xhr.open(method, action, true);\n // custom request headers\n Object.keys(headers).forEach((key) => {\n xhr.setRequestHeader(key, headers[key]);\n });\n\n xhr.onerror = (event: ProgressEvent) => {\n onError({ event, file, files: innerFiles, XMLHttpRequest: xhr, });\n clearInterval(timer1);\n clearTimeout(timer2);\n };\n\n xhr.ontimeout = (event) => {\n onError({ event, file, files: innerFiles, XMLHttpRequest: xhr, });\n };\n\n if (xhr.upload) {\n xhr.upload.onprogress = (event: ProgressEvent) => {\n let realPercent = 0;\n if (event.total > 0) {\n realPercent = Math.round((event.loaded / event.total) * 100);\n }\n percent = Math.max(realPercent, percent);\n if (percent !== realPercent && innerFiles[0]?.percent !== percent) {\n const progressFiles = innerFiles.map((item) => ({ ...item, percent }));\n onProgress({\n event,\n percent,\n file: file || progressFiles[0],\n files: progressFiles,\n type: 'real',\n XMLHttpRequest: xhr,\n });\n }\n };\n }\n\n // eslint-disable-next-line consistent-return\n xhr.onload = (event: ProgressEvent) => {\n let response: { [key: string]: any } = {};\n response.XMLHttpRequest = xhr;\n const isFail = xhr.status < 200 || xhr.status >= 300;\n if (isFail) {\n return onError({\n event,\n file,\n files: innerFiles,\n response,\n XMLHttpRequest: xhr,\n });\n }\n const text = xhr.responseText || xhr.response;\n try {\n response = JSON.parse(text);\n } catch (e) {\n response = text;\n log.error('Upload', 'response does not a valid json');\n }\n clearInterval(timer1);\n clearTimeout(timer2);\n innerFiles.forEach((file) => {\n file.percent = 100;\n file.status = 'success';\n // 如果上传请求返回结果没有上传日期,则使用电脑当前日期显示\n file.uploadTime = response?.uploadTime || getCurrentDate();\n });\n if (typeof response === 'object') {\n response.XMLHttpRequest = xhr;\n }\n onSuccess({\n event,\n file: file || innerFiles[0],\n files: [...innerFiles],\n XMLHttpRequest: xhr,\n response,\n });\n };\n\n xhr.send(formData);\n // @ts-ignore\n xhr.upload.requestParams = requestData;\n // @ts-ignore\n xhr.upload.requestHeaders = headers;\n\n return xhr;\n}\n"],"names":["xhr","_ref","_files$","_ref$method","method","action","_ref$withCredentials","withCredentials","_ref$headers","headers","_ref$data","data","file","_ref$files","files","_ref$name","name","_ref$useMockProgress","useMockProgress","_ref$mockProgressDura","mockProgressDuration","formatRequest","onError","onProgress","onSuccess","innerFiles","percent","XMLHttpRequest","timer1","timer2","status","setTimeout","setInterval","Math","max","map","type","clearInterval","clearTimeout","requestData","extraData","isFunction","Object","assign","forEach","index","fileField","length","concat","raw","formData","FormData","keys","key","append","open","setRequestHeader","onerror","event","ontimeout","upload","onprogress","_innerFiles$","realPercent","total","round","loaded","progressFiles","item","onload","response","isFail","text","responseText","JSON","parse","e","log","error","_response","uploadTime","getCurrentDate","_typeof","_toConsumableArray","send","requestParams","requestHeaders"],"mappings":"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"}