From 2af534eea471f4adb104906c7a814bcc66d4d68d Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期一, 13 九月 2021 13:03:58 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/y_project/RuoYi-Vue into dev --- ruoyi-ui/src/components/ImageUpload/index.vue | 425 ++++++++++++++++++++++++++-------------------------- 1 files changed, 213 insertions(+), 212 deletions(-) diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue index 978576f..fcf010d 100644 --- a/ruoyi-ui/src/components/ImageUpload/index.vue +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -1,212 +1,213 @@ -<template> - <div class="component-upload-image"> - <el-upload - :action="uploadImgUrl" - list-type="picture-card" - :on-success="handleUploadSuccess" - :before-upload="handleBeforeUpload" - :limit="limit" - :on-error="handleUploadError" - :on-exceed="handleExceed" - name="file" - :on-remove="handleRemove" - :show-file-list="true" - :headers="headers" - :file-list="fileList" - :on-preview="handlePictureCardPreview" - :class="{hide: this.fileList.length >= this.limit}" - > - <i class="el-icon-plus"></i> - </el-upload> - - <!-- 涓婁紶鎻愮ず --> - <div class="el-upload__tip" slot="tip" v-if="showTip"> - 璇蜂笂浼� - <template v-if="fileSize"> 澶у皬涓嶈秴杩� <b style="color: #f56c6c">{{ fileSize }}MB</b> </template> - <template v-if="fileType"> 鏍煎紡涓� <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> - 鐨勬枃浠� - </div> - - <el-dialog - :visible.sync="dialogVisible" - title="棰勮" - width="800" - append-to-body - > - <img - :src="dialogImageUrl" - style="display: block; max-width: 100%; margin: 0 auto" - /> - </el-dialog> - </div> -</template> - -<script> -import { getToken } from "@/utils/auth"; - -export default { - props: { - value: [String, Object, Array], - // 鍥剧墖鏁伴噺闄愬埗 - limit: { - type: Number, - default: 5, - }, - // 澶у皬闄愬埗(MB) - fileSize: { - type: Number, - default: 5, - }, - // 鏂囦欢绫诲瀷, 渚嬪['png', 'jpg', 'jpeg'] - fileType: { - type: Array, - default: () => ["png", "jpg", "jpeg"], - }, - // 鏄惁鏄剧ず鎻愮ず - isShowTip: { - type: Boolean, - default: true - } - }, - data() { - return { - dialogImageUrl: "", - dialogVisible: false, - hideUpload: false, - baseUrl: process.env.VUE_APP_BASE_API, - uploadImgUrl: process.env.VUE_APP_BASE_API + "/common/upload", // 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃 - headers: { - Authorization: "Bearer " + getToken(), - }, - fileList: [] - }; - }, - watch: { - value: { - handler(val) { - if (val) { - // 棣栧厛灏嗗�艰浆涓烘暟缁� - const list = Array.isArray(val) ? val : this.value.split(','); - // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁� - this.fileList = list.map(item => { - if (typeof item === "string") { - if (item.indexOf(this.baseUrl) === -1) { - item = { name: this.baseUrl + item, url: this.baseUrl + item }; - } else { - item = { name: item, url: item }; - } - } - return item; - }); - } else { - this.fileList = []; - return []; - } - }, - deep: true, - immediate: true - } - }, - computed: { - // 鏄惁鏄剧ず鎻愮ず - showTip() { - return this.isShowTip && (this.fileType || this.fileSize); - }, - }, - methods: { - // 鍒犻櫎鍥剧墖 - handleRemove(file, fileList) { - const findex = this.fileList.map(f => f.name).indexOf(file.name); - if(findex > -1) { - this.fileList.splice(findex, 1); - this.$emit("input", this.listToString(this.fileList)); - } - }, - // 涓婁紶鎴愬姛鍥炶皟 - handleUploadSuccess(res) { - this.fileList.push({ name: res.fileName, url: res.fileName }); - this.$emit("input", this.listToString(this.fileList)); - this.loading.close(); - }, - // 涓婁紶鍓峫oading鍔犺浇 - handleBeforeUpload(file) { - let isImg = false; - if (this.fileType.length) { - let fileExtension = ""; - if (file.name.lastIndexOf(".") > -1) { - fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1); - } - isImg = this.fileType.some(type => { - if (file.type.indexOf(type) > -1) return true; - if (fileExtension && fileExtension.indexOf(type) > -1) return true; - return false; - }); - } else { - isImg = file.type.indexOf("image") > -1; - } - - if (!isImg) { - this.$message.error( - `鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${this.fileType.join("/")}鍥剧墖鏍煎紡鏂囦欢!` - ); - return false; - } - if (this.fileSize) { - const isLt = file.size / 1024 / 1024 < this.fileSize; - if (!isLt) { - this.$message.error(`涓婁紶澶村儚鍥剧墖澶у皬涓嶈兘瓒呰繃 ${this.fileSize} MB!`); - return false; - } - } - this.loading = this.$loading({ - lock: true, - text: "涓婁紶涓�", - background: "rgba(0, 0, 0, 0.7)", - }); - }, - // 鏂囦欢涓暟瓒呭嚭 - handleExceed() { - this.$message.error(`涓婁紶鏂囦欢鏁伴噺涓嶈兘瓒呰繃 ${this.limit} 涓�!`); - }, - // 涓婁紶澶辫触 - handleUploadError() { - this.$message({ - type: "error", - message: "涓婁紶澶辫触", - }); - this.loading.close(); - }, - // 棰勮 - handlePictureCardPreview(file) { - this.dialogImageUrl = file.url; - this.dialogVisible = true; - }, - // 瀵硅薄杞垚鎸囧畾瀛楃涓插垎闅� - listToString(list, separator) { - let strs = ""; - separator = separator || ","; - for (let i in list) { - strs += list[i].url.replace(this.baseUrl, "") + separator; - } - return strs != '' ? strs.substr(0, strs.length - 1) : ''; - } - } -}; -</script> -<style scoped lang="scss"> -// .el-upload--picture-card 鎺у埗鍔犲彿閮ㄥ垎 -::v-deep.hide .el-upload--picture-card { - display: none; -} -// 鍘绘帀鍔ㄧ敾鏁堟灉 -::v-deep .el-list-enter-active, -::v-deep .el-list-leave-active { - transition: all 0s; -} - -::v-deep .el-list-enter, .el-list-leave-active { - opacity: 0; - transform: translateY(0); -} -</style> - +<template> + <div class="component-upload-image"> + <el-upload + :action="uploadImgUrl" + list-type="picture-card" + :on-success="handleUploadSuccess" + :before-upload="handleBeforeUpload" + :limit="limit" + :on-error="handleUploadError" + :on-exceed="handleExceed" + name="file" + :on-remove="handleRemove" + :show-file-list="true" + :headers="headers" + :file-list="fileList" + :on-preview="handlePictureCardPreview" + :class="{hide: this.fileList.length >= this.limit}" + > + <i class="el-icon-plus"></i> + </el-upload> + + <!-- 涓婁紶鎻愮ず --> + <div class="el-upload__tip" slot="tip" v-if="showTip"> + 璇蜂笂浼� + <template v-if="fileSize"> 澶у皬涓嶈秴杩� <b style="color: #f56c6c">{{ fileSize }}MB</b> </template> + <template v-if="fileType"> 鏍煎紡涓� <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template> + 鐨勬枃浠� + </div> + + <el-dialog + :visible.sync="dialogVisible" + title="棰勮" + width="800" + append-to-body + > + <img + :src="dialogImageUrl" + style="display: block; max-width: 100%; margin: 0 auto" + /> + </el-dialog> + </div> +</template> + +<script> +import { getToken } from "@/utils/auth"; + +export default { + props: { + value: [String, Object, Array], + // 鍥剧墖鏁伴噺闄愬埗 + limit: { + type: Number, + default: 5, + }, + // 澶у皬闄愬埗(MB) + fileSize: { + type: Number, + default: 5, + }, + // 鏂囦欢绫诲瀷, 渚嬪['png', 'jpg', 'jpeg'] + fileType: { + type: Array, + default: () => ["png", "jpg", "jpeg"], + }, + // 鏄惁鏄剧ず鎻愮ず + isShowTip: { + type: Boolean, + default: true + } + }, + data() { + return { + dialogImageUrl: "", + dialogVisible: false, + hideUpload: false, + baseUrl: process.env.VUE_APP_BASE_API, + uploadImgUrl: process.env.VUE_APP_BASE_API + "/system/oss/upload", // 涓婁紶鐨勫浘鐗囨湇鍔″櫒鍦板潃 + headers: { + Authorization: "Bearer " + getToken(), + }, + fileList: [] + }; + }, + watch: { + value: { + handler(val) { + if (val) { + // 棣栧厛灏嗗�艰浆涓烘暟缁� + const list = Array.isArray(val) ? val : this.value.split(','); + // 鐒跺悗灏嗘暟缁勮浆涓哄璞℃暟缁� + this.fileList = list.map(item => { + if (typeof item === "string") { + item = { name: item, url: item }; + } + return item; + }); + } else { + this.fileList = []; + return []; + } + }, + deep: true, + immediate: true + } + }, + computed: { + // 鏄惁鏄剧ず鎻愮ず + showTip() { + return this.isShowTip && (this.fileType || this.fileSize); + }, + }, + methods: { + // 鍒犻櫎鍥剧墖 + handleRemove(file, fileList) { + const findex = this.fileList.map(f => f.name).indexOf(file.name); + if(findex > -1) { + this.fileList.splice(findex, 1); + this.$emit("input", this.listToString(this.fileList)); + } + }, + // 涓婁紶鎴愬姛鍥炶皟 + handleUploadSuccess(res) { + if (res.code == 200) { + this.fileList.push({ name: res.data.fileName, url: res.data.url }); + this.$emit("input", this.listToString(this.fileList)); + this.loading.close(); + } else { + this.$message.error(res.msg); + this.loading.close(); + } + }, + // 涓婁紶鍓峫oading鍔犺浇 + handleBeforeUpload(file) { + let isImg = false; + if (this.fileType.length) { + let fileExtension = ""; + if (file.name.lastIndexOf(".") > -1) { + fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1); + } + isImg = this.fileType.some((type) => { + if (file.type.indexOf(type) > -1) return true; + if (fileExtension && fileExtension.indexOf(type) > -1) return true; + return false; + }); + } else { + isImg = file.type.indexOf("image") > -1; + } + + if (!isImg) { + this.$message.error( + `鏂囦欢鏍煎紡涓嶆纭�, 璇蜂笂浼�${this.fileType.join("/")}鍥剧墖鏍煎紡鏂囦欢!` + ); + return false; + } + if (this.fileSize) { + const isLt = file.size / 1024 / 1024 < this.fileSize; + if (!isLt) { + this.$message.error(`涓婁紶澶村儚鍥剧墖澶у皬涓嶈兘瓒呰繃 ${this.fileSize} MB!`); + return false; + } + } + this.loading = this.$loading({ + lock: true, + text: "涓婁紶涓�", + background: "rgba(0, 0, 0, 0.7)", + }); + }, + // 鏂囦欢涓暟瓒呭嚭 + handleExceed() { + this.$message.error(`涓婁紶鏂囦欢鏁伴噺涓嶈兘瓒呰繃 ${this.limit} 涓�!`); + }, + // 涓婁紶澶辫触 + handleUploadError(res) { + this.$message({ + type: "error", + message: "涓婁紶澶辫触", + }); + this.loading.close(); + }, + // 棰勮 + handlePictureCardPreview(file) { + this.dialogImageUrl = file.url; + this.dialogVisible = true; + }, + // 瀵硅薄杞垚鎸囧畾瀛楃涓插垎闅� + listToString(list, separator) { + let strs = ""; + separator = separator || ","; + for (let i in list) { + strs += list[i].url + separator; + } + return strs != '' ? strs.substr(0, strs.length - 1) : ''; + } + } +}; +</script> +<style scoped lang="scss"> +// .el-upload--picture-card 鎺у埗鍔犲彿閮ㄥ垎 +::v-deep.hide .el-upload--picture-card { + display: none; +} +// 鍘绘帀鍔ㄧ敾鏁堟灉 +::v-deep .el-list-enter-active, +::v-deep .el-list-leave-active { + transition: all 0s; +} + +::v-deep .el-list-enter, .el-list-leave-active { + opacity: 0; + transform: translateY(0); +} +</style> + -- Gitblit v1.9.3