NurseStationPersonAppletUl/pages/Videolearning/Videolearning.vue
2023-04-28 11:30:15 +08:00

238 lines
7.0 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="app" v-if="list">
<image class="topimage" :src="baseurl + list.trainingItemPosterUrl" mode=""></image>
<view class="title">
{{list.trainingItemTitle}}
</view>
<view class="border"></view>
<u-tabs :list="tablist" :is-scroll="false" :current="tabcurrent" @change="change" font-size='34' bar-height='3'>
</u-tabs>
<view class="detail" v-if="tabcurrent==0">
{{list.trainingItemDetails}}
</view>
<view class="directory" v-if="tabcurrent==1">
<view class="item" v-for="(item,index) in list.trainingItemDirectoryList" :key="index">
<view class="text">
<span class='DirectoryName'>{{item.itemDirectoryName?item.itemDirectoryName:''}}</span>
<span class='texttitle'>{{item.itemDirectoryTitle?item.itemDirectoryTitle:''}}</span>
</view>
<view class="Introduce">
{{item.itemDirectoryIntroduce?item.itemDirectoryIntroduce:''}}
</view>
<view class="play" v-if="!item.trainingOrderStatus" @tap='novideo'>
开始播放
</view>
<view class="" v-if="item.trainingOrderStatus=='PAY'">
<view class="play" @tap='videoplay(item)'
:style="item.itemDirectoryWatchStatus=='NOT_WATCHED'?'background-color: #3D7DCA;color:#fff':''"
v-if="item.itemDirectoryWatchStatus=='NOT_WATCHED'">
开始播放
</view>
<view class="play" @tap='videoplay(item)'
:style="item.itemDirectoryWatchStatus=='WATCHED'?'background-color: #E3EAF5;color:#3D7DCA':''"
v-if="item.itemDirectoryWatchStatus=='WATCHED'">
继续播放
</view>
<view class="play" @tap='videoplay(item)'
:style="item.itemDirectoryWatchStatus=='FINISHED_READING'?'background-color: #E6E6E6;color:#76777B':''"
v-if="item.itemDirectoryWatchStatus=='FINISHED_READING'">
已看完
</view>
</view>
</view>
</view>
<u-popup v-model="videoshow" mode="center" closeable @close='videoshowfalse'>
<video id="video" v-if="videoshow" :src="baseurl+videoitem.itemDirectoryUrl" @timeupdate='videotimeupdate'
:initial-time='videoitem.watchTime' @error='videoerror' :custom-cache="false"
@play='videoplays'></video>
</u-popup>
<u-toast ref="uToast" />
</view>
<view class="" v-else style="padding-top: 100rpx;">
<u-empty text="暂无内容" mode="list" icon-size='240' font-size='32'></u-empty>
</view>
</template>
<script>
import baseurl from '@/api/baseurl.js'
import {
selectNurseAppletPersonTrainingItemDetailsList,
insertTrainingItemWatchRecord,
getTrainingItemWatchRecord
} from '@/api/Videolearning/index.js'
export default {
data() {
return {
list: undefined,
baseurl: undefined,
nurseStationPersonId: undefined,
tabcurrent: 0, //tabsindex
tablist: [{ //tabs的list
name: '详情'
}, {
name: '目录'
}],
trainingItemId: {}, //上个页面id
videoshow: false, //视频开关
videoitem: {
watchTime: 0,
}, //视频对象
videoerroshow: true,
};
},
onHide() {
var that = this
uni.getSystemInfo({
success: function(res) {
if (res.platform == 'ios') {
that.videoshow = false
} else {}
}
});
},
onLaunch: function() {
// 锁定横屏
// plus.screen.lockOrientation("landscape-primary");
// 锁定竖屏
plus.screen.lockOrientation("portrait-primary");
},
methods: {
//播放进度变化
videotimeupdate(e) {
//e.detail.currentTime是已经播放了多久e.detail.duration是该视频多长
this.videoitem.watchTime = e.detail.currentTime
},
//关闭播放弹出框
videoshowfalse() {
if (this.videoerroshow) {
if (this.videoitem.watchTime) {
this.videoitem.watchTime = this.formatSeconds(this.videoitem.watchTime)
}
insertTrainingItemWatchRecord(this.videoitem).then(res => {
this.videoitem.watchTime = 0
this.info();
this.videoshow = false
})
}
},
//视频播放出错
videoerror(e) {
this.videoerroshow = false
this.$refs.uToast.show({
title: '暂无视频',
type: 'error',
duration: '2000'
})
this.videoshow = false
},
//视频播放
videoplays() {
var that = this
uni.getSystemInfo({
success: function(res) {
if (res.platform == 'ios') {
if (that.videoitem.watchTime) {
that.videoContext.seek(that.videoitem.watchTime)
}
} else {}
}
});
},
//视频播放
videoplay(item) {
this.videoerroshow = true
if (item.itemDirectoryUrl) {
if (!item.watchTime) {
this.videoitem.watchTime = 0
}
this.videoitem = item
this.videoitem.trainingItemId = this.list.trainingItemId
this.videoitem.nurseStationPersonId = this.nurseStationPersonId
this.videoitem.nursePersonName = uni.getStorageSync('nursePersonName')
this.videoitem.trainingItemTitle = this.list.trainingItemTitle
if (item.itemDirectoryWatchStatus == 'WATCHED') {
getTrainingItemWatchRecord(this.videoitem.trainingOrderId, this.videoitem.trainingItemId, this
.videoitem
.trainingItemDirectoryId, this.videoitem.nurseStationPersonId).then(res => {
if (res.code == 200) {
if (res.data.watchTime) {
this.videoitem.watchTime = res.data.watchTime
this.videoitem.watchTime = this.formatsecond(this.videoitem.watchTime)
}
}
})
}
this.videoshow = true
this.videoContext = uni.createVideoContext('video', this)
} else {
this.$refs.uToast.show({
title: '暂无视频',
type: 'error',
duration: '2000'
})
}
},
info() {
selectNurseAppletPersonTrainingItemDetailsList(this.trainingItemId, this.nurseStationPersonId).then(
res => {
this.list = res.data
})
},
novideo() {
this.$refs.uToast.show({
title: '您未购买',
type: 'error',
duration: '2000'
})
},
//点击tabs
change(index) {
this.tabcurrent = index;
},
//时分秒转秒
formatsecond(value) {
value = value.split(':')
var number = 0
value.forEach(e => {
e = Number(e)
})
value[0] = value[0] * 24 * 60
value[1] = value[1] * 60
value.forEach(e => {
e = Number(e)
if (e > 0) {
number = number + e
}
})
return number
},
//秒转时分秒
formatSeconds(value) {
let result = parseInt(value)
let h = Math.floor(result / 3600) < 10 ? '0' + Math.floor(result / 3600) : Math.floor(result / 3600);
let m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result /
60 % 60));
let s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60));
let res = '';
res += `${h}:`;
res += `${m}:`;
res += `${s}`;
return res;
},
},
onLoad(options) {
const that = this
this.baseurl = baseurl
this.trainingItemId = options.trainingItemId
const value = uni.getStorageSync('nursePersonId');
if (value) {
that.nurseStationPersonId = value
that.info();
} else {}
},
}
</script>
<style lang="scss">
@import "./Videolearning.scss";
</style>