el-upload封装组件ExcelUpload,支持额外参数

这篇具有很好参考价值的文章主要介绍了el-upload封装组件ExcelUpload,支持额外参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:

    基于pig-ui进行技术学习,前端采用vue2。在进行Excel上传下载的过程中遇到了需要上传文件同时传递参数的问题,经过修改测试,实现了参数传递。

源码:

    修改后的excel.vue如下,该文件封装了el-upload对象,原始代码不支持before-upload。

// 子组件
<template>
  <div>
    <!-- 导入对话框 -->
    <el-dialog
      :title="title"
      :visible.sync="upload.open"
      width="400px"
      append-to-body
    >
      <el-upload
        ref="upload"
        :limit="1"
        accept=".xlsx, .xls"
        :headers="headers"
        :action="url"
        // 此处增加了data参数
        :data="params"
        :disabled="upload.isUploading"
        // 此处增加了before-upload方法
        :before-upload="fileBeforeUpload"
        :on-progress="handleFileUploadProgress"
        :on-success="handleFileSuccess"
        :on-error="handleFileError"
        :auto-upload="false"
        drag
      >
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">
          将文件拖到此处,或
          <em>点击上传</em>
        </div>
        <div class="el-upload__tip text-center" slot="tip">
          <span>仅允许导入xls、xlsx格式文件。</span>
          <el-link
            type="primary"
            :underline="false"
            style="font-size:12px;vertical-align: baseline;"
            @click="downExcelTemp"
            v-if="tempUrl"
          >下载模板
          </el-link>
        </div>
      </el-upload>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitFileForm">确 定</el-button>
        <el-button @click="upload.open = false">取 消</el-button>
      </div>
    </el-dialog>

    <!--校验失败错误数据-->
    <el-dialog title="校验失败数据" :visible.sync="errorVisible">
      <el-table :data="errorData">
        <el-table-column
          property="lineNum"
          label="行号"
          width="50"
        ></el-table-column>
        <el-table-column
          property="errors"
          label="错误描述"
          show-overflow-tooltip
        >
          <template slot-scope="scope">
            <el-tag
              type="danger"
              v-for="error in scope.row.errors"
              :key="error"
            >{{ error }}
            </el-tag
            >
          </template>
        </el-table-column>
      </el-table>
    </el-dialog>
  </div>
</template>

<script>
import store from "@/store";

export default {
  name: "ExcelUpload",
  components: {},
  props: {
    url: {
      type: String
    },
    title: {
      type: String
    },
    tempUrl: {
      type: String
    },
    tempName: {
      type: String
    },
    // 子组件增加params属性,父组件使用:params进行声明
    params: {
      type: Object,
      default: {}
    },
    // 子组件增加beforeUpload事件方法,父组件使用@beforeUpload进行声明
    beforeUpload: {
      type: Function,
      default: function () {
        return this.params
      }
    }
  },
  data() {
    return {
      upload: {
        open: false,
        isUploading: false
      },
      errorVisible: false,
      errorData: []
    };
  },
  computed: {
    headers: function () {
      return {
        Authorization: "Bearer " + store.getters.access_token
      };
    }
  },
  methods: {
    // 在子组件触发beforeUpload事件的时候,随即调用父组件beforeUpload方法
    fileBeforeUpload(file) {
      if (this.beforeUpload) {
        this.$emit("beforeUpload");
      }
      console.log(this.params);
    },
    downExcelTemp() {
      this.downBlobFile(this.tempUrl, {}, this.tempName);
    },
    handleFileUploadProgress() {
      this.upload.isUploading = true;
    },
    handleFileError() {
      this.$message.error('上传失败,数据格式不合法!')
      this.upload.open = false;
    },
    handleFileSuccess(response) {
      this.upload.isUploading = false;
      this.upload.open = false;
      this.$refs.upload.clearFiles();
      // 校验失败
      if (response.code === 1) {
        this.$message.error("导入失败,以下数据不合法");
        this.errorVisible = true;
        this.errorData = response.data;
        this.$refs.upload.clearFiles();
      } else {
        this.$message.success("导入成功");
        // 刷新表格
        this.$emit("refreshDataList");
      }
    },
    submitFileForm() {
      this.$refs.upload.submit();
    },
    show() {
      this.upload.isUploading = false;
      this.upload.open = true;
    }
  }
};
</script>

    注意上述文件增加的注释。 

案例:

    实际使用方法:

// 父组件
<template>
  <div class="execution">
    <basic-container>
      <excel-upload
        // 注意此处使用:params.sync进行同步绑定
        :params.sync="data"
        // 注意此处声明beforeUpload事件
        @beforeUpload="beforeUpload"
        ref="excelUpload"
        title="物料数据导入"
        url="/scm/material/excel/upload"
        temp-name="物料模板.xlsx"
        temp-url="/scm/material/excel/templateDownload"
        @refreshDataList="handleRefreshChange"
      ></excel-upload>
    </basic-container>
  </div>
