FileUpload组件支持多文件上传
This commit is contained in:
		
							parent
							
								
									90c41d498c
								
							
						
					
					
						commit
						e447fb806b
					
				| 
						 | 
					@ -4,9 +4,7 @@
 | 
				
			||||||
      :action="uploadFileUrl"
 | 
					      :action="uploadFileUrl"
 | 
				
			||||||
      :before-upload="handleBeforeUpload"
 | 
					      :before-upload="handleBeforeUpload"
 | 
				
			||||||
      :file-list="fileList"
 | 
					      :file-list="fileList"
 | 
				
			||||||
      :limit="1"
 | 
					 | 
				
			||||||
      :on-error="handleUploadError"
 | 
					      :on-error="handleUploadError"
 | 
				
			||||||
      :on-exceed="handleExceed"
 | 
					 | 
				
			||||||
      :on-success="handleUploadSuccess"
 | 
					      :on-success="handleUploadSuccess"
 | 
				
			||||||
      :show-file-list="false"
 | 
					      :show-file-list="false"
 | 
				
			||||||
      :headers="headers"
 | 
					      :headers="headers"
 | 
				
			||||||
| 
						 | 
					@ -26,8 +24,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- 文件列表 -->
 | 
					    <!-- 文件列表 -->
 | 
				
			||||||
    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
 | 
					    <transition-group class="upload-file-list el-upload-list el-upload-list--text" name="el-fade-in-linear" tag="ul">
 | 
				
			||||||
      <li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in list">
 | 
					      <li :key="file.uid" class="el-upload-list__item ele-upload-list__item-content" v-for="(file, index) in fileList">
 | 
				
			||||||
        <el-link :href="file.url" :underline="false" target="_blank">
 | 
					        <el-link :href="`${baseUrl}${file.url}`" :underline="false" target="_blank">
 | 
				
			||||||
          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
 | 
					          <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
 | 
				
			||||||
        </el-link>
 | 
					        </el-link>
 | 
				
			||||||
        <div class="ele-upload-list__item-content-action">
 | 
					        <div class="ele-upload-list__item-content-action">
 | 
				
			||||||
| 
						 | 
					@ -42,6 +40,7 @@
 | 
				
			||||||
