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.
402 lines
10 KiB
402 lines
10 KiB
1 year ago
|
<template>
|
||
|
<view class="page flex-col" style=" position: relative;height: auto;background-color: #F8F6ED;">
|
||
|
<view class="group_1 flex-col" style=" height: calc(100% - 50px);">
|
||
|
|
||
|
<view class="section_2 flex-col" style="height: auto;">
|
||
|
<view class="block_1 flex-col" style="border-radius: 0;">
|
||
|
<view class="text-wrapper_1 flex-row">
|
||
|
<text class="text_2">{{list.b.title}}</text>
|
||
|
</view>
|
||
|
<view class="text-wrapper_2 flex-row justify-between">
|
||
|
<text class="text_3">¥{{list.b.price}}</text>
|
||
|
<text class="text_4">已有{{list.b.num}}人学习</text>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
|
||
|
<video style="z-index: 3;" class="block_2 flex-col" :src="videoUrl" controls
|
||
|
@timeupdate="handleTimeUpdate" @play="play" :poster="poster" object-fit="fill">
|
||
|
|
||
|
<!-- <image class="block_2 flex-col" v-if="poster" :src="poster"
|
||
|
style="width: 100%;height: 100%;z-index: 2;opacity: 0.5; pointer-events: none;" /> -->
|
||
|
|
||
|
</video>
|
||
|
|
||
|
|
||
|
</view>
|
||
|
|
||
|
<view class="section_3 flex-col"
|
||
|
style="height: auto;border-radius: 0;margin-top: 20rpx;padding-bottom: 20rpx;">
|
||
|
<div class="tabs_1 flex-col" style="height: 70rpx;">
|
||
|
<view class="text-wrapper_3 flex-row justify-between">
|
||
|
<text style="height:50rpx;width:100rpx;text-align: center;" class="text_5"
|
||
|
:class="{ active: activeTab === '介绍' }" @click="changeTab('介绍')">介绍</text>
|
||
|
<text style="height:50rpx;width:100rpx;text-align: center;" class="text_6"
|
||
|
:class="{ active: activeTab === '目录' }" @click="changeTab('目录')">目录</text>
|
||
|
</view>
|
||
|
</div>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<view v-if="activeTab === '介绍'" style=";">
|
||
|
<view style="margin-left: 5%;font-weight: 900;font-size:18px;">授课老师</view>
|
||
|
|
||
|
<view style="margin-left: 3%;width: 94%;margin-top: 20rpx;margin-bottom: 20rpx;" @tap="go1()">
|
||
|
<image :src="list.a.image"
|
||
|
style="width: 120rpx;height: 120rpx;border-radius: 100px;float: left;" />
|
||
|
<view style="float: left;margin-left: 20rpx;margin-top: 15rpx;">
|
||
|
<view style="font-size: 16px;font-weight: 900;">{{list.a.name}}</view>
|
||
|
<view style="font-size: 12px;margin-top: 10rpx;color: gray;">共计{{list.a.num}}课时</view>
|
||
|
</view>
|
||
|
|
||
|
<image src="/static/lanhu_kechengxiangqingmulu/4467bb13053bcc92fb9c10452b036fd7.png"
|
||
|
style="width: 20rpx;height: 30rpx;margin-top:50rpx;float: right;" />
|
||
|
</view>
|
||
|
<view style="width: 100%;height: 20rpx;background-color: #F8F6ED;clear: both;"></view>
|
||
|
<view
|
||
|
style="margin-left: 5%;font-weight: 900;font-size:18px;margin-top: 20rpx;margin-bottom: 10rpx;">
|
||
|
课程介绍</view>
|
||
|
<rich-text :nodes="list.b.content" style="width: 95%;margin-left: 2.5%;"></rich-text>
|
||
|
<!-- <view style="height:60rpx;padding-left: 5%;line-height: 50rpx;" v-for="(item, index) in list.c"
|
||
|
:key="index">
|
||
|
<view style="float: left;margin-top: -20rpx;font-size: 30px;font-weight: 999;color: darkgray;">.
|
||
|
</view>
|
||
|
<view style="float: left;color: darkgray;margin-left:5rpx;">{{item.unit_name}}</view>
|
||
|
</view> -->
|
||
|
|
||
|
</view>
|
||
|
|
||
|
|
||
|
|
||
|
<view v-if="activeTab === '目录'" style="height: auto;padding-bottom: 200rpx;">
|
||
|
<text class="text_7" style="">可免费试看视频/音频前60s</text>
|
||
|
|
||
|
<view v-for="(item, index) in list.d" :key="index">
|
||
|
|
||
|
<view class="box_2 flex-row" style="" @tap="hideElement(index)">
|
||
|
<text class="text_8">{{item[0].title2}}</text>
|
||
|
<image class="label_1" referrerpolicy="no-referrer"
|
||
|
src="/static/lanhu_kechengxiangqingmulu/4fcce6f6b93750a3be24b81f9dbaa542.png" />
|
||
|
</view>
|
||
|
|
||
|
<view :id="index">
|
||
|
<view class="box_3 flex-row" v-for="(item2, index2) in item" :key="index2">
|
||
|
<image class="icon_2" @tap="bofang(item2.mp4)"
|
||
|
src="/static/lanhu_kechengxiangqingmulu/35d5a4228d4ae5e616779e122f9cd5fa.png" />
|
||
|
<text class="text_9">{{item2.title}}</text>
|
||
|
<text class="text_10">{{item2.min}}</text>
|
||
|
</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
|
||
|
<!-- <view class="cu-modal bottom-modal" :class="modalName == 'share' ? 'show' : ''" @tap="hideModal">
|
||
|
<view class="cu-dialog" @tap.stop="">
|
||
|
<wanl-share :scrollAnimation="scrollAnimation" :shareTitle="goodsData.title"
|
||
|
:shareText="goodsData.description" :image="$wanlshop.oss(goodsData.image,50, 50)"
|
||
|
:href="common.appConfig.domain + '/pages/product/goods?id='+ goodsData.id +'&QRtype=goods'"
|
||
|
isReport @change="wanlShare" />
|
||
|
</view>
|
||
|
</view> -->
|
||
|
|
||
|
|
||
|
|
||
|
</view>
|
||
|
<!-- <view class="image-text_1 flex-row justify-between">
|
||
|
<text class="text-group_1">查看全部</text>
|
||
|
<image class="icon_4" referrerpolicy="no-referrer"
|
||
|
src="/static/lanhu_kechengxiangqingmulu/32abf597bb1d6f7c108813a8fa472960.png" />
|
||
|
</view> -->
|
||
|
</view>
|
||
|
|
||
|
</view>
|
||
|
|
||
|
<view class="section_4 flex-row" style="margin: 0;position: fixed;
|
||
|
bottom: 0;
|
||
|
left: 0;
|
||
|
width: 100%;
|
||
|
height: 100rpx;
|
||
|
background-color: #f0f0f0;">
|
||
|
<!-- <view class="image-text_2 flex-col justify-between" @tap="showModal('share')">
|
||
|
<image class="icon_5" referrerpolicy="no-referrer"
|
||
|
src="/static/lanhu_kechengxiangqingmulu/aa83c3ee47d3a2604d5b1d453e21d0d8.png" />
|
||
|
<text class="text-group_2">分享</text>
|
||
|
</view> -->
|
||
|
|
||
|
<view class="image-text_3 flex-col justify-between" @tap="shoucang1">
|
||
|
<image class="icon_6" v-if="!shoucang"
|
||
|
src="/static/lanhu_kechengxiangqingmulu/02f3eef93d8ab189249aebc2d123e124.png" />
|
||
|
|
||
|
<image class="icon_6" v-if="shoucang" src="/static/lanhu_kechengxiangqingmulu/22.png" />
|
||
|
|
||
|
<text class="text-group_3" style="">收藏</text>
|
||
|
</view>
|
||
|
|
||
|
|
||
|
<view class="image-text_2 flex-col justify-between" @tap="showModal('share')">
|
||
|
|
||
|
</view>
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
<button class="button_1 flex-col" @tap="go(list.b.id)" v-if="list.buy == 0 && !is_buy">
|
||
|
<text class="text_12">¥{{list.b.price}}</text>
|
||
|
</button>
|
||
|
|
||
|
|
||
|
<button class="button_1 flex-col" v-if="list.buy == 1 || is_buy">
|
||
|
<text class="text_12">已购买</text>
|
||
|
</button>
|
||
|
|
||
|
</view>
|
||
|
|
||
|
</view>
|
||
|
|
||
|
</template>
|
||
|
<script>
|
||
|
import {
|
||
|
mapState
|
||
|
} from 'vuex';
|
||
|
export default {
|
||
|
data() {
|
||
|
return {
|
||
|
videoUrl: '',
|
||
|
poster: '',
|
||
|
poster2: '',
|
||
|
shoucang: '',
|
||
|
modalName: '',
|
||
|
url2: '',
|
||
|
maxDuration: 2, // 最大播放时长,单位:秒
|
||
|
pause: false, // 是否暂停视频播放
|
||
|
list: '',
|
||
|
is_buy: '',
|
||
|
vip: '',
|
||
|
list2: [],
|
||
|
activeTab: "介绍",
|
||
|
|
||
|
constants: {}
|
||
|
};
|
||
|
},
|
||
|
onLoad(id) {
|
||
|
if (id.is_buy == 1) {
|
||
|
this.is_buy = 1;
|
||
|
}
|
||
|
this.id = id.id
|
||
|
uni.setNavigationBarColor({
|
||
|
backgroundColor: '#802931', // 背景颜色
|
||
|
frontColor: '#ffffff' // 前景颜色(包括标题、返回图标等)
|
||
|
}),
|
||
|
this.getData()
|
||
|
this.getVip()
|
||
|
},
|
||
|
|
||
|
computed: {
|
||
|
...mapState(['user', 'statistics', 'common'])
|
||
|
},
|
||
|
methods: {
|
||
|
shoucang1() {
|
||
|
if (this.shoucang) {
|
||
|
this.shoucang = ''
|
||
|
} else {
|
||
|
this.shoucang = 1
|
||
|
}
|
||
|
this.$api.get({
|
||
|
url: '/wanlshop/data/shoucang',
|
||
|
data: {
|
||
|
id: this.id,
|
||
|
type: 1
|
||
|
},
|
||
|
success: res => {
|
||
|
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
getVip() {
|
||
|
if (this.user.id) {
|
||
|
this.$api.get({
|
||
|
url: '/wanlshop/data/getVip',
|
||
|
data: {
|
||
|
id: this.user.id
|
||
|
},
|
||
|
success: res => {
|
||
|
this.vip = res
|
||
|
console.log(4445, res)
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
hideElement(id) {
|
||
|
if (document.getElementById(id).style.display == 'none') {
|
||
|
document.getElementById(id).style.display = '';
|
||
|
} else {
|
||
|
document.getElementById(id).style.display = 'none';
|
||
|
}
|
||
|
|
||
|
},
|
||
|
|
||
|
// 弹出层
|
||
|
showModal(name) {
|
||
|
console.log(name)
|
||
|
this.modalName = name;
|
||
|
},
|
||
|
// 关闭弹出层
|
||
|
hideModal(name) {
|
||
|
if (name) {
|
||
|
this.showModal(name);
|
||
|
} else {
|
||
|
this.modalName = null;
|
||
|
}
|
||
|
},
|
||
|
// 分享回调
|
||
|
wanlShare(e) {
|
||
|
if (e) {
|
||
|
this.$wanlshop.auth(`/pages/user/complaint/complaint?id=${this.goodsData.id}&type=1`);
|
||
|
} else {
|
||
|
this.modalName = null;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
bofang(mp4) {
|
||
|
// this.poster = this.poster2
|
||
|
this.videoUrl = mp4
|
||
|
this.url2 = mp4
|
||
|
|
||
|
console.log(this.videoUrl)
|
||
|
},
|
||
|
handleTimeUpdate(event) {
|
||
|
if (this.list.buy == 0 && !this.is_buy) {
|
||
|
if (event.detail.currentTime > 60) {
|
||
|
this.url2 = this.videoUrl
|
||
|
this.videoUrl = ''
|
||
|
this.$wanlshop.msg('试看60秒结束');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
},
|
||
|
play(event) {
|
||
|
//我的学习
|
||
|
this.xuexi()
|
||
|
this.videoUrl = this.url2
|
||
|
this.poster = ''
|
||
|
},
|
||
|
go(id) {
|
||
|
|
||
|
uni.navigateTo({
|
||
|
url: '/pages/user/money/pay?groups=kecheng&&order_id=' + id
|
||
|
});
|
||
|
},
|
||
|
go1() {
|
||
|
uni.navigateTo({
|
||
|
url: '/pages/lanhu_renmaixiangqing/index?id=' + this.list.a.id
|
||
|
});
|
||
|
},
|
||
|
changeTab(tab) {
|
||
|
this.activeTab = tab;
|
||
|
},
|
||
|
xuexi() {
|
||
|
this.$api.get({
|
||
|
url: '/wanlshop/data/xuexi',
|
||
|
data: {
|
||
|
id: this.id
|
||
|
},
|
||
|
success: res => {
|
||
|
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
getData() {
|
||
|
this.$api.get({
|
||
|
url: '/wanlshop/data/getDetail',
|
||
|
data: {
|
||
|
id: this.id
|
||
|
},
|
||
|
success: res => {
|
||
|
console.log(44, res)
|
||
|
this.list = res
|
||
|
this.shoucang = this.list.e
|
||
|
this.poster = this.list.b.cover
|
||
|
this.poster2 = this.list.b.cover
|
||
|
this.videoUrl = this.list.d[0][0].mp4
|
||
|
this.url2 = this.list.d[0][0].mp4
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
}
|
||
|
};
|
||
|
</script>
|
||
|
<style lang='css'>
|
||
|
@import '../common/common.css';
|
||
|
@import './assets/style/index.rpx.css';
|
||
|
|
||
|
.active {
|
||
|
|
||
|
border-bottom: 3px solid #802931;
|
||
|
}
|
||
|
|
||
|
toast,
|
||
|
uni-toast {
|
||
|
z-index: 9999;
|
||
|
}
|
||
|
|
||
|
.cu-custom .cu-bar .search-form {
|
||
|
background-color: #fff;
|
||
|
}
|
||
|
|
||
|
.cu-custom .cu-bar {
|
||
|
background-color: #f3f3f3;
|
||
|
}
|
||
|
|
||
|
.cu-custom .bar-bg {
|
||
|
background-color: rgba(243, 243, 243, 0.96);
|
||
|
}
|
||
|
|
||
|
.cu-custom .cu-bar {
|
||
|
z-index: 99;
|
||
|
}
|
||
|
|
||
|
/* #ifdef MP */
|
||
|
.cu-custom .cu-bar .search-form {
|
||
|
margin: 0 0 0 25rpx;
|
||
|
}
|
||
|
|
||
|
/* #endif */
|
||
|
|
||
|
.cu-custom .cu-bar .nav .cu-item {
|
||
|
line-height: 70rpx;
|
||
|
height: 70rpx;
|
||
|
}
|
||
|
|
||
|
.swiper-box {
|
||
|
position: relative;
|
||
|
width: 100%;
|
||
|
height: 100vw;
|
||
|
}
|
||
|
|
||
|
.swiper-box swiper {
|
||
|
width: 100%;
|
||
|
height: 100vw;
|
||
|
}
|
||
|
|
||
|
.swiper-box swiper swiper-item image {
|
||
|
width: 100%;
|
||
|
height: 100vw;
|
||
|
}
|
||
|
|
||
|
.swiper-box .indicator {
|
||
|
display: flex;
|
||
|
justify-content: center;
|
||
|
align-items: center;
|
||
|
padding: 0 25upx;
|
||
|
height: 40upx;
|
||
|
border-radius: 40upx;
|
||
|
font-size: 22upx;
|
||
|
position: absolute;
|
||
|
bottom: 20upx;
|
||
|
right: 20upx;
|
||
|
color: #fff;
|
||
|
background-color: rgba(0, 0, 0, 0.2);
|
||
|
}
|
||
|
</style>
|