FileUpload组件支持多文件上传
This commit is contained in:
		| @@ -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> | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user