import { getToken } from "@/utils/auth";
 | 
					import { getToken } from "@/utils/auth";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default {
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "FileUpload",
 | 
				
			||||||
  props: {
 | 
					  props: {
 | 
				
			||||||
    // 值
 | 
					    // 值
 | 
				
			||||||
    value: [String, Object, Array],
 | 
					    value: [String, Object, Array],
 | 
				
			||||||
| 
						 | 
					@ -63,6 +62,7 @@ export default {
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  data() {
 | 
					  data() {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
 | 
					      baseUrl: process.env.VUE_APP_BASE_API,
 | 
				
			||||||
      uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
 | 
					      uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 上传的图片服务器地址
 | 
				
			||||||
      headers: {
 | 
					      headers: {
 | 
				
			||||||
        Authorization: "Bearer " + getToken(),
 | 
					        Authorization: "Bearer " + getToken(),
 | 
				
			||||||
| 
						 | 
					@ -70,30 +70,35 @@ export default {
 | 
				
			||||||
      fileList: [],
 | 
					      fileList: [],
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  watch: {
 | 
				
			||||||
 | 
					    value: {
 | 
				
			||||||
 | 
					      handler(val) {
 | 
				
			||||||
 | 
					        if (val) {
 | 
				
			||||||
 | 
					          let temp = 1;
 | 
				
			||||||
 | 
					          // 首先将值转为数组
 | 
				
			||||||
 | 
					          const list = Array.isArray(val) ? val : this.value.split(',');
 | 
				
			||||||
 | 
					          // 然后将数组转为对象数组
 | 
				
			||||||
 | 
					          this.fileList = list.map(item => {
 | 
				
			||||||
 | 
					            if (typeof item === "string") {
 | 
				
			||||||
 | 
					              item = { name: item, url: item };
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            item.uid = item.uid || new Date().getTime() + temp++;
 | 
				
			||||||
 | 
					            return item;
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          this.fileList = [];
 | 
				
			||||||
 | 
					          return [];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      deep: true,
 | 
				
			||||||
 | 
					      immediate: true
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  computed: {
 | 
					  computed: {
 | 
				
			||||||
    // 是否显示提示
 | 
					    // 是否显示提示
 | 
				
			||||||
    showTip() {
 | 
					    showTip() {
 | 
				
			||||||
      return this.isShowTip && (this.fileType || this.fileSize);
 | 
					      return this.isShowTip && (this.fileType || this.fileSize);
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 列表
 | 
					 | 
				
			||||||
    list() {
 | 
					 | 
				
			||||||
      let temp = 1;
 | 
					 | 
				
			||||||
      if (this.value) {
 | 
					 | 
				
			||||||
        // 首先将值转为数组
 | 
					 | 
				
			||||||
        const list = Array.isArray(this.value) ? this.value : [this.value];
 | 
					 | 
				
			||||||
        // 然后将数组转为对象数组
 | 
					 | 
				
			||||||
        return list.map((item) => {
 | 
					 | 
				
			||||||
          if (typeof item === "string") {
 | 
					 | 
				
			||||||
            item = { name: item, url: item };
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
          item.uid = item.uid || new Date().getTime() + temp++;
 | 
					 | 
				
			||||||
          return item;
 | 
					 | 
				
			||||||
        });
 | 
					 | 
				
			||||||
      } else {
 | 
					 | 
				
			||||||
        this.fileList = [];
 | 
					 | 
				
			||||||
        return [];
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  methods: {
 | 
					  methods: {
 | 
				
			||||||
    // 上传前校检格式和大小
 | 
					    // 上传前校检格式和大小
 | 
				
			||||||
| 
						 | 
					@ -124,10 +129,6 @@ export default {
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 文件个数超出
 | 
					 | 
				
			||||||
    handleExceed() {
 | 
					 | 
				
			||||||
      this.$message.error(`只允许上传单个文件`);
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    // 上传失败
 | 
					    // 上传失败
 | 
				
			||||||
    handleUploadError(err) {
 | 
					    handleUploadError(err) {
 | 
				
			||||||
      this.$message.error("上传失败, 请重试");
 | 
					      this.$message.error("上传失败, 请重试");
 | 
				
			||||||
| 
						 | 
					@ -135,12 +136,13 @@ export default {
 | 
				
			||||||
    // 上传成功回调
 | 
					    // 上传成功回调
 | 
				
			||||||
    handleUploadSuccess(res, file) {
 | 
					    handleUploadSuccess(res, file) {
 | 
				
			||||||
      this.$message.success("上传成功");
 | 
					      this.$message.success("上传成功");
 | 
				
			||||||
      this.$emit("input", res.url);
 | 
					      this.fileList.push({ name: res.fileName, url: res.fileName });
 | 
				
			||||||
 | 
					      this.$emit("input", this.listToString(this.fileList));
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 删除文件
 | 
					    // 删除文件
 | 
				
			||||||
    handleDelete(index) {
 | 
					    handleDelete(index) {
 | 
				
			||||||
      this.fileList.splice(index, 1);
 | 
					      this.fileList.splice(index, 1);
 | 
				
			||||||
      this.$emit("input", '');
 | 
					      this.$emit("input", this.listToString(this.fileList));
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    // 获取文件名称
 | 
					    // 获取文件名称
 | 
				
			||||||
    getFileName(name) {
 | 
					    getFileName(name) {
 | 
				
			||||||
| 
						 | 
					@ -149,11 +151,16 @@ export default {
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        return "";
 | 
					        return "";
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    // 对象转成分隔字符串
 | 
				
			||||||
 | 
					    listToString(list) {
 | 
				
			||||||
 | 
					      let files = "";
 | 
				
			||||||
 | 
					      for (let key in list) {
 | 
				
			||||||
 | 
					        files += list[key].url + ",";
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return files.substr(0, files.length - 1);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  }
 | 
				
			||||||
  created() {
 | 
					 | 
				
			||||||
    this.fileList = this.list;
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue