Skip to content

xtf-upload

组件说明

xtf-upload 是文件选择、预览与上传队列组件,适用于图片、视频、附件和目录上传。支持模拟/真实上传、分片、进度、重试和拖放。


基础用法

1. 图片上传

vue
<template><xtf-upload v-model="files" :max="3" @change="changed" /></template>
<script>
export default {
  data() {
    return { files: [] }
  },
  methods: {
    changed(files) {
      console.log(files)
    }
  }
}
</script>

2. 字段附件

vue
<template>
  <xtf-upload
    v-model="files"
    variant="field"
    file-type="file"
    label="营业资质"
    picker-text="上传附件"
    :max="2"
    :preview="false"
  />
</template>
<script>
export default {
  data() {
    return { files: [] }
  }
}
</script>

3. 自定义请求

vue
<template>
  <xtf-upload
    ref="upload"
    v-model="files"
    :mock-upload="false"
    :custom-request="request"
    :auto-upload="false"
    @progress="progress"
  />
</template>
<script>
export default {
  data() {
    return { files: [] }
  },
  methods: {
    request({ onProgress, onSuccess }) {
      onProgress(100)
      onSuccess({ data: { url: 'https://example.com/a.png' } })
    },
    progress(p) {
      console.log(p.percent)
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
valueArray[]文件列表,使用 v-model数据
max / multiple / deletableNumber/Boolean/Boolean9/true/true上限、多选、删除基础交互
fileType / maxSize / sourceType / acceptString/String | Number/Array/String'image'/0/[]/''类型、大小、来源和接受规则文件校验
pickerHint / pickerText / label / placeholderString''文案字段展示
readonly / requiredBooleanfalse只读、必填标记表单
variant / columns / radius / accentColor / previewString/String | Number/String | Number/String/Boolean'default'/3/''/''/true布局与预览展示
beforeUpload / beforeReadFunctionnull(file) => Boolean | Promise<Boolean>上传前拦截
afterReadFunctionnull(file) => void读取后处理
mockUpload / concurrentBoolean/String | Numbertrue/2模拟上传和并发数队列
action / name / headers / formData / method / withCredentialsString/String/Object/Object/String/Boolean''/'file'/{}/{}/'POST'/false原生请求配置真实上传
autoUpload / cancelableBooleantrue/true自动上传、允许取消队列
onSuccess / onError / onProgress / onExceed / onOversizeFunctionnull对应回调钩子兼容回调
compress / resultKey / responseAdapterBoolean | Object/String/Functionfalse/'url'/null压缩、响应 URL 字段、(data,response,file)=>String|Object真实上传
retryStrategy / retryLimit / retryDelay / preserveResponseString/String | Number/String | Number/Boolean'manual'/0/240/true重试及响应保留异常处理
drag / directory / chunk / chunkSizeBoolean/Boolean/Boolean/String | Numberfalse/false/false/1048576拖放、目录、分片H5
customRequest / presign / hashFunction/Function/Boolean | Stringnull/null/false自定义请求、预签名、hash高级上传
customClass / customStyleString/String | Object''样式覆盖样式

文件项数据结构

字段类型默认值说明
id,name,url,type,size,status,progressString | Number-文件标识、名称、地址、类型、大小、状态、进度
errorText,retryCount,hash,responseData,serverMeta,relativePathString | Number | Object-错误、重试、摘要、响应及目录信息

事件

事件名称回调参数说明
input / change(files: Array)文件列表变化时触发。
remove / preview({ index, item })删除或预览文件时触发;清空时 remove 参数含 cleared: true
before-add({ file, accepted, reason? })文件校验或上传前钩子处理后触发。
choose / exceed / oversize选择器结果 / 超限详情 / ({ file })选择文件、数量超限或文件过大时触发。
success / error / progress / cancel / retry上传结果详情真实、模拟或自定义请求的上传状态。
retry-all({ count, files })调用 retryFailed() 后触发。
drop / drag-over / drag-leave拖放详情或原始事件H5 拖放交互事件。
hash-ready / hash-error({ file, hash, algorithm }) / ({ file, algorithm, error })启用 hash 后的计算结果。

事件使用示例

vue
<template>
  <xtf-upload
    v-model="files"
    :max-size="1024 * 1024"
    @before-add="before"
    @oversize="oversize"
    @success="success"
  />
</template>
<script>
export default {
  data() {
    return { files: [] }
  },
  methods: {
    before(p) {
      console.log('before', p.accepted)
    },
    oversize(p) {
      uni.showToast({ title: p.file.name + ' 过大', icon: 'none' })
    },
    success(p) {
      console.log('success', p.file.url)
    }
  }
}
</script>

方法

方法参数返回值说明
chooseFiles()void打开当前 fileType 对应的文件选择器。
submit()void在真实上传模式且 autoUpload 为假时启动队列。
cancelUpload(fileId)fileId: Stringvoid取消指定上传任务。
cancelAllUpload()void取消全部进行中的上传任务。
clearFiles()void取消任务、清空文件列表并触发 remove
retryFile(file)file: FileItemvoid重新上传指定错误文件。
retryFailed()Number重试全部错误文件,返回参与重试的数量。

submit() 示例

js
this.$refs.upload.submit()

cancelUpload(fileId) / cancelAllUpload() 示例

js
this.$refs.upload.cancelUpload('upload-1')
this.$refs.upload.cancelAllUpload()

retryFailed() 示例

js
console.log(this.$refs.upload.retryFailed())

插槽

组件源码未声明插槽;文件项、选择区域和上传状态均由属性与事件配置。


主题说明

  • 强调色为 --xtf-upload-accent,柔和背景为 --xtf-upload-accent-soft
  • 圆角为 --xtf-upload-radius,默认继承 --xtf-radius-lg
  • xtf-config-provider 或主题配置中覆盖这些变量即可全局定制。

MIT Licensed