| <template> | 
|   <div class="upload-container"> | 
|     <div> | 
|       <div class="input-btns" style="margin-bottom: 10px"> | 
|         <input | 
|           ref="input" | 
|           type="file" | 
|           style="display: none" | 
|           @change="handleChange" | 
|           :multiple="multiple" | 
|         /> | 
|         <div v-if="img" class="upload-img"> | 
|           <!-- v-for="(file,index) in fileInfo.length>0?fileInfo: files" --> | 
|           <div v-for="(file, index) in files" :key="index" class="img-item"> | 
|             <div class="operation"> | 
|               <div class="action"> | 
|                 <i class="el-icon-view view" @click="previewImg(index)"></i> | 
|                 <i class="el-icon-delete remove" @click="removeFile(index)"></i> | 
|               </div> | 
|               <div class="mask"></div> | 
|             </div> | 
|   | 
|             <img :src="getImgSrc(file, index)" :onerror="errorImg" /> | 
|           </div> | 
|           <div | 
|             v-show="!autoUpload || (autoUpload && files.length < maxFile)" | 
|             class="img-selector" | 
|             :class="getSelector()" | 
|           > | 
|             <div class="selector" @click="handleClick"> | 
|               <i class="el-icon-camera-solid"></i> | 
|             </div> | 
|             <div | 
|               v-if="!autoUpload" | 
|               class="s-btn" | 
|               :class="{ readonly: changed }" | 
|               @click="upload" | 
|             > | 
|               <div>{{ loadText }}</div> | 
|             </div> | 
|           </div> | 
|         </div> | 
|         <el-button v-else @click="handleClick" | 
|           >选择{{ img ? '图片' : '文件' }}</el-button | 
|         > | 
|   | 
|         <el-button | 
|           v-if="!autoUpload && !img" | 
|           type="info" | 
|           :disabled="changed" | 
|           @click="upload(true)" | 
|           :loading="loadingStatus" | 
|           >上传文件</el-button | 
|         > | 
|       </div> | 
|       <slot></slot> | 
|       <div v-if="desc"> | 
|         <el-alert | 
|           :title="getText() + '文件大小不超过' + (maxSize || 50) + 'M'" | 
|           type="info" | 
|           show-icon | 
|         > | 
|         </el-alert> | 
|       </div> | 
|       <slot name="content"></slot> | 
|       <div v-if="!img"> | 
|         <ul class="upload-list" v-show="fileList"> | 
|           <li class="list-file" v-for="(file, index) in files" :key="index"> | 
|             <a> | 
|               <span @click="fileOnClick(index, file)"> | 
|                 <i :class="format(file)"></i> | 
|                 {{ file.name }} | 
|               </span> | 
|             </a> | 
|             <span @click="removeFile(index)" class="file-remove"> | 
|               <i class="el-icon-close"></i> | 
|             </span> | 
|           </li> | 
|         </ul> | 
|       </div> | 
|       <slot name="tip"></slot> | 
|     </div> | 
|   </div> | 
| </template> | 
| <script> | 
| let OSS = require('ali-oss'); | 
| export default { | 
|   components: {}, | 
|   props: { | 
|     desc: { | 
|       //是否显示默认介绍 | 
|       //是否多选 | 
|       type: Boolean, | 
|       default: false | 
|     }, | 
|     fileInfo: { | 
|       //用于接收上传的文件,也可以加以默认值,显示已上传的文件,用户上传后会覆盖默认值 | 
|       type: Array, | 
|       default: () => { | 
|         return []; | 
|       } //格式[{name:'1.jpg',path:'127.0.01/1.jpg'}] | 
|     }, | 
|     downLoad: { | 
|       //是否可以点击文件下载 | 
|       type: Boolean, | 
|       default: true | 
|     }, | 
|     multiple: { | 
|       //是否多选 | 
|       type: Boolean, | 
|       default: false | 
|     }, | 
|     maxFile: { | 
|       //最多可选文件数量,必须multiple=true,才会生效 | 
|       type: Number, | 
|       default: 5 | 
|     }, | 
|     maxSize: { | 
|       //文件限制大小3M | 
|       type: Number, | 
|       default: 50 | 
|     }, | 
|   | 
|     autoUpload: { | 
|       //选择文件后是否自动上传 | 
|       type: Boolean, | 
|       default: true | 
|     }, | 
|     img: { | 
|       //图片类型  img>excel>fileTypes三种文件类型优先级 | 
|       type: Boolean, | 
|       default: false | 
|     }, | 
|     excel: { | 
|       //excel文件 | 
|       type: Boolean, | 
|       default: false | 
|     }, | 
|     fileTypes: { | 
|       //指定上传文件的类型 | 
|       type: Array, | 
|       default: () => { | 
|         return []; | 
|       } | 
|     }, | 
|     url: { | 
|       //上传的url | 
|       type: String, | 
|       default: '' | 
|     }, | 
|     uploadBefore: { | 
|       //返回false会中止执行 | 
|       //上传前 | 
|       type: Function, | 
|       default: (files) => { | 
|         return true; | 
|       } | 
|     }, | 
|     uploadAfter: { | 
|       //返回false会中止执行 | 
|       //上传后 | 
|       type: Function, | 
|       default: (result, files) => { | 
|         return true; | 
|       } | 
|     }, | 
|     onChange: { | 
|       //选择文件时  //返回false会中止执行 | 
|       type: Function, | 
|       default: (files) => { | 
|         return true; | 
|       } | 
|     }, | 
|     // clear: { | 
|     //   //上传完成后是否清空文件列表 | 
|     //   type: Boolean, | 
|     //   default: true | 
|     // }, | 
|     fileList: { | 
|       //是否显示选择的文件列表 | 
|       type: Boolean, | 
|       default: true | 
|     }, | 
|     fileClick: { | 
|       //点击文件事件 | 
|       type: Function, | 
|       default: (index, file, files) => { | 
|         return true; | 
|       } | 
|     }, | 
|     removeBefore: { | 
|       //移除文件事件 | 
|       type: Function, | 
|       default: (index, file, files) => { | 
|         return true; | 
|       } | 
|     }, | 
|     append: { | 
|       //此属性已废弃,多文件上传,默认追加文件 | 
|       type: Boolean, | 
|       default: false | 
|     }, | 
|     compress: { | 
|       //开启图片压缩,后面根据需要再完善 | 
|       type: Boolean, | 
|       default: true | 
|     }, | 
|     compressMinSize: { | 
|       //压缩的最小比例 | 
|       type: Number, | 
|       default: 0.1 | 
|     } | 
|   }, | 
|   data() { | 
|     return { | 
|       errorImg: 'this.src="' + require('@/assets/imgs/error-img.png') + '"', | 
|       changed: false, //手动上传成功后禁止重复上传,必须重新选择 | 
|       model: true, | 
|       files: [], | 
|       bigImg: '', | 
|       imgTypes: ['gif', 'jpg', 'jpeg', 'png', 'bmp', 'webp', 'jfif'], | 
|       loadingStatus: false, | 
|       loadText: '上传文件' | 
|     }; | 
|   }, | 
|   created() { | 
|     //默认有图片的禁止上传操作 | 
|     if (this.fileInfo) { | 
|       this.changed = true; | 
|     } | 
|     this.cloneFile(this.fileInfo); | 
|   }, | 
|   watch: { | 
|     fileInfo: { | 
|       handler(files) { | 
|         this.cloneFile(files); | 
|       }, | 
|       deep: true | 
|     } | 
|   }, | 
|   methods: { | 
|     cloneFile(files) { | 
|       this.files = files.map((x) => { | 
|         return { | 
|           name: x.name || this.getFileName(x.path), | 
|           path: x.path | 
|         }; | 
|       }); | 
|     }, | 
|     getFileName(path) { | 
|       if (!path) { | 
|         return '未定义文件名'; | 
|       } | 
|       let _index = path.lastIndexOf('/'); | 
|       return path.substring(_index + 1); | 
|     }, | 
|     previewImg(index) { | 
|       //查看大图预览模式待完 | 
|       this.base.previewImg(this.getImgSrc(this.files[index])); | 
|       //  window.open(this.getImgSrc((this.files.length>0?this.files:this.fileInfo)[index])); | 
|     }, | 
|     getSelector() { | 
|       if (this.autoUpload) { | 
|         return 'auto-selector'; | 
|       } | 
|       return 'submit-selector'; | 
|     }, | 
|     getImgSrc(file, index) { | 
|       if (file.hasOwnProperty('path')) { | 
|         if (this.base.isUrl(file.path)) { | 
|           return file.path; | 
|         } | 
|         //2020.12.27增加base64图片操作 | 
|         if (file.path.indexOf('/9j/') != -1) { | 
|           return 'data:image/jpeg;base64,' + file.path; | 
|         } | 
|         if (file.path.substr(0, 1) == '/') { | 
|           file.path = file.path.substr(1); | 
|         } | 
|         return this.http.ipAddress + file.path; | 
|       } | 
|       return window.URL.createObjectURL(file); | 
|     }, | 
|     fileOnClick(index, file) { | 
|       if (!this.fileClick(index, file, this.files)) { | 
|         return; | 
|       } | 
|       //点击不下载 | 
|       if (!this.downLoad) { | 
|         return; | 
|       } | 
|       if (!file.path) { | 
|         this.$message.error('请先上传文件'); | 
|         return; | 
|       } | 
|       this.base.dowloadFile( | 
|         file.path, | 
|         file.name, | 
|         { | 
|           Authorization: this.$store.getters.getToken() | 
|         }, | 
|         this.http.ipAddress | 
|       ); | 
|     }, | 
|     getText() { | 
|       if (this.img) { | 
|         return '只能上传图片,'; | 
|       } else if (this.excel) { | 
|         return '只能上传excel文件,'; | 
|       } | 
|     }, | 
|     handleClick() { | 
|       this.$refs.input.click(); | 
|     }, | 
|     handleChange(e) { | 
|       //this.compress开启图片压缩,后面根据需要再完善 | 
|       // this.clearFiles(); | 
|       var result = this.checkFile(e.target.files); | 
|       if (!result) { | 
|         return; | 
|       } | 
|   | 
|       this.changed = false; | 
|       //如果传入了FileInfo需要自行处理移除FileInfo | 
|       if (!this.onChange(e.target.files)) { | 
|         return; | 
|       } | 
|       for (let index = 0; index < e.target.files.length; index++) { | 
|         const element = e.target.files[index]; | 
|         element.input = true; | 
|       } | 
|       if (!this.multiple) { | 
|         this.files.splice(0); | 
|       } | 
|       this.files.push(...e.target.files); | 
|   | 
|       this.$refs.input.value = null; | 
|       if (this.autoUpload && result) { | 
|         this.upload(false); | 
|       } | 
|     }, | 
|     removeFile(index) { | 
|       //如果传入了FileInfo需要自行处理移除FileInfo | 
|       //t移除文件 | 
|       let removeFile = this.files[index]; | 
|       //删除的还没上传的文件 | 
|       if (removeFile.input) { | 
|         this.files.splice(index, 1); | 
|       } else { | 
|         this.fileInfo.splice(index, 1); | 
|       } | 
|       if (!this.removeBefore(index, removeFile, this.fileInfo)) { | 
|         return; | 
|       } | 
|     }, | 
|     clearFiles() { | 
|       this.files.splice(0); | 
|     }, | 
|     getFiles() { | 
|       return this.files; | 
|     }, | 
|     convertToFile(dataurl, filename) { | 
|       let arr = dataurl.split(','); | 
|       let mime = arr[0].match(/:(.*?);/)[1]; | 
|       let suffix = mime.split('/')[1]; | 
|       let bstr = atob(arr[1]); | 
|       let n = bstr.length; | 
|       let u8arr = new Uint8Array(n); | 
|       while (n--) { | 
|         u8arr[n] = bstr.charCodeAt(n); | 
|       } | 
|       // new File返回File对象 第一个参数是 ArraryBuffer 或 Bolb 或Arrary 第二个参数是文件名 | 
|       // 第三个参数是 要放到文件中的内容的 MIME 类型 | 
|       return new File([u8arr], `${filename}.${suffix}`, { | 
|         type: mime, | 
|         input: true | 
|       }); | 
|     }, | 
|     async compressImg(file) { | 
|       let fileSize = file.size / 1024 / 1024; | 
|       let read = new FileReader(); | 
|       read.readAsDataURL(file); | 
|       return new Promise((resolve, reject) => { | 
|         read.onload = (e) => { | 
|           let img = new Image(); | 
|           img.src = e.target.result; | 
|           let _this = this; | 
|           img.onload = function() { | 
|             //默认按比例压缩 | 
|             let w = this.width; | 
|             let h = this.height; | 
|             let canvas = document.createElement('canvas'); | 
|             let ctx = canvas.getContext('2d'); | 
|             canvas.setAttribute('width', w); | 
|             canvas.setAttribute('height', h); | 
|             ctx.drawImage(this, 0, 0, w, h); | 
|             let rate = 0.3; | 
|             if (fileSize > 2) { | 
|               rate = 0.1; | 
|             } else if (fileSize > 1) { | 
|               rate = 0.1; | 
|             } | 
|             if (_this.compressMinSize > rate) { | 
|               rate = _this.compressMinSize; | 
|             } | 
|             // rate=1; | 
|             let base64 = canvas.toDataURL('image/jpeg', rate); | 
|             resolve(_this.convertToFile(base64, file.name)); | 
|           }; | 
|         }; | 
|       }); | 
|     }, | 
|     async uploadOSS() { | 
|       this.http.get('api/alioss/getAccessToken', {}, false).then(async (x) => { | 
|         if (!x.status) return this.$Message.error(x.message); | 
|         let client = new OSS({ | 
|           // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。 | 
|           region: x.data.region, | 
|           // 从STS服务获取的临时访问密钥(AccessKey ID和AccessKey Secret)。 | 
|           accessKeyId: x.data.accessKeyId, | 
|           accessKeySecret: x.data.accessKeySecret, | 
|           // 从STS服务获取的安全令牌(SecurityToken)。 | 
|           stsToken: x.data.securityToken, | 
|           // 填写Bucket名称。 | 
|           bucket: x.data.bucket | 
|         }); | 
|         console.log(this.files); | 
|         for (let index = 0; index < this.files.length; index++) { | 
|           const file = this.files[index]; | 
|           if (file.input) { | 
|             let result = await client.put( | 
|               x.data.bucketFolder + '/' + x.data.unique + file.name, | 
|               file | 
|             ); | 
|             file.path = result.url; | 
|             file.newName = x.data.unique + file.name; | 
|           } | 
|         } | 
|   | 
|         this.fileInfo.splice(0); | 
|         // } | 
|         let _files = this.files.map((file) => { | 
|           return { | 
|             name: file.newName || file.name, | 
|             path: file.path | 
|           }; | 
|         }); | 
|         this.fileInfo.push(..._files); | 
|         //2021.09.25修复文件上传后不能同时下载的问题 | 
|         this.files = _files; | 
|       }); | 
|       return; | 
|     }, | 
|     async upload(vail) { | 
|       if (vail && !this.checkFile()) return false; | 
|       if (!this.url) { | 
|         return this.$message.error('没有配置好Url'); | 
|       } | 
|       if (!this.files || this.files.length == 0) { | 
|         return this.$message.error('请选择文件'); | 
|       } | 
|       //增加上传时自定义参数,后台使用获取Utilities.HttpContext.Current.Request.Query["字段"] | 
|       let params={}; | 
|       if (!this.uploadBefore(this.files,params)) { | 
|         return; | 
|       } | 
|       let paramText=""; | 
|       if (Object.keys(params).length) { | 
|         paramText="?1=1"; | 
|         for (const key in params) { | 
|           let value=params[key]; | 
|           if(typeof(value)=='object'){ | 
|             value=JSON.stringify(value) | 
|           } | 
|           paramText+=`&${key}=${value}` | 
|         } | 
|       } | 
|   | 
|       this.loadingStatus = true; | 
|       this.loadText = '上传中..'; | 
|       if (window.oss && window.oss.ali.use) { | 
|         await this.uploadOSS(); | 
|         this.loadingStatus = false; | 
|         this.loadText = '上传文件'; | 
|         if (!this.uploadAfter({status:true}, this.files)) { | 
|           this.changed = false; | 
|           return; | 
|         } else { | 
|           this.changed = true; | 
|         } | 
|         this.$message.success('上传成功'); | 
|         return; | 
|       } | 
|   | 
|       var forms = new FormData(); | 
|       for (let index = 0; index < this.files.length; index++) { | 
|         let file = this.files[index]; | 
|         if (file.input) { | 
|           let name = file.name.split('.'); | 
|           name = name[name.length - 1].toLocaleLowerCase(); | 
|           let isImg = this.imgTypes.indexOf(name) != -1; | 
|           if (isImg && (name == 'jpg' || name == 'jpeg')) { | 
|             //>200KB的开启压缩 | 
|             if (isImg && file.size / 1024 / 1024 > 0.2) { | 
|               console.log('压缩前' + file.size); | 
|               file = await this.compressImg(file); | 
|               file.compress = true; | 
|               this.files[index] = file; | 
|               this.files[index].input = true; | 
|               console.log('压缩后' + file.size); | 
|             } | 
|           } | 
|           forms.append('fileInput', file, file.name); | 
|         } | 
|       } | 
|       // forms.append("fileInput", this.files); | 
|   | 
|       this.http | 
|         .post(this.url+paramText, forms, this.autoUpload ? '正在上传文件' : '') | 
|         .then( | 
|           (x) => { | 
|             // this.$refs.uploadFile.clearFiles(); | 
|             this.loadingStatus = false; | 
|             this.loadText = '上传文件'; | 
|             if (!this.uploadAfter(x, this.files)) { | 
|               this.changed = false; | 
|               return; | 
|             } else { | 
|               this.changed = true; | 
|             } | 
|             this.$message.success(x.message); | 
|             this.changed = x.status; | 
|             if (!x.status) { | 
|               // this.files = null; | 
|               return; | 
|             } | 
|             //单选清除以前的数据 | 
|             //  if (!this.multiple) { | 
|             this.fileInfo.splice(0); | 
|             // } | 
|             let _files = this.files.map((file) => { | 
|               return { | 
|                 name: file.name, | 
|                 path: file.path || x.data + file.name | 
|               }; | 
|             }); | 
|             this.fileInfo.push(..._files); | 
|             //2021.09.25修复文件上传后不能同时下载的问题 | 
|             this.files = _files; | 
|           }, | 
|           (error) => { | 
|             this.loadText = '上传文件'; | 
|             this.loadingStatus = false; | 
|           } | 
|         ); | 
|     }, | 
|     format(file, checkFileType) { | 
|       const format = | 
|         file.name | 
|           .split('.') | 
|           .pop() | 
|           .toLocaleLowerCase() || ''; | 
|       let fileIcon = 'el-icon-document'; | 
|       if (this.fileTypes.length > 0 && checkFileType != undefined) { | 
|         if (this.fileTypes.indexOf(format) != -1) { | 
|           return true; | 
|         } | 
|         return false; | 
|       } | 
|       if ( | 
|         checkFileType && | 
|         !(checkFileType instanceof Array) && | 
|         checkFileType != 'img' && | 
|         checkFileType != 'excel' | 
|       ) { | 
|         if (checkFileType.indexOf(format) > -1) { | 
|           return true; | 
|         } else { | 
|           return false; | 
|         } | 
|       } | 
|   | 
|       if (checkFileType == 'img' || this.imgTypes.indexOf(format) > -1) { | 
|         if (checkFileType == 'img') { | 
|           if (this.imgTypes.indexOf(format) > -1) { | 
|             return true; | 
|           } else { | 
|             return false; | 
|           } | 
|         } | 
|         fileIcon = 'el-icon-picture-outline'; | 
|       } | 
|       if ( | 
|         ['mp4', 'm3u8', 'rmvb', 'avi', 'swf', '3gp', 'mkv', 'flv'].indexOf( | 
|           format | 
|         ) > -1 | 
|       ) { | 
|         fileIcon = 'el-icon-document'; | 
|       } | 
|       if (['mp3', 'wav', 'wma', 'ogg', 'aac', 'flac'].indexOf(format) > -1) { | 
|         fileIcon = 'el-icon-document'; | 
|       } | 
|       if (['doc', 'txt', 'docx', 'pages', 'epub', 'pdf'].indexOf(format) > -1) { | 
|         fileIcon = 'el-icon-document'; | 
|       } | 
|       if ( | 
|         checkFileType == 'excel' || | 
|         ['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1 | 
|       ) { | 
|         if (checkFileType == 'excel') { | 
|           if (['numbers', 'csv', 'xls', 'xlsx'].indexOf(format) > -1) { | 
|             return true; | 
|           } else { | 
|             return false; | 
|           } | 
|         } | 
|         fileIcon = 'el-icon-document'; | 
|       } | 
|       return fileIcon; | 
|     }, | 
|     beforeUpload() {}, | 
|     checkFile(inputFiles) { | 
|       const files = this.files; | 
|   | 
|       if ( | 
|         this.multiple && | 
|         files.length + (inputFiles || []).length > (this.maxFile || 5) | 
|       ) { | 
|         this.$message.error( | 
|           '最多只能选【' + | 
|             (this.maxFile || 5) + | 
|             '】' + | 
|             (this.img ? '张图片' : '个文件') + | 
|             '' | 
|         ); | 
|         return false; | 
|       } | 
|       if (!inputFiles) { | 
|         inputFiles = this.files.filter((x) => { | 
|           return x.input; | 
|         }); | 
|       } | 
|       let names = []; | 
|       for (let index = 0; index < inputFiles.length; index++) { | 
|         const file = inputFiles[index]; | 
|         if (names.indexOf(file.name) != -1) { | 
|           file.name = '(' + index + ')' + file.name; | 
|         } | 
|         names.push(file.name); | 
|         if (this.img && !this.format(file, 'img')) { | 
|           this.$message.error('选择的文件【' + file.name + '】只能是图片格式'); | 
|           return false; | 
|         } | 
|         if (this.excel && !this.format(file, 'excel')) { | 
|           this.$message.error('选择的文件【' + file.name + '】只能是excel文件'); | 
|           return false; | 
|         } | 
|         if ( | 
|           this.fileTypes && | 
|           this.fileTypes.length > 0 && | 
|           !this.format(file, this.fileTypes) | 
|         ) { | 
|           this.$message.error( | 
|             '选择的文件【' + | 
|               file.name + | 
|               '】只能是【' + | 
|               this.fileTypes.join(',') + | 
|               '】格式' | 
|           ); | 
|           return false; | 
|         } | 
|         if (file.size > (this.maxSize || 50) * 1024 * 1024) { | 
|           this.$message.error( | 
|             '选择的文件【' + | 
|               file.name + | 
|               '】不能超过:' + | 
|               (this.maxSize || 50) + | 
|               'M' | 
|           ); | 
|           return false; | 
|         } | 
|       } | 
|       return true; | 
|     } | 
|   } | 
| }; | 
| </script> | 
| <style lang="less" scoped> | 
| .upload-list { | 
|   padding-left: 0; | 
|   list-style: none; | 
|   .list-file { | 
|     line-height: 20px; | 
|     padding: 4px; | 
|     color: #515a6e; | 
|     border-radius: 4px; | 
|     transition: background-color 0.2s ease-in-out; | 
|     overflow: hidden; | 
|     position: relative; | 
|   | 
|     font-size: 13px; | 
|     .file-remove { | 
|       display: none; | 
|       right: 0; | 
|       //  margin-left: 50px; | 
|       color: #0e9286; | 
|     } | 
|   } | 
|   .list-file:hover { | 
|     cursor: pointer; | 
|     .file-remove { | 
|       display: initial; | 
|     } | 
|     color: #2d8cf0; | 
|   } | 
| } | 
| .upload-container { | 
|   display: inline-block; | 
|   width: 100%; | 
|   // padding: 10px; | 
|   | 
|   // min-height: 250px; | 
|   border-radius: 5px; | 
|   .alert { | 
|     margin-top: 43px; | 
|   } | 
|   .button-group > * { | 
|     float: left; | 
|     margin-right: 10px; | 
|   } | 
|   .file-info > span { | 
|     margin-right: 20px; | 
|   } | 
| } | 
| .upload-img { | 
|   display: inline-block; | 
|   .img-item:hover .operation { | 
|     display: block; | 
|   } | 
|   .img-item, | 
|   .img-selector { | 
|     position: relative; | 
|     cursor: pointer; | 
|     margin: 0 10px 10px 0; | 
|     float: left; | 
|     width: 65px; | 
|     height: 65px; | 
|     border: 1px solid #c7c7c7; | 
|     overflow: hidden; | 
|     border-radius: 5px; | 
|     box-sizing: content-box; | 
|     img { | 
|       margin: 0; | 
|       padding: 0; | 
|       width: 100%; | 
|       height: 100%; | 
|       object-fit: cover; | 
|     } | 
|   | 
|     .operation { | 
|       display: none; | 
|       position: absolute; | 
|       top: 0; | 
|       bottom: 0; | 
|       left: 0; | 
|       right: 0; | 
|       .action { | 
|         opacity: 0.6; | 
|         text-align: center; | 
|         background: #151515de; | 
|         font-size: 14px; | 
|         position: absolute; | 
|         z-index: 90; | 
|         width: 100%; | 
|         bottom: 3px; | 
|         bottom: 0; | 
|         color: #ded5d5; | 
|         padding-right: 7px; | 
|         padding-bottom: 3px; | 
|         line-height: 20px; | 
|         .el-icon-view { | 
|           margin: 0 10px; | 
|         } | 
|       } | 
|       .mask { | 
|         opacity: 0.6; | 
|         background: #9e9e9e; | 
|         top: 0; | 
|         width: 100%; | 
|         height: 100%; | 
|         position: absolute; | 
|       } | 
|     } | 
|   } | 
|   .img-selector { | 
|     font-size: 50px; | 
|     text-align: center; | 
|     i { | 
|       position: relative; | 
|       font-size: 40px; | 
|       color: #6f6f6f; | 
|     } | 
|   } | 
|   | 
|   .auto-selector { | 
|     .selector { | 
|       line-height: 64px; | 
|     } | 
|   } | 
|   .selector { | 
|     color: #a0a0a0; | 
|   } | 
|   .submit-selector { | 
|     .s-btn { | 
|       line-height: 22px; | 
|       font-size: 12px; | 
|       top: -6px; | 
|       // padding: 2px; | 
|       position: relative; | 
|       background: #2db7f5; | 
|       color: white; | 
|     } | 
|     .selector { | 
|       line-height: 50px; | 
|     } | 
|     .readonly { | 
|       background: #8c8c8c; | 
|     } | 
|   } | 
| } | 
| .big-model { | 
|   width: 100%; | 
|   height: 100%; | 
|   position: relative; | 
|   .m-img { | 
|   } | 
|   .mask { | 
|     position: absolute; | 
|     opacity: 0.6; | 
|     background: #eee; | 
|     top: 0; | 
|     width: 100%; | 
|     height: 100%; | 
|     position: absolute; | 
|   } | 
| } | 
|   | 
| .auto-upload { | 
|   z-index: 9999999; | 
|   width: 100%; | 
|   height: 100%; | 
|   position: fixed; | 
|   top: 0; | 
|   left: 0; | 
|   .j-content { | 
|     text-align: center; | 
|     font-size: 17px; | 
|     top: 40%; | 
|     position: absolute; | 
|     z-index: 999; | 
|     left: 0; | 
|     right: 0; | 
|     width: 240px; | 
|     /* height: 100%; */ | 
|     margin: auto; | 
|     background: white; | 
|     /* bottom: 30px; */ | 
|     line-height: 50px; | 
|     border-radius: 6px; | 
|     border: 1px solid #d2d2d2; | 
|   } | 
|   .mask { | 
|     cursor: pointer; | 
|     opacity: 0.6; | 
|     width: 100%; | 
|     height: 100%; | 
|     background: #101010; | 
|   } | 
| } | 
| </style> |