From 4a800a8fc83c6bd1f86a8e847b079a51a7532c09 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 20 七月 2022 15:05:58 +0800 Subject: [PATCH] 修复国标配置的bug --- src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue | 223 +++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 143 insertions(+), 80 deletions(-) diff --git a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue index c72279d..83941a9 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue @@ -14,7 +14,7 @@ </span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item - v-for="(item, index) in popDownArr" + v-for="(item, index) in videoArrs" :key="index" :command="item" >{{ item.CameraPosition }}</el-dropdown-item @@ -54,12 +54,12 @@ <div class="video-name" :class="{ current: curVideo.GroupID == video.GroupID }" - @click="checkVideo(video, index)" + @click="checkVideo(video)" v-for="(video, index) in curRoomVideos" - :key="video.id" + :key="index" > <i class="el-icon-film"></i> - <span>{{ video.VideoDate }}</span> + <span>{{ video.StartTime }}</span> </div> </div> </div> @@ -69,7 +69,7 @@ class="video-item" :ref="`gridVideoItem_${index}`" v-for="(item, index) in videoWrapArr" - :key="index" + :key="item.id" > <div style="display: none"></div> <div class="currentPlayer"> @@ -89,13 +89,12 @@ class="video-item" :ref="`gridVideoItem_${index}`" v-for="(item, index) in videoWrapArr" - :key="index" + :key="item.id" @click="checkCurVideo(index)" style="position: relative" @mouseenter.stop.prevent="videoMouseEnter($event)" @mouseleave="videoMouseLeave($event)" > - <!-- --> <template v-if="index <= videoArrs.length - 1"> <div class="video-box-top"> <b>{{ videoArrs[index].CameraPosition }}</b> @@ -122,7 +121,7 @@ <el-tooltip placement="top" v-for="(item, index) in eventMarks" - :key="index" + :key="item.offset + index" > <div slot="content"> {{ getTimeStr(item.offset) }} @@ -131,6 +130,11 @@ </div> <div class="self-dot" + :class=" + curVideo.IsOperate=='1'&& item.state == 0 && !item.text.includes('鎵嬫瘮') + ? 'red' + : getColor(item.text) + " :style="{ left: (item.offset / maxSecond) * 100 + '%', }" @@ -143,6 +147,7 @@ :key="index" > <div slot="content"> + {{ getTimeStr(item.offset) }} <br /> {{ item.text }} @@ -186,7 +191,6 @@ ></i> <i class="el-icon-d-arrow-right" @click="moveBar(10)"></i> </div> - <!-- <span class="icon iconfont"></span> --> </div> </div> </div> @@ -195,9 +199,42 @@ </div> <div class="content-bottom"> <div class="bot-left"> - <!-- <p class="title-partment">蹇�熸爣娉�</p> --> <el-tabs v-model="activeName" @tab-click="handleClick"> - <el-tab-pane label="蹇�熸爣娉�" name="first"> + <el-tab-pane label="闅愭偅浜嬩欢" name="first"> + <div class="yinhuan-wrap"> + <div class="title">{{yinhuanArr.length?"璇嗗埆鍑虹殑寮傚父鎯呭喌锛�":"鏆傛棤璇嗗埆鍑哄紓甯告儏鍐�"}} </div> + <div class="list"> + <div + class="list-item" + v-for="(item, index) in yinhuanArr" + :key="index" + @click="dotJump(item.offset)" + > + <span style="margin-right: 20px">{{ + getTimeStr(item.offset) + }}</span> + <span + style=" + display: block; + min-width: 135px; + margin-right: 20px; + min-widht: 140px; + " + >{{ item.text }} + </span> + + <span style="color: orangered; margin-right: 5px" + >鏈墜姣� + </span> + <span class="icon iconfont" style="color: orangered" + ></span + > + </div> + </div> + </div> + </el-tab-pane> + + <el-tab-pane label="蹇�熸爣娉�" name="second"> <div class="flex-box" style="height: 28px"> <label style="padding-right: 10px">闅愭偅闂:</label> <el-radio-group v-model="isUnusual"> @@ -222,11 +259,11 @@ :key="mark.ID" > <div class="time"> - <span> - {{ pad0(Math.floor(mark.Time / 60)) }}:{{ + <span + >{{ pad0(Math.floor(mark.Time / 60)) }}:{{ pad0(mark.Time % 60) - }} - </span> + }}</span + > <i class="el-icon-edit" @click="editCurLabel(mark)"></i> <i class="el-icon-delete" @click="removeCurLabel(mark)"></i> </div> @@ -237,10 +274,9 @@ </div> </div> </el-tab-pane> - <!-- <div class="flex-box fixed-height-box2"></div> --> <dataset-chart style="width: 100%" v-if="showTable"></dataset-chart> - <el-tab-pane label="鍏噷鏍�" name="second"></el-tab-pane> + <el-tab-pane label="鍏噷鏍�" name="third"></el-tab-pane> </el-tabs> </div> <div class="bot-right block"> @@ -256,7 +292,7 @@ </div> <div> <label>鏃堕棿:</label> - <span>{{ videoDetails.VideoDate }}</span> + <span>{{ videoDetails.StartTime }}</span> </div> <div> <label>鍙告満 | 鍓徃鏈�:</label> @@ -273,13 +309,6 @@ :append-to-body="false" :modal="false" > - <!-- <div class="label-radio"> - <p class="label">閫夋嫨灏嗚鏍囨敞鐨勮棰�:</p> - <el-radio-group v-model="isCheckAllVideo"> - <el-radio :label="1">鏍囨敞鍦ㄥ叏閮ㄤ綅缃殑瑙嗛娈�</el-radio> - <el-radio :label="0">浠呮爣娉ㄩ�変腑鐨勮棰戞</el-radio> - </el-radio-group> - </div>--> <div class="label-check"> <p class="label">闅愭偅闂:</p> <el-checkbox-group v-model="labelCheckedList"> @@ -303,14 +332,11 @@ <script> import { - getlstInit, - updateVideoAnalyze, - getlst, getRelatedVideoInfo, getCarVideos, getLabelMap, delLabel, - editLabel, + editLabel } from "@/api/shuohuang"; import DatasetChart from "./charts/datasetForVideo"; import AliPlayer from "./aliPlayer/index"; @@ -375,7 +401,6 @@ setLabelTime: 0, isCheckAllVideo: 1, curRoomVideos: [], - popDownArr: [], curCamera: "", showTable: false, showLocChoise: true, @@ -415,12 +440,30 @@ }, mounted() { this.renderLabelOpts(); + this.setGuid(1); + this.getCurVideos(this.videoDetails); + this.getRelatedVideos(this.videoDetails); }, destroyed() { this.videoArrs.length = 0; + }, + computed: { + yinhuanArr() { + if (this.curVideo.IsOperate==0) { + return [] + } + return this.eventMarks.filter((x) => { + return ( + (x.text.indexOf("杩涘嚭绔�") > -1 || + x.text.indexOf("杩囧垎鐩�") > -1 || + x.text.indexOf("淇″彿鏈�") > -1) && + x.state == 0 + ); + }); + }, }, methods: { triggerHover(e) { @@ -428,7 +471,6 @@ fn(e); }, hoverAction(e) { - console.log(e.target.className); if ( e.target.className == "el-slider__button-wrapper hover" || e.target.className == "el-tooltip el-slider__button hover" @@ -482,7 +524,6 @@ if (this.guid == 1) { this.$refs[`player_${this.curVideo.id}`][0].pause(); this.$refs[`player_${this.curVideo.id}`][0].seek(val); - // this.$refs[`player_${this.curVideo.ID}`][0].play(); setTimeout(() => { let curT = that.$refs[ `player_${that.curVideo.ID}` @@ -538,19 +579,13 @@ } }, handleClick(instance) { - if (instance.name == "second") { - this.showTable = true; - } else { - this.showTable = false; - } + this.showTable = instance.name == "third"; }, handleCommand(cmd) { let _this = this; _this.curVideo = cmd; _this.curCamera = _this.curVideo.CameraPosition; _this.$nextTick(() => { - const a = _this.$refs[`player_${_this.curVideo.id}`] - const b = _this.$refs[`player_${_this.curVideo.id}`][0] _this.$refs[`player_${_this.curVideo.id}`][0].init(); }); }, @@ -573,9 +608,9 @@ res.data.forEach((item) => { item.marks = _this.mergeMarks(item); }); - + _this.allCurVideos = res.data; _this.curVideo = res.data.find((item) => item.id == v.id); - + _this.refreshCurVideoLabel(_this.curVideo); // 璁剧疆涓嬫媺鑿滃崟閫変腑椤� _this.curCamera = _this.curVideo.CameraPosition; @@ -591,9 +626,6 @@ _this.maxVideoTime = _this.curVideo.VideoTime; } - _this.videoArrs = res.data.filter((item) => v.GroupID == item.GroupID); - _this.allCurVideos = res.data; - console.log(_this.allCurVideos); _this.curRoomVideos = _this.allCurVideos.filter((item) => { return item.IsCab == "0"; }); @@ -606,54 +638,46 @@ }); }); }, - getRelatedVideos(video) { - let _this = this; - getRelatedVideoInfo({ GroupID: video.GroupID }).then((res) => { - res.data.forEach((item) => { - _this.popDownArr.push(item); - }); - // _this.popDownArr = res.data - if (_this.popDownArr.length) { - _this.curCamera = _this.popDownArr[0].CameraPosition; - } - }); - }, renderLabelOpts() { let _this = this; getLabelMap().then((res) => { _this.labelOptions = res.data; }); }, - refreshCurVideoLabel(video) { - let _this = this; - _this.popDownArr = []; - getRelatedVideoInfo({ GroupID: video.GroupID }).then((res) => { - res.data.forEach((item) => { - _this.popDownArr.push(item); - if (item.ID === video.ID) { - video.LableLst = item.LableLst; - } - }); - }); + getColor(text) { + if (text.indexOf("杩涘嚭绔�") > -1) { + return "yellow"; + } + if (text.indexOf("淇″彿鏈�") > -1) { + return "purple"; + } + if (text.indexOf("杩囧垎鐩�") > -1) { + return "blue"; + } + return ""; }, - checkVideo(video, index) { + refreshCurVideoLabel(video) { + let arr = [video]; + this.videoArrs = arr.concat( + this.allCurVideos.filter((v) => { + return v.GroupID == video.GroupID && v.id != video.id; + }) + ); + }, + checkVideo(video) { this.refreshCurVideoLabel(video); this.curVideo = video; - this.eventMarks = [] - this.labelMarks = [] + this.eventMarks = []; + this.labelMarks = []; video.marks.forEach((item) => { - if (item.type == 0) { + if (item.type == 0) { this.eventMarks.push(item); } else { this.labelMarks.push(item); } - }) + }); - this.videoArrs = this.allCurVideos.filter( - (item) => video.GroupID == item.GroupID - ); this.$nextTick(() => { - const a = this.$refs[`player_${this.curVideo.id}`] this.$refs[`player_${this.curVideo.id}`][0].init(); }); }, @@ -670,7 +694,6 @@ this.videoWrapArr = Math.pow(guid, 2); this.$nextTick(() => { for (var i = 0; i < Math.pow(guid, 2); i++) { - console.log(`calc(` + 100 / guid + `% -10px)`); this.$refs[`gridVideoItem_${i}`][0].style.width = `calc(` + 100 / guid + `%)`; this.$refs[`gridVideoItem_${i}`][0].style.height = @@ -688,9 +711,13 @@ submitLabelChecked() { let _this = this; let tempArr = []; + let isAdd = false; tempArr = this.videoArrs.map((video) => video.id); let desc = this.labelCheckedList.map((lableId) => { for (let label of this.labelOptions) { + if (label.Name == "鏈墜姣�") { + isAdd = true; + } if (label.ID == lableId) { return label.Name; } @@ -723,6 +750,11 @@ // 鏍囨敞 _this.setMarks(_this.curVideo); _this.$parent.$parent.filterSearchData(); + + if (isAdd) { + let num = sessionStorage.getItem("shoubiNum"); + sessionStorage.setItem("shoubiNum", num ? +num + 1 : 1); + } } else { _this.$message.warning(rsp.msg); } @@ -768,15 +800,14 @@ }, mergeMarks(videoInfo) { if (!videoInfo.EventLst || !videoInfo.LableLst) { - console.log("mergeMarks data null"); return; } - const eMarks = videoInfo.EventLst.map((item) => { return { offset: item.SecondsInVideo, text: item.Event + (item.Desc == "" ? "" : ": " + item.Desc), type: 0, + state: item.state, }; }); const labMarks = videoInfo.LableLst.map((lable) => { @@ -805,7 +836,6 @@ text-align: left; .content-top { margin-bottom: 15px; - // height: calc(60% + -16px); .grid-check { text-align: right; margin-bottom: 3px; @@ -912,6 +942,18 @@ -webkit-transform: translateX(-50%); transform: translateX(-50%); } + .yellow { + background-color: yellow; + } + .purple { + background-color: skyblue; + } + .red { + background-color: red; + } + .blue { + background-color: blue; + } .label-dot { position: absolute; height: 8px; @@ -997,6 +1039,27 @@ border-radius: 3px; min-width: 400px; height: 343px; + .yinhuan-wrap { + display: flex; + .title { + margin-right: 10px; + min-width: 140px; + } + .list { + width: 100%; + height: 300px; + overflow: auto; + } + .list-item { + display: flex; + align-items: center; + height: 23px; + cursor: pointer; + } + .list-item:hover { + background-color: lightcyan; + } + } .el-tabs__header { padding: 0; position: relative; -- Gitblit v1.8.0