封装element点击按钮上传功能

这篇博客介绍了如何在Vue.js中创建一个用于文件上传的子组件,包括设置上传限制、处理文件列表、预览、移除和超过限制时的提示。子组件通过props接收父组件传递的配置,并在父组件中调用子组件的方法进行文件上传操作。示例代码展示了如何在模板、脚本部分实现这一功能。
摘要由CSDN通过智能技术生成

效果如下,点击保存上传文件
在这里插入图片描述

//子组件
<template>
  <!--  -->
  <el-form-item :label="label">
    <el-upload
      class="upload-demo"
      drag
      ref="upload"
      :accept="accept"
      :on-preview="handlePreview"
      :on-remove="handleRemove"
      :before-remove="beforeRemove"
      :on-exceed="handleExceed"
      :action="url"
      :limit="num"
      :data="transmit"
      :headers="token"
      :file-list="fileList"
      :auto-upload="false"
      multiple
    >
      <i class="el-icon-upload"></i>

      <div class="el-upload__text">{{ label }}拖到此处,或<em>点击上传</em>
      </div>
    </el-upload>
  </el-form-item>
</template>
<script>
import Cookies from 'js-cookie'
import { baseurl } from "@/api/common/request";
export default {
  props: {
  //父组件传递的参数
    transmit: {
      type: Object,
      default() {
        return {};
      },
    },
  },
  data() {
    return {
      token: {token:Cookies.get("token")},//上传携带的token
      url: baseurl + "attachment/attachment/upload",//上传的url
      num: 3,//最大上传数量
      fileList: [],
      label: this.transmit.label,
      accept: this.transmit.accept,//上传携带的参数,从父组件获取
    };
  },
  mounted() {

  },
  methods: {
    handleRemove(file, fileList) {
      // console.log(file, fileList);
    },
    handlePreview(file) {
      // console.log(file);
    },
    handleExceed(files, fileList) {
      this.$message.warning("最多上传" + this.num + "个文件");
    },
    beforeRemove(file, fileList) {
      return this.$confirm(`确定移除 ${file.name}`);
    },
    //父组件调用子组件的upload方法即可上传
    uploads() {
      this.$refs.upload.submit();
    },
  },
  watch: {
    transmit: (n, o) => {
      this.transmit = n;
    },
  },
};
</script>
     //父组件
      <el-tab-pane label="多媒体" name="third">
        <el-form
          :label-position="labelPosition"
          :model="formData"
          class="formSass"
        >
          <el-row :gutter="20">
            <el-col :span="12">
            //调用上传视频
              <upload :transmit="videoTransmit" ref="videoUpload"></upload>
            </el-col>
            <el-col :span="12">
             //调用上传图片
              <upload :transmit="imgTransmit" ref="imgUpload"></upload>
            </el-col>
          </el-row>
        </el-form>
      </el-tab-pane>
	//引入
	import upload from "@/components/common/upload";
	//注册组件
	components: { upload },	
	
//传递的参数
  imgTransmit: {
        label: "图片",
        accept: ".png,.jpg,.jpeg,.icon,.ico,.tsp",
        attachmentBusinessType: 2,
        businessId: null,
        businessType: 1,
      },
      videoTransmit: {
        label: "视频",
        accept: ".mp4,.AVI,.mov,.FLV",
        attachmentBusinessType: 1,
        businessId: null,
        businessType: 1,
      },

		//点击按钮触发方法
 		this.$refs.videoUpload.uploads();
        this.$refs.imgUpload.uploads();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值