H5端齐采药项目,uniapp框架
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.
 
 
 
 
 

479 lines
11 KiB

<template>
<view class="video_wrapper">
<view class="videoCate"
:style="{top:statusBarHeight +'px',height:statusBarHeight +'px',lineHeight:statusBarHeight +'px'}">
<u-tabs :list="videoCateList" :activeStyle="{
color: '#fff',
fontWeight: 'bold',
transform: 'scale(1.05)'
}" :inactiveStyle="{
color: '#fff',
transform: 'scale(1)'
}" @click="clickTabItem" keyName="cate_name">
<view slot="right" style="padding-left: 4px;" @tap="search()">
<u-icon name="search" size="24" color="#fff"></u-icon>
</view>
</u-tabs>
</view>
<view class="cashOutBtn" @click.stop="goCashOut">
提现
</view>
<swiper circular vertical duration="200" @click.stop="maskTouchend($event,changeIndex)" @change="changeSwiper"
:style="{height: screenHeight - statusBarHeight +'px'}">
<block v-for="(item,index) in videoList" :key="index">
<swiper-item>
<!-- <image :src="item.cover" mode="aspectFill" style="width: 100%;height: 100%;"></image> -->
<ls-dom-video :ref="'DomVideo'+index" v-if="index==changeIndex" :src="item.video" :autoplay="true"
:controls="false" @ended="endedVideo" @listener="listener"></ls-dom-video>
<view class="goodsDetail" v-if="goodsInfo" @click.stop="goGoodsDetail(goodsInfo)">
<image class="cover" :src="goodsInfo.goods_image_arr[0]" mode="aspectFit"></image>
<view class="infoBox">
<view class="title">
{{goodsInfo.goods_name}}
</view>
<view class="skuBox">
<view class="price">
¥{{goodsInfo.price}}
</view>
<view class="specName">
/ {{goodsInfo.unit}}
</view>
</view>
</view>
</view>
</swiper-item>
</block>
</swiper>
<!-- 底部tabBar -->
<view id="tab-bar"><diy-bottom-nav></diy-bottom-nav></view>
</view>
</template>
<script>
export default {
data() {
return {
screenHeight: 0,
statusBarHeight: 0,
navBarHeight: 120,
// originList: [], // 源数据
// displaySwiperList: [], // swiper需要的数据
displayIndex: 0, // 用于显示swiper的真正的下标数值只有:0,1,2。
originIndex: 0, // 记录源数据的下标
changeIndex: 0, //控制video是否渲染
page_count: 0,
page: 1, // 页数
page_size: 3, // 每页条数
flag: true,
// 操作视频参数
isStopPlay: false,
// 提现按钮参数
x: 600,
y: 600,
old: {
x: 0,
y: 0
},
swiperCurrent: 0,
videoCateList: [],
videoCateId: 0,
videoList: [],
goodsInfo: {
goods_image_arr: []
},
formData: {
total_duration: 0, //视频总时长 单位: s
id: 0, //视频id
type: 0, //获得收益方式 1, 视频开始 2 视频结束 3 观看到一定时长 默认3
time: 0, //观看时长, 单位s type = 3 时生效 默认10
},
videoDuration: 0,
dataIsOver: false,
}
},
watch: {
changeIndex: {
handler(newVal, oldVal) {
if (newVal == 2 && oldVal) {
this.$refs['DomVideo' + oldVal][0].pause()
if (newVal > oldVal && this.page_count > this.page) {
this.page++;
this.getVideoList()
}
}
},
deep: true,
immediate: true
}
},
computed: {
// canCircular() {
// console.log(Boolean((this.originIndex + 1 == this.originList.length ? 0 : this.originIndex + 1) == 1))
// return (this.originIndex + 1 == this.originList.length ? 0 : this.originIndex + 1) == 1;
// }
},
onLoad() {
this.getVideoConfig()
/* 获取系统信息 */
uni.getSystemInfo({
success: (res) => {
// 获取屏幕高度 减去底部导航栏高度
this.screenHeight = res.screenHeight - 120
// 获取状态栏高度
this.statusBarHeight = res.statusBarHeight
// 通过操作系统 确定自定义导航栏高度
if (res.system.substring(0, 3) == "iOS") {
this.navBarHeight = 42
} else {
this.navBarHeight = 40
}
}
})
this.getVideoCateList()
},
mounted() {
// this.getGoodsItem(this.videoList[this.changeIndex])
},
onShow() {
// this.$store.dispatch('getCartNumber');
},
methods: {
//获取视频收益配置 ———— 上线后取消传参
getVideoConfig() {
this.$api.sendRequest({
url: '/api/video/getConfig',
data: {
type: 1, //1视频开始 2视频结束 3观看到一定时长 默认3
time: 0, //观看时长,单位s type=3时生效 默认10
},
success: res => {
this.videoConfig = res.data
if (this.videoConfig.length < 3) {
uni.showToast({
title: '没有更多数据了',
icon: 'none',
})
// this.dataIsOver = true
// } else {
// this.dataIsOver = false
}
uni.setStorageSync('videoConfig', this.videoConfig)
}
})
},
//获取视频分类列表
getVideoCateList() {
this.$api.sendRequest({
url: '/api/video/getCateList',
data: {
},
success: res => {
// this.videoCateList = res.data.reverse()
this.videoCateList = res.data
this.videoCateId = this.videoCateList[0].id
this.getVideoList()
}
})
},
getVideoList() {
this.$api.sendRequest({
url: '/api/video/getList',
data: {
page: this.page,
page_size: this.page_size,
cid: this.videoCateId,
},
success: res => {
this.videoList = res.data.list
this.page_count = res.data.page_count
this.changeIndex = 0
if (this.videoList.length) {
this.getGoodsItem(this.videoList[0])
}
}
})
},
// 切换视频分类
clickTabItem(item) {
console.log('item', item);
this.videoCateId = item.id
this.changeIndex = 0
this.page = 1
this.getVideoList()
},
onChange(e) {
let windowWidth, windowHeight;
uni.getSystemInfo({
success: function(res) {
windowWidth = (res.windowWidth);
windowHeight = (res.windowHeight);
}
});
this.old.x = e.detail.x;
this.old.y = e.detail.y;
this.x = e.detail.x;
this.y = e.detail.y;
},
// 监听播放状态
listener(e) {
console.log('listener', e);
console.log('当前播放视频信息', this.videoList[this.changeIndex]);
console.log('收益配置信息', this.videoConfig);
this.formData = {
id: 0, //视频id
total_duration: 0, //视频总时长 单位: s
type: 0, //获得收益方式 1-视频开始 2-视频结束 3-观看到一定时长 默认3
time: 0, //观看时长, 单位s type = 3 时生效 默认10
}
this.formData = {
id: this.videoList[this.changeIndex].id,
total_duration: e.duration
}
// console.log('e.name', e.name);
switch (e.name) {
case 'play':
// console.log(666)
if (this.videoConfig.type == 1) {
this.formData.type = 1;
this.formData.time = 0;
}
break;
//暂停
//getVideoConfig取消传参后需判断 e.currentTime必须大于this.formData.time才可获取收益
case 'pause':
if (this.videoConfig.type == 3) {
this.formData.type = 3;
this.formData.time = Math.round(Number(e.currentTime));
}
break;
//播放
case 'ended':
if (this.videoConfig.type == 2) {
this.formData.type = 2;
this.formData.time = 0;
}
break;
default:
break;
}
// console.log('111',this.formData.type, uni.getStorageSync('token'));
if (this.formData.type && uni.getStorageSync('token')) {
// 获得收益
this.videoSy()
}
},
videoSy() {
this.$api.sendRequest({
url: '/api/video/getVideoSy',
data: this.formData,
success: res => {
console.log('获得收益', res);
}
})
},
maskTouchend(e, index) {
if (this.isStopPlay) {
this.$refs['DomVideo' + index][0].play()
console.log('视频播放', this.changeIndex);
} else {
this.$refs['DomVideo' + index][0].pause()
console.log('视频暂停', this.changeIndex);
}
console.log(this.$refs['DomVideo' + index][0]);
this.isStopPlay = !this.isStopPlay
},
endedVideo() {
console.log('视频播放完了', this.changeIndex);
console.log(this.$refs['DomVideo' + index][0]);
// this.$refs['DomVideo' + this.changeIndex][0].play()
},
changeSwiper(event) {
console.log('changeSwiper', event);
this.isStopPlay = false
this.changeIndex = event.detail.current; // 设置当前视频
console.log(this.videoList[this.changeIndex]);
this.getGoodsItem(this.videoList[this.changeIndex])
if (uni.getStorageSync('token')) {
this.$api.sendRequest({
url: '/api/video/viewLog',
data: {
id: this.videoList[this.changeIndex].id,
},
success: res => {
console.log('视频观看记录', res);
}
})
}
this.videoConfig = uni.getStorageSync('videoConfig')
this.formData = {
id: this.videoList[this.changeIndex].id,
// total_duration: e.duration,
type: this.videoConfig.type,
time: this.videoConfig.time,
}
if (this.formData.type == 1 && uni.getStorageSync('token')) {
this.videoSy()
}
},
getGoodsItem(item) {
this.$api.sendRequest({
url: '/api/goodssku/detail',
data: {
goods_id: item.goods_id
},
success: res => {
this.goodsInfo = res.data.goods_sku_detail
}
});
},
search() {
this.$util.redirectTo('/page_video/videoList/search', {});
},
goGoodsDetail(row) {
this.$util.redirectTo('/page_goods/detail/detail', {
goods_id: row.goods_id
});
},
// 提现
goCashOut() {
this.$util.redirectTo('/page_video/video/cashOut', {});
}
}
}
</script>
<style scoped lang="scss">
.video_wrapper {
position: relative;
background: #000;
.videoCate {
position: absolute;
width: calc(100% - 60rpx);
padding: 0 30rpx;
z-index: 100;
color: #fff
}
.cashOutBtn {
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: rgba(255, 255, 255, 0.8);
padding: 5rpx;
z-index: 11;
border: 1rpx solid #ccc;
box-shadow: 0rpx 5rpx 7rpx 5rpx rgba(117, 84, 0, 0.08);
line-height: 80rpx;
text-align: center;
position: absolute;
right: 30rpx;
bottom: 600rpx;
}
}
/deep/.uni-swiper-wrapper {
width: 100%;
height: 100%;
.uni-swiper-slides {
width: 100%;
height: 100%;
position: relative;
.video-container {
width: 100%;
height: 50%;
position: relative;
z-index: -1;
overflow: hidden;
.uni-cover-view {
width: 100%;
height: 100%;
uni-video {
width: 100%;
height: 100%;
background: red;
}
}
}
.goodsDetail {
position: absolute;
left: 30rpx;
bottom: 0rpx;
width: calc(100% - 120rpx);
height: 110rpx;
margin: 0 auto;
border-radius: 10rpx;
padding: 20rpx 30rpx;
background: #fff;
display: flex;
.cover {
width: 110rpx;
height: 110rpx;
}
}
.infoBox {
display: flex;
flex-direction: column;
justify-content: space-between;
.skuBox {
display: flex;
.price {
margin-right: 10rpx;
color: #f33b50;
}
.specName {
/*1. 先强制一行内显示文本*/
white-space: nowrap;
/*2. 超出的部分隐藏*/
overflow: hidden;
/*3. 文字用省略号替代超出的部分*/
text-overflow: ellipsis;
}
}
}
}
}
</style>