| <template> | 
|     <div class="file"> | 
|         <div class="file_list"> | 
|             <div class="file_list_item" :style="{width: width, height: height}" v-for="(item, index) in list" :key="index"> | 
|                 <div class="dele" @click="deleItem(index)"> | 
|                     <i class="el-icon-close"></i> | 
|                 </div> | 
|                 <img :src="item.url" v-if="fileType(item.url) === 'img'" /> | 
|                 <video controls autoplay :src="item.url" v-else></video> | 
|             </div> | 
|           <div class="file_list_item" :style="{width: width, height: height, cursor: 'pointer'}" @click="$refs.file.click()"> | 
|             <i class="el-icon-plus" style="font-size: 18px;color: #8c939d;text-align: center;margin-top: 10px"></i> | 
|             <i style="font-size: 12px;color: #8c939d;font-style: normal;text-align: center">{{tips}}</i> | 
|           </div> | 
|           <input type="file" ref="file" :accept="accept" @change="getFile" /> | 
|         </div> | 
|     </div> | 
| </template> | 
|   | 
| <script> | 
| import axios from 'axios' | 
| export default { | 
|   props: { | 
|     width: { | 
|       type: String, | 
|       default: '90px' | 
|     }, | 
|     height: { | 
|       type: String, | 
|       default: '90px' | 
|     }, | 
|     list: { | 
|       type: Array, | 
|       default: [] | 
|     }, | 
|     tips: { | 
|       type: String, | 
|       default: '0' | 
|     }, | 
|     accept: { | 
|       type: String, | 
|       default: '' | 
|     }, | 
|     folder: { | 
|       type: String, | 
|       default: '' | 
|     } | 
|   }, | 
|   data () { | 
|     return { | 
|       uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/upload' | 
|     } | 
|   }, | 
|   | 
|   methods: { | 
|     fileType (url) { | 
|       if (url.indexOf('.mp4') !== -1) { | 
|         return 'video' | 
|       } else { | 
|         return 'img' | 
|       } | 
|     }, | 
|     getFile (e) { | 
|       if (e.target && e.target.files.length > 0) { | 
|         this.$emit('loading') | 
|         const formdate = new FormData() | 
|         formdate.append('file', e.target.files[0]) | 
|         formdate.append('folder', this.folder) | 
|         axios.post(this.uploadImgUrl, formdate) | 
|           .then(res => { | 
|             this.$emit('success', res.data.data) | 
|             console.log(res.data.data) | 
|           }) | 
|           .catch(e => { | 
|           }) | 
|           .finally(() => { | 
|             this.$refs.file.value = null | 
|           }) | 
|       } | 
|     }, | 
|     deleItem (index) { | 
|       this.$emit('dele', index) | 
|     } | 
|   } | 
| } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|     .file { | 
|         /*width: 100%;*/ | 
|         /*height: 90px;*/ | 
|         margin: 10px 0; | 
|         input { | 
|             opacity: 0; | 
|         } | 
|         .file_list { | 
|             width: 100%; | 
|             height: 100%; | 
|             display: flex; | 
|             align-items: center; | 
|             flex-wrap: wrap; | 
|             .file_list_item { | 
|                 display: flex; | 
|                 flex-direction: column; | 
|                 align-items: center; | 
|                 justify-content: center; | 
|                 overflow: hidden; | 
|                 border-radius: 5px; | 
|                 border: 1px solid #d5d5d5; | 
|                 margin: 5px; | 
|                 position: relative; | 
|                 &:first-child { | 
|                     margin: 0 !important; | 
|                 } | 
|                 .dele { | 
|                     position: absolute; | 
|                     right: 0; | 
|                     top: 0; | 
|                     width: 20px; | 
|                     height: 20px; | 
|                     background: red; | 
|                     display: flex; | 
|                     align-items: center; | 
|                     justify-content: center; | 
|                     z-index: 10000; | 
|                     cursor: pointer; | 
|                     .el-icon-close { | 
|                         color: #ffffff; | 
|                         font-size: 14px; | 
|                     } | 
|                 } | 
|                 .el-icon-plus { | 
|                     font-size: 30px; | 
|                     color: black; | 
|                 } | 
|                 img { | 
|                     width: 100%; | 
|                 } | 
|                 video { | 
|                     width: 100%; | 
|                     height: 100%; | 
|                 } | 
|             } | 
|         } | 
|     } | 
| </style> |