| 对比新文件 | 
 |  |  | 
 |  |  | <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 + '/web/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> |