element-ui上传图片(多图)

html

<template>
  <div class="g-c-66 pro-pic inner-upload">
      <div v-for="file, index in previewFiles" :key="index" class="img-box" style="border: 1px solid #dddddd;width: 140px;float: left;">
        <el-upload
          class="avatar-uploader"
          ref="uploader"
          name="image"
          list-type="picture-list"
          :accept="accept"
          :action="uploadUrl"
          :show-file-list="false"
          :before-upload="createBeforeAvatarUploadHandler(index)"
          :on-success="createHandleAvatarSuccessHandler(index)"
          :on-error="handleAvatarFail"
          :with-credentials="true"
        >
          <div v-if="file.url">
            <img :src="file.url" class="avatar">
            <span slot="trigger" class="g-c-eff changeBtn">更换</span>
          </div>
          <i v-else class="el-icon-plus avatar-uploader-icon">
      
            <span>点击上传</span>
          </i>
        </el-upload>
        <span v-if="file.url" class="g-c-eff deleteBtn" @click.prevent="delHandler(index)">删除</span>
      </div>
  </div>
</template>

js

<script>
export default {
  name: "uploadImg",
  data() {
    return {
      previewFiles: [{ url:'' }, { url:'' }, { url:'' }, { url:'' }, { url:'' }, { url:'' }],
    }
  },
  computed:{
    uploadUrl() {
//process.env.BASE_API 请求地址
      return process.env.BASE_API + '/upload/img';
    },
    accept(){
      return 'jpeg,jpg,png,bmp'
    }
  },
  methods: {
    createBeforeAvatarUploadHandler(i) {
      return (file) => {
        if (!file) {
          return false;
        }
        let testmsg = file.name.substring(file.name.lastIndexOf(".") + 1).toLowerCase();
        
        let fileSize = file.size;
        let isImage = false;
        for (let mimeType of this.accept.split(',')) {
          if (mimeType === testmsg) {
            isImage = true;
            break
          }
        }
        if (!isImage) {
          this.$message.error('上传图片必须是JPG/PNG/BMP 格式!');
          return false;
        }
        if (fileSize > 1024 * 1024) {
          this.$message.error('上传头像图片大小不能超过 1MB!');
          return false;
        }
        return true;
      };
    },
    createHandleAvatarSuccessHandler(i) {
      return (res) => {
        const code = _get(res, 'code');
        if (code !== 1) {
          this.$message.error('上传失败');
          return;
        }
        const url = _get(res, 'data');
        if (!url) {
          this.$message.error('上传异常');
          return;
        }
        this.previewFiles[i].url = url;
        this.saveInfo();
      }
    },
    handleAvatarFail(res) {
      console.log('upload fail: ' + res);
    },
    delHandler(i) {
      this.previewFiles[i].url = '';
      this.saveInfo();
    },
    async saveInfo() {
      const honorFile = this.previewFiles.map(f => f.url).join('|');
      try {
        await updateCompany({ HonorFile: honorFile });
        this.$message.success('更新成功');
      } catch (e) {
        this.$message.error(e.message);
      }
    },
  }
}
</script>

css

<style scoped>
.inner-upload{
  margin-top: 10px;
  height: 190px;
}
.inner-upload .el-icon-plus:before {
  content: "";
}
.inner-upload .avatar-uploader-icon {
  color: #888888;
  width: 140px;
  height: 140px;
  text-align: center;
  vertical-align: middle;
  display: table-cell;
  text-align: center;
  /*overflow: hidden;*/
  font-size: 12px;
}
.inner-upload .avatar {
  /* width: 140px;
   height: 140px;*/
  display: block;
  object-fit: scale-down;
}
.inner-upload #pro-pic{
  width: 136px;
  height: 136px;
  display: block;
  object-fit: scale-down;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -webkit-transform: translate(-50%, -50%);
}
.img-empty{
  vertical-align: sub;
  margin-top: 10px;
  margin-bottom: 10px;
}
.deleteBtn{
  position: absolute;
  bottom: -26px;
  left: 85px;
  cursor: pointer;
}
.changeBtn{
  position: absolute;
  bottom: -24px;
  left: 25px;
} 
.pro-pic .avatar-uploader .el-upload {
  cursor: pointer;
  position: relative;
  /*overflow: hidden;*/
}
.inner-upload .el-upload{
  width: 140px;
  height: 140px;
  position: relative;
}
</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element-ui提供了图片上传的功能。在使用element-ui进行图片上传时,需要在template部分、script部分和scss部分进行相应的配置和代码编写。具体的步骤如下: 1. 在template部分,需要使用el-upload组件来实现图片的上传功能。可以设置action属性来指定图片上传的接口地址,设置multiple属性来支持多张图片上传,设置limit属性来限制上传的图片数量,设置accept属性来限制上传的图片类型。同时,可以通过slot插槽来自定义上传按钮和上传列表的展示样式。 2. 在script部分,需要引入el-upload组件,并在data中定义一个变量来保存上传后的图片列表。可以使用before-upload属性来对上传的图片进行一些预处理操作,例如限制图片的大小、格式等。还可以使用on-success属性来监听图片上传成功的事件,以便进行相应的处理操作。 3. 在scss部分,可以根据自己的需求来自定义上传按钮和上传列表的样式。可以使用element-ui提供的一些样式变量和混合宏来进行样式的定制。 需要注意的是,在使用element-ui进行图片上传时,还需要根据具体的项目需求,对上传的图片进行后端的处理和存储。可以参考相关的文档或示例代码来进行具体的实现。 参考资料: element ui图片上传 - template部分、script部分、scss部分 计算机毕设课设_基于Java Springboot vue element-ui实现的前后端分离的办公自动化系统 原创不易,还请各位客官动动发财的小手支持一波(关注、评论、点赞、收藏) <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [element ui 上传图片](https://blog.csdn.net/qq_35942348/article/details/123805983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [计算机毕设课设-基于Java+Springboot+vue+element-ui实现的前后端分离的办公自动化系统.zip](https://download.csdn.net/download/qq_53122658/88218028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值