在实际应用中,我们经常会有导入Excel或者上传图片的需求,
下面我们搭配使用element-plus中的上传组件实现导入Excel功能

<el-form class="drawer-multiColumn-form" label-width="100px">
        <el-form-item label="模板下载 :">
          <el-button type="primary" icon="download" @click="downloadTemp"
            >点击下载</el-button
          >
        </el-form-item>
        <el-form-item label="文件上传:">
          <el-upload
            action=""
            class="upload-demo"
            drag
            accept=".xlsx, .xls"
            :on-exceed="exceedFile"
            :on-error="handleError"
            :on-success="handleSuccess"
            :http-request="uploadExcel"
            :before-upload="beforeUPload"
            :show-file-list="true"
            :limit="excelLimit">
            <el-icon class="el-icon--upload"><upload-filled /></el-icon>
            <div class="el-upload__text">
              将文件拖到此处,或<em>点击上传</em>
            </div>
            <template #tip>
              <div class="el-upload__tip">请上传 .xls , .xlsx 标准格式文件</div>
            </template>
          </el-upload>
        </el-form-item>
      </el-form>

上面整体的样式就出来了,此时可以参考element-plus中上传组件的API,下面是一些在上传前的校验

// 文件上传之前判断
const beforeUPload = (file: any) => {
  const isExcel =
    file.type === 'application/vnd.ms-excel' ||
    file.type ===
      'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  const isLt2M = file.size / 1024 / 1024 < 20;
  if (!isExcel)
    ElNotification({
      title: '温馨提示',
      message: '上传文件只能是 xls / xlsx 格式!',
      type: 'warning',
    });
  if (!isLt2M)
    ElNotification({
      title: '温馨提示',
      message: '上传文件大小不能超过 20MB!',
      type: 'warning',
    });
  return isExcel && isLt2M;
};
// 文件数超出提示
const exceedFile = () => {
  ElNotification({
    title: '温馨提示',
    message: '最多只能上传一个文件!',
    type: 'warning',
  });
};
// 上传错误提示
const handleError = () => {
  ElNotification({
    title: '温馨提示',
    message: '导入数据失败,请您重新上传!',
    type: 'error',
  });
};

//上传成功提示
const handleSuccess = () => {
  ElNotification({
    title: '温馨提示',
    message: '导入数据成功!',
    type: 'success',
  });
};

最后我们来写文件上传时的方法

// 文件上传
const uploadExcel = async (param: any) => {
  let fileFormData = new FormData();
  fileFormData.append('file', param.file, param.file.name);
  const res =await importUrl(fileFormData);
  if (res.code !== 0) return  param.onError();
  dialogVisible.value = false;
};

这样,我们一个导入功能就完成了,下面会再整理一篇导出功能的博客出来,敬请期待!

Logo

前往低代码交流专区

更多推荐