当前位置:   article > 正文

Vue + View-ui-plus Upload实现手动上传

Vue + View-ui-plus Upload实现手动上传

本文实现Vue + Upload组件多文件手动上传支持上传图片(image)、压缩文件(zip/rar)、表格(excel)、pdf

一、dom结构

  1. <Row>
  2. <Col :span="19"></Col>
  3. <Col :span="2">
  4. <div class="ivu-btn-upload btn-white" style="color: #FB773B;" @click="handleDelImg">
  5. 删除
  6. </div>
  7. </Col>
  8. <Col :span="3">
  9. <div class="ivu-btn-upload btn-orange" @click="handleUploadImg">
  10. <img src="@/assets/images/icon-img-upload.png" width="30" />
  11. 上传影像
  12. </div>
  13. </Col>
  14. </Row>
  15. <div class="image-ul-box">
  16. <div class="image-upload">
  17. <Upload
  18. ref="upload"
  19. :show-upload-list="false"
  20. :default-file-list="list"
  21. :on-success="handleSuccess"
  22. accept="image/*,.xls,.xlsx,.pdf,.doc,.docx,.zip,.rar"
  23. :format="['jpg','jpeg','png', 'xls', 'pdf', 'word','doc', 'docx' ,'xlsx', 'rar', 'zip']"
  24. :on-format-error="handleFormatError"
  25. :before-upload="handleBeforeUpload"
  26. multiple
  27. action="#"
  28. style="display: inline-block;width:68px;">
  29. <div style="width: 68px;height:58px;line-height: 58px;">
  30. <!-- <Icon type="ios-add" size="50"></Icon> -->
  31. <img src="@/assets/images/img-upload.png" width="50" />
  32. <p style="color: #bdbdbd;font-size: 16px;line-height: 1;">添加文件</p>
  33. </div>
  34. </Upload>
  35. </div>
  36. <div class="image-ul-li" v-for="item,index in list" :key="'image'+index">
  37. <div class="image-ul-li-img">
  38. <Image :src="item.url" fit="cover" width="100%" height="100%" />
  39. <div class="image-li-img-check" v-if="item.statusFlag == 0"><Checkbox v-model="item.check" /></div>
  40. <div class="image-li-status" v-if="item.statusFlag == 0">未上传</div>
  41. </div>
  42. <p class="image-ul-li-txt">
  43. <Ellipsis :text="item.name" :length="10" tooltip />
  44. </p>
  45. </div>
  46. </div>

二、js方法

  1. handleUploadImg() {
  2. let checkList = this.list.filter(item => item.check == true)
  3. if (checkList.length == 0) {
  4. this.$Message.error("请勾选需要上传的文件!")
  5. return
  6. }
  7. this.list.forEach(item => {
  8. if (item.check) {
  9. let formData = new FormData()
  10. formData.append("file", item.files)
  11. formData.append("businessNo", this.proposalNo)
  12. uploadFile(formData).then(res => {
  13. if (res.code == "0000") {
  14. let result = res?.result?.imgUrls
  15. if (result.length > 0) {
  16. item.statusFlag = 1
  17. item.check = false
  18. }
  19. } else {
  20. this.$Message.error(res.message)
  21. }
  22. })
  23. }
  24. })
  25. },
  26. handleSuccess(file) {},
  27. handleFormatError(file) {
  28. this.$Message.error({
  29. background: true,
  30. content: '文件格式错误,请选择正确的文件重新上传!'
  31. });
  32. },
  33. handleBeforeUpload(file) {
  34. console.log(file, "11111111")
  35. let Maxsize = file.size > 30 * 1024 * 1024;
  36. if (Maxsize) {
  37. this.$Message.warning({
  38. content: '文件体积过大,图片大小不能超过30M'
  39. });
  40. return false
  41. }
  42. let imgTypeArr = ["image/png", "image/jpg", "image/jpeg", "image/gif"]
  43. let imgType = imgTypeArr.indexOf(file.type) !== -1
  44. if (imgType) {
  45. const reader = new FileReader()
  46. reader.readAsDataURL(file)
  47. reader.onload = (e) => {
  48. this.list.push({
  49. name: file.name,
  50. check: false,
  51. statusFlag: 0,
  52. url: reader.result,
  53. files: file
  54. })
  55. }
  56. } else {
  57. this.list.push({
  58. name: file.name,
  59. check: false,
  60. statusFlag: 0,
  61. url: this.getAssetsImgUrl(file.name.substr(file.name.lastIndexOf(".") + 1)),
  62. files: file
  63. })
  64. }
  65. return false
  66. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/921107
推荐阅读
相关标签
  

闽ICP备14008679号