Vue基础--封装el-upload的放大、下载、删除功能的实现

 

1、封装el-upload组件,一般放在components文件夹中:

<!--公共附件列表-->
<template>
  <div>
  <el-upload :action="baseApi+'/uploadFile?token='+token" :on-success="uploadsuccess" list-type="picture-card" :data="{'objId':objId}" :auto-upload="true" :file-list="urls">
                <i slot="default" class="el-icon-plus"></i>
                <div slot="file" slot-scope="{file}">
                  <img class="el-upload-list__item-thumbnail" :src="file.url" alt />
                  <span class="el-upload-list__item-actions">
                    <span
                      class="el-upload-list__item-preview"
                      @click="handlePictureCardPreview(file)"
                    >
                      <i class="el-icon-zoom-in"></i>
                    </span>
                    <span
                      v-if="!disabled"
                      class="el-upload-list__item-delete"
                      @click="handleDownload(file)"
                    >
                      <i class="el-icon-download"></i>
                    </span>
                    <span
                      v-if="!disabled"
                      class="el-upload-list__item-delete"
                      @click="handleRemove(file)"
                    >
                      <i class="el-icon-delete"></i>
                    </span>
                  </span>
                </div>
              </el-upload>
    <el-dialog class="upload-img" append-to-body :visible.sync="dialogVisible">
      <img width="100%" :src="dialogImageUrl"  />
    </el-dialog>
    </div>
</template>

<script>

import { mapGetters } from 'vuex';

import request from "@/utils/request";


export default {
  name: "images",

  data() {
    return {
    objId:"",
    dialogVisible:false,
    dialogImageUrl:'',
     urls:[]
    }
  },
  computed: {
    ...mapGetters([
      'baseApi',
      'token'
    ])
  },
  created() {
  
    
  },
  methods: {
   handleRemove(file) {
        request({
          url: "/fileUpload/delete?objId="+file.objId,
          method: "get"
        }).then((data) => {
          if (data.successful) {
            this.$notify({
              title: "刪除成功!",
              type: "success",
              duration: 2500,
            });
            var  index=0;
            var datas=this.urls;
            datas.forEach(url => {
              if(url.objId==file.objId){
                this.urls.splice(index,1);
                return;
              }
              index++;
            });

          } else {
            this.$notify({
              title: "刪除失败!",
              type: "fail",
              duration: 2500,
            });
          }
        });
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    handleDownload(file) {
      let a = document.createElement('a')
        a.href =file.url;
        a.click();
      
    },
    uploadsuccess(response, file, fileList){
        if(response.length>1){
            file.objId=response;
            file.url=this.baseApi+"/fileUpload/showImgByGgfjObjId?token="+this.token+"&ggfjObjId="+response;
            this.urls.push(file);
        }
    },
    initimages(objid){
        this.urls=[];
        this.objId=objid;
        request({
          url: "/lujing/querybywjllid?ssjlid="+objid,
          method: "get"
        }).then((data) => {
          if (data.successful) {
             var fjs=data.resultValue.items;
           fjs.forEach(fj => {
                var obj={url:this.baseApi+"/fileUpload/showImgByGgfjObjId?token="+this.token+"&ggfjObjId="+fj.objId,objId:fj.objId}
                console.log(obj);
                this.urls.push(obj);
            });

          } else {
            this.$notify({
              title: "查询失败!",
              type: "fail",
              duration: 2500,
            });
          }
        });
    }
  }
};
</script>

<style rel="stylesheet/scss" lang="scss" scoped>

</style>

2、在文件中引入:

<template>
    <div>
        <el-row>
          <el-col :span="24">
            <el-form-item label="隐患照片:">
              <images ref="images" :imagesparams="imagesparams" :isInfo="false"></images>
            </el-form-item>
          </el-col>
        </el-row>

    </div>
</template>

<script>

  export default {
      name: "Yhdj",
      components: {images},
      data() {
        return {
            imagesparams:{}
        }

    }
</script>

图片放大效果:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Vue3和Element UI的el-upload二次封装,你可以参考以下步骤: 1. 首先,根据Element UI官方文档的指引,了解el-upload组件的使用方法和属性。你可以在官方文档中找到详细的代码示例和解释。 2. 创建一个Vue组件,例如UploadImg,用于封装el-upload组件。在组件中,你可以根据需要使用el-upload提供的上传、文件列表、删除功能。你可以根据自己的需求,将el-upload的属性传递给子级组件或自定义函数进行处理。 3. 在组件中,你可以使用axios或其他HTTP库来进行文件的上传和删除操作。你可以根据自己的需要,封装适当的请求函数。比如,你可以创建一个delUpImage函数用于删除图片,或者创建一个uploadImg函数用于上传图片。 4. 在Vue的template中使用封装好的UploadImg组件,传递相应的属性和事件监听函数。这样,你就可以在页面中使用二次封装el-upload组件了。 下面是一个示例的代码结构: ```javascript // UploadImg.vue <template> <el-upload :limit="limit" action="" accept="image/*" :http-request="uploadFile" list-type="picture-card" :auto-upload="false" :file-list="fileList" :on-exceed="handleExceed" :before-remove="beforeRemove" ref="upload" > <img src="../assets/common_images/uploadImage.png" width="146" height="146"> </el-upload> <el-form-item> <el-button size="small" type="primary" style="margin-top: 20px;" @click="submitUpload">点击上传</el-button> </el-form-item> </template> <script> import { defineComponent } from 'vue'; import axios from 'axios'; export default defineComponent({ name: 'UploadImg', props: { limit: { type: Number, default: 6 }, fileList: { type: Array, default: () => [] } }, methods: { uploadFile(file) { // 上传文件的逻辑处理 }, handleExceed(files, fileList) { // 处理文件超出限制的逻辑 }, beforeRemove(file, fileList) { // 删除文件前的逻辑处理 }, submitUpload() { // 点击上传按钮的逻辑处理 } } }); </script> ``` 请注意,这只是一个示例代码,你需要根据自己的实际需求进行相应的修改和调整。另外,为了实现文件上传和删除操作,你可能还需要引入其他库或自定义函数来处理HTTP请求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值