New file |
| | |
| | | <template> |
| | | <div> |
| | | <!-- accept="video/mp4" --> |
| | | <el-upload |
| | | ref="refUploadFile" |
| | | action="#" |
| | | :before-upload="beforeUploadFile" |
| | | :limit="1" |
| | | :accept="accept" |
| | | :file-list="uploadFiles" |
| | | :on-change="addUploadImg" |
| | | :on-remove="delUploadImg" |
| | | :http-request="reqUploadFile" |
| | | style="width: 200px" |
| | | > |
| | | <el-button style="display: block" :disabled="uploadFiles&&uploadFiles.length>0" class="mb8" type="primary" size="small" icon="el-icon-plus">上传文件</el-button> |
| | | <div @click.stop> |
| | | <!-- 视频 --> |
| | | <video |
| | | v-if="type===0&&uploadFiles.length" |
| | | class="com-up-video" |
| | | :src="uploadFiles[0].url" |
| | | controls="controls" |
| | | >您的浏览器不支持视频播放</video> |
| | | <!-- 音频 --> |
| | | <audio |
| | | v-if="type===1&&uploadFiles.length" |
| | | :src="uploadFiles[0].url" |
| | | style="width: 230px;height: 40px;" |
| | | controls="controls" |
| | | /> |
| | | <!-- 图片 --> |
| | | <el-image |
| | | v-if="type===2&&uploadFiles.length" |
| | | class="com-up-video" |
| | | :src="uploadFiles[0].url" |
| | | fit="contain" |
| | | :preview-src-list="[uploadFiles[0].url]" |
| | | /> |
| | | </div> |
| | | </el-upload> |
| | | |
| | | <!-- upload放大图片 --> |
| | | <el-dialog :visible.sync="uploadPreviewVisible" append-to-body style="text-align:center"> |
| | | <img style="max-width:100%" :src="uploadPreviewUrl" alt=""> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import mixin_upload from '@/mixins/upload.js' // 通用上传文件预览 |
| | | export default { |
| | | mixins: [mixin_upload], |
| | | model: { |
| | | prop: 'uploadFiles', |
| | | event: 'change' |
| | | }, |
| | | props: { |
| | | uploadFiles: { |
| | | type: Array, |
| | | default: () => { |
| | | return [] |
| | | } |
| | | }, |
| | | // 0视频1音频2图片 |
| | | type: { |
| | | type: Number, |
| | | default: 0 |
| | | } |
| | | |
| | | }, |
| | | |
| | | data() { |
| | | return { |
| | | callback: null, |
| | | isCanAdd: true, |
| | | accept: 'video/mp4' |
| | | } |
| | | }, |
| | | watch: { |
| | | type(type) { |
| | | if (this.type === 0) this.accept = 'video/mp4' |
| | | if (this.type === 1) this.accept = 'audio/mp3,audio/mpeg' |
| | | if (this.type === 2) this.accept = 'image/jpeg,image/jpg,image/gif,image/png' |
| | | } |
| | | }, |
| | | methods: { |
| | | // 上传文件 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ |
| | | // 上传前回调 |
| | | beforeUploadFile(file) { |
| | | if (this.type === 0) this.beforeUploadVideo(file) |
| | | if (this.type === 1) this.beforeUploadAudio(file) |
| | | if (this.type === 2) this.beforeUploadImg(file) |
| | | }, |
| | | beforeUploadVideo(file) { |
| | | var fileSize = file.size / 1024 / 1024 < 50 |
| | | if (['video/mp4'].indexOf(file.type) === -1) { |
| | | this.$message.error('必须是mp4文件') |
| | | return false |
| | | } |
| | | if (!fileSize) { |
| | | this.$message.error('视频大小不能超过50MB') |
| | | return false |
| | | } |
| | | }, |
| | | beforeUploadAudio(file) { |
| | | console.log('file.type', file.type) |
| | | var fileSize = file.size / 1024 / 1024 < 50 |
| | | if (['audio/mp3'].indexOf(file.type) === -1 && ['audio/mpeg'].indexOf(file.type) === -1) { |
| | | this.$message.error('必须是mp3文件') |
| | | return false |
| | | } |
| | | if (!fileSize) { |
| | | this.$message.error('音频大小不能超过50MB') |
| | | return false |
| | | } |
| | | }, |
| | | beforeUploadImg(file) { |
| | | const isImg = file.type.indexOf('image/') > -1 |
| | | const isTooLarge = file.size / 1024 / 1024 > 4 |
| | | if (!isImg) { |
| | | this.$message.error('必须是选择图片文件') |
| | | return false |
| | | } else if (isTooLarge) { |
| | | this.$message.error('请勿上传大于4MB的图片') |
| | | return false |
| | | } |
| | | }, |
| | | // 增加文件 |
| | | addUploadImg(file, fileList) { |
| | | this.$emit('change', fileList) |
| | | console.log(fileList) |
| | | }, |
| | | // 删除文件 |
| | | delUploadImg(file, fileList) { |
| | | this.$emit('change', fileList) |
| | | }, |
| | | |
| | | // 上传文件 uploadType 0图片1视频2音频 |
| | | reqUploadFile(res) { |
| | | var uploadType = 0 |
| | | if (this.type === 0) uploadType = 1 |
| | | if (this.type === 1) uploadType = 2 |
| | | if (this.type === 2) uploadType = 0 |
| | | const file = res.file |
| | | const formData = new FormData() |
| | | formData.append('file', file) |
| | | this.postFN({ |
| | | url: 'admin/image/upload?type=' + uploadType, |
| | | header: { 'Content-Type': 'multipart/form-data' }, |
| | | params: formData, |
| | | mockData: { |
| | | code: 100, |
| | | msg: '', |
| | | data: { |
| | | // path: 'https://music.163.com/song/media/outer/url?id=1805088448.mp3' |
| | | path: 'https://www.w3school.com.cn/i/movie.mp4' |
| | | } |
| | | } |
| | | }, (inf) => { |
| | | // 替换掉未上传的图片 |
| | | this.$emit('change', [{ name: '素材', url: inf.path, status: 'success' }]) |
| | | |
| | | console.log('上传文件成功且结束') |
| | | |
| | | // 提交 |
| | | // this.$set(this.dialogData, 'imgUrl', inf.imgUrl) |
| | | this.callback && this.callback(inf.path) |
| | | }) |
| | | } |
| | | // 上传文件 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .el-upload-list__item{ |
| | | transition: none; |
| | | } |
| | | </style> |