xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"xhr.mjs","sources":["../../../../src/_common/js/upload/xhr.ts"],"sourcesContent":["import isFunction from 'lodash/isFunction';\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":["method","withCredentials","headers","data","files","name","useMockProgress","mockProgressDuration","xhr","timer2","onProgress","percent","file","type","XMLHttpRequest","isFunction","Object","innerFiles","requestData","onError","event","realPercent","response","log","onSuccess"],"mappings":"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"}