element-ui使用upload的http-request自定义上传图片后隐藏上传图标

使用element-ui实现http-request自定义上传功能,并且上传文件最大个数后隐藏上传图标按钮,也实现了上传图片必填校验功能,还有图片上传成功后的回显功能,而非还没上传接口就自动回显。

<el-form-item label="logo" prop="logo">
  <el-upload
    :class="{ hide: hideUpload }"
    v-loading="loading"
    name="logo"
    action="xxxxxx"
    :http-request="uploadSectionFile"
    list-type="picture-card"
    :multiple="false"
    :on-remove="handleAvatarRemove"
    ref="upload"
    :file-list="imageUrlList"
  >
    <i class="el-icon-plus"></i>
  </el-upload>
  <el-input type="hidden" v-model="form.logo" />
</el-form-item>

<el-input type="hidden" v-model="form.logo" />

这个隐藏域表单主要是为了做图片上传必填校验用

data里:

hideUpload: false, //上传按钮隐藏/展示
limitCount: 1, //最大上传文件数
imageUrlList: [],
// 表单校验
rules: {
     logo: [
       { required: true, message: "Logo不能为空", trigger: "change" },
     ],
},

methods:

    uploadSectionFile(params) {
      const file = params.file;
      const isJPG =
        file.type === "image/jpeg" ||
        file.type === "image/jpg" ||
        file.type === "image/png";
      const isLt2M = file.size / 1024 / 1024 < 2;

      if (!isJPG) {
        this.handleAvatarRemove();
        this.$message.error("上传图片只能为jpg或png格式");
        return;
      }
      if (!isLt2M) {
        this.handleAvatarRemove();
        this.$message.error("上传LOGO图片大小不能超过 2MB!");
        return;
      }
      const form = new FormData();
      form.append("logo", file);
      this.handleAvatarRemove(); //移除默认不调用上传接口就回显的图片
      this.loading = true;
      hospitalLogo(form).then((response) => {
        this.loading = false;
        this.form.hospitalLogo = response.imgUrl;
        //上传成功后图片回显
        this.imageUrlList = [];
        this.imageUrlList.push({
          name: logoUrl,
          url: logoUrl,
        });
        //上传完成,隐藏上传按钮
        this.setUploadBtn();
      });
    },
    // 展示/隐藏上传按钮
    setUploadBtn() {
      this.hideUpload = this.imageUrlList.length >= this.limitCount;
    },
    handleAvatarRemove(file, fileList) {
      this.imageUrlList = [];
      this.form.logo= undefined;
      this.clearFile();
    },
    clearFile() {
      this.$refs.upload.clearFiles();
      this.setUploadBtn();
    },

style:去掉scoped

<style>
.hide .el-upload--picture-card {
  display: none;
}
</style>

总结:还有很多细节前端开发者们可以自己完善

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
element-uiupload组件提供了`http-request`属性,用于自定义上传文件的方法。这个方法会接收三个参数:文件对象、上传地址和附加参数。下面是一个简单的例子: ```html <el-upload action="/upload" :http-request="uploadFile" :on-success="onSuccess" :on-error="onError" drag multiple> </el-upload> ``` ```javascript methods: { uploadFile(file, params) { const formData = new FormData() formData.append('file', file) formData.append('name', params.name) return axios.post('/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }) }, onSuccess(response, file, fileList) { console.log('上传成功', response, file, fileList) }, onError(error, file, fileList) { console.log('上传失败', error, file, fileList) } } ``` 在上面的例子中,我们定义了一个`uploadFile`方法,接收文件对象和附加参数,使用`axios`发送一个POST请求,将文件和参数放在`FormData`里面,设置`Content-Type`为`multipart/form-data`,最后返回一个Promise对象。 在`on-success`和`on-error`事件中,我们可以处理上传成功或失败的情况。其中,`on-success`会接收三个参数:响应数据、文件对象和当前文件列表;`on-error`会接收两个参数:错误对象和当前文件对象。 需要注意的是,`http-request`方法必须返回一个Promise对象,并且必须在上传成功或失败时调用`resolve`或`reject`方法,否则上传状态可能会出现异常。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值