Skip to content

v1.2.2-beta(20250528) ​

  • 优化UploadFiles多文件上传组件, 简化使用方式并修复一些已知问题。

    上传中:

    sz-admin UploadFiles 多文件上传组件上传中状态截图

    上传完毕:

    sz-admin UploadFiles 多文件上传组件上传完成状态截图

vue
<UploadFiles
  v-model:file-list="fileList" // file-list
  multiple
  :limit="5"
  :file-size="3"
  width="300px"
  height="200px"
  @change="fileChange"
  :accept="'.xlsx,.xls,.doc,.docx'"
  tip="支持上传 .xlsx, .xls, .docx, .doc, .pdf 格式的文件,单个文件大小不能超过 3M"
>
<template #tip> 支持上传 .xlsx, .xls, .docx, .doc, .pdf 格式的文件,单个文件大小不能超过 3M </template>
</UploadFiles>
<script setup lang="ts">
...
const fileList = ref<UploadUserFile[]>();
...

// 接收父组件传过来的参数
const acceptParams = (params: View.DefaultParams) => {
  paramsProps.value = params;
  visible.value = true;
  fileList.value = params.row.url   //  入参赋值,回显
    ? [ 
        {
          name: getFileNameFromUrl(params.row.url),
          url: params.row.url
        }
      ] 
    : [];
  fileUrls.value = params.row.url;
};
...
</script>
vue
<UploadFiles
  v-model:modelValue="fileUrls" // 使用modelValue
  multiple
  :limit="5"
  :file-size="3"
  @change="fileChange"
  accept=".xlsx,.xls,.docx,.doc,.pdf"
  tip="支持上传 .xlsx, .xls, .docx, .doc, .pdf 格式的文件,单个文件大小不能超过 3M" // [可选] 使用tip自定义显示信息,如不输入也会生成默认值,效果与所示话术一致
>
</UploadFiles>
<script setup lang="ts">
...
const fileUrls = ref<string[]>([]);
...

// 接收父组件传过来的参数
const acceptParams = (params: View.DefaultParams) => {
  paramsProps.value = params;
  visible.value = true;
  fileUrls.value = params.row.url;  // 入参赋值,回显
};

// 提交数据(新增/编辑)
const ruleFormRef = ref<InstanceType<typeof ElForm>>();
const handleSubmit = () => {
  ruleFormRef.value!.validate(async valid => {
    if (!valid) return;
    try {
      const urlArr = fileUrls.value; // 提交时获取值。如果接受参数是数组,无需处理
      paramsProps.value.row.url = urlArr[0];
      await paramsProps.value.api!(paramsProps.value.row);
      ElMessage.success({ message: `${paramsProps.value.title}成功!` });
      paramsProps.value.getTableList!();
      visible.value = false;
    } catch (error) {
      console.log(error);
    }
  });
};

</script>