From 3dfb116fdd4120567493d03c075da327a5e4f71c Mon Sep 17 00:00:00 2001 From: 疯狂的狮子Li <15040126243@163.com> Date: 星期一, 18 四月 2022 19:55:23 +0800 Subject: [PATCH] update 优化文件上传、图片上传组件 文件列表展示文件原名便于后续处理, 完善组件删除功能 --- ruoyi-ui/src/components/FileUpload/index.vue | 100 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 64 insertions(+), 36 deletions(-) diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index 81e2b3a..78baf48 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -1,10 +1,11 @@ <template> <div class="upload-file"> <el-upload + multiple :action="uploadFileUrl" :before-upload="handleBeforeUpload" :file-list="fileList" - :limit="1" + :limit="limit" :on-error="handleUploadError" :on-exceed="handleExceed" :on-success="handleUploadSuccess" @@ -26,8 +27,8 @@ <!-- 鏂囦欢鍒楄〃 --> <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"> - <el-link :href="file.url" :underline="false" target="_blank"> + <li :key="file.url" 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"> <span class="el-icon-document"> {{ getFileName(file.name) }} </span> </el-link> <div class="ele-upload-list__item-content-action"> @@ -40,11 +41,18 @@ <script> import { getToken } from "@/utils/auth"; +import { delOss } from "@/api/system/oss"; export default { + name: "FileUpload", props: { // 鍊� value: [String, Object, Array], + // 鏁伴噺闄愬埗 + limit: { + type: Number, + default: 5, + }, // 澶у皬闄愬埗(MB) fileSize: { type: Number, @@ -63,36 +71,42 @@ }, data() { return { - uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃 + number: 0, + uploadList: [], + baseUrl: process.env.VUE_APP_BASE_API, + uploadFileUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃 headers: { Authorization: "Bearer " + getToken(), }, fileList: [], }; }, + watch: { + value: { + handler(val) { + if (val) { + let temp = 1; + // 棣栧厛灏嗗�艰浆涓烘暟缁� + const list = Array.isArray(val) ? val : this.value.split(','); + // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁� + this.fileList = list.map(item => { + item = { name: item.name, url: item.url, ossId: item.ossId }; + item.uid = item.uid || new Date().getTime() + temp++; + return item; + }); + } else { + this.fileList = []; + return []; + } + }, + deep: true, + immediate: true + } + }, computed: { // 鏄惁鏄剧ず鎻愮ず showTip() { 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: { @@ -110,7 +124,7 @@ return false; }); if (!isTypeOk) { - this.$message.error(`鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${this.fileType.join("/")}鏍煎紡鏂囦欢!`); + this.$modal.msgError(`鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${this.fileType.join("/")}鏍煎紡鏂囦欢!`); return false; } } @@ -118,41 +132,55 @@ if (this.fileSize) { const isLt = file.size / 1024 / 1024 < this.fileSize; if (!isLt) { - this.$message.error(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${this.fileSize} MB!`); + this.$modal.msgError(`涓婁紶鏂囦欢澶у皬涓嶈兘瓒呰繃 ${this.fileSize} MB!`); return false; } } + this.$modal.loading("姝e湪涓婁紶鏂囦欢锛岃绋嶅��..."); + this.number++; return true; }, // 鏂囦欢涓暟瓒呭嚭 handleExceed() { - this.$message.error(`鍙厑璁镐笂浼犲崟涓枃浠禶); + this.$modal.msgError(`涓婁紶鏂囦欢鏁伴噺涓嶈兘瓒呰繃 ${this.limit} 涓�!`); }, // 涓婁紶澶辫触 handleUploadError(err) { - this.$message.error("涓婁紶澶辫触, 璇烽噸璇�"); + this.$modal.msgError("涓婁紶鍥剧墖澶辫触锛岃閲嶈瘯"); + this.$modal.closeLoading() }, // 涓婁紶鎴愬姛鍥炶皟 handleUploadSuccess(res, file) { - this.$message.success("涓婁紶鎴愬姛"); - this.$emit("input", res.data.url); + if (res.code === 200) { + this.uploadList.push({ name: res.data.fileName, url: res.data.url, ossId: res.data.ossId }); + if (this.uploadList.length === this.number) { + this.fileList = this.fileList.concat(this.uploadList); + this.uploadList = []; + this.number = 0; + this.$emit("input", this.fileList); + this.$modal.closeLoading(); + } + } else { + this.$modal.msgError(res.msg); + this.$modal.closeLoading(); + } }, // 鍒犻櫎鏂囦欢 handleDelete(index) { + let ossId = this.fileList[index].ossId; + delOss(ossId); this.fileList.splice(index, 1); - this.$emit("input", ''); + this.$emit("input", this.fileList); }, // 鑾峰彇鏂囦欢鍚嶇О getFileName(name) { + // 濡傛灉鏄痷rl閭d箞鍙栨渶鍚庣殑鍚嶅瓧 濡傛灉涓嶆槸鐩存帴杩斿洖 if (name.lastIndexOf("/") > -1) { - return name.slice(name.lastIndexOf("/") + 1).toLowerCase(); + return name.slice(name.lastIndexOf("/") + 1); } else { - return ""; + return name; } - } - }, - created() { - this.fileList = this.list; + }, }, }; </script> -- Gitblit v1.9.3