</template>

import ExcelUpload from "@/components/upload/excel";

export default {
  name: 'material',
  components: {ExcelUpload},
  data() {
    return {
      data: {}
    }
  },
  methods: {
    // 由子组件的before-upload事件发起对父组件的调用,完成参数赋值
    beforeUpload() {
      Object.assign(this.data, {
        orgId: this.userInfo.orgId
      });
    },
    handleRefreshChange() {
      this.getList(this.page);
    },
    ......
  }
}

文章比较初级,主要还是基于vue父子组件事件参数传递的方法完成了功能扩展。

有封装el-upload组件的需求,且需扩展相关事件的可以参考本篇文章。文章来源地址https://www.toymoban.com/news/detail-733141.html

到了这里,关于el-upload封装组件ExcelUpload,支持额外参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • el-upload 文件上传组件的使用

    element-ui官网 element ui=upload上传组件 Upload 上传文件这个功能是我们在企业实际开发当中使用频率是非常高的这样一个文件上传的功能,,element ui组件组也给我们提供了上传的组件。所有我们一定要熟悉掌握它 使用之前先进行一下element ui的安装和配置 打开终端=输入npm i elem

    2024年02月11日
    浏览(75)
  • el-upload上传图片和视频,支持预览和删除

    话不多说, 直接上代码: 视图层: 逻辑层: 上传附件没有使用单独的上传接口,是调用添加记录接口时,统一传参保存。添加接口请求成功后再回显。 因为我们的需求是在详情页面也能编辑图片和视频,所以加了`type`字段,1代表删除,2代表保留,添加的话就不传。如果你

    2024年02月15日
    浏览(73)
  • 使用el-upload组件实现递归多文件上传

    一、需求描述:在页面上点击按钮弹出选择电脑文件的界面,可以一次性选择多个文件一起上传到服务器上,并把上传成功的文件展示在页面上。 · 二、 问题阐述:el-upload是支持多文件上传的,但是是同步进行的,你点击上传按钮,选择了多个文件后点击确定,会同时调用

    2023年04月08日
    浏览(40)
  • 【前端相关】elementui使用el-upload组件实现自定义上传

    elmentui 中的upload默认的提交行为是通过 action 属性中输入的 url 链接,提交到指定的服务器上。但是这种url提交文件的方式,在实际的项目环境中往往是不可取的。 我们的服务器会拦截所有的请求,进行权限控制,密钥检查,请求头分析等安全行为控制。写在这里的url无法实

    2024年02月08日
    浏览(61)
  • elementUI 的上传组件<el-upload>,自定义上传按钮样式

    原理:调用el-upload组件的方法唤起选择文件事件 效果: 页面代码: js代码:(其他逻辑与element文档的上使用一致) css代码: 隐藏原来的选择图片按钮 原理:把图片显示分离出来,el-upload做选择图片使用,单独做一个显示图片的区域 效果:  页面代码: js 代码: css代码:

    2024年02月13日
    浏览(42)
  • el-upload组件的文件回显功能和添加文件到elupload组件

            省流: 先获取这个文件对象,使用handleStart方法添加到组件。         在开发的时候遇到表单里需要上传图片的功能。看了下el-upload组件的使用方法,在修改表单的时候,el-upload组件的回显遇到了麻烦: 过程:         根据一开始的理解,按照其他教程的方

    2023年04月20日
    浏览(51)
  • element UI el-upload组件实现视频文件上传视频回显

    项目中需要提供一个视频介绍,使用Vue+Element UI中的el-upload组件实现视频上传及进度条展示,后台提供视频上传API并返回URL, 百度找了一番后最终实现了。 HTML JS data css 成功后的截图  

    2024年02月06日
    浏览(58)
  • el-upload 组件上传/移除/报错/预览文件,预览图片、pdf 等功能

    dialog.vue @/styles/dialog-style.scss

    2024年02月06日
    浏览(81)
  • vue+elementui中el-upload组件上传文件时,修改文件名,不用FormData

    今天在开发的时候,后端突然提了一个需求,因为特殊的文件上传不进文件服务器,所以后端问我能不能上传的时候给加个扩展名,本着只要逻辑没问题,都可以通过代码实现的理念,我说:“可以“”,于是乎有了这篇文章。 首先是去element官网逛了逛,发现也没有提供修

    2024年02月06日
    浏览(48)
  • 解决element-ui中组件【el-upload】一次性上传多张图片的问题

    前端 后端 后端使用的是multer中间件,用来接收前端发送过来的multipart/form-data形式的数据 multer.js router.js

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包