<template> 
 | 
  <div> 
 | 
    <el-upload 
 | 
      ref="uploadFileBtn" 
 | 
      class="upload-demo" 
 | 
      :accept="uploadData.fileType" 
 | 
      :action="uploadImgUrl" 
 | 
      :limit="1" 
 | 
      :before-remove="removes" 
 | 
      :on-exceed="handleExceed" 
 | 
      :on-success="handleFileSuccess" 
 | 
      :on-error="uploadError" 
 | 
      :before-upload="beforeFileUpload" 
 | 
      :file-list="fileList"> 
 | 
    <a v-if="!uploaded" size="small" type="primary"  >点击上传</a> 
 | 
    <div style="display: inline-block;position: absolute"  slot="tip" class="el-upload__tip" v-if="showTips">{{'(只能上传'+uploadData.fileType +'文件,且不超过5mb)'}}</div> 
 | 
  </el-upload> 
 | 
  </div> 
 | 
  
 | 
</template> 
 | 
  
 | 
<script> 
 | 
export default { 
 | 
  props: { 
 | 
    fileList:{ 
 | 
      type: Array, 
 | 
      default: () => [] 
 | 
    }, 
 | 
    file: { 
 | 
      type: Object, 
 | 
      default: () => {} 
 | 
    }, 
 | 
    fileIndex: { 
 | 
      type: Number, 
 | 
      default: () =>0 
 | 
    }, 
 | 
    showTips: { 
 | 
      type: Boolean, 
 | 
    default: () => true 
 | 
    }, 
 | 
    customStyle: { 
 | 
      type: String, 
 | 
      default: 'width: 190px; height: 190px;' 
 | 
    }, 
 | 
    uploadData: Object 
 | 
  }, 
 | 
  data() { 
 | 
    return { 
 | 
      uploaded:false, 
 | 
      // fileList:[], 
 | 
      uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload?folder='+this.uploadData.folder 
 | 
    } 
 | 
  }, 
 | 
  watch: { 
 | 
    fileList (nv,ov) { 
 | 
      if(this.fileList ==null){ 
 | 
        this.fileList = new Array(); 
 | 
      } 
 | 
      if(this.fileList.length == 0){ 
 | 
        this.uploaded = false 
 | 
      }else{ 
 | 
        this.uploaded=true 
 | 
      } 
 | 
     // alert(this.fileList) 
 | 
    }, 
 | 
    tipsLabel (nv,ov) { 
 | 
      if(this.tipsLabel ==null){ 
 | 
        this.tipsLabel = '' 
 | 
      } 
 | 
    } 
 | 
  }, 
 | 
  methods: { 
 | 
    removes() { 
 | 
      this.uploaded=false 
 | 
      this.$emit('remove') 
 | 
    }, 
 | 
    // 上传图片 
 | 
    handleExceed(){ 
 | 
      this.$message.error('只允许上传1个文件,请删除已传文件,重试!') 
 | 
    }, 
 | 
    handleFileSuccess(res, file) { 
 | 
      if (res.code == 200) { 
 | 
        let { data } = res 
 | 
        this.uploaded = true 
 | 
        // this.fileList = [{name: data.originname, url: data.url }] 
 | 
        this.$message.success('上传成功') 
 | 
        this.$emit('uploadSuccess', { fileurl: data.imgaddr,  fileurlFull: data.url, name: data.originname ,index:this.fileIndex}) 
 | 
      } else { 
 | 
        this.$message.apiFailed('上传失败') 
 | 
      } 
 | 
      this.$emit('uploadEnd') 
 | 
    }, 
 | 
    uploadError() { 
 | 
      this.$message.apiFailed('上传失败') 
 | 
      this.$emit('endUpload') 
 | 
    }, 
 | 
    // // 拦截 
 | 
    beforeFileUpload(file) { 
 | 
  
 | 
      this.$emit('uploadBegin') 
 | 
      return true 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
$image-width: 150px; 
 | 
.avatar-uploader { 
 | 
  width: $image-width; 
 | 
  height: $image-width; 
 | 
} 
 | 
::v-deep .el-upload { 
 | 
  //border: 1px dashed #d9d9d9; 
 | 
  border-radius: 6px; 
 | 
  cursor: pointer; 
 | 
  position: relative; 
 | 
  width: 150px; 
 | 
  height: 30px; 
 | 
  margin-top: 25px; 
 | 
  overflow: hidden; 
 | 
  color: #2E68EC; 
 | 
  display: inline-block; 
 | 
} 
 | 
.avatar-uploader .el-upload:hover { 
 | 
  border-color: #409EFF; 
 | 
} 
 | 
.avatar-uploader-icon { 
 | 
  line-height: 90px; 
 | 
  font-size: 28px; 
 | 
  color: #8c939d; 
 | 
  width: $image-width; 
 | 
  height: $image-width; 
 | 
  text-align: center; 
 | 
} 
 | 
.avatar { 
 | 
  width: $image-width; 
 | 
  height: $image-width; 
 | 
  display: block; 
 | 
}#67C23A 
 | 
.tips-style { 
 | 
  height: 13px; 
 | 
  font-size: 13px; 
 | 
  font-weight: 400; 
 | 
  color: #999999; 
 | 
  line-height: 13px; 
 | 
} 
 | 
</style> 
 | 
<style lang="scss" scoped> 
 | 
::v-deep .el-upload--picture-card{ 
 | 
  width: 90px !important; 
 | 
  height: 90px !important; 
 | 
} 
 | 
::v-deep .el-upload-list__item-name{ 
 | 
  color: #67C23A; 
 | 
} 
 | 
::v-deep .el-upload-list{ 
 | 
  position: absolute; 
 | 
  left: 0; 
 | 
  top: 20px; 
 | 
} 
 | 
::v-deep .el-upload-list__item { 
 | 
  width: 150px !important; 
 | 
  height: 100% !important; 
 | 
  display: inline-block; 
 | 
} 
 | 
.icon { 
 | 
  -webkit-transform: translate(-50%,-50%); 
 | 
  -ms-transform: translate(-50%,-50%); 
 | 
  transform: translate(0%, -85%); 
 | 
} 
 | 
  
 | 
</style> 
 |