elementUI上传多张图片回显在编辑---更新

总有一天你会明白,委屈要自己消化,故事不用逢人就讲。

结构

<el-form-item label="研究院海报:">
            <el-upload
              :action="actionPath"
              list-type="picture-card"
              :on-remove="handleRemove"
              :on-change="handleChange"
              :data="postData"
              :on-success="handleAvatarSuccess"
              :before-upload="beforeAvatarUpload"
              :on-progress="handleprogress"
              :file-list="photoList"
              :class="{ hide: hideUpload }"
            >
              <i class="el-icon-plus"></i>
            </el-upload>
            <el-dialog :visible.sync="formCustom.dialogVisible">
              <img :src="formCustom.headPortrait" alt="" />
            </el-dialog>
</el-form-item>

data中

actionPath: "https://upload.qiniup.com", //上传到服务器的路径
postData: {
        token:"生成的token",
        key: ""
},
photoList: [],//用户回显
photoList: []//控制上传按钮显示隐藏
formCustom:{
         headPortrait:[]//传给后端  
}

引入控制按钮显示隐藏的css

import "../../style/uoLoad.css"

main.js中定义全局的外链地址用于显示图片

Vue.prototype.$httpqiniu = "七牛服务器外链域名"
使用时this.$httpqiniu

图片回显( 查询接口 )

lookList() {
      const req = {传递的对应参数};
      gymnasiumLookVue(req).then(res => {
        if (res.data.code == "200") {
          this.introductionListLook = res.data.data.rows;
          this.introductionListLook.map(item => {
            const _this = this.formCustom;
            // 图片回显 如果有图片puhs到this.formCustom.headPortrait
            item.poster.filter(item_img => {//后端返回地址路径
              let Img = this.$httpqiniu + item_img;//拼接外链地址显示出图片放到photoList中
              this.photoList.push({
                url: Img
              });
              this.formCustom.headPortrait.push(item_img);
            });
            // 回显时如果图片 >=8张隐藏上传按钮
            if (this.photoList.length >= 8) {
              this.hideUpload = true;
            } else {
              this.hideUpload = false;
            }
           
          });
        } else {
          return false;
        }
      });
    },

图片提交( 编辑接口 )

poster: this.formCustom.headPortrait, //传递图片( 正常传参就可以底下会有操作 )  
按钮触发事件
handleChange() {
      // 当图片大于8张 隐藏上传按钮
      if (this.formCustom.headPortrait.length >= 8) {
        this.hideUpload = true;
      }
}
上传图片成功的回调
handleAvatarSuccess(response) {
      //文件上传成功时把返回值push到传递给后端的数组中
      this.formCustom.headPortrait.push("/" + response.key);
}
文件上传时
handleprogress() {
      //文件上传时,图片大于8张,隐藏上传按钮
      if (this.formCustom.headPortrait.length >= 8) {
        this.hideUpload = true;
      }
}
删除成功的回调
//字符串方法
substr()从起始索引号提取字符串中指定数目的字符。
第一个参数:要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。

lastIndexOf()从后向前搜索字符串
第一参数:规定需检索的字符串值
handleRemove(file) {
      //定义一个函数为删除数组中指定元素( 根据值删除不是位置 ) .remove("指定元素")使用
      Array.prototype.remove = function(val) {
        var index = this.indexOf(val);
        if (index > -1) {
          this.splice(index, 1);
        }
      };
      //判断如果参数返回携带域名的url,开始截取只保留图片名
      if (file.url) {
        let removePicture = file.url.substr(file.url.lastIndexOf("/"));
        this.formCustom.headPortrait.remove(removePicture);
        //触发校验
        if (!this.formCustom.headPortrait.length) {
          this.hasFmt = false;
          this.$refs.image.validate();
        }
      }
      //如果返回的就是图片名,直接删除
      if (file.response.key) {
        this.formCustom.headPortrait.remove("/" + file.response.key);
      }
      // 显示按钮
      if (this.formCustom.headPortrait.length <= 8) {
        this.hideUpload = false;
      }
}

文件上传之前

beforeAvatarUpload(file) {
      // 文件上传之前 自由key key为文件名,上传到七牛中会显示对应的图片名
      this.postData.key = file.name;
}
posted @ 2019-12-09 17:39  写手在作画  阅读(6801)  评论(0编辑  收藏  举报