1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| <template> <div class="upload-container"> <el-button :style="{background:color,borderColor:color}" icon="el-icon-upload" size="mini" type="primary" @click=" dialogVisible=true"> 上传 </el-button> <el-dialog :visible.sync="dialogVisible"> <el-upload :multiple="true" :file-list="fileList" :show-file-list="true" :on-remove="handleRemove" :before-upload="beforeUpload" :http-request="uploadImage" action="#" class="editor-slide-upload" list-type="picture-card" > <el-button size="small" type="primary"> 点击上传 </el-button> </el-upload> <el-button @click="dialogVisible = false"> 取消 </el-button> <el-button type="primary" @click="handleSubmit"> 确定 </el-button> </el-dialog> </div> </template>
<script> import { uploadALocalPicture } from '../../../api/upload'
export default { name: 'EditorSlideUpload', props: { color: { type: String, default: '#1890ff' } }, data() { return { dialogVisible: false, listObj: {}, fileList: [] } }, methods: { checkAllSuccess() { return Object.keys(this.listObj).every(item => this.listObj[item].hasSuccess) }, handleSubmit() { const arr = Object.keys(this.listObj).map(v => this.listObj[v]) if (!this.checkAllSuccess()) { this.$message('请等待所有图像成功上传。如果出现网络问题,请刷新页面,然后重新上传!') return } this.$emit('successCBK', arr) this.listObj = {} this.fileList = [] this.dialogVisible = false }, handleRemove(file) { const uid = file.uid const objKeyArr = Object.keys(this.listObj) for (let i = 0, len = objKeyArr.length; i < len; i++) { if (this.listObj[objKeyArr[i]].uid === uid) { delete this.listObj[objKeyArr[i]] return } } }, beforeUpload(file) { if (!(file.type === 'image/png' || file.type === 'image/jpg' || file.type === 'image/jpeg' || file.type === 'image/gif')) { this.$notify.warning({ title: '警告', message: '上传应用Logo图片只能是 JPG/PNG/JPEG/GIF 格式!' }) return false } }, uploadImage(param) { const _self = this const fileName = param.file.uid this.listObj[fileName] = {} const formData = new FormData() formData.append('picFile', param.file) uploadALocalPicture(formData).then(res => { param.onSuccess() console.log('上传图片成功') _self.listObj[fileName] = { hasSuccess: false, uid: param.file.uid } this.handleSuccess(res, param.file) }) }, handleSuccess(response, file) { const uid = file.uid const objKeyArr = Object.keys(this.listObj) for (let i = 0, len = objKeyArr.length; i < len; i++) { if (this.listObj[objKeyArr[i]].uid === uid) { this.listObj[objKeyArr[i]].url = response.data this.listObj[objKeyArr[i]].hasSuccess = true return } } } } } </script>
<style lang="scss" scoped> .editor-slide-upload { margin-bottom: 20px; /deep/ .el-upload--picture-card { width: 100%; } } </style>
|