提交代码

dev_xds
姜玉琦 2023-08-26 22:21:19 +08:00
parent f31d243dcf
commit 6db214839c
8 changed files with 244 additions and 39 deletions

View File

@ -52,6 +52,15 @@ export function updateVideoConfigSort(data) {
}) })
} }
// 修改视频配置
export function editPassageState(data) {
return request({
url: '/video/videoConfig/editPassageState',
method: 'post',
data: data
})
}
// 删除视频配置 // 删除视频配置
export function delVideoConfig(id) { export function delVideoConfig(id) {
return request({ return request({

View File

@ -139,7 +139,11 @@
width="120" width="120"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column label="通道数量" align="center" prop="videoPassageCount" /> <el-table-column label="通道数量" align="center" prop="videoPassageCount">
<template slot-scope="scope">
{{ scope.row.videoPassageCount }} / {{ scope.row.passagePassCount }}
</template>
</el-table-column>
<el-table-column label="设备排序" align="center" width="140"> <el-table-column label="设备排序" align="center" width="140">
<template slot-scope="scope"> <template slot-scope="scope">
<el-input-number <el-input-number
@ -152,7 +156,7 @@
></el-input-number> ></el-input-number>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="通信状态" align="center" prop="signalState" v-if="false"> <el-table-column label="通信状态" align="center" prop="signalState">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag <dict-tag
:options="dict.type.project_video_signal_state" :options="dict.type.project_video_signal_state"
@ -166,11 +170,6 @@
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span> <span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="数据状态" align="center" prop="isDel">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_common_isdel" :value="scope.row.isDel" />
</template>
</el-table-column>
<el-table-column <el-table-column
label="操作" label="操作"
align="center" align="center"
@ -323,7 +322,7 @@ export default {
components: { components: {
videoPlayDrawer, videoPlayDrawer,
}, },
dicts: ["project_video_type", "project_video_signal_state", "sys_common_isdel"], dicts: ["project_video_type", "project_video_signal_state"],
data() { data() {
return { return {
projectOptions: [], projectOptions: [],

View File

@ -95,8 +95,12 @@
width="120" width="120"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column label="通道数量" align="center" prop="videoPassageCount" /> <el-table-column label="通道数量" align="center" prop="videoPassageCount">
<el-table-column label="通信状态" align="center" prop="signalState" v-if="false"> <template slot-scope="scope">
{{ scope.row.videoPassageCount }} / {{ scope.row.passagePassCount }}
</template>
</el-table-column>
<el-table-column label="通信状态" align="center" prop="signalState">
<template slot-scope="scope"> <template slot-scope="scope">
<dict-tag <dict-tag
:options="dict.type.project_video_signal_state" :options="dict.type.project_video_signal_state"

View File

@ -8,24 +8,36 @@
@close="onClose" @close="onClose"
style="padding-left: 20px" style="padding-left: 20px"
> >
<div class="videoView"> <div class="videoView" v-if="showVideoView0">
<H265Player :url="url0" @on-error="handleOnError" /> <H265Player :url="url0" @on-error="handleOnError0" />
</div> </div>
<div class="videoView"> <div class="videoView videoViewError" v-if="showVideoView0 == false">
<H265Player :url="url1" @on-error="handleOnError" /> 设备0通道链接失败请及时检查
</div> </div>
<div class="videoView"> <div class="videoView" v-if="showVideoView1">
<H265Player :url="url2" @on-error="handleOnError" /> <H265Player :url="url1" @on-error="handleOnError1" />
</div> </div>
<div class="videoView"> <div class="videoView videoViewError" v-if="showVideoView1 == false">
<H265Player :url="url3" @on-error="handleOnError" /> 设备1通道链接失败请及时检查
</div>
<div class="videoView" v-if="showVideoView2">
<H265Player :url="url2" @on-error="handleOnError2" />
</div>
<div class="videoView videoViewError" v-if="showVideoView2 == false">
设备2通道链接失败请及时检查
</div>
<div class="videoView" v-if="showVideoView3">
<H265Player :url="url3" @on-error="handleOnError3" />
</div>
<div class="videoView videoViewError" v-if="showVideoView3 == false">
设备3通道链接失败请及时检查
</div> </div>
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
<script> <script>
import { getVideoPassage } from "@/api/video/videoConfig"; import { getVideoPassage, editPassageState } from "@/api/video/videoConfig";
import H265Player from "vue-h265-player"; import H265Player from "vue-h265-player";
export default { export default {
@ -46,6 +58,11 @@ export default {
url1: "", url1: "",
url2: "", url2: "",
url3: "", url3: "",
showVideoView0: true,
showVideoView1: true,
showVideoView2: true,
showVideoView3: true,
videoPassageList: [],
}; };
}, },
computed: {}, computed: {},
@ -59,6 +76,7 @@ export default {
); );
this.initVideo(); this.initVideo();
}, },
immediate: true,
}, },
}, },
created() {}, created() {},
@ -67,13 +85,31 @@ export default {
methods: { methods: {
onOpen() {}, onOpen() {},
onClose() {}, onClose() {},
handleOnError(error) { handleOnError0(error) {
this.showVideoView0 = false;
console.log("error: ", error); console.log("error: ", error);
this.updatePassageState(this.videoPassageList[0].id);
},
handleOnError1(error) {
this.showVideoView1 = false;
console.log("error: ", error);
this.updatePassageState(this.videoPassageList[1].id);
},
handleOnError2(error) {
this.showVideoView2 = false;
console.log("error: ", error);
this.updatePassageState(this.videoPassageList[2].id);
},
handleOnError3(error) {
this.showVideoView3 = false;
console.log("error: ", error);
this.updatePassageState(this.videoPassageList[3].id);
}, },
// //
initVideo() { initVideo() {
getVideoPassage(this.formData.videoDvrNumber).then((response) => { getVideoPassage(this.formData.videoDvrNumber).then((response) => {
let data = response.data; let data = response.data;
this.videoPassageList = data;
data.forEach((it, idx) => { data.forEach((it, idx) => {
if (idx == 0) { if (idx == 0) {
this.url0 = this.request.replace("{{passage}}", it.passageValue); this.url0 = this.request.replace("{{passage}}", it.passageValue);
@ -90,6 +126,14 @@ export default {
}); });
}); });
}, },
updatePassageState(id) {
let param = {
id: id,
videoDvrNumber: this.formData.videoDvrNumber,
passageState: "2",
};
editPassageState(param);
},
}, },
}; };
</script> </script>
@ -105,4 +149,9 @@ export default {
width: 50%; width: 50%;
height: 50%; height: 50%;
} }
.videoViewError {
background-color: #575e65;
text-align: center;
line-height: 324px;
}
</style> </style>

View File

@ -7,30 +7,57 @@
:title="item.videoName" :title="item.videoName"
@click="handlePlay(item, index)" @click="handlePlay(item, index)"
:class="{ bg_color: currentIndex == index }" :class="{ bg_color: currentIndex == index }"
>{{ item.videoName }}</span :style="{
'--bgColor':
item.signalState == 1
? 'green'
: item.signalState == 2
? 'red'
: '#aaaaaa',
}"
>
{{ item.videoName }}{{ item.videoPassageCount }}/{{
item.passagePassCount
}}</span
> >
</div> </div>
</div> </div>
</div> </div>
<div class="right" v-if="showVideo"> <div class="right" v-if="showVideo">
<div class="videoView"> <div class="videoView" v-if="showVideoView0">
<H265Player :url="url0" @on-error="handleOnError" /> <H265Player :url="url0" @on-error="handleOnError0" />
</div> </div>
<div class="videoView"> <div class="videoView videoViewError" v-if="showVideoView0 == false">
<H265Player :url="url1" @on-error="handleOnError" /> 设备0通道链接失败请及时检查
</div> </div>
<div class="videoView"> <div class="videoView" v-if="showVideoView1">
<H265Player :url="url2" @on-error="handleOnError" /> <H265Player :url="url1" @on-error="handleOnError1" />
</div> </div>
<div class="videoView"> <div class="videoView videoViewError" v-if="showVideoView1 == false">
<H265Player :url="url3" @on-error="handleOnError" /> 设备1通道链接失败请及时检查
</div>
<div class="videoView" v-if="showVideoView2">
<H265Player :url="url2" @on-error="handleOnError2" />
</div>
<div class="videoView videoViewError" v-if="showVideoView2 == false">
设备2通道链接失败请及时检查
</div>
<div class="videoView" v-if="showVideoView3">
<H265Player :url="url3" @on-error="handleOnError3" />
</div>
<div class="videoView videoViewError" v-if="showVideoView3 == false">
设备3通道链接失败请及时检查
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { listVideoView, getVideoPassage } from "@/api/video/videoConfig"; import {
listVideoView,
getVideoPassage,
editPassageState,
} from "@/api/video/videoConfig";
import H265Player from "vue-h265-player"; import H265Player from "vue-h265-player";
export default { export default {
@ -52,6 +79,12 @@ export default {
url1: "", url1: "",
url2: "", url2: "",
url3: "", url3: "",
showVideoView0: true,
showVideoView1: true,
showVideoView2: true,
showVideoView3: true,
videoPassageList: [],
videoDvrNumber: null,
}; };
}, },
created() { created() {
@ -72,6 +105,11 @@ export default {
this.url1 = ""; this.url1 = "";
this.url2 = ""; this.url2 = "";
this.url3 = ""; this.url3 = "";
this.showVideoView0 = true;
this.showVideoView1 = true;
this.showVideoView2 = true;
this.showVideoView3 = true;
this.videoDvrNumber = it.videoDvrNumber;
this.initVideo( this.initVideo(
it.videoDvrNumber, it.videoDvrNumber,
this.request.replace("{{videoDvrNumber}}", it.videoDvrNumber) this.request.replace("{{videoDvrNumber}}", it.videoDvrNumber)
@ -82,6 +120,7 @@ export default {
let that = this; let that = this;
getVideoPassage(videoDvrNumber).then((response) => { getVideoPassage(videoDvrNumber).then((response) => {
let data = response.data; let data = response.data;
this.videoPassageList = data;
that.showVideo = true; that.showVideo = true;
data.forEach((it, idx) => { data.forEach((it, idx) => {
if (idx == 0) { if (idx == 0) {
@ -99,8 +138,33 @@ export default {
}); });
}); });
}, },
handleOnError(error) { handleOnError0(error) {
this.showVideoView0 = false;
console.log("error: ", error); console.log("error: ", error);
this.updatePassageState(this.videoPassageList[0].id);
},
handleOnError1(error) {
this.showVideoView1 = false;
console.log("error: ", error);
this.updatePassageState(this.videoPassageList[1].id);
},
handleOnError2(error) {
this.showVideoView2 = false;
console.log("error: ", error);
this.updatePassageState(this.videoPassageList[2].id);
},
handleOnError3(error) {
this.showVideoView3 = false;
console.log("error: ", error);
this.updatePassageState(this.videoPassageList[3].id);
},
updatePassageState(id) {
let param = {
id: id,
videoDvrNumber: this.videoDvrNumber,
passageState: "2",
};
editPassageState(param);
}, },
}, },
}; };
@ -108,7 +172,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.app-container { .app-container {
.left { .left {
width: 220px; width: 250px;
height: calc(100% - 45px); height: calc(100% - 45px);
float: left; float: left;
overflow: hidden; overflow: hidden;
@ -118,7 +182,7 @@ export default {
height: 820px; height: 820px;
overflow-y: scroll; overflow-y: scroll;
.nav-item { .nav-item {
width: 200px; width: 230px;
overflow: hidden; overflow: hidden;
display: block; display: block;
height: 40px; height: 40px;
@ -129,6 +193,7 @@ export default {
font-weight: 400; font-weight: 400;
span { span {
float: left;
cursor: pointer; cursor: pointer;
} }
.bg_color { .bg_color {
@ -138,10 +203,20 @@ export default {
.nav-item :hover { .nav-item :hover {
color: #409eff; color: #409eff;
} }
.nav-item ::before {
content: " ";
width: 8px;
height: 8px;
border-radius: 50%;
display: block;
float: left;
margin-top: 6px;
background-color: var(--bgColor);
}
} }
} }
.right { .right {
width: calc(100% - 240px); width: calc(100% - 270px);
margin-left: 15px; margin-left: 15px;
height: 820px; height: 820px;
float: left; float: left;
@ -151,6 +226,11 @@ export default {
width: 50%; width: 50%;
height: 50%; height: 50%;
} }
.videoViewError {
background-color: #575e65;
text-align: center;
line-height: 324px;
}
} }
} }
</style> </style>

View File

@ -0,0 +1,63 @@
package com.yanzhu.jh.bigscreen.web.controller;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.text.Convert;
import com.yanzhu.jh.video.domain.SurProjectVideoConfig;
import com.yanzhu.jh.video.domain.SurProjectVideoPassage;
import com.yanzhu.jh.video.service.ISurProjectVideoConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Conller
*/
@RestController
@RequestMapping("/bgscreen/video")
public class VideoController extends BaseController {
@Autowired
private ISurProjectVideoConfigService surProjectVideoConfigService;
/**
*
*/
@GetMapping("/listView")
public AjaxResult listView(String deptId,String projectId)
{
SurProjectVideoConfig surProjectVideoConfig = new SurProjectVideoConfig();
if(deptId!=null && !"0".equals(deptId)){
surProjectVideoConfig.setProjectDeptId(deptId);
}
if(projectId!=null && !"0".equals(projectId)){
surProjectVideoConfig.setProjectId(Convert.toLong(projectId));
}
List<SurProjectVideoConfig> list = surProjectVideoConfigService.selectSurProjectVideoConfigList(surProjectVideoConfig);
return success(list);
}
/**
*
*/
@GetMapping("/editPassageState")
public AjaxResult editPassageState(@RequestParam Long id, String videoDvrNumber, String passageState)
{
SurProjectVideoPassage surProjectVideoPassage = new SurProjectVideoPassage();
surProjectVideoPassage.setVideoId(id);
surProjectVideoPassage.setVideoDvrNumber(videoDvrNumber);
surProjectVideoPassage.setPassageState(passageState);
return success(surProjectVideoConfigService.editPassageState(surProjectVideoPassage));
}
/**
*
*/
@GetMapping(value = "/getVideoPassage/{videoDvrNumberd}")
public AjaxResult getVideoPassage(@PathVariable("videoDvrNumberd") String videoDvrNumberd)
{
return success(surProjectVideoConfigService.getVideoPassage(videoDvrNumberd));
}
}

View File

@ -151,9 +151,9 @@ public class SurProjectVideoConfigController extends BaseController
*/ */
@PreAuthorize("@ss.hasPermi('video:videoConfig:query')") @PreAuthorize("@ss.hasPermi('video:videoConfig:query')")
@PostMapping("/editPassageState") @PostMapping("/editPassageState")
public AjaxResult editPassageState(SurProjectVideoPassage SurProjectVideoPassage) public AjaxResult editPassageState(@RequestBody SurProjectVideoPassage surProjectVideoPassage)
{ {
return success(surProjectVideoConfigService.editPassageState(SurProjectVideoPassage)); return success(surProjectVideoConfigService.editPassageState(surProjectVideoPassage));
} }
/** /**

View File

@ -36,6 +36,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="videoDvrNumber" column="sub_video_dvr_number" /> <result property="videoDvrNumber" column="sub_video_dvr_number" />
<result property="passageName" column="sub_passage_name" /> <result property="passageName" column="sub_passage_name" />
<result property="passageValue" column="sub_passage_value" /> <result property="passageValue" column="sub_passage_value" />
<result property="passageState" column="sub_passage_state" />
</resultMap> </resultMap>
<sql id="selectSurProjectVideoConfigVo"> <sql id="selectSurProjectVideoConfigVo">
@ -79,7 +80,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectSurProjectVideoConfigByDvrNumber" parameterType="String" resultMap="SurProjectVideoConfigSurProjectVideoPassageResult"> <select id="selectSurProjectVideoConfigByDvrNumber" parameterType="String" resultMap="SurProjectVideoConfigSurProjectVideoPassageResult">
select a.id, a.project_id, a.video_name, a.video_only_type, a.video_dvr_number, a.video_dvr_security, a.video_passage_count, a.passage_pass_count, a.video_sort, a.signal_type, a.signal_state, a.signal_code, a.is_del, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, p.projectName, select a.id, a.project_id, a.video_name, a.video_only_type, a.video_dvr_number, a.video_dvr_security, a.video_passage_count, a.passage_pass_count, a.video_sort, a.signal_type, a.signal_state, a.signal_code, a.is_del, a.create_by, a.create_time, a.update_by, a.update_time, a.remark, p.projectName,
b.id as sub_id, b.video_id as sub_video_id, b.video_dvr_number as sub_video_dvr_number, b.passage_name as sub_passage_name, b.passage_value as sub_passage_value b.id as sub_id, b.video_id as sub_video_id, b.video_dvr_number as sub_video_dvr_number, b.passage_name as sub_passage_name, b.passage_value as sub_passage_value, b.passage_state as sub_passage_state
from sur_project_video_config a from sur_project_video_config a
left join sur_project p on a.project_id=p.id left join sur_project p on a.project_id=p.id
left join sur_project_video_passage b on b.video_id = a.id left join sur_project_video_passage b on b.video_id = a.id
@ -176,9 +177,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete> </delete>
<insert id="batchSurProjectVideoPassage"> <insert id="batchSurProjectVideoPassage">
insert into sur_project_video_passage( id, video_id, video_dvr_number, passage_name, passage_value) values insert into sur_project_video_passage( id, video_id, video_dvr_number, passage_name, passage_value,passage_state) values
<foreach item="item" index="index" collection="list" separator=","> <foreach item="item" index="index" collection="list" separator=",">
( #{item.id}, #{item.videoId}, #{item.videoDvrNumber}, #{item.passageName}, #{item.passageValue}) ( #{item.id}, #{item.videoId}, #{item.videoDvrNumber}, #{item.passageName}, #{item.passageValue}, #{item.passageState})
</foreach> </foreach>
</insert> </insert>