mirror of
https://gitee.com/java110/MicroCommunityWeb.git
synced 2026-06-15 19:23:26 +08:00
182 lines
5.1 KiB
Vue
182 lines
5.1 KiB
Vue
<template>
|
|
<div class="camera-control-video">
|
|
<el-row>
|
|
<el-col :span="12">
|
|
<h3>{{ $t('cameraControlVideo.camera') }}</h3>
|
|
</el-col>
|
|
<el-col :span="12" class="text-right">
|
|
<el-button-group>
|
|
<el-button size="small" :type="cameraControlVideoInfo.cameraCount === 4 ? 'primary' : ''"
|
|
@click="_changeCount(4)">
|
|
{{ $t('cameraControlVideo.fourWay') }}
|
|
</el-button>
|
|
<el-button size="small" :type="cameraControlVideoInfo.cameraCount === 6 ? 'primary' : ''"
|
|
@click="_changeCount(6)">
|
|
{{ $t('cameraControlVideo.sixWay') }}
|
|
</el-button>
|
|
</el-button-group>
|
|
</el-col>
|
|
</el-row>
|
|
<el-row class="margin-top">
|
|
<template v-if="cameraControlVideoInfo.cameraCount === 4">
|
|
<el-col v-for="(item, index) in cameraControlVideoInfo.machines" :key="index" :span="12">
|
|
<div class="form-group">
|
|
<div :id="item.id" style="border: 1px solid #dee2e6;">
|
|
<img width="100%" src="/img/init.jpg" height="300px" style="border: 1;" />
|
|
</div>
|
|
<div class="flex justify-between margin-top-sm" style="font-size: 14px;">
|
|
<div class="margin-left-sm">
|
|
<i class="el-icon-bell" style="color: #007bff;"></i>{{ item.machineName }}
|
|
</div>
|
|
<el-button size="small" type="primary" @click="_openSelectVideo(item)">
|
|
{{ $t('common.select') }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</template>
|
|
<template v-else-if="cameraControlVideoInfo.cameraCount === 6">
|
|
<el-col v-for="(item, index) in cameraControlVideoInfo.machines" :key="index" :span="8">
|
|
<div class="form-group">
|
|
<div :id="item.id" style="border: 1px solid #dee2e6;">
|
|
<img width="100%" src="/img/init.jpg" height="300px" style="border: 1;" />
|
|
</div>
|
|
<div class="flex justify-between margin-top-sm" style="font-size: 14px;">
|
|
<div class="margin-left-sm">
|
|
<i class="el-icon-bell" style="color: #007bff;"></i>{{ item.machineName }}
|
|
</div>
|
|
<el-button size="small" type="primary" @click="_openSelectVideo(item)">
|
|
{{ $t('common.select') }}
|
|
</el-button>
|
|
</div>
|
|
</div>
|
|
</el-col>
|
|
</template>
|
|
</el-row>
|
|
<select-video-machine ref="selectVideoMachine" />
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import SelectVideoMachine from './selectVideoMachine.vue'
|
|
|
|
export default {
|
|
name: 'CameraControlVideo',
|
|
components: {
|
|
SelectVideoMachine
|
|
},
|
|
data() {
|
|
return {
|
|
cameraControlVideoInfo: {
|
|
machines: [],
|
|
cameraCount: 4
|
|
}
|
|
}
|
|
},
|
|
created() {
|
|
const cameraCount = this.$route.query.cameraCount
|
|
if (cameraCount) {
|
|
this.cameraControlVideoInfo.cameraCount = parseInt(cameraCount)
|
|
}
|
|
this._initCamera()
|
|
},
|
|
methods: {
|
|
_initCamera() {
|
|
const machines = []
|
|
const cameraCount = this.cameraControlVideoInfo.cameraCount
|
|
for (let i = 0; i < cameraCount; i++) {
|
|
machines.push({
|
|
id: 'cameraVideo' + (i + 1) + 'Div',
|
|
machineName: '',
|
|
url: ''
|
|
})
|
|
}
|
|
this.cameraControlVideoInfo.machines = machines
|
|
},
|
|
_openSelectVideo(item) {
|
|
item.callback = (machine) => {
|
|
item.machineName = machine.machineName
|
|
if (item.jessibuca) {
|
|
try {
|
|
item.jessibuca.destroy()
|
|
} catch (err) {
|
|
console.error(err)
|
|
}
|
|
}
|
|
this.$refs.selectVideoMachine.getPlayVideoUrl(machine.machineId)
|
|
.then(url => {
|
|
const image = document.getElementById(item.id)
|
|
const jessibuca = new window.Jessibuca({
|
|
container: image,
|
|
videoBuffer: 0.2,
|
|
isResize: false,
|
|
text: "",
|
|
loadingText: "",
|
|
useMSE: false,
|
|
debug: false,
|
|
isNotMute: false,
|
|
supportDblclickFullscreen: true,
|
|
operateBtns: {
|
|
fullscreen: true,
|
|
screenshot: true,
|
|
play: true,
|
|
audio: false,
|
|
recorder: false
|
|
},
|
|
})
|
|
item.jessibuca = jessibuca
|
|
jessibuca.play(url)
|
|
})
|
|
.catch(error => {
|
|
console.error(error)
|
|
this.$message.error(this.$t('cameraControlVideo.getVideoUrlError'))
|
|
})
|
|
}
|
|
this.$refs.selectVideoMachine.open(item)
|
|
},
|
|
_changeCount(count) {
|
|
this.cameraControlVideoInfo.cameraCount = count
|
|
this.$router.push({
|
|
path: this.$route.path,
|
|
query: { cameraCount: count }
|
|
})
|
|
this._initCamera()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.camera-control-video {
|
|
padding: 20px;
|
|
padding-top: 0;
|
|
}
|
|
|
|
.text-right {
|
|
text-align: right;
|
|
}
|
|
|
|
.margin-top {
|
|
margin-top: 20px;
|
|
}
|
|
|
|
.margin-top-sm {
|
|
margin-top: 10px;
|
|
}
|
|
|
|
.margin-left-sm {
|
|
margin-left: 10px;
|
|
}
|
|
|
|
.flex {
|
|
display: flex;
|
|
}
|
|
|
|
.justify-between {
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.form-group {
|
|
margin-bottom: 15px;
|
|
}
|
|
</style> |