mirror of
https://github.com/kuaifan/dootask.git
synced 2025-12-11 18:42:54 +00:00
137 lines
3.7 KiB
Vue
137 lines
3.7 KiB
Vue
<template>
|
|
<div class="meeting-player">
|
|
<div :id="id" class="player" :style="playerStyle"></div>
|
|
<UserAvatar v-if="userid" :userid="userid" :size="36" :borderWitdh="2"/>
|
|
<div v-else-if="tourist.userimg" class="common-avatar avatar-wrapper">
|
|
<div class="avatar-box online">
|
|
<em></em>
|
|
<EAvatar :size="36" :src="tourist.userimg"></EAvatar>
|
|
</div>
|
|
</div>
|
|
<div class="player-state">
|
|
<i v-if="!audio" class="taskfont"></i>
|
|
<i v-if="!video" class="taskfont"></i>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import {mapState} from "vuex";
|
|
|
|
export default {
|
|
name: "MeetingPlayer",
|
|
props: {
|
|
id: {
|
|
type: String,
|
|
default: () => {
|
|
return "meeting-player-" + Math.round(Math.random() * 10000);
|
|
}
|
|
},
|
|
player: {
|
|
type: Object,
|
|
default: () => ({})
|
|
},
|
|
isLocal: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
},
|
|
data() {
|
|
return {
|
|
timer: null,
|
|
tourist: {
|
|
uid: '',
|
|
nickname: '',
|
|
userimg: '',
|
|
}
|
|
}
|
|
},
|
|
mounted() {
|
|
this.timer = setInterval(_ => {
|
|
if (this.audio && !this.player.audioTrack.isPlaying) {
|
|
this.play('audio')
|
|
}
|
|
if (this.video && !this.player.videoTrack.isPlaying) {
|
|
this.play('video')
|
|
}
|
|
}, 3000)
|
|
},
|
|
beforeDestroy() {
|
|
clearInterval(this.timer)
|
|
},
|
|
computed: {
|
|
...mapState(['cacheUserBasic']),
|
|
userid() {
|
|
if (this.player.uid) {
|
|
if( (this.player.uid + '').indexOf('88888') !== -1 ){
|
|
this.getTouristInfo();
|
|
return 0;
|
|
}
|
|
return parseInt( (this.player.uid+"").substring(6) ) || 0
|
|
}
|
|
return 0
|
|
},
|
|
playerStyle() {
|
|
const user = this.cacheUserBasic.find(({userid}) => userid == this.userid);
|
|
if (user) {
|
|
return {
|
|
backgroundImage: `url("${user.userimg}")`
|
|
}
|
|
}else if(this.tourist.userimg){
|
|
return {
|
|
backgroundImage: `url("${this.tourist.userimg}")`
|
|
}
|
|
}
|
|
return null;
|
|
},
|
|
audio() {
|
|
return !!this.player.audioTrack
|
|
},
|
|
video() {
|
|
return !!this.player.videoTrack
|
|
}
|
|
},
|
|
watch: {
|
|
audio: {
|
|
handler(b) {
|
|
b && this.play('audio')
|
|
},
|
|
immediate: true
|
|
},
|
|
video: {
|
|
handler(b) {
|
|
b && this.play('video')
|
|
},
|
|
immediate: true
|
|
}
|
|
},
|
|
methods: {
|
|
play(type) {
|
|
this.$nextTick(_ => {
|
|
try {
|
|
if (type === 'audio') {
|
|
!this.isLocal && this.player.audioTrack.play();
|
|
} else if (type === 'video') {
|
|
this.player.videoTrack.play(this.id);
|
|
}
|
|
} catch (e) {
|
|
console.log("Meeting Player Error", e);
|
|
}
|
|
})
|
|
},
|
|
getTouristInfo() {
|
|
this.$store.dispatch("call", {
|
|
url: 'users/meeting/tourist',
|
|
data: {
|
|
tourist_id: this.player.uid
|
|
}
|
|
}).then(({data}) => {
|
|
this.tourist = data;
|
|
}).catch(({msg}) => {
|
|
$A.modalError(msg);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</script>
|