首页 > Web开发 > 详细

vue.ant.design 附件上传及图片上传封装

时间:2019-09-06 15:32:46      阅读:730      评论:0      收藏:0      [点我收藏+]
<template>
  <div class="myFileList">
    <a-upload :fileList="fileList" :remove="handleRemove" :beforeUpload="beforeUpload">
      <a-button>
        <a-icon type="upload" />上传附件
      </a-button>
    </a-upload>
  </div>
</template>

<script>
import { attachDelete,attachPage } from @/api/file
import axios from axios
export default {
  name: FileUpload,
  props: {
    filelength: {
      type: [Number,String],
      default: 0
    },
  },
  data() {
    return {
      removeIds: [],
      URL: process.env.VUE_APP_API_BASE_URL,
      token: this.$store.getters.token,
      fileList: []
    }
  },

  mounted() {},
  methods: {
    getFile(obj) {
      const data={}
      for(let key in obj){
        if(!data.eqs){
          data.eqs=[]
        }
        const eq={}
        eq.key=key
        eq.val=obj[key]
        data.eqs.push(eq)
      }
      let vm = this
      vm.fileList.length=0
      attachPage({...data,size:-1}).then(res=>{
        res.data.records.map(res => {
        const file = {}
        file.uid = res.id
        file.name = res.oldFileName
        file.url = vm.URL + /file/attach/download?attachId= + + res.id
        vm.fileList.push(file)
      })
      })
    },
    handleDelete(){
      if(this.removeIds.length>0){
        attachDelete(this.removeIds.join(,)).then(res=>{
          console.log(res)
        })
      }
    },
    handleSave(attachType, relationId) {
      let vm = this
      return new Promise((resolve, reject) => {
        const formData = new FormData()
        let index=0
        vm.fileList.forEach(file => {
          if (file.size) {
            formData.append(file, file)
            index++
          }
        })
        formData.append(attachType, attachType || ‘‘)
        formData.append(relationId, relationId || ‘‘)
        if(formData.get(file)==null){
          if(vm.removeIds.length>0){
            vm.handleDelete()
          }
          return resolve()
        }
        axios({
          method: post,
          url: vm.URL + /file/attach/batchUpload,
          data: formData,
          headers: {
            Authorization: vm.token
          }
        }).then(res => {
          if(res.data.code!==0){
            reject(res.data.msg)
          }else{
            vm.handleDelete()
            resolve(res.data)
          }
        }).catch(err=>{
          reject(err)
        })
      })
    },
    handleRemove(file) {
      if (!file.size) {
        this.removeIds.push(file.uid)
      }
      const index = this.fileList.indexOf(file)
      const newFileList = this.fileList.slice()
      newFileList.splice(index, 1)
      this.fileList = newFileList
    },
    beforeUpload(file) {
      if(this.filelength!=0&&this.filelength==this.fileList.length){
        return  this.$message.warning(最高只能上传+this.filelength+个附件);
      }
      this.fileList = [...this.fileList, file]
      console.log(this.fileList)
      return false
    }
  }
}
</script>

<style lang="less" scoped>
.myFileList{
  /deep/ .ant-upload-list-item-name{
  display: inline;
}
}

</style>
多附件上传功能
import { FileUpload } from ‘@/components/FileUpload‘

<file-upload ref="fileUpload" :filelength="5"/>
filelength:最多上传多少附件
this.$refs.fileUpload.setFile(list) 回显附件列表 list 附件接口返回列表

this.$refs.fileUpload.handleSave({attachType:attachType, relationId:id}).then(ers=>{
console.log(ers) //保存成功返回
}).catch(err=>{
console.log(err) //保存失败返回
})
保存方法 attachType,relationId传入的类型和关联Id
回调函数可不写

this.$refs.fileUpload.handleSave(attachType, relationId)
 
图片上传
<template>
  <div class="clearfix">
    <a-upload
      listType="picture-card"
      :fileList="fileList"
      @preview="handlePreview"
      :beforeUpload="beforeUpload"
      @change="handleChange"
      :remove="handleRemove"
    >
      <div v-if="fileList.length < imgLength">
        <a-icon type="plus" />
        <div class="ant-upload-text">上传图片</div>
      </div>
    </a-upload>
    <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
      <img alt="example" style="width: 100%" :src="previewImage" />
    </a-modal>
  </div>
</template>

<script>
import axios from axios
import { imagePage,imageDelete } from @/api/file
export default {
  name: PictureUpload,
  props: {
    imgLength: {
      type: [Number, String],
      default: 10
    }
  },
  data() {
    return {
      previewVisible: false,
      previewImage: ‘‘,
      uid: 0,
      removeIds: [],
      URL: process.env.VUE_APP_API_BASE_URL,
      token: this.$store.getters.token,
      fileList: []
    }
  },

  mounted() {},
  methods: {
    handleCancel () {
      this.previewVisible = false
    },
    handlePreview (file) {
      this.previewImage = file.url || file.thumbUrl
      this.previewVisible = true
    },
    handleChange({ fileList }) {
      //debugger
      //this.fileList = fileList
    },
   getFile(obj
={}) {
    //回显获取图片list const data
={} for(let key in obj){ if(!data.eqs){ data.eqs=[] } const eq={} eq.key=key eq.val=obj[key] data.eqs.push(eq) } let vm = this vm.fileList.length=0 imagePage({...data,size:-1}).then(res=>{ res.data.records.map(res => { const file = {} file.uid = res.id file.name = res.oldFileName file.url = vm.URL + /static-image/ + res.filePathName vm.fileList.push(file) }) }) }, handleDelete() {
    //删除图片
if (this.removeIds.length > 0) { imageDelete(this.removeIds.join(,)).then(res => { console.log(res) }) } }, handleSave(attachType, relationId) { let vm = this return new Promise((resolve, reject) => { const formData = new FormData() let index = 0 vm.fileList.forEach(file => { if (file.size) { formData.append(file, file) index++ } }) formData.append(imageType, attachType || ‘‘) formData.append(relationId, relationId || ‘‘) if (formData.get(file) == null) { if (vm.removeIds.length > 0) { vm.handleDelete() } return resolve() } axios({ method: post, url: vm.URL + /file/image/batchUpload, data: formData, headers: { Authorization: vm.token } }) .then(res => { if (res.data.code !== 0) { reject(res.data.msg) } else { vm.handleDelete() resolve(res.data) } }) .catch(err => { reject(err) }) }) }, handleRemove(file) { if (!file.size) { this.removeIds.push(file.uid) } const index = this.fileList.indexOf(file) const newFileList = this.fileList.slice() newFileList.splice(index, 1) this.fileList = newFileList }, beforeUpload(file) { let src = ‘‘ let cm = this getBase64(file, imageUrl => { src = imageUrl file.url = src cm.fileList = [...cm.fileList, file] }) return false if (this.filelength != 0 && this.filelength == this.fileList.length) { return this.$message.warning(最高只能上传 + this.filelength + 个附件) } this.fileList = [...this.fileList, file] console.log(this.fileList) return false } } } </script> <style lang="less" scoped></style>

 

vue.ant.design 附件上传及图片上传封装

原文:https://www.cnblogs.com/guoyanhui-2016/p/11474700.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!