| | |
| | | <!-- 上传文件封装 --> |
| | | <template> |
| | | <div class="component-upload-image"> |
| | | <el-upload |
| | |
| | | :headers="headers" |
| | | :file-list="fileList" |
| | | :on-preview="handlePictureCardPreview" |
| | | :class="{hide: this.fileList.length >= this.limit}" |
| | | :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> |
| | | <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> |
| | | |
| | |
| | | }, |
| | | // 大小限制(MB) |
| | | fileSize: { |
| | | type: Number, |
| | | type: Number, |
| | | default: 5, |
| | | }, |
| | | // 文件类型, 例如['png', 'jpg', 'jpeg'] |
| | |
| | | // 是否显示提示 |
| | | isShowTip: { |
| | | type: Boolean, |
| | | default: true |
| | | } |
| | | default: true, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | headers: { |
| | | Authorization: "Bearer " + getToken(), |
| | | }, |
| | | fileList: [] |
| | | fileList: [], |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | handler(val) { |
| | | if (val) { |
| | | // 首先将值转为数组 |
| | | const list = Array.isArray(val) ? val : this.value.split(','); |
| | | const list = Array.isArray(val) ? val : this.value.split(","); |
| | | // 然后将数组转为对象数组 |
| | | this.fileList = list.map(item => { |
| | | this.fileList = list.map((item) => { |
| | | if (typeof item === "string") { |
| | | if (item.indexOf(this.baseUrl) === -1) { |
| | | item = { name: this.baseUrl + item, url: this.baseUrl + item }; |
| | | item = { name: this.baseUrl + item, url: this.baseUrl + item }; |
| | | } else { |
| | | item = { name: item, url: item }; |
| | | item = { name: item, url: item }; |
| | | } |
| | | } |
| | | return item; |
| | |
| | | } |
| | | }, |
| | | deep: true, |
| | | immediate: true |
| | | } |
| | | immediate: true, |
| | | }, |
| | | }, |
| | | computed: { |
| | | // 是否显示提示 |
| | |
| | | if (file.name.lastIndexOf(".") > -1) { |
| | | fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1); |
| | | } |
| | | isImg = this.fileType.some(type => { |
| | | isImg = this.fileType.some((type) => { |
| | | if (file.type.indexOf(type) > -1) return true; |
| | | if (fileExtension && fileExtension.indexOf(type) > -1) return true; |
| | | return false; |
| | |
| | | } |
| | | |
| | | if (!isImg) { |
| | | this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`); |
| | | this.$modal.msgError( |
| | | `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!` |
| | | ); |
| | | return false; |
| | | } |
| | | if (this.fileSize) { |
| | |
| | | }, |
| | | // 删除图片 |
| | | handleDelete(file) { |
| | | const findex = this.fileList.map(f => f.name).indexOf(file.name); |
| | | if(findex > -1) { |
| | | 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)); |
| | | } |
| | |
| | | strs += list[i].url.replace(this.baseUrl, "") + separator; |
| | | } |
| | | } |
| | | return strs != '' ? strs.substr(0, strs.length - 1) : ''; |
| | | } |
| | | } |
| | | 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; |
| | | display: none; |
| | | } |
| | | // 去掉动画效果 |
| | | ::v-deep .el-list-enter-active, |
| | | ::v-deep .el-list-leave-active { |
| | | transition: all 0s; |
| | | transition: all 0s; |
| | | } |
| | | |
| | | ::v-deep .el-list-enter, .el-list-leave-active { |
| | | opacity: 0; |
| | | transform: translateY(0); |
| | | ::v-deep .el-list-enter, |
| | | .el-list-leave-active { |
| | | opacity: 0; |
| | | transform: translateY(0); |
| | | } |
| | | </style> |
| | | |