You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
5.3 KiB
238 lines
5.3 KiB
3 years ago
|
<template>
|
||
|
<view>
|
||
|
<!-- 上传文件 begin -->
|
||
|
<view class="display_flex">
|
||
|
<view class="img_list" v-for="(item,index) in fileList" :key="index">
|
||
|
<image v-show="item.ext!=='mp4'" class="img_item" :src="item.url" @click="preview(item.url)" mode="aspectFill" v-if="item.book == 'img'"></image>
|
||
|
<video object-fit="cover" @play="videoPlay" id="myVideo" @fullscreenchange="fullscreenchange" v-if="item.ext=='mp4'" class="img_item" :src="item.url" controls></video>
|
||
|
<view :initial-time="0" play-btn-position="center" class="upload-video " @click="prePdf(item.url,item.ext)" v-else>
|
||
|
<!-- <text class="iconfont iconexcel" style="color:#FF6969;font-size:88rpx"></text> -->
|
||
|
<image v-show="item.ext == 'pdf'" src="../../static/img/PDF.png" mode="aspectFill" style="width:88rpx;height: 88rpx;"></image>
|
||
|
<image v-show="item.ext == 'doc' || item.ext == 'docx'" src="../../static/img/word.png" mode="aspectFill" style="width:88rpx;height: 88rpx;"></image>
|
||
|
<image v-show="item.ext == 'xlsx' || item.ext == 'xls'" src="../../static/img/excel.png" mode="aspectFill" style="width:88rpx;height: 88rpx;"></image>
|
||
|
</view>
|
||
|
<view v-if="handle" class="iconfont deleteicon iconshanchu2" @click.stop="delteFile(index)"></view>
|
||
|
</view>
|
||
|
<view v-if="handle" class="upload img_list" @click="upload('img')">
|
||
|
<view v-if="handle" class="iconfont iconziyuan" style="font-size:40rpx;"></view>
|
||
|
上传照片
|
||
|
</view>
|
||
|
<view v-if="handle" class="upload img_list" @click="upload('file')">
|
||
|
<view v-if="handle" class="iconfont iconshangchuanwenjian fileicon"></view>
|
||
|
上传文件
|
||
|
</view>
|
||
|
</view>
|
||
|
<!-- 上传文件 end -->
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
import {
|
||
|
get,
|
||
|
post
|
||
|
} from '../utils/request.js'
|
||
|
import {
|
||
|
uploadImage,
|
||
|
uploadPdf
|
||
|
} from '../utils/uploadimage.js'
|
||
|
import {
|
||
|
previepdf
|
||
|
} from '../utils/openpdf.js'
|
||
|
export default {
|
||
|
name: 'upload',
|
||
|
model: {
|
||
|
prop: "showPop",
|
||
|
event: "change"
|
||
|
},
|
||
|
props: {
|
||
|
limitnumber: {
|
||
|
type: Number,
|
||
|
default: 100
|
||
|
},
|
||
|
// 展示的文件
|
||
|
files:{
|
||
|
type:Array,
|
||
|
default:[]
|
||
|
},
|
||
|
// 是否可操作
|
||
|
handle:{
|
||
|
type:Boolean,
|
||
|
default:true
|
||
|
}
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
fileList: []
|
||
|
}
|
||
|
},
|
||
|
watch:{
|
||
|
files(val){
|
||
|
if(val&&val.length!==0){
|
||
|
this.fileList = val
|
||
|
// 替傻屌后端擦屁股,返回特么的ul和“”
|
||
|
if(val[0].url==''||val[0].url=='ul'){
|
||
|
this.fileList.splice(0,1)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
|
||
|
methods: {
|
||
|
/**
|
||
|
* @description 上传文件
|
||
|
*/
|
||
|
upload(book) {
|
||
|
if (this.fileList.length == this.$props.limitnumber) {
|
||
|
uni.showToast({
|
||
|
title: '文件上传已上限',
|
||
|
icon: 'none'
|
||
|
})
|
||
|
return
|
||
|
}
|
||
|
if (book == 'img') {
|
||
|
uploadImage().then(res => {
|
||
|
this.fileList.push({
|
||
|
url: res.imageurl,
|
||
|
ext: res.ext,
|
||
|
book: 'img'
|
||
|
})
|
||
|
this.$emit('upload',this.fileList)
|
||
|
})
|
||
|
} else {
|
||
|
uploadPdf().then(res => {
|
||
|
this.fileList.push({
|
||
|
url: res.pdfurl,
|
||
|
ext: res.ext,
|
||
|
book: 'file'
|
||
|
})
|
||
|
this.$emit('upload',this.fileList)
|
||
|
})
|
||
|
}
|
||
|
},
|
||
|
// 上传视频
|
||
|
test() {
|
||
|
var self = this;
|
||
|
uni.chooseMedia({
|
||
|
count: 9,
|
||
|
mediaType: ['image','video'],
|
||
|
sourceType: ['album', 'camera'],
|
||
|
maxDuration: 30,
|
||
|
camera: 'back',
|
||
|
success(res) {
|
||
|
console.log(res.tempFilest,res,'选择图片或者视频')
|
||
|
}
|
||
|
})
|
||
|
},
|
||
|
videoPlay(e){
|
||
|
console.log(e,'播放触发')
|
||
|
this.videoContext = uni.createVideoContext('myVideo',this)
|
||
|
this.videoContext.requestFullScreen();
|
||
|
},
|
||
|
// 退出全屏播放时关闭生成的全屏视频
|
||
|
fullscreenchange (e){
|
||
|
console.log(e,'看下退出')
|
||
|
if(!e.detail.fullScreen){
|
||
|
this.videoContext.stop()
|
||
|
e.timeStamp = 0 // 时间错归零
|
||
|
}
|
||
|
},
|
||
|
/**
|
||
|
* @description 预览图片
|
||
|
*/
|
||
|
preview(url) {
|
||
|
uni.previewImage({
|
||
|
urls: [url],
|
||
|
current: url
|
||
|
})
|
||
|
},
|
||
|
/**
|
||
|
* @description 预览pdf
|
||
|
*/
|
||
|
|
||
|
prePdf(e,ext) {
|
||
|
previepdf(e,ext)
|
||
|
},
|
||
|
/**
|
||
|
* @description 删除上传的文件
|
||
|
*/
|
||
|
delteFile(index) {
|
||
|
this.fileList.splice(index, 1)
|
||
|
this.$emit('upload',this.fileList)
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style>
|
||
|
@import "./pretty-uploadFile.css";
|
||
|
|
||
|
.display_flex {
|
||
|
display: flex;
|
||
|
flex-wrap: wrap;
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
.fileicon {
|
||
|
font-size: 50rpx;
|
||
|
}
|
||
|
|
||
|
/* 上传图片 */
|
||
|
.img_list {
|
||
|
width: 140rpx;
|
||
|
height: 140rpx;
|
||
|
border-radius: 10rpx;
|
||
|
margin: 20rpx 10rpx;
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
.img>image {
|
||
|
width: 140rpx;
|
||
|
height: 140rpx;
|
||
|
border-radius: 10rpx;
|
||
|
}
|
||
|
|
||
|
.img_item {
|
||
|
width: 140rpx;
|
||
|
height: 140rpx;
|
||
|
border-radius: 10rpx;
|
||
|
}
|
||
|
|
||
|
.upload {
|
||
|
height: 140rpx;
|
||
|
width: 140rpx;
|
||
|
background-color: #f7f7f7;
|
||
|
border: 2rpx dashed rgb(224, 223, 223);
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
font-size: 28rpx;
|
||
|
color: #aaa;
|
||
|
word-break: break-all;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
.upload-video {
|
||
|
height: 140rpx;
|
||
|
width: 140rpx;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
font-size: 28rpx;
|
||
|
color: #aaa;
|
||
|
word-break: break-all;
|
||
|
overflow: hidden;
|
||
|
}
|
||
|
|
||
|
.deleteicon {
|
||
|
position: absolute;
|
||
|
font-size: 40rpx;
|
||
|
color: #F93313;
|
||
|
top: -20rpx;
|
||
|
right: -12rpx;
|
||
|
background-color: #fff;
|
||
|
border-radius: 50%;
|
||
|
z-index: 999;
|
||
|
}
|
||
|
</style>
|