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.

255 lines
7.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view>
<view class="evaluate">
<view class="goods_data">
<image :src="goodData.img" mode=""></image>
<view class="right">
<p class="goods_name">{{goodData.title}}</p>
<p class="goods_sku">{{goodData.goods_sku_text}}</p>
<p class="goods_price">
<text style="font-size: 24upx;">数量x{{goodData.number}}</text>
<text :style="{color:colors}">{{goodData.money}}</text>
</p>
</view>
</view>
<view class="Rate">
<p>整体评价</p>
<view class="star">
<image :src="item.img" mode="" v-for="(item,index) in stars" :key="index" @click="setStar(item,index)"></image>
</view>
</view>
<view class="pingjia_box">
<textarea placeholder="说说您的感受..." maxlength="-1" v-model="comment" />
</view>
<p class="youhui" style="border-bottom: none;">
<text class="text1">上传图片</text>
<text class="text3">(最多3张)</text>
</p>
<view class="img_box" >
<view class="img_list" v-for="(item, index) in imgUrl" :key="index">
<block v-if="item.type == 1">
<image :src="item.url" mode="" class="imgs" @click="previewImg(item.url)"></image>
<image z-index="9999" src="/static/images/search/close.png" mode="" class="close" @tap="delImg(index)"></image>
</block>
<block v-if="item.type == 2">
<video :src="item.url" :poster="item.poster" :controls="false" :show-center-play-btn="false" :show-play-btn="false" :enable-progress-gesture="false">
<cover-view class="covers"></cover-view>
<cover-image v-if="showVideo == false" class="imgs" src="/static/images/goods/bofang.png" mode="" @click="onshowVideo(item.url)"></cover-image>
<cover-image v-if="showVideo == false" src="/static/images/search/close.png" mode="" class="video_close" @tap="delImg(index)"></cover-image>
</video>
</block>
</view>
<view class="addImg"v-if="imgUrl.length < 3" @tap="onChoose">
<image src="/static/images/shexiang.png" mode=""></image>
<p>添加图片/视频</p>
</view>
</view>
</view>
<view class="btns" :style="{background:colors}" @click="submit">提交评价</view>
<!-- 预览视频弹窗APP 小程序 -->
<view class="mask" v-if="showVideo == true" @touchmove.stop.prevent="ondefault" @click="hideShow">
<view class="close">
<image src="/static/images/goods/close.png"></image>
</view>
</view>
<view class="previewvideo" v-if="showVideo == true">
<view class="videos">
<video class="nowvideos" id="nowVideo" v-if="showVideo == true" :src="videos" :autoplay="showVideo"
:show-center-play-btn="true" :show-mute-btn="true" :show-fullscreen-btn="false"></video>
</view>
</view>
<!-- 用来承载H5预览视频的 -->
<view style="position: absolute;top: -999upx;left: -999upx;">
<video ref="newVideo" id="newVideo" :src="videos"
:autoplay="showVideo"
:show-center-play-btn="false" :show-mute-btn="true" :show-fullscreen-btn="false"></video>
</view>
</view>
</template>
<script>
var app = getApp();
export default {
data() {
return {
value: 5,
showVideo:false,
isH5: false,
videos:'',
comment:'',
platform:'',
imgUrl:[],//模拟上传后从后台获得的图片和视频
goodData:{},
colors:'',
stars: [
{id: 1,types: true,img:'/static/images/home/stars.png'},
{id: 2,types: true,img:'/static/images/home/stars.png'},
{id: 3,types: true,img:'/static/images/home/stars.png'},
{id: 4,types: true,img:'/static/images/home/stars.png'},
{id: 5,types: true,img:'/static/images/home/stars.png'},
],
starNoImg:'/static/images/home/star-no.png',
starImg:'/static/images/home/stars.png',
starValue: 5
};
},
created() {
this.platform = uni.getSystemInfoSync().platform //判断当前是安卓还是ios 然后进行适配
this.newVideo = uni.createVideoContext('newVideo');
},
onLoad(options) {
let goodData = JSON.parse(options.goodData)
this.setData({
colors: app.globalData.newColor,
goodData:goodData
});
},
methods: {
delImg(index) {
//删除图片
this.imgUrl.splice(index, 1);
},
onChoose(){
uni.showActionSheet({
title:"选择上传类型",
itemList: ['图片','视频'],
success: (res) => {
console.log(res)
if(res.tapIndex == 0){
this.chooseImages()
} else {
this.chooseVideo()
}
}
})
},
chooseImages() { //上传图片
let that = this;
uni.chooseImage({
//该方法是调出选择图片的方法
count: 1, //数量限制
sizeType: ['original', 'compressed'], //可选 原图 或缩略图
success: function(res) {
//返回的值为本地的图片的链接
console.log(res);
// 这里模拟接口向imgUrl 里添加图片 后期调用接口时参照该方法
if(that.imgUrl.length >= 3){ //最多上传3张 超出了提醒
uni.showToast({
title:'最多上传3个',
icon:'none'
})
}else{ //模拟上传图片
let img = {url:'/static/images/goods/four.jpg',type: 1}
that.imgUrl.push(img)
}
}
});
},
chooseVideo(){ //上传视频
let that = this;
uni.chooseVideo({
count: 1,
sourceType: ['camera', 'album'],
success: function (res) {
console.log(res) //如果需要对视频的长度和大小做判断 在此处进行获取和处理
// 下面是模拟上传视频 ↓
if(that.imgUrl.length >= 3){ //最多上传3张 超出了提醒
uni.showToast({
title:'最多上传3个',
icon:'none'
})
}else{ //模拟上传视频
/**
* ***重点注意
* 视频的封面图因为需要做多端兼容 并且只允许是网络图片
* 所有建议是上传视频给后端之后,然后由后端对视频进行截取
* 建议截取视频的第5帧来生成图片并返回给前端
* 下面的poster是模拟后台返回的封面
*/
let video = {url:'https://fzdz.soft.haoyangsoft.com/uploads/system/videos/20200813/6c819d24ee6868aee33e150c4333329b.mp4',type: 2,poster:'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1603080909940&di=ac10c5f2c952dd1b40441bb696c55a88&imgtype=0&src=http%3A%2F%2Fn.sinaimg.cn%2Fsinacn%2Fw640h640%2F20180127%2F369b-fyqzcxh1087346.jpg'}
that.imgUrl.push(video)
}
}
});
},
setStar(item,index){ //设置评价星星
let that = this
if(item.types == false){
for(var i = 0; i<=index;i++){
console.log(that.stars[i].types)
that.stars[i].types = true
that.stars[i].img = that.starImg
}
}else{
for(var i = index+1; i<that.stars.length;i++){
console.log(that.stars[i].types)
that.stars[i].types = false
that.stars[i].img = that.starNoImg
}
}
this.$forceUpdate() //
let value = this.stars.filter((e)=>{
return e.types == true
})
this.starValue = value.length
},
previewImg(url){ //预览图片
let arr = []
arr[0] = url
uni.previewImage({
urls:arr
})
},
onshowVideo(video) { //预览视频
this.videos = video
// #ifndef H5
this.showVideo = true
// #endif
// #ifdef H5
// h5 在真机上测试
if(this.platform == 'android'){ //判断是安卓还是ios来对视频做适配
this.isH5 = true
this.newVideo.play()
}else{
this.showVideo = true
}
// #endif
},
hideShow(){ //隐藏预览视频
this.showVideo = false
},
submit(){ //提交时需要对存储图片和视频的数组进行操作 把视频和图片分离出来
let imgs = this.imgUrl.filter((e)=>{ //分离图片
return e.type == 1
})
let videos = this.imgUrl.filter((e)=>{
return e.type == 2
})
uni.showToast({
title:'提交成功'
})
setTimeout(()=>{
uni.navigateBack({
delta:2
})
},1500)
},
ondefault(){
// 抛弃的方法
}
},
onShow() {
}
};
</script>
<style lang="scss" scoped>
@import "./evaluate.scss";
</style>
<style>
page{
background-color: #F8F8F8;
}
</style>