视频协同
This commit is contained in:
@@ -24,7 +24,7 @@
|
|||||||
<AiMonitor :isShowBar="isShowBar" :src="m.url" type="slw" :name="m.name" @close="removeMonitor(i)" ref="AiMonitor"></AiMonitor>
|
<AiMonitor :isShowBar="isShowBar" :src="m.url" type="slw" :name="m.name" @close="removeMonitor(i)" ref="AiMonitor"></AiMonitor>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<Synergy v-if="!isShowBar" style="width: 100%; height: 68px;"></Synergy>
|
<Synergy ref="Synergy" v-if="!isShowBar && monitors.length" style="width: 100%; height: 68px;"></Synergy>
|
||||||
</div>
|
</div>
|
||||||
<ai-dialog title="修改名称" :visible.sync="dialog" width="500px" @onConfirm="handleSubmit(selected)"
|
<ai-dialog title="修改名称" :visible.sync="dialog" width="500px" @onConfirm="handleSubmit(selected)"
|
||||||
@closed="selected={}">
|
@closed="selected={}">
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
splitOps() {
|
splitOps() {
|
||||||
return [
|
return [
|
||||||
{label: "单分屏", value: 1, per: "100%"},
|
{label: "单分屏", value: 1, per: "100%"},
|
||||||
{label: "四分屏", value: 4, per: "49%"},
|
{label: "四分屏", value: 4, per: "49.2%"},
|
||||||
{label: "九分屏", value: 9, per: "32%"}
|
{label: "九分屏", value: 9, per: "32%"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -93,6 +93,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
slider () {
|
||||||
|
this.$refs.AiMonitor && this.$refs.AiMonitor.forEach(e => {
|
||||||
|
e.reset()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.$refs.Synergy && this.$refs.Synergy.init()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
created() {
|
created() {
|
||||||
this.selected.areaId = this.user.info.areaId
|
this.selected.areaId = this.user.info.areaId
|
||||||
this.disabledLevel = this.user.info.areaList.length - 1
|
this.disabledLevel = this.user.info.areaList.length - 1
|
||||||
@@ -122,7 +132,7 @@
|
|||||||
this.monitors = [this.monitors[0]]
|
this.monitors = [this.monitors[0]]
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$refs.AiMonitor.forEach(e => {
|
this.$refs.AiMonitor && this.$refs.AiMonitor.forEach(e => {
|
||||||
e.reset()
|
e.reset()
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
<el-form class="ai-form" ref="form" :model="form" label-width="80px" size="small">
|
<el-form class="ai-form" ref="form" :model="form" label-width="80px" size="small">
|
||||||
<el-form-item label="选择日期" prop="date" :rules="[{ required: true, message: '请选择日期', trigger: 'change' }]">
|
<el-form-item label="选择日期" prop="date" :rules="[{ required: true, message: '请选择日期', trigger: 'change' }]">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
value-format="yyyy-MM-DD"
|
value-format="yyyy-MM-dd"
|
||||||
v-model="form.date"
|
v-model="form.date"
|
||||||
type="date"
|
type="date"
|
||||||
placeholder="选择日期">
|
placeholder="选择日期">
|
||||||
@@ -135,19 +135,30 @@
|
|||||||
this.form.date = this.$moment(new Date()).format('YYYY-MM-DD')
|
this.form.date = this.$moment(new Date()).format('YYYY-MM-DD')
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.width = document.querySelector(`#${this.videoId}`).offsetWidth + 'px'
|
this.width = document.querySelector(`#${this.videoId}`).offsetWidth + 'px'
|
||||||
|
|
||||||
|
document.addEventListener('fullscreenchange', this.fullScreenChange)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
destroyed () {
|
||||||
|
document.removeEventListener('fullscreenchange', this.fullScreenChange)
|
||||||
|
},
|
||||||
|
fullScreenChange () {
|
||||||
|
if (document.fullscreenElement) {
|
||||||
|
} else {
|
||||||
|
this.reset()
|
||||||
|
}
|
||||||
|
},
|
||||||
exitFullscreen () {
|
exitFullscreen () {
|
||||||
if (document.exitFullscreen) {
|
if (document.exitFullscreen) {
|
||||||
document.exitFullscreen()
|
document.exitFullscreen()
|
||||||
} else if (document.msExitFullscreen) {
|
|
||||||
document.msExitFullscreen()
|
|
||||||
} else if (document.mozCancelFullScreen) {
|
} else if (document.mozCancelFullScreen) {
|
||||||
document.mozCancelFullScreen()
|
document.mozCancelFullScreen()
|
||||||
} else if (document.webkitExitFullscreen) {
|
} else if (document.webkitExitFullscreen) {
|
||||||
document.webkitExitFullscreen()
|
document.webkitExitFullscreen()
|
||||||
|
} else if (document.msExitFullscreen) {
|
||||||
|
window.top.document.msExitFullscreen()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -208,15 +219,16 @@
|
|||||||
this.$emit('close')
|
this.$emit('close')
|
||||||
},
|
},
|
||||||
|
|
||||||
requestFullScreen (element) {
|
requestFullScreen (elem) {
|
||||||
var requestMethod = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullScreen;
|
if (elem.requestFullscreen) {
|
||||||
if (requestMethod) {
|
elem.requestFullscreen()
|
||||||
requestMethod.call(element);
|
} else if (elem.mozRequestFullScreen) {
|
||||||
} else if (typeof window.ActiveXObject !== 'undefined') {
|
elem.mozRequestFullScreen()
|
||||||
var wscript = new ActiveXObject('WScript.Shell')
|
} else if (elem.webkitRequestFullscreen) {
|
||||||
if (wscript !== null) {
|
elem.webkitRequestFullscreen()
|
||||||
wscript.SendKeys('{F11}')
|
} else if (elem.msRequestFullscreen) {
|
||||||
}
|
elem = window.top.document.body
|
||||||
|
elem.msRequestFullscreen()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -388,7 +400,7 @@
|
|||||||
.volume-slider {
|
.volume-slider {
|
||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 20px;
|
bottom: 15px;
|
||||||
left: 50%;
|
left: 50%;
|
||||||
z-index: -1;
|
z-index: -1;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
|
|||||||
@@ -48,6 +48,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="playback">
|
||||||
|
<div class="synergr-more" @click="isShowTimeline = !isShowTimeline" :class="[isShowTimeline ? 'active' : '']">
|
||||||
|
<img title="展开" src="https://cdn.cunwuyun.cn/slw2.0/images/arrow.png" />
|
||||||
|
</div>
|
||||||
|
<div class="playback-list" v-if="isShowTimeline">
|
||||||
|
<div class="playback-item" v-for="(item, index) in 4" :key="index">
|
||||||
|
<el-checkbox></el-checkbox>
|
||||||
|
<span>通道{{ index }}</span>
|
||||||
|
<div class="playback-item__timeline"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<ai-dialog
|
<ai-dialog
|
||||||
title="选择日期"
|
title="选择日期"
|
||||||
:visible.sync="isShowDate"
|
:visible.sync="isShowDate"
|
||||||
@@ -56,7 +68,7 @@
|
|||||||
<el-form class="ai-form" ref="form" :model="form" label-width="80px" size="small">
|
<el-form class="ai-form" ref="form" :model="form" label-width="80px" size="small">
|
||||||
<el-form-item label="选择日期" prop="date" :rules="[{ required: true, message: '请选择日期', trigger: 'change' }]">
|
<el-form-item label="选择日期" prop="date" :rules="[{ required: true, message: '请选择日期', trigger: 'change' }]">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
value-format="yyyy-MM-DD"
|
value-format="yyyy-MM-dd"
|
||||||
v-model="form.date"
|
v-model="form.date"
|
||||||
type="date"
|
type="date"
|
||||||
placeholder="选择日期">
|
placeholder="选择日期">
|
||||||
@@ -90,6 +102,8 @@
|
|||||||
form: {
|
form: {
|
||||||
date: ''
|
date: ''
|
||||||
},
|
},
|
||||||
|
isShowTimeline: false,
|
||||||
|
checkList: [],
|
||||||
isInit: false,
|
isInit: false,
|
||||||
left: 0,
|
left: 0,
|
||||||
date: '',
|
date: '',
|
||||||
@@ -99,7 +113,8 @@
|
|||||||
x: 0,
|
x: 0,
|
||||||
time: '',
|
time: '',
|
||||||
videoId: `synergr-${new Date().getTime()}`,
|
videoId: `synergr-${new Date().getTime()}`,
|
||||||
isFullscreen: false
|
isFullscreen: false,
|
||||||
|
timer: null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -278,10 +293,7 @@
|
|||||||
|
|
||||||
reset () {
|
reset () {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.width = document.querySelector(`#${this.videoId}`).offsetWidth + 'px'
|
this.init()
|
||||||
this.$nextTick(() => {
|
|
||||||
this.$refs.timeline.init()
|
|
||||||
})
|
|
||||||
}, 60)
|
}, 60)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,9 +306,68 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
font-size: 0;
|
font-size: 0;
|
||||||
overflow: hidden;
|
|
||||||
background: rgba(40, 43, 58, 1);
|
background: rgba(40, 43, 58, 1);
|
||||||
|
|
||||||
|
.playback {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 50%;
|
||||||
|
z-index: 1;
|
||||||
|
width: 100%;
|
||||||
|
padding-top: 6px;
|
||||||
|
text-align: center;
|
||||||
|
transform: translate(-50%, -100%);
|
||||||
|
background: #202330;
|
||||||
|
|
||||||
|
.synergr-more {
|
||||||
|
width: 80px;
|
||||||
|
height: 16px;
|
||||||
|
margin: 0 auto;
|
||||||
|
cursor: pointer;
|
||||||
|
background: url(https://cdn.cunwuyun.cn/slw2.0/images/more.png);
|
||||||
|
color: #fff;
|
||||||
|
|
||||||
|
img {
|
||||||
|
position: relative;
|
||||||
|
transition: all ease 0.5s;
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active img {
|
||||||
|
transform: rotate(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.playback-list {
|
||||||
|
padding: 8px 16px;
|
||||||
|
background: rgba(22, 24, 33, 1);
|
||||||
|
font-size: 12px;
|
||||||
|
color: #FFFFFF;
|
||||||
|
|
||||||
|
.playback-item {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.playback-item__timeline {
|
||||||
|
flex: 1;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 6px;
|
||||||
|
background: linear-gradient(180deg, #00CBFF 0%, #009CFF 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
padding: 0 8px 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.time-scale {
|
.time-scale {
|
||||||
display: flex;
|
display: flex;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|||||||
@@ -57,6 +57,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
|
||||||
onMousemove (e) {
|
onMousemove (e) {
|
||||||
const canvasInfo = document.querySelector(`#${this.id}`).getBoundingClientRect()
|
const canvasInfo = document.querySelector(`#${this.id}`).getBoundingClientRect()
|
||||||
const seconds = 24 * 60 * 60
|
const seconds = 24 * 60 * 60
|
||||||
@@ -90,8 +91,8 @@
|
|||||||
secTotime (s) {
|
secTotime (s) {
|
||||||
var t = ''
|
var t = ''
|
||||||
if(s > -1){
|
if(s > -1){
|
||||||
var hour = Math.floor(s / 3600)
|
var hour = Math.ceil(s / 3600)
|
||||||
var min = Math.floor(s / 60) % 60
|
var min = Math.ceil(s / 60) % 60
|
||||||
var sec = s % 60
|
var sec = s % 60
|
||||||
if(hour < 10) {
|
if(hour < 10) {
|
||||||
t = '0'+ hour + ":"
|
t = '0'+ hour + ":"
|
||||||
|
|||||||
Reference in New Issue
Block a user