<template>
<view class="box">
<!-- 实拍视频 -->
<view>
<view class="fileTitle">实拍视频</view>
<view v-if="videoSrc == ''" class="file videoFile" @tap="chooseVideo">
<image style="width:112upx;height:98upx;" :src="app + '/xj.png'" mode=""></image>
</view>
<view v-else class="file videoFile video_Box">
<video :src="videoSrc" controls></video>
<view class="closeA" @tap="deleteVideo">×</view>
</view>
</view>
<!-- 实拍照片 -->
<view>
<view class="fileTitle">实拍照片</view>
<view class="photoBox" name="photoBox">
<canvas style="border: 1px solid green;position: absolute;left: -5000px;" :style="{'width':w,'height': h}" canvas-id="firstCanvas" ref="mycanvas"></canvas>
<block v-for="(item, index) in photosSrc" :key="index">
<view class="file imgFile">
<image class="photo" :src="item"></image>
<view class="close" @tap="deletePhoto(index)">×</view>
</view>
</block>
<view v-if="photosSrc.length < 6" class="file imgFile" @tap="chooseImage">
<image style="width: 112upx;height: 98upx;" :src="app + '/xc.png'" mode=""></image>
</view>
</view>
</view>
<!-- 提交按钮 -->
<view class="surereply" @tap='tiJIao'>
提交
</view>
</view>
</template>
<script>
let baseUrl=getApp().globalData.baseUrl;//域名
export default {
data() {
return {
app: getApp().globalData.peiImg,//图片
videoFile: '',
videoSrc: '', // 视频资源路径
photosSrc: [], //照片的路径
pic_tempFilePath: [], //上转图片的数组
video_tempFilePath: '', //上传视频的地址
file: '',
thumbTempFilePath: '', // 视频缩略图临时地址
tempFilePath: [], // 视频资源临时地址
shuiyinpath: '', // 带水印的视频缩略图
w: '',
h: '',
mobile1_wx:1,
imageLists:[],
params:'',/* 钓场id */
optionName:''/* 钓场name */
};
},
onLoad(option) {
console.log('235446554464',option)
this.params=option.id;
this.optionName=option.name;
},
methods:{
// 选择视频 并上传
chooseVideo() {
var that = this;
uni.chooseVideo({
count: 1, //选择多少个视频
sourceType: ['album', 'camera'], //视频来源相册和相机都可以
maxDuration: 30, //相机拍摄最大时长为30S
camera: 'back', //默认摄像头是后置摄像头
success: res => {
console.log('打印视频');
console.log(res);
console.log(res.tempFilePath);
this.videoSrc=res.tempFilePath;
this.video_tempFilePath = res.tempFilePath;
uni.uploadFile({
url:baseUrl+'/api/place/uploadFile',
filePath:res.tempFilePath,
name:'file',
formData:{
token:uni.getStorageSync('userInfo').token,
type:1,
file:res.tempFilePath,
},
header:{"Content-Type":"multipart/form-data"},
success:res=>{
//console.log('上',res.data)
let data = JSON.parse(res.data)
that.video_tempFilePath=data.data.file_url
}
})
this.pic_tempFilePath = res.tempFilePath;
if (res.duration > '300') {
uni.showToast({
title: '视频不得超过5分钟,请重新选择',
icon: 'none',
duration: 1500
});
} else if (res.size > '10485760') {
uni.showToast({
title: '视频时长不得超过10MB,请重新选择',
icon: 'none',
duration: 1500
});
}
},
fail: res => {
uni.showModal({
content: '视频格式不正确,请重新选择',
showCancel: false
});
}
});
},
// 选择照片
chooseImage() {
let that = this;
uni.chooseImage({
count: 6, //从相册中都可选择的图片个数
sizeType: ['original', 'compressed'], //选择图片的大小
sourceType: ['album', 'camera'], //选择图片的来源
success: res => {
//图片数组
let tempFilePath = res.tempFilePaths;
let num = 0;
let inter = setInterval(()=>{
that.setimg(tempFilePath[num]);
num++;
if(num==tempFilePath.length){
num= 0 ;
clearInterval(inter);
}
},500)
}
});
},
//获取图片信息
setimg(e){
let date = "--晒渔--";
let that = this;
let ctx = uni.createCanvasContext('firstCanvas',this);
uni.getImageInfo({
src:e,
success: (res) => {
that.w = res.width/2+'px';
that.h = res.height/2+'px';
//初始化画布
ctx.fillRect(0, 0, that.w, that.h);
// //将图片src放到cancas内,宽高为图片大小
ctx.drawImage(res.path,0,0,res.width/2,res.height/2);
ctx.rotate(45 * Math.PI / 180);
//对斜对角线以左部分进行文字的填充
for (let j = 1; j < 10; j++) { //用for循环达到重复输出文字的效果,这个for循环代表纵向循环
ctx.beginPath();
ctx.setFontSize(20);
ctx.setFillStyle("rgba(169,169,169,.6)");
ctx.fillText(date, 0, 50 * j);
for (let i = 1; i < 10; i++) { //这个for循环代表横向循环,
ctx.beginPath();
ctx.setFontSize(20);
ctx.setFillStyle("rgba(169,169,169,.6)");
ctx.fillText(date, 80 * i, 50 * j);
}
} //两个for循环的配合,使得文字充满斜对角线的左下部分
// 对斜对角线以右部分进行文字的填充逻辑同上
for (let j = 0; j < 10; j++) {
ctx.beginPath();
ctx.setFontSize(20);
ctx.setFillStyle("rgba(169,169,169,.6)");
ctx.fillText(date, 0, -50 * j);
for (let i = 1; i < 10; i++) {
ctx.beginPath();
ctx.setFontSize(20);
ctx.setFillStyle("rgba(169,169,169,.6)");
ctx.fillText(date, 80 * i, -50 * j);
}
}
ctx.rotate(-45 * Math.PI / 180);
ctx.draw(false, () => {
uni.canvasToTempFilePath({ //将画布中内容转成图片,即水印与图片合成
canvasId: 'firstCanvas',
success: (res) => {
that.photosSrc.push(res.tempFilePath);
/* 把所有的图片给了后台 重点*/
uni.uploadFile({
url:baseUrl+'/api/place/uploadFile',
filePath:res.tempFilePath,
name:'file',
formData:{
token:uni.getStorageSync('userInfo').token,
type:1,
file:res.tempFilePath
},
header:{"Content-Type":"multipart/form-data"},
success:res=>{
let data = JSON.parse(res.data)
that.imageLists.push(data.data.file_url)
}
})
if (that.photosSrc.length > 6) {
that.photosSrc = that.photosSrc.slice(0, 6);
uni.showToast({
title: '照片最多上传6张',
icon: 'none',
duration: 1500
});
} else {
}
}
})
})
}
})
},
//删除照片
deletePhoto(index) {
this.photosSrc.splice(index, 1);
this.thumbTempFilePath = '';
},
/* 删除视频 */
deleteVideo(){
this.videoSrc=''
},
tiJIao(){
if(this.videoSrc==''){
uni.showToast({
icon: 'none',
title: '请上传视频',
duration: 1500
});
}else if (this.photosSrc.length == 0) {
uni.showToast({
icon: 'none',
title: '实拍照片最少上传一张',
duration: 1500
});
} else {
/* 调接口 */
let url = '/api/place/placeAddVedio';
let data = {
token:uni.getStorageSync('userInfo').token,
pid:this.params,
title:this.optionName,
vedioUrl: this.video_tempFilePath,//视频路径
imgUrl:this.imageLists.join(","),// 多图片
};
this.$request.post(url, data).then(res => {
if(res.code==1){
uni.showToast({
title: '提交成功',
icon:'none'
});
setTimeout(function () {
// uni.redirectTo({
// url:'./fishingPlaceDetail'
// })
uni.navigateBack({
delta: 1
})
}, 2000);
}else if(res.code==100){
uni.showToast({
title: '请购买上传次数',
icon:'none'
});
}
});
}
}
}
}
</script>
<style lang="scss">
.box{
width: 95vw;
margin: 0 auto;
}
/* 按钮 */
.surereply {
background: #fd1441;
box-shadow: 8upx 13upx 20upx 0px rgba(0, 0, 0, 0.1);
line-height: 75upx;
border-radius: 10upx;
color: #fff;
text-align: center;
font-size: 34upx;
margin: 40upx auto;
}
.photoBox {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.photo {
width: 300upx;
height: 300upx;
}
.video_Box{
position: relative;
}
.closeA{
width: 45upx;
height: 45upx;
background-color: rgba(0, 0, 0, 0.7);
border-radius: 50%;
font-size: 36upx;
text-align: center;
line-height: 50upx;
color: #fff;
position: absolute;
top: -17rpx;
right: -8rpx;
z-index: 666;
}
.fileTitle {
height: 90upx;
line-height: 90upx;
font-size: 32upx;
}
.file {
width: 220upx;
height: 220upx;
border: solid 1px #ccc;
border-radius: 10upx;
display: flex;
font-size: 50px;
align-items: center;
justify-content: center;
color: #ccc;
image {
width: 100%;
height: 100%;
}
}
video {
width: 220upx;
height: 220upx;
}
.imgFile {
width: 220upx;
height: 220upx;
margin-bottom: 30upx;
position: relative;
}
.close {
width: 45upx;
height: 45upx;
background-color: rgba(0, 0, 0, 0.7);
border-radius: 50%;
font-size: 36upx;
text-align: center;
line-height: 50upx;
color: #fff;
position: absolute;
top: 0upx;
right: 5upx;
z-index: 66;
}
</style>