{"version":3,"file":"useUpload.mjs","sources":["../../../../common/js/upload/xhr.ts","../../../../common/js/upload/main.ts","../../../../components/upload/hooks/useUpload.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    const dataValue = requestData[key];\n    if (Array.isArray(dataValue)) {\n      dataValue.forEach((value) => {\n        formData.append(key, value);\n      });\n    } else {\n      formData.append(key, dataValue);\n    }\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","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","import { ref, computed, toRefs } from 'vue';\nimport { merge } from 'lodash-es';\nimport { SizeLimitObj, TdUploadProps, UploadChangeContext, UploadFile, UploadRemoveContext } from '../type';\nimport {\n  getFilesAndErrors,\n  validateFile,\n  upload,\n  getTriggerTextField,\n  getDisplayFiles,\n  formatToUploadFile,\n} from '@tdesign/common-js/upload/main';\nimport { getFileList } from '@tdesign/common-js/upload/utils';\nimport { useVModel, useConfig } from '@tdesign/shared-hooks';\nimport { InnerProgressContext, OnResponseErrorContext, SuccessContext } from '@tdesign/common-js/upload/types';\n\nexport type ValidateParams = Parameters<TdUploadProps['onValidate']>[0];\n\n/**\n * 上传组件全部逻辑，方便脱离 UI，自定义 UI 组件\n */\nexport default function useUpload(props: TdUploadProps): any {\n  const inputRef = ref<HTMLInputElement>();\n  // TODO: Form 表单控制上传组件是否禁用\n  const { disabled, autoUpload, isBatchUpload, multiple, files, modelValue, defaultFiles } = toRefs(props);\n  const { globalConfig, t, classPrefix } = useConfig('upload');\n  const [uploadValue, setUploadValue] = useVModel(files, modelValue, defaultFiles.value, props.onChange, 'files');\n  const xhrReq = ref<{ files: UploadFile[]; xhrReq: XMLHttpRequest }[]>([]);\n  const toUploadFiles = ref<UploadFile[]>([]);\n  const sizeOverLimitMessage = ref('');\n\n  const locale = computed(() => merge({}, globalConfig.value, props.locale));\n\n  const tipsClasses = `${classPrefix.value}-upload__tips ${classPrefix.value}-size-s`;\n  const errorClasses = [tipsClasses].concat(`${classPrefix.value}-upload__tips-error`);\n  const placeholderClass = `${classPrefix.value}-upload__placeholder`;\n\n  // 单文件场景：触发元素文本\n  const triggerUploadText = computed(() => {\n    const field = getTriggerTextField({\n      isBatchUpload: isBatchUpload.value,\n      multiple: multiple.value,\n      status: uploadValue.value?.[0]?.status,\n      autoUpload: autoUpload.value,\n    }) as keyof typeof locale.value.triggerUploadText;\n    return locale.value.triggerUploadText[field];\n  });\n\n  const uploading = ref(false);\n\n  // 文件列表显示的内容（自动上传和非自动上传有所不同）\n  const displayFiles = computed(() => {\n    return getDisplayFiles({\n      multiple: props.multiple,\n      toUploadFiles: toUploadFiles.value,\n      uploadValue: uploadValue.value,\n      autoUpload: autoUpload.value,\n      isBatchUpload: isBatchUpload.value,\n    });\n  });\n\n  const uploadFilePercent = (params: { file: UploadFile; percent: number }) => {\n    const { file, percent } = params;\n    const operationUploadFiles = autoUpload.value ? toUploadFiles : uploadValue;\n    const index = operationUploadFiles.value.findIndex((item) => file.raw === item.raw);\n    operationUploadFiles.value[index] = { ...operationUploadFiles.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,\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[0],\n        response: p.response,\n      });\n    }\n  };\n\n  function getSizeLimitError(sizeLimitObj: SizeLimitObj) {\n    const limit = sizeLimitObj;\n    return limit.message\n      ? t(limit.message, { sizeLimit: limit.size })\n      : `${t(locale.value.sizeLimitMessage, { sizeLimit: limit.size })} ${limit.unit}`;\n  }\n\n  const handleNotAutoUpload = (toFiles: UploadFile[]) => {\n    const tmpFiles = props.multiple && !isBatchUpload.value ? uploadValue.value.concat(toFiles) : toFiles;\n    if (!tmpFiles.length) return;\n    setUploadValue(tmpFiles, {\n      trigger: 'add',\n      index: uploadValue.value.length,\n      file: toFiles[0],\n      files: toFiles,\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,\n      // @ts-ignore\n      files: [...files],\n      allowUploadDuplicateFile: props.allowUploadDuplicateFile,\n      max: props.multiple ? props.max : 0,\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 };\n        props.onValidate?.(params);\n        return;\n      }\n      // 文件数量校验不通过\n      if (args.lengthOverLimit) {\n        const params: ValidateParams = { type: 'FILES_OVER_LENGTH_LIMIT', files: args.files };\n        props.onValidate?.(params);\n        if (!args.files.length) return;\n      }\n      // 过滤相同的文件名\n      if (args.hasSameNameFile) {\n        const params: ValidateParams = { type: 'FILTER_FILE_SAME_NAME', files: args.files };\n        props.onValidate?.(params);\n      }\n      // 文件大小校验结果处理（已过滤超出限制的文件）\n      if (args.fileValidateList instanceof Array) {\n        const { sizeLimitErrors, beforeUploadErrorFiles, toFiles } = getFilesAndErrors(\n          args.fileValidateList,\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?.({ type: 'FILE_OVER_SIZE_LIMIT', files: sizeLimitErrors.map((t) => t.file) });\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    inputRef.value.value = null;\n  };\n\n  const onNormalFileChange = (e: InputEvent) => {\n    const fileList = getFileList((e.target as HTMLInputElement).files);\n    onFileChange?.(fileList);\n  };\n\n  function onDragFileChange(files: File[]) {\n    onFileChange?.(files);\n  }\n\n  function onPasteFileChange(e: ClipboardEvent) {\n    onFileChange?.([...e.clipboardData.files]);\n  }\n\n  /**\n   * 上传文件。对外暴露方法，修改时需谨慎\n   * @param toFiles 本地上传的文件列表\n   */\n  function uploadFiles(toFiles?: UploadFile[]) {\n    const notUploadedFiles = uploadValue.value.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,\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          setUploadValue([...data.files], {\n            trigger: 'add',\n            file: data.files[0],\n          });\n          xhrReq.value = [];\n          props.onSuccess?.({\n            fileList: data.files,\n            currentFiles: files,\n            file: files[0],\n            // 只有全部请求完成后，才会存在该字段\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;\n          props.onWaitingUploadFilesChange?.({ files: failedFiles, 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.splice(p.index, 1);\n      setUploadValue([...uploadValue.value], changePrams);\n    } else {\n      // autoUpload 场景下， p.index < uploadValue.length 表示移除已经上传成功的文件；反之表示移除待上传列表文件\n      // eslint-disable-next-line\n      if (p.index < uploadValue.value.length) {\n        uploadValue.value.splice(p.index, 1);\n        setUploadValue([...uploadValue.value], changePrams);\n      } else {\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 triggerUpload = (e?: MouseEvent) => {\n    if (disabled.value || !inputRef.value) return;\n    e?.stopPropagation?.();\n    (inputRef.value as HTMLInputElement).click();\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    // autoUpload do not need to reset to waiting state\n    if (autoUpload.value) {\n      toUploadFiles.value = [];\n    } else {\n      setUploadValue(\n        uploadValue.value.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, index: 0 });\n    }\n\n    props.onCancelUpload?.();\n  };\n\n  return {\n    t,\n    locale,\n    classPrefix,\n    triggerUploadText,\n    toUploadFiles,\n    uploadValue,\n    displayFiles,\n    sizeOverLimitMessage,\n    uploading,\n    tipsClasses,\n    errorClasses,\n    placeholderClass,\n    inputRef,\n    disabled,\n    xhrReq,\n    uploadFilePercent,\n    uploadFiles,\n    onFileChange,\n    onNormalFileChange,\n    onDragFileChange,\n    onPasteFileChange,\n    onInnerRemove,\n    triggerUpload,\n    cancelUpload,\n  };\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","dataValue","Array","isArray","value","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","handleBeforeUpload","params","sizeLimit","beforeUpload","sizePromise","Promise","resolve","result","sizeLimitObj","isNumber","size","unit","limit","isOverSizeLimit","promiseList","r","p","all","then","handleError","options","formatResponse","res","currentFiles","handleSuccess","_file$response","url","handleRequestMethodResponse","includes","warn","uploadOneRequest","toUploadFiles","requestMethod","multiple","resultFiles","fileInfo","find","toFile","_objectSpread","_params$onResponseSuc","onResponseSuccess","call","_params$onResponseErr","onResponseError","_params$setXhrObject","xhrReq","_params$onResponseErr2","onResponseProgress","_params$onResponseErr3","_params$onResponseSuc2","setXhrObject","updateUploadedFiles","uploadFiles","existFiles","filter","t","newFiles","_loop","i","findIndex","tmpFile","push","len","uploadAllFilesInOneRequest","uploadedFiles","isBatchUpload","thisUploadFiles","failedFiles","list","arr","one","tFiles","autoUpload","formatToUploadFile","format","arguments","undefined","fileRaw","uploadFile","lastModified","validateFile","uploadValue","allowUploadDuplicateFile","_params$capture","capture","tmpFiles","sameNameFile","hasSameNameFile","validateResult","lengthOverLimit","tmpFilesLenToBeAdded","slice","formattedFiles","allFileValidatePromise","beforeAllFilesUpload","_params$beforeAllFile","_ref2","_slicedToArray","sizeResult","customResult","extra","results","_results","_toArray","allFilesResult","others","fileValidateList","getFilesAndErrors","getError","sizeLimitErrors","beforeUploadErrorFiles","toFiles","oneFile","_oneFile$validateResu","_oneFile$validateResu2","getTriggerTextField","getDisplayFiles","waitingUploadFiles","useUpload","props","inputRef","ref","_toRefs","toRefs","disabled","modelValue","defaultFiles","_useConfig","useConfig","globalConfig","classPrefix","_useVModel","useVModel","onChange","_useVModel2","setUploadValue","sizeOverLimitMessage","locale","computed","merge","tipsClasses","errorClasses","placeholderClass","triggerUploadText","_uploadValue$value","field","uploading","displayFiles","uploadFilePercent","operationUploadFiles","updateFilesProgress","_props$onOneFileFail","onOneFileFail","trigger","_props$onProgress","_props$onOneFileSucce","onOneFileSuccess","getSizeLimitError","message","sizeLimitMessage","handleNotAutoUpload","onFileChange","_props$onSelectChange","currentSelectedFiles","onSelectChange","args","_args$validateResult","_props$onValidate","onValidate","_props$onValidate2","_props$onValidate3","_props$onWaitingUploa","_getFilesAndErrors","tmpWaitingFiles","onWaitingUploadFilesChange","_props$onValidate4","_props$onValidate5","onNormalFileChange","fileList","getFileList","target","onDragFileChange","onPasteFileChange","clipboardData","notUploadedFiles","_xhr$files$","_item$files$","_props$onSuccess","_props$onFail","onFail","_props$onWaitingUploa2","onInnerRemove","_p$e$stopPropagation","_p$e","_props$onRemove","stopPropagation","changePrams","_props$onWaitingUploa3","splice","_props$onWaitingUploa4","onRemove","triggerUpload","_e$stopPropagation","click","cancelUpload","context","_xhrReq$value","_props$onCancelUpload","_item$xhrReq","abort","onCancelUpload"],"mappings":"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"}