|
|
@@ -189,7 +189,110 @@
|
|
|
|
|
|
</div>
|
|
|
<div class="learn-detail-wrapper-mobile" v-else>
|
|
|
- 移动端详情
|
|
|
+ <!-- 视频播放 -->
|
|
|
+ <div class="video-container">
|
|
|
+ <div class="video-cover" :style="`${'background-image:url('+learnDetail.info.img+')'}`" v-show="!isInitPlayer">
|
|
|
+ <img class="play" @click="handleClickPlayIcon" src="@/assets/img/learn/video@2x.png" alt="play">
|
|
|
+ </div>
|
|
|
+ <div id="player" class="" v-show="isInitPlayer"></div>
|
|
|
+ </div>
|
|
|
+ <div class="tabs">
|
|
|
+ <span :class="tabActive==0 ? 'active' :''" @click="tabActive=0">介绍</span>
|
|
|
+ <span :class="tabActive==1 ? 'active' :''" @click="tabActive=1">目录</span>
|
|
|
+ <span :class="tabActive==2 ? 'active' :''" @click="tabActive=2" v-if="learnDetail.info.is_buy">公告</span>
|
|
|
+ </div>
|
|
|
+ <!-- 介绍 -->
|
|
|
+ <div class="intro" v-show="tabActive==0">
|
|
|
+ <div class="intro-info">
|
|
|
+ <div class="title">
|
|
|
+ <span class="text">{{learnDetail.info.title}}</span>
|
|
|
+ <span class="collect" @click="collectFun">
|
|
|
+ <img class="icon" v-if="collectObj.resultCode==1" src="@/assets/img/learn/collect1@2x.png" alt="collect"/>
|
|
|
+ <img class="icon" v-else src="@/assets/img/learn/collect2@2x.png" alt="collect"/>
|
|
|
+ </span>
|
|
|
+ </div>
|
|
|
+ <p class="info">{{learnDetail.info.desc}}</p>
|
|
|
+ <div class="msg">
|
|
|
+ <div class="left">
|
|
|
+ <span v-if="learnDetail.info.price==0" class="now-price">免费</span>
|
|
|
+ <span v-if="learnDetail.info.price>0" class="now-price">¥{{ learnDetail.info.price.toFixed(2) }}</span>
|
|
|
+ <span v-if="learnDetail.info.price>0 && learnDetail.info.yprice>0" class="old-price">¥{{ learnDetail.info.yprice.toFixed(2) }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="right">
|
|
|
+ <span class="look">{{learnDetail.info.buy_num}}人在看</span>
|
|
|
+ <div>
|
|
|
+ <img class="img" :src="defaultImg" v-real-img="item.img" alt="" v-for="(item,index) in learnDetail.info.userimg" :key="index">
|
|
|
+ <span class="img text" v-if="learnDetail.info.userimg.length==4">...</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="lecturer">
|
|
|
+ <div class="picture">
|
|
|
+ <img :src="defaultImg" v-real-img="learnDetail.teacher.img" :alt="learnDetail.teacher.name">
|
|
|
+ <span>讲师</span>
|
|
|
+ </div>
|
|
|
+ <div class="info">
|
|
|
+ <span class="name">{{ learnDetail.teacher.name }}</span>
|
|
|
+ <p v-html="learnDetail.teacher.content"></p>
|
|
|
+ </div>
|
|
|
+ <img class="go" src="@/assets/img/learn/right@2x.png" />
|
|
|
+ </div>
|
|
|
+ <div class="course-intro">
|
|
|
+ <span class="common-title">课程介绍</span>
|
|
|
+ <div class="img-info">
|
|
|
+ <p v-html="learnDetail.content.content"></p>
|
|
|
+ <!-- <img src="@/assets/img/credit/12.png" alt="">
|
|
|
+ <p>学点课堂专注数字技能培训及职场就业课程开发,讲师来自于行业一线,
|
|
|
+ 拥有7年以上的工作和教学经验,通过专业的课程教学与学点课堂专注数字技能培训及职场就业课程开发,讲师来自于行业一线,
|
|
|
+ 拥有7年以上的工作和教学经验,通过专业的课程教学与</p> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- 目录 -->
|
|
|
+ <div class="directory" v-show="tabActive==1">
|
|
|
+ <van-collapse v-model="activeNames" v-if="learnDetail.video && learnDetail.video.length>0">
|
|
|
+ <van-collapse-item :title="`第${index+1}章: ${catalogItem.video_name}`" :name="index+1" v-for="(catalogItem, index) in learnDetail.video" :key="index">
|
|
|
+ <template v-if="catalogItem.list && catalogItem.list.length>0">
|
|
|
+ <div class="item" v-for="(item, i) in catalogItem.list" :key="item.id" @click="handleClickLearnItem(item.id)">
|
|
|
+ <div class="title">
|
|
|
+ <span class="text">{{ item.video_name }}</span>
|
|
|
+ <span class="timer">{{ item.m<10 ? '0'+item.m : item.m }}:{{ item.s<10 ? '0'+item.s : item.s }}</span>
|
|
|
+ </div>
|
|
|
+ <span class="is-free" :class="item.checked==1 ? 'free' : 'charge'">{{ item.checked==1 ? '免费' : '收费' }}</span>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div v-else style="text-align:center;">
|
|
|
+ <span>暂无课程</span>
|
|
|
+ </div>
|
|
|
+ </van-collapse-item>
|
|
|
+ </van-collapse>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 公告 -->
|
|
|
+ <div class="board" v-show="tabActive==2">
|
|
|
+ <div class="course-intro">
|
|
|
+ <span class="common-title">公告</span>
|
|
|
+ <div class="img-info" v-html="learnDetail.content.notice_msg"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="pay-content">
|
|
|
+ <div v-if="!learnDetail.info.is_buy" class="btn-buy">
|
|
|
+ <div class="service">
|
|
|
+ <img src="@/assets/img/learn/service@2x.png" alt="">
|
|
|
+ <span>咨询客服</span>
|
|
|
+ </div>
|
|
|
+ <div class="price">
|
|
|
+ <span class="new-price" v-if="learnDetail.info.price==0">免费</span>
|
|
|
+ <span class="new-price" v-if="learnDetail.info.price!=0">¥{{learnDetail.info.price.toFixed(2)}}</span>
|
|
|
+ <span class="btn" v-if="learnDetail.info.price==0" @click="goBtn">免费购买</span>
|
|
|
+ <span class="btn" v-if="learnDetail.info.price!=0" @click="goBtn">立即购买</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="learnDetail.info.is_buy" class="btn-study">
|
|
|
+ <span class="btn" @click="goBtn">继续学习</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
@@ -208,7 +311,10 @@ export default {
|
|
|
isWeixinApp: true,
|
|
|
collapseName: 1,
|
|
|
tabActive: 0,
|
|
|
- defaultImg: require('@/assets/img/common/empty@2x.png')
|
|
|
+ defaultImg: require('@/assets/img/common/empty@2x.png'),
|
|
|
+ activeNames: ['1'],
|
|
|
+ isInitPlayer: false, // 是否已初始化播放器
|
|
|
+ player: null // 播放器对象
|
|
|
}
|
|
|
},
|
|
|
components: {
|
|
|
@@ -241,10 +347,10 @@ export default {
|
|
|
// 引入三方资源
|
|
|
link: [
|
|
|
{rel: "canonical", href: canonical},
|
|
|
- // {rel: "stylesheet", href: "https://g.alicdn.com/de/prismplayer/2.9.13/skins/default/aliplayer-min.css"}
|
|
|
+ {rel: "stylesheet", href: "https://g.alicdn.com/de/prismplayer/2.9.13/skins/default/aliplayer-min.css"}
|
|
|
],
|
|
|
script: [
|
|
|
- // { src: "https://g.alicdn.com/de/prismplayer/2.9.13/aliplayer-min.js" }
|
|
|
+ { src: "https://g.alicdn.com/de/prismplayer/2.9.13/aliplayer-min.js" }
|
|
|
]
|
|
|
}
|
|
|
if (metaLocation) {
|
|
|
@@ -281,6 +387,30 @@ export default {
|
|
|
this.isWeixinApp = navigator.userAgent.indexOf("miniProgram") > -1
|
|
|
},
|
|
|
methods: {
|
|
|
+ /**
|
|
|
+ * 初始化播放器
|
|
|
+ */
|
|
|
+ _initPlayer (item_id, playAuth) {
|
|
|
+ const player = new Aliplayer({
|
|
|
+ id: "player",
|
|
|
+ width: "100%",
|
|
|
+ height: "100%",
|
|
|
+ useH5Prism: true,
|
|
|
+ autoplay: true,
|
|
|
+ // 播放方式二:推荐点播用户使用
|
|
|
+ vid : item_id,
|
|
|
+ playauth : playAuth,
|
|
|
+ cover: "",
|
|
|
+ encryptType: 1, //当播放私有加密流时需要设置。
|
|
|
+ // skinLayout: [
|
|
|
+ // { "name": "bigPlayButton", "align": "cc", "x": 30, "y": 80 }
|
|
|
+ // ]
|
|
|
+ }, function (player) {
|
|
|
+ console.log("The player is created.")
|
|
|
+ });
|
|
|
+ this.player = player
|
|
|
+ this.isInitPlayer = true
|
|
|
+ },
|
|
|
// 是否收藏
|
|
|
collectFun(){
|
|
|
let path = location.pathname // "/l/68"
|
|
|
@@ -298,7 +428,11 @@ export default {
|
|
|
let { data, status, info } = res
|
|
|
if(status === 1){
|
|
|
this.collectObj.resultCode = 0
|
|
|
- this.$message.success('取消收藏');
|
|
|
+ if(!this.mobile){
|
|
|
+ this.$message.success('取消收藏');
|
|
|
+ }else{
|
|
|
+ this._toast('收藏成功')
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}else{
|
|
|
@@ -307,7 +441,11 @@ export default {
|
|
|
let { data, status, info } = res
|
|
|
if(status === 1){
|
|
|
this.collectObj.resultCode = 1
|
|
|
- this.$message.success('收藏成功');
|
|
|
+ if(!this.mobile){
|
|
|
+ this.$message.success('收藏成功');
|
|
|
+ }else{
|
|
|
+ this._toast('收藏成功')
|
|
|
+ }
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
@@ -345,6 +483,71 @@ export default {
|
|
|
this.cnzz("客栈学院","课程详情+继续学习","");
|
|
|
window.location.href = '/lv/'+ this.sale_id
|
|
|
}
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 切换正在播放的视频
|
|
|
+ */
|
|
|
+ _replayVideo (item_id, playAuth) {
|
|
|
+ this.player.replayByVidAndPlayAuth(item_id, playAuth)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 获取视频播放凭证
|
|
|
+ * @param {Number} item_id - 视频 id
|
|
|
+ */
|
|
|
+ _getVideoPlayAuth (item_id) {
|
|
|
+ let params = {
|
|
|
+ sale_id: this.sale_id,
|
|
|
+ id: item_id
|
|
|
+ }
|
|
|
+ const self = this
|
|
|
+ this.$axios.$post('/api/sale/authVideo', params).then(res => {
|
|
|
+ console.log('打印看啊看啊=====》',res)
|
|
|
+ if (Number(res.status) === 1) {
|
|
|
+ if (Number(res.data.valid) === 1) {
|
|
|
+ // 已购买,成功获取播放凭证
|
|
|
+ const playAuth = (res.data.paly_data && res.data.paly_data.PlayAuth) || ''
|
|
|
+ if (self.isInitPlayer) {
|
|
|
+ // 已初始化播放器,切换播放视频
|
|
|
+ self._replayVideo(item_id, playAuth)
|
|
|
+ } else {
|
|
|
+ // 未初始化播放器,初始化
|
|
|
+ self._initPlayer(item_id, playAuth)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 未购买
|
|
|
+ if(!this.mobile){
|
|
|
+ this.$message.info('请先购买课程')
|
|
|
+ }else{
|
|
|
+ this._toast('请先购买课程')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 点击封面图的播放按钮:
|
|
|
+ * 1. 判断用户是否已支付,若已支付则获取第一集视频,若未支付尝试播放试看视频
|
|
|
+ * 2. 若不存在试看视频,则做提示
|
|
|
+ */
|
|
|
+ handleClickPlayIcon(){
|
|
|
+ if (this.learnDetail.info.is_buy) {
|
|
|
+ // 已购买,尝试播放第一集
|
|
|
+ this._getVideoPlayAuth(this.learnDetail.video[0].list[0].id || '')
|
|
|
+ } else {
|
|
|
+ // 未购买,没有试看视频,做提示
|
|
|
+ if(!this.mobile){
|
|
|
+ this.$message.info('请先购买课程')
|
|
|
+ }else{
|
|
|
+ this._toast('请先购买课程')
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 点击目录的每一集:
|
|
|
+ * 尝试获取该集的播放凭证
|
|
|
+ */
|
|
|
+ handleClickLearnItem (id) {
|
|
|
+ this._getVideoPlayAuth(id)
|
|
|
}
|
|
|
}
|
|
|
}
|