<template>
<view class="detail" :style="'height: '+ windowHeight +'px;'">
<swiper class="swipers" :current="current" :vertical="true" :circular="true" @change="swiperChange">
<swiper-item class="swipers-item" v-for="(item, index) in displaySwiperList" :key="index">
<com-video :key="tableTimeStamp" :ref="`videoRef-${item.id}`" :height="videoHeight" :vinfo="vodinfo" :item="item"
:qingping="isqp" :current="current" :index="index"
@ended="onEnded" @onPause="onPause" @onPlay="onPlay" v-if="current==index"></com-video>
<view v-if="item.pays==1" class="playbtnbox" :style="{height:`${videoHeight}px`}">
<view class="unlockbtn" @click.stop="needpay()">
<text class="unlockbtn-txt">当前剧集需要解锁</text>
</view>
</view>
<view class="swiper-selbar">
<view class="selvideo" @click.stop="sellxj()">
<view class="swipers-items-info-num">{{item.namets}}</view>
<image src="@/static/up.png" class="selicon"></image>
</view>
<view class="swipers-items-qpimg" @click.stop="qingping()">
<uni-icons v-if="isqp" type="checkbox" size="24" color="#666"></uni-icons>
<uni-icons v-else type="close" size="24" color="#666"></uni-icons>
</view>
</view>
</swiper-item>
</swiper>
<uni-popup type="bottom" ref="select">
<view class="list">
<view class="list-top">
<image :src="vodinfo.img" class="list-top-img"></image>
<view class="list-top-text">
<view>
<text class="list-top-title">{{vodinfo.title}}</text>
</view>
<view>
<text class="list-top-info">{{vodinfo.upstatus}} , 共{{total}}集</text>
</view>
</view>
<uni-icons class="downicon" type="down" color="#ff007f" @click="down()"></uni-icons>
</view>
<view class="listtab">
<text class="listtab-txt" :style="tabindex == 0?'color:#333':''" @tap="changetab(0)">选集</text>
<text class="listtab-txt" :style="tabindex == 1?'color:#333':''" @tap="changetab(1)">简介</text>
</view>
<scroll-view class="listwrap" v-if="tabindex == 0" :scroll-y="true" :scroll-top="scrollTop">
<view class="list-box">
<block v-for="(medias,index) in originList" :key="index">
<view @click="selectThisVideo(index)" class="list-box-item" :style="(index+1)%6 == 0?'margin-right:0':''">
<view class="list-box-item-info" :style="index == originIndex?'background-color:#fee9f8':''">
<view class="item_suo_box" v-if="medias.pays==1">
<uni-icons class="item_suo" type="locked" color="#ff007f"></uni-icons>
</view>
<text class="item_name" :style="index == originIndex?'color:#ff007f':''">{{index+1}}</text>
</view>
</view>
</block>
</view>
</scroll-view>
<scroll-view :scroll-y="true" v-if="tabindex == 1" class="voddesc">
<mp-html :content="vodinfo.info" container-style="color: #333;" />
</scroll-view>
</view>
</uni-popup>
<!--弹窗广告-->
<uni-popup ref="popupad" type="bottom">
<view class="custom_ad">
<view class="status_bar" :style="{'height':statusBarHeight+'px'}">状态栏</view>
<view class="toptip">
<text class="adtip">AD | {{second}} {{second_tip}}</text>
<text @click="closeAd()" class="adclose">关闭</text>
</view>
<view class="adcon" :style="{'height':(windowHeight-statusBarHeight-44)+'px'}">
<image v-if="adinfo.type =='image'" class="adimg" mode="aspectFit" :src="adinfo.src"></image>
<video class="adimg" object-fit="cover" v-else :src="adinfo.src" autoplay="true" controls="false"></video>
<cover-view class="adlink" @tap="clickAd()"></cover-view>
</view>
</view>
</uni-popup>
<uni-popup ref="popupbuy" type="bottom">
<charge-dialog :vid="vid" :serialNo="serialno" :mid="mid" :adunlock="adunlock"
@Adunlock="freebyad" @watchClose="chargeClose" >
</charge-dialog>
</uni-popup>
</view>
</template>
<script>
import request from "@/common/request.js"
var adtmjs,rewardedVideoAd
import { mapActions } from 'vuex'
export default {
data() {
return {
vodinfo:[],
total:0,
originList: [], // 源数据
displaySwiperList: [], // swiper需要的数据
displayIndex: 0, // 用于显示swiper的真正的下标数值只有:0,1,2。
originIndex: 0, // 记录源数据的下标
windowHeight:0,
videoHeight:0,
statusBarHeight:0,
current:0,
isqp:false,//清屏
buyindex:0,//解锁集索引
scrollTop:0,
vid: 0,
serialno:0,//第几集
mid: 0,//单集ID
uscore:0,
priced:0,//单集价格
priceq:0,//全集价格
ad_isLoaded:false,
adpid:'',
mpadid:'',
adunlock:0,//广告解锁开关
ad_unlock_vids:[],//广告解锁剧集
unlocknum:1,//解锁集数
second:60,//广告时间
second_tip:'秒后可获得奖励',
adinfo:[],//平台广告
tabindex:0,
timer: null
}
},
onLoad(e) {
if(e.invitecode){
uni.setStorageSync('invitecode',e.invitecode)
}
if(e.vid>0){
this.vid = parseInt(e.vid)
}
if(e.mid>0){
this.mid = parseInt(e.mid)
}
if(e.serialno>0){
this.serialno = parseInt(e.serialno)
}
//缓存的解锁剧集
if(uni.getStorageSync("ad_unlock_vids")){
this.ad_unlock_vids = uni.getStorageSync("ad_unlock_vids")
}
this.config();
this.videoinfo();
},
onReady() {
// 使用同步方法获取系统信息
const systemInfo = uni.getSystemInfoSync();
this.statusBarHeight = systemInfo.statusBarHeight;
// 获取安全区域信息
const safeArea = systemInfo.safeArea;
// 底部安全高度(注意:这里假设safeArea.bottom是相对于屏幕底部的安全距离)
const safeHeight = safeArea.bottom ? safeArea.bottom : 0;
this.windowHeight = systemInfo.windowHeight
this.videoHeight = safeHeight-65
},
methods: {
...mapActions(['getConfig']),
async config(){
let sitecfg = await this.getConfig()
if(sitecfg && sitecfg.site.adunlock==1){
this.adunlock = parseInt(sitecfg.site.adunlock)
this.unlocknum = sitecfg.site.adunlock_num
this.adpid = sitecfg.site.appad.adpid;//app奖励广告adpid
this.createAd();
}
},
//加载剧集
async videoinfo(){
let that=this
let data = {};
data.vid= parseInt(this.vid)
let [err,res] =await request.get('/api/video/videoinfo',data,{token:true});
if(res.data.total){
this.vodinfo = res.data.info
uni.setNavigationBarTitle({
title: this.vodinfo.title
});
this.total = res.data.total//总集数
var msg = res.data.data
var midlog = res.data.midlog //观看历史记录视频id
//2.这里把视频添加到视频列表
for (let i = 0; i < msg.length; i++) {
msg[i].vid = msg[i].pid
if(that.serialno>0){
if(i == that.serialno-1){
that.originIndex=i
}
}else if(msg[i].mid==that.mid){
that.originIndex=i
}else{
if(msg[i].mid == midlog){
that.originIndex=i
}
}
//判断是否广告解锁
if(msg[i].pays==1 && that.ad_unlock_vids.indexOf(msg[i].pid+'_'+msg[i].mid) !=-1){
msg[i].pays = 2
}
}
that.originList = msg
that.initSwiperData(that.originIndex);
}else{
uni.showToast({ title: '加载出现错误',icon:"none" });
setTimeout(function(){
uni.navigateTo({
url:'/pages/index/index'
})
},1000)
}
},
createAd(){
// #ifndef H5
let userId = this.memberInfo?this.memberInfo.id:0;
if (this.adpid || this.mpadid){
rewardedVideoAd = uni.createRewardedVideoAd({
adpid: this.adpid,
urlCallback: { // 服务器回调透传参数
userId: userId,
extra: 'testdata'
}
})
rewardedVideoAd.onLoad(() => {
this.ad_isLoaded = true
console.log('onLoad event')
// 当激励视频被关闭时,默认预载下一条数据,加载完成时仍然触发 `onLoad` 事件
})
rewardedVideoAd.onError((err) => {
console.log('onError event', err)
})
rewardedVideoAd.onClose(res => {
if (res && res.isEnded) {
// 正常播放结束
this.adEnded()
} else {
// 播放中途退出
}
})
}
// #endif
},
//广告解锁
async freebyad(){
let that=this
this.chargeClose();
if (this.ad_isLoaded) {
rewardedVideoAd.show()
}else{
//随机取一个广告
let data={}
let [err,res] =await request.get('/api/index/rewardad',data);
if(res.data.code==1){
this.adinfo=res.data.data
}
this.$refs.popupad.open('bottom');
clearInterval(adtmjs)
this.second=30
//广告时间
adtmjs = setInterval(() => {
this.second--
if (this.second == 0) {
clearInterval(adtmjs)
adtmjs = null
this.second=''
this.second_tip='已获得奖励'
}
}, 1000);
}
},
closeAd(){
this.$refs.popupad.close();
if(this.second==''){
this.adEnded()
}
},
clickAd(){
if(!this.adinfo.link){
return
}
if(this.adinfo.linktype==1){
uni.navigateTo({
url:'/pages/index/webva?url='+encodeURIComponent(this.adinfo.link)
})
}else{
uni.navigateTo({
url:this.adinfo.link
})
}
},
//激励广告执行解锁
adEnded(){
var curindex = this.buyindex
for (let i=0;i<this.unlocknum;i++) {
if(!this.originList[curindex]){
break
}
let info=this.originList[curindex]
let ad_vid=info.pid+'_'+info.id;
if(this.ad_unlock_vids.indexOf(ad_vid)==-1){
this.ad_unlock_vids.push(ad_vid)
}
curindex++
}
uni.setStorageSync("ad_unlock_vids",this.ad_unlock_vids)
this.unlocked()
uni.showToast({
title: '剧集解锁成功',
icon:'none'
})
},
//选集播放
selectThisVideo(index){
this.down();
this.duration = 20;
this.originIndex=index
this.initSwiperData(index);
setTimeout(()=>{
this.duration = 500;
},500)
},
down(){
this.$refs.select.close();
},
chargeClose(){
this.$refs.popupbuy.close();
},
sellxj() {
this.$refs.select.open('bottom');
},
needpay(){
if(this.originList[this.originIndex].pays==1){
this.buyindex=this.originIndex
this.$refs.popupbuy.open('bottom');
return
}
},
//解锁成功
unlocked(){
console.log(this.buyindex,this.current)
//刷新数据,判断是否广告解锁
for (let i=0;i<this.originList.length;i++) {
let pid=this.originList[i].pid
let mid=this.originList[i].mid
if(this.originList[i].pays==1 && this.ad_unlock_vids.indexOf(pid+'_'+mid) !=-1){
this.originList[i].pays = 2
}
}
this.selectThisVideo(this.buyindex)
},
qingping(){
this.isqp=!this.isqp
},
onPlay(){
this.timer = setTimeout(()=>{
this.isqp=true
},3000)
},
onPause(){
this.isqp=false
clearTimeout(this.timer);
},
onEnded() {
if(this.displayIndex<2){
this.current=this.displayIndex+1
}else{
this.current=0
}
},
changetab(index){
this.tabindex=index
},
/**
* 初始一个显示的swiper数据
* originIndex 从源数据的哪个开始显示默认0,如从其他页面跳转进来,要显示第n个,这个参数就是他的下标
*/
async initSwiperData(originIndex = this.originIndex) {
const originListLength = this.originList.length; // 源数据长度
const displayList = [];
displayList[this.displayIndex] = this.originList[originIndex];
displayList[this.displayIndex - 1 == -1 ? 2 : this.displayIndex - 1] = this.originList[originIndex - 1 == -1 ? originListLength - 1 : originIndex - 1];
displayList[this.displayIndex + 1 == 3 ? 0 : this.displayIndex + 1] = this.originList[originIndex + 1 == originListLength ? 0 : originIndex + 1];
this.displaySwiperList = displayList;
this.tableTimeStamp = new Date().getTime();
//正在播放集数
this.mid = this.originList[originIndex].mid
this.serialno = parseInt(originIndex+1)//集数
this.needpay()
},
/**
* swiper滑动时候
*/
swiperChange(event) {
this.circular=true
const { current } = event.detail;
this.current = current
const originListLength = this.originList.length; // 源数据长度
// =============向后==========
if (this.displayIndex - current == 2 || this.displayIndex - current == -1) {
this.originIndex =
this.originIndex + 1 == originListLength ? 0 : this.originIndex + 1;
this.displayIndex = this.displayIndex + 1 == 3 ? 0 : this.displayIndex + 1;
this.initSwiperData(this.originIndex);
}
// ======如果两者的差为-2或者1则是向前滑动============
else if (this.displayIndex - current == -2 || this.displayIndex - current == 1) {
this.originIndex = this.originIndex - 1 == -1 ? originListLength - 1 : this.originIndex - 1;
this.displayIndex = this.displayIndex - 1 == -1 ? 2 : this.displayIndex - 1;
this.initSwiperData(this.originIndex);
}
}
}
}
</script>
<style>
.detail {
background-color: #000;
position: relative;
}
.topbar{
width:100%;
position: absolute;
top:0;
z-index:100;
}
.swipers {
height:100%;
}
.swipers-items{
position: relative;
}
.swipers-items-video {
width:100%;
}
.swipers-items-imgsbg {
width: 100%;
height:100%;
border-radius: 0 0 25rpx 25rpx;
}
.playbtnbox{
width:100%;
position: absolute;
top:0;
z-index:1;
display: flex;
justify-content: center;
align-items: center;
background-color: rgba(0, 0, 0,0.6);
}
.playState{
width: 160rpx;
height: 160rpx;
opacity: 0.8;
}
.unlockbtn{
padding:10upx 20upx;
border-radius:50rpx;
background-color: #ff007f;
}
.unlockbtn-txt{
color:white;
font-size:28rpx;
}
.swipers-items-info {
width: 600rpx;
position: absolute;
bottom: 200rpx;
left: 20rpx;
color: #ffffff;
z-index: 1;
}
.swipers-items-info-title{
display: flex;
flex-direction: row;
align-items: center;
}
.swipers-items-info-img{
width:60rpx;
height:80rpx;
border-radius: 10rpx;
}
.swipers-items-info-name{
color: #ffffff;
font-size: 28rpx;
margin-left: 20rpx;
}
.swipers-items-info-content {
font-size: 26rpx;
color: #ffffff;
overflow: hidden;
margin-top: 10rpx;
border-radius: 10rpx;
}
.swiper-selbar{
margin-top: 20rpx;
display: flex;
height:100rpx;
align-items: center;
}
.selvideo{
width:100%;
position: relative;
}
.selicon{
z-index: 1;
width:60rpx;
height:60rpx;
position: absolute;
top:35rpx;
right: 50rpx;
}
.swipers-items-info-num {
margin: 30rpx;
color: #ffffff;
font-size: 28rpx;
background-color: #1a1a1a;
border-radius: 10rpx;
padding: 20rpx;
opacity: 1;
}
.swipers-items-qpimg{
margin-right:15rpx;
}
.swipers-items-right {
z-index: 1;
width: 70rpx;
position: absolute;
right: 20rpx;
bottom: 300rpx;
z-index: 999;
}
.swipers-items-right-item {
margin-bottom: 20rpx;
text-align: center;
}
.swipers-items-right-item-img {
width: 60rpx;
height: 60rpx;
margin-left:5rpx
}
.swipers-items-right-item-txt {
text-align: center;
font-size: 20rpx;
color: #ffffff;
}
.share-btn{
z-index: 1;
position: absolute;
width: 60rpx;
height: 60rpx;
border: 0;
background-color: transparent;
}
.list {
background:#ffffff;
padding:20upx;
border-radius: 20upx 20upx 0 0;
}
.list-top {
display: flex;
flex-direction: row;
}
.list-top-img {
width: 130upx;
height: 160upx;
border-radius: 10rpx;
}
.list-top-text {
padding-left: 30rpx;
padding-right: 30rpx;
}
.list-top-title {
font-size:28upx;
}
.list-top-info {
font-size:24upx;
color:#999;
margin-top: 20upx;
}
.listwrap{
width: 710upx;
height: 500upx;
}
.list-item {
padding: 0 30rpx;
}
.list-item-box {
line-height: 90rpx;
background-color: #fff;
color: #000;
font-weight: bold;
text-align: center;
margin-bottom: 40rpx;
border-radius: 20rpx;
}
.list-box {
width:710rpx;
display:flex;
flex-wrap: wrap; /* 允许换行 */
flex-direction: row;
padding-top: 20upx;
align-items: center; /* 子元素在交叉轴上的对齐方式 */
}
.list-box-item {
position: relative;
text-align: center;
margin: 0 20upx 20upx 0;
height: 80upx;
width: 100upx;
overflow: hidden;
background-color: #F2F5F7;
border-radius: 5upx;
}
.item_name{
line-height: 80upx;
font-size: 36rpx;
text-align: center;
}
.item_suo_box{
position: absolute;
z-index: 1;
top:0;
right:0;
width: 36upx;
height: 36upx;
background-color: #e7e7e7;
border-radius: 0 10rpx;
}
.flex_row{
display: flex;
align-items: center;
}
.downicon {
width: 30px;
height: 30px;
margin-top: 5px;
position: absolute;
z-index: 1;
right: 10px;
}
.custom_ad{
width: 750rpx;
position: relative;
background-color: #000;
}
.toptip{
display: flex;
flex-direction: row;
justify-content: space-between;
padding:20rpx;
background-color: #000;
}
.adtip,.adclose{
color:#ccc;
font-size: 12px;
border: solid 1px #eee;
border-radius: 10px;
padding: 2px 5px;
background-color: #333;
}
.adcon{
position: relative;
display: flex;
flex-direction: column;
}
.adimg{
/* #ifndef APP */
width: 100%;
height: 100%;
/* #endif */
/* #ifdef APP */
flex:1;
width:750rpx;
/* #endif */
}
.adlink{
position: absolute;
top:0;
bottom: 0;
left:0;
right:0;
z-index: 1000;
}
.listtab{
display: flex;
flex-direction: row;
padding:15rpx 0;
}
.listtab-txt{
font-size:32upx;
padding:0 10upx;
color: #999;
}
.voddesc{
font-size:28upx;
padding: 0 10rpx;
color: #333;
height: 500upx;
}
</style>
chunk-vendors.js:20712 [Vue warn]: Property or method "onError" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
found in
---> <OVideo> at components/common/video.vue
at pages/video/detail.vue
warn @ chunk-vendors.js:20712
warnNonPresent @ chunk-vendors.js:22116
get @ chunk-vendors.js:22171
error @ pages-video-detail~pages-video-video.js:2447
invokeWithErrorHandling @ chunk-vendors.js:21955
invoker @ chunk-vendors.js:22280
invokeWithErrorHandling @ chunk-vendors.js:21955
Vue.$emit @ chunk-vendors.js:24024
$trigger @ chunk-vendors.js:19677
onVideoError @ chunk-vendors.js:19677
invokeWithErrorHandling @ chunk-vendors.js:21955
invoker @ chunk-vendors.js:22280
original._wrapper @ chunk-vendors.js:27164
error (async)
add$1 @ chunk-vendors.js:27168
updateListeners @ chunk-vendors.js:22312
updateDOMListeners @ chunk-vendors.js:27198
invokeCreateHooks @ chunk-vendors.js:26207
createElm @ chunk-vendors.js:26094
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
addVnodes @ chunk-vendors.js:26247
updateChildren @ chunk-vendors.js:26374
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
patch @ chunk-vendors.js:26623
Vue._update @ chunk-vendors.js:24084
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
run @ chunk-vendors.js:24696
flushSchedulerQueue @ chunk-vendors.js:24452
(anonymous) @ chunk-vendors.js:22081
flushCallbacks @ chunk-vendors.js:22007
Promise.then (async)
timerFunc @ chunk-vendors.js:22034
nextTick @ chunk-vendors.js:22091
queueWatcher @ chunk-vendors.js:24544
update @ chunk-vendors.js:24686
notify @ chunk-vendors.js:20826
reactiveSetter @ chunk-vendors.js:21158
proxySetter @ chunk-vendors.js:24773
_callee2$ @ detail.vue:185
tryCatch @ chunk-vendors.js:5954
(anonymous) @ chunk-vendors.js:6035
(anonymous) @ chunk-vendors.js:5979
asyncGeneratorStep @ chunk-vendors.js:6408
_next @ chunk-vendors.js:6427
Promise.then (async)
asyncGeneratorStep @ chunk-vendors.js:6417
_next @ chunk-vendors.js:6427
(anonymous) @ chunk-vendors.js:6432
(anonymous) @ chunk-vendors.js:6424
videoinfo @ detail.vue:221
onLoad @ detail.vue:153
invokeWithErrorHandling @ chunk-vendors.js:21955
push.m44O.Vue.__call_hook @ chunk-vendors.js:28703
r @ chunk-vendors.js:19677
a @ chunk-vendors.js:19677
created @ chunk-vendors.js:19677
invokeWithErrorHandling @ chunk-vendors.js:21955
callHook @ chunk-vendors.js:24361
Vue._init @ chunk-vendors.js:25146
VueComponent @ chunk-vendors.js:25292
createComponentInstanceForVnode @ chunk-vendors.js:23422
init @ chunk-vendors.js:23251
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
addVnodes @ chunk-vendors.js:26247
updateChildren @ chunk-vendors.js:26374
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
patch @ chunk-vendors.js:26623
Vue._update @ chunk-vendors.js:24084
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
run @ chunk-vendors.js:24696
flushSchedulerQueue @ chunk-vendors.js:24452
(anonymous) @ chunk-vendors.js:22081
flushCallbacks @ chunk-vendors.js:22007
Promise.then (async)
timerFunc @ chunk-vendors.js:22034
nextTick @ chunk-vendors.js:22091
queueWatcher @ chunk-vendors.js:24544
update @ chunk-vendors.js:24686
Vue.$forceUpdate @ chunk-vendors.js:24105
forceRender @ chunk-vendors.js:23783
(anonymous) @ chunk-vendors.js:23805
(anonymous) @ chunk-vendors.js:20429
(anonymous) @ index.js:1505
Promise.then (async)
(anonymous) @ index.js:1504
resolveAsyncComponent @ chunk-vendors.js:23822
createComponent @ chunk-vendors.js:23339
_createElement @ chunk-vendors.js:23561
createElement @ chunk-vendors.js:23492
vm.$createElement @ chunk-vendors.js:23633
render @ index.js:2505
Vue._render @ chunk-vendors.js:23684
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26657
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
eval @ main.js:28
V+zZ @ index.js:1190
__webpack_require__ @ index.js:854
fn @ index.js:151
1 @ index.js:1037
__webpack_require__ @ index.js:854
checkDeferredModules @ index.js:46
(anonymous) @ index.js:994
(anonymous) @ index.js:997
Show 149 more frames
chunk-vendors.js:20712 [Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'apply' of undefined"
found in
---> <OVideo> at components/common/video.vue
at pages/video/detail.vue
warn @ chunk-vendors.js:20712
e.config.errorHandler @ chunk-vendors.js:19677
globalHandleError @ chunk-vendors.js:21971
handleError @ chunk-vendors.js:21940
invokeWithErrorHandling @ chunk-vendors.js:21963
invoker @ chunk-vendors.js:22280
invokeWithErrorHandling @ chunk-vendors.js:21955
Vue.$emit @ chunk-vendors.js:24024
$trigger @ chunk-vendors.js:19677
onVideoError @ chunk-vendors.js:19677
invokeWithErrorHandling @ chunk-vendors.js:21955
invoker @ chunk-vendors.js:22280
original._wrapper @ chunk-vendors.js:27164
error (async)
add$1 @ chunk-vendors.js:27168
updateListeners @ chunk-vendors.js:22312
updateDOMListeners @ chunk-vendors.js:27198
invokeCreateHooks @ chunk-vendors.js:26207
createElm @ chunk-vendors.js:26094
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
addVnodes @ chunk-vendors.js:26247
updateChildren @ chunk-vendors.js:26374
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
patch @ chunk-vendors.js:26623
Vue._update @ chunk-vendors.js:24084
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
run @ chunk-vendors.js:24696
flushSchedulerQueue @ chunk-vendors.js:24452
(anonymous) @ chunk-vendors.js:22081
flushCallbacks @ chunk-vendors.js:22007
Promise.then (async)
timerFunc @ chunk-vendors.js:22034
nextTick @ chunk-vendors.js:22091
queueWatcher @ chunk-vendors.js:24544
update @ chunk-vendors.js:24686
notify @ chunk-vendors.js:20826
reactiveSetter @ chunk-vendors.js:21158
proxySetter @ chunk-vendors.js:24773
_callee2$ @ detail.vue:185
tryCatch @ chunk-vendors.js:5954
(anonymous) @ chunk-vendors.js:6035
(anonymous) @ chunk-vendors.js:5979
asyncGeneratorStep @ chunk-vendors.js:6408
_next @ chunk-vendors.js:6427
Promise.then (async)
asyncGeneratorStep @ chunk-vendors.js:6417
_next @ chunk-vendors.js:6427
(anonymous) @ chunk-vendors.js:6432
(anonymous) @ chunk-vendors.js:6424
videoinfo @ detail.vue:221
onLoad @ detail.vue:153
invokeWithErrorHandling @ chunk-vendors.js:21955
push.m44O.Vue.__call_hook @ chunk-vendors.js:28703
r @ chunk-vendors.js:19677
a @ chunk-vendors.js:19677
created @ chunk-vendors.js:19677
invokeWithErrorHandling @ chunk-vendors.js:21955
callHook @ chunk-vendors.js:24361
Vue._init @ chunk-vendors.js:25146
VueComponent @ chunk-vendors.js:25292
createComponentInstanceForVnode @ chunk-vendors.js:23422
init @ chunk-vendors.js:23251
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
addVnodes @ chunk-vendors.js:26247
updateChildren @ chunk-vendors.js:26374
patchVnode @ chunk-vendors.js:26460
updateChildren @ chunk-vendors.js:26334
patchVnode @ chunk-vendors.js:26460
patch @ chunk-vendors.js:26623
Vue._update @ chunk-vendors.js:24084
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
run @ chunk-vendors.js:24696
flushSchedulerQueue @ chunk-vendors.js:24452
(anonymous) @ chunk-vendors.js:22081
flushCallbacks @ chunk-vendors.js:22007
Promise.then (async)
timerFunc @ chunk-vendors.js:22034
nextTick @ chunk-vendors.js:22091
queueWatcher @ chunk-vendors.js:24544
update @ chunk-vendors.js:24686
Vue.$forceUpdate @ chunk-vendors.js:24105
forceRender @ chunk-vendors.js:23783
(anonymous) @ chunk-vendors.js:23805
(anonymous) @ chunk-vendors.js:20429
(anonymous) @ index.js:1505
Promise.then (async)
(anonymous) @ index.js:1504
resolveAsyncComponent @ chunk-vendors.js:23822
createComponent @ chunk-vendors.js:23339
_createElement @ chunk-vendors.js:23561
createElement @ chunk-vendors.js:23492
vm.$createElement @ chunk-vendors.js:23633
render @ index.js:2505
Vue._render @ chunk-vendors.js:23684
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
createChildren @ chunk-vendors.js:26191
createElm @ chunk-vendors.js:26092
patch @ chunk-vendors.js:26618
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
init @ chunk-vendors.js:23255
createComponent @ chunk-vendors.js:26116
createElm @ chunk-vendors.js:26063
patch @ chunk-vendors.js:26657
Vue._update @ chunk-vendors.js:24081
updateComponent @ chunk-vendors.js:24202
get @ chunk-vendors.js:24621
Watcher @ chunk-vendors.js:24610
mountComponent @ chunk-vendors.js:24209
push.m44O.Vue.$mount @ chunk-vendors.js:28719
eval @ main.js:28
V+zZ @ index.js:1190
__webpack_require__ @ index.js:854
fn @ index.js:151
1 @ index.js:1037
__webpack_require__ @ index.js:854
checkDeferredModules @ index.js:46
(anonymous) @ index.js:994
(anonymous) @ index.js:997
Show 149 more frames
chunk-vendors.js:19677 [system] TypeError: Cannot read property 'apply' of undefined
at error (pages-video-detail~pages-video-video.js:2447)
at invokeWithErrorHandling (chunk-vendors.js:21955)
at VueComponent.invoker (chunk-vendors.js:22280)
at invokeWithErrorHandling (chunk-vendors.js:21955)
at VueComponent.Vue.$emit (chunk-vendors.js:24024)
at VueComponent.$trigger (chunk-vendors.js:19677)
at VueComponent.onVideoError (chunk-vendors.js:19677)
at invokeWithErrorHandling (chunk-vendors.js:21955)
at HTMLVideoElement.invoker (chunk-vendors.js:22280)
at HTMLVideoElement.original._wrapper (chunk-vendors.js:27164)
最新发布