|
@@ -3,15 +3,13 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
<draggable
|
|
|
- v-for="item in bigScreenJson"
|
|
|
element="div"
|
|
|
- :class="['split_screen', splitScreenStatus === 0 ? 'split_screen_one' : splitScreenStatus === 1 ? 'split_screen_four' : splitScreenStatus === 2 ? 'split_screen_nine' : 'split_screen_sixteen']"
|
|
|
v-model="signalPreList"
|
|
|
- handle=".handle"
|
|
|
:options="dragOptions2"
|
|
|
:move="onMove"
|
|
|
@change="log"
|
|
|
- ref="bigscreen"
|
|
|
+ v-for="item in bigScreenJson"
|
|
|
+ :class="['split_screen', splitScreenStatus === 0 ? 'split_screen_one' : splitScreenStatus === 1 ? 'split_screen_four' : splitScreenStatus === 2 ? 'split_screen_nine' : 'split_screen_sixteen']"
|
|
|
:style="{
|
|
|
width:item.Width*bigScale + 'px',
|
|
|
height:item.Height*bigScale + 'px',
|
|
@@ -19,27 +17,29 @@
|
|
|
left:item.Left*bigScale+'px',
|
|
|
top:item.Top*bigScale+'px',
|
|
|
zIndex:item.ZIndex,
|
|
|
- display:item.IsVisibility ? 'black' : 'none',
|
|
|
+ display:item.IsVisibility ? 'black' : 'none'
|
|
|
}"
|
|
|
+ id="bigscreen"
|
|
|
>
|
|
|
<VueDragResize
|
|
|
v-for="itemV in signalPreList" :key="itemV.Id" class="sitem"
|
|
|
+ :w="item.Width*bigScale/itemV.splitScreenStatus" :h="item.Height*bigScale/itemV.splitScreenStatus"
|
|
|
@dragstop="dragStop" @resizestop="(obj) => reSizeSignal(obj,itemV)"
|
|
|
:style="{
|
|
|
- gridArea: gridPosition(itemV.splitScreenStatus,itemV.newIndex),
|
|
|
- width:item.Width*bigScale/itemV.splitScreenStatus + 'px',
|
|
|
- height:item.Height*bigScale/itemV.splitScreenStatus + 'px',
|
|
|
+ position: 'fixed',
|
|
|
+ top:itemV.top + 'px',
|
|
|
+ left:itemV.left + 'px'
|
|
|
}"
|
|
|
>
|
|
|
<div ref="signal">
|
|
|
{{itemV.deviceID}}
|
|
|
- <div class="closeBtn" @click.stop="closeSignal(itemV)">×</div>
|
|
|
<!--<video-player
|
|
|
- ref="videoPlayer"
|
|
|
- :options="playerOptions"
|
|
|
- :playsinline="true"
|
|
|
- >
|
|
|
+ ref="videoPlayer"
|
|
|
+ :options="playerOptions"
|
|
|
+ :playsinline="true"
|
|
|
+ >
|
|
|
</video-player>-->
|
|
|
+ <div class="closeBtn" @click.stop="closeSignal(itemV)">×</div>
|
|
|
</div>
|
|
|
</VueDragResize>
|
|
|
|
|
@@ -56,7 +56,7 @@
|
|
|
import VueDragResize from 'vue-drag-resize'
|
|
|
|
|
|
import '../assets/less/splitscreen.less'
|
|
|
- import {getElementLeft, getElementTop, getStaticFile, guId} from "../../utils/tools"
|
|
|
+ import {elePosition, getElementLeft, getElementTop, getStaticFile, guId} from "../../utils/tools"
|
|
|
import {reqRefreshView} from "../api"
|
|
|
import VideoPlayer from "./player.vue"
|
|
|
|
|
@@ -67,6 +67,7 @@
|
|
|
bindList:[], // 拼接屏的数量
|
|
|
streamWindows:[], // 传递出去的信号源位置信息
|
|
|
bigScreenJson:[], // 大屏配置json文件
|
|
|
+ currentBigshow:[], // 当前大屏
|
|
|
playerOptions: { // rtmp视频流配置
|
|
|
sources: [
|
|
|
{
|
|
@@ -82,6 +83,8 @@
|
|
|
preload: 'auto',
|
|
|
notSupportedMessage: '此视频暂无法播放,请稍后再试',
|
|
|
},
|
|
|
+ screenPosition:{}, // 大屏在视口中的位置
|
|
|
+ newIndex: 1, // 开窗拖到第几个格子中
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -101,6 +104,15 @@
|
|
|
this.$store.dispatch('splitScreen', Math.sqrt(num)-1)
|
|
|
},
|
|
|
|
|
|
+ updated() {
|
|
|
+ // 获取大屏在视口中的位置
|
|
|
+ const screenDiv = document.getElementById('bigscreen')
|
|
|
+ this.screenPosition = {
|
|
|
+ top:getElementTop(screenDiv),
|
|
|
+ left:getElementLeft(screenDiv)
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
methods: {
|
|
|
// 移动信号源
|
|
|
onMove({relatedContext, draggedContext}) {
|
|
@@ -117,21 +129,17 @@
|
|
|
const currentElement = signalList.filter(item => item.sourceId === value.added.element.sourceId)
|
|
|
const otherElement = signalList.filter(item => item.sourceId !== value.added.element.sourceId)
|
|
|
|
|
|
- console.log(signalList)
|
|
|
- console.log(value.added.newIndex)
|
|
|
+ this.newIndex = value.added.newIndex-signalList.length+1
|
|
|
+
|
|
|
const signalList2 = signalList.filter(item => item.newIndex)
|
|
|
// 考虑多种情况
|
|
|
// 1.正序排列
|
|
|
const flag = signalList2.every(item => item.newIndex < value.added.newIndex) || signalList.length === 1
|
|
|
- console.log(flag)
|
|
|
if(flag){
|
|
|
- console.log('正序')
|
|
|
currentElement[currentElement.length-1].newIndex = value.added.newIndex
|
|
|
this.$store.dispatch('updateSignalPreList', [...otherElement,...currentElement])
|
|
|
- // console.log([...otherElement,...currentElement])
|
|
|
}else {
|
|
|
// 2.乱序
|
|
|
- console.log('乱序')
|
|
|
currentElement[currentElement.length-1].newIndex = value.added.newIndex - signalList.length + 1
|
|
|
this.$store.dispatch('updateSignalPreList', [...otherElement,...currentElement])
|
|
|
}
|
|
@@ -196,81 +204,6 @@
|
|
|
const signalPreList = this.$store.state.signalPreList
|
|
|
const newSignalPreList = signalPreList.filter(item => item.Id !== signal.Id)
|
|
|
this.$store.dispatch('updateSignalPreList',newSignalPreList)
|
|
|
- },
|
|
|
-
|
|
|
- // 获取栅格位置
|
|
|
- gridPosition(splitStatus,count) {
|
|
|
- if(splitStatus === 2){
|
|
|
- // 四分屏
|
|
|
- switch (count) {
|
|
|
- case 1:
|
|
|
- return '1/1/2/2'
|
|
|
- case 2:
|
|
|
- return '1/2/2/3'
|
|
|
- case 3:
|
|
|
- return '2/1/3/2'
|
|
|
- case 4:
|
|
|
- return '2/2/3/3'
|
|
|
- }
|
|
|
- }else if(splitStatus === 3){
|
|
|
- // 九分屏
|
|
|
- switch (count) {
|
|
|
- case 1:
|
|
|
- return '1/1/2/2'
|
|
|
- case 2:
|
|
|
- return '1/2/2/3'
|
|
|
- case 3:
|
|
|
- return '1/3/2/4'
|
|
|
- case 4:
|
|
|
- return '2/1/3/2'
|
|
|
- case 5:
|
|
|
- return '2/2/3/3'
|
|
|
- case 6:
|
|
|
- return '2/3/3/4'
|
|
|
- case 7:
|
|
|
- return '3/1/4/2'
|
|
|
- case 8:
|
|
|
- return '3/2/4/3'
|
|
|
- case 9:
|
|
|
- return '3/3/4/4'
|
|
|
- }
|
|
|
- }else if(splitStatus === 4){
|
|
|
- // 十六分屏
|
|
|
- switch (count) {
|
|
|
- case 1:
|
|
|
- return '1/1/2/2'
|
|
|
- case 2:
|
|
|
- return '1/2/2/3'
|
|
|
- case 3:
|
|
|
- return '1/3/2/4'
|
|
|
- case 4:
|
|
|
- return '1/4/2/5'
|
|
|
- case 5:
|
|
|
- return '2/1/3/2'
|
|
|
- case 6:
|
|
|
- return '2/2/3/3'
|
|
|
- case 7:
|
|
|
- return '2/3/3/4'
|
|
|
- case 8:
|
|
|
- return '2/4/3/5'
|
|
|
- case 9:
|
|
|
- return '3/1/4/2'
|
|
|
- case 10:
|
|
|
- return '3/2/4/3'
|
|
|
- case 11:
|
|
|
- return '3/3/4/4'
|
|
|
- case 12:
|
|
|
- return '3/4/4/5'
|
|
|
- case 13:
|
|
|
- return '4/1/5/2'
|
|
|
- case 14:
|
|
|
- return '4/2/5/3'
|
|
|
- case 15:
|
|
|
- return '4/3/5/4'
|
|
|
- case 16:
|
|
|
- return '4/4/5/5'
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
},
|
|
|
|
|
@@ -283,11 +216,10 @@
|
|
|
},
|
|
|
|
|
|
set(arr) {
|
|
|
- if(arr.length>0){
|
|
|
+ let len = arr.length
|
|
|
+ if(len>0){
|
|
|
const arr2 = []
|
|
|
- arr.forEach(item => {
|
|
|
- arr2.push(JSON.parse(JSON.stringify(item)))
|
|
|
- })
|
|
|
+ arr.forEach(item => {arr2.push(JSON.parse(JSON.stringify(item)))})
|
|
|
arr2.forEach((item,index) => {
|
|
|
item.Id = guId()
|
|
|
item.splitScreenStatus = this.$store.state.splitScreenStatus + 1
|
|
@@ -297,6 +229,18 @@
|
|
|
item.heightScale = item.height / (this.currentBigshow[0].Height * this.$store.state.bigScale)
|
|
|
})
|
|
|
this.$store.dispatch('updateSignalPreList', arr2)
|
|
|
+
|
|
|
+ setTimeout(() => {
|
|
|
+ let width = this.currentBigshow[0].Width*this.$store.state.bigScale/(this.$store.state.splitScreenStatus+1)
|
|
|
+ let height = this.currentBigshow[0].Height*this.$store.state.bigScale/(this.$store.state.splitScreenStatus+1)
|
|
|
+
|
|
|
+ const res = elePosition(width,height,this.newIndex,this.screenPosition.top,this.screenPosition.left,this.$store.state.splitScreenStatus+1)
|
|
|
+
|
|
|
+ arr2[len-1].top = res.top
|
|
|
+ arr2[len-1].left = res.left
|
|
|
+
|
|
|
+ this.$store.dispatch('updateSignalPreList', arr2)
|
|
|
+ })
|
|
|
}else {
|
|
|
this.$store.dispatch('updateSignalPreList', arr)
|
|
|
}
|
|
@@ -330,7 +274,6 @@
|
|
|
watch: {
|
|
|
// 监视大屏中的信号源,只要变动,就调用回调函数
|
|
|
signalPreList: function (arr) {
|
|
|
- // this.$store.dispatch('splitScreen',-1)
|
|
|
this.reqRefreshBigScreen(arr)
|
|
|
},
|
|
|
|
|
@@ -345,7 +288,3 @@
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
-
|
|
|
-<style scoped>
|
|
|
-
|
|
|
-</style>
|