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 | 651 +++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 407 insertions(+), 244 deletions(-) diff --git a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue index de1e4f0..83941a9 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue @@ -9,14 +9,15 @@ v-show="showLocChoise" > <span class="el-dropdown-link"> - {{ curCamera }}<i class="el-icon-arrow-down el-icon--right"></i> + {{ curCamera }} + <i class="el-icon-arrow-down el-icon--right"></i> </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.Camera }}</el-dropdown-item + >{{ item.CameraPosition }}</el-dropdown-item > </el-dropdown-menu> </el-dropdown> @@ -52,13 +53,13 @@ <div class="v-name-block"> <div class="video-name" - :class="{ current: curVideo.ID == video.ID }" - @click="checkVideo(video, index)" + :class="{ current: curVideo.GroupID == video.GroupID }" + @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> @@ -68,18 +69,17 @@ 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"> <ali-player - @playing="getPlayStatus" @pause="isStop = true" @play="isStop = false" @timeupdate="timeUpdate" - :source="curVideo.VideoPath" + :source="curVideo.VideoPath | fixPath" :markers="curVideo.marks" - :ref="`player_${curVideo.ID}`" + :ref="`player_${curVideo.id}`" /> </div> </div> @@ -89,16 +89,15 @@ 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].Camera }}</b> + <b>{{ videoArrs[index].CameraPosition }}</b> </div> <div :class="{ @@ -107,52 +106,92 @@ > <ali-player @timeupdate="timeUpdate(e, index)" - :source="videoArrs[index].VideoPath" + :source="videoArrs[index].VideoPath | fixPath" :markers="videoArrs[index].marks" @pause="isStop = true" @play="isStop = false" - :ref="`player_${videoArrs[index].ID}`" - @ready="videoReady" + :ref="`player_${videoArrs[index].id}`" /> </div> </template> </div> </template> <div class="player-control"> - <!-- <div class="progress-bar"></div> --> - <!-- - - --> <div class="progress-bar"> <el-tooltip placement="top" v-for="(item, index) in eventMarks" - :key="index" + :key="item.offset + index" > <div slot="content"> - {{ getTimeStr(item.offset) }}<br />{{ item.text }} + {{ getTimeStr(item.offset) }} + <br /> + {{ item.text }} </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 + '%', }" @click="dotJump(item.offset)" ></div> </el-tooltip> - <!-- :marks="marks" --> + <el-tooltip + placement="top" + v-for="(item, index) in labelMarks" + :key="index" + > + <div slot="content"> + + {{ getTimeStr(item.offset) }} + <br /> + {{ item.text }} + </div> + <div + class="label-dot" + :style="{ + left: (item.offset / maxSecond) * 100 + '%', + }" + @click="dotJump(item.offset)" + ></div> + </el-tooltip> + <div ref="time-clip" class="time-clip"></div> + <el-slider v-model="curTime" - :format-tooltip="formatTooltip" + :show-tooltip="false" :max="maxSecond" + @mousemove.native.stop="triggerHover" + @mouseleave.native="leaveBar" + @mouseover.native="intoBar" @change="progressChange" - @input="inTimeChange" ></el-slider> </div> <div class="control-zone"> <span class="time">{{ curPlayTime }} / {{ maxVideoTime }}</span> - <div class="play-btn" @click="playAll" v-if="showPlayBtn"></div> - <div class="stop-btn" @click="pauseAll" v-else></div> + <div class="play-btn"> + <div class="group"> + <i class="el-icon-d-arrow-left" @click="moveBar(-10)"></i> + <i + class="el-icon-video-play" + style="font-size: 29px; cursor: pointer" + @click="playAll" + v-if="showPlayBtn" + ></i> + <i + class="el-icon-video-pause" + style="font-size: 29px; cursor: pointer" + @click="pauseAll" + v-else + ></i> + <i class="el-icon-d-arrow-right" @click="moveBar(10)"></i> + </div> + </div> </div> </div> </div> @@ -160,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"> @@ -188,8 +260,8 @@ > <div class="time"> <span - >{{ zeroize(Math.floor(mark.Time / 60)) }}:{{ - zeroize(mark.Time % 60) + >{{ pad0(Math.floor(mark.Time / 60)) }}:{{ + pad0(mark.Time % 60) }}</span > <i class="el-icon-edit" @click="editCurLabel(mark)"></i> @@ -200,12 +272,11 @@ </div> </div> </div> - </div></el-tab-pane - > - <!-- <div class="flex-box fixed-height-box2"></div> --> + </div> + </el-tab-pane> <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"> @@ -221,7 +292,7 @@ </div> <div> <label>鏃堕棿:</label> - <span>{{ videoDetails.VideoDate }}</span> + <span>{{ videoDetails.StartTime }}</span> </div> <div> <label>鍙告満 | 鍓徃鏈�:</label> @@ -238,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"> @@ -258,7 +322,7 @@ </div> <div class="btns"> <el-button @click="cancelLabelChecked" size="small">鍙栨秷</el-button> - <el-button @click="submitLabelChecked()" size="small" type="primary" + <el-button @click="submitLabelChecked" size="small" type="primary" >纭畾</el-button > </div> @@ -268,17 +332,35 @@ <script> import { - getlstInit, - updateVideoAnalyze, - getlst, getRelatedVideoInfo, getCarVideos, getLabelMap, delLabel, - editLabel, + editLabel } from "@/api/shuohuang"; import DatasetChart from "./charts/datasetForVideo"; import AliPlayer from "./aliPlayer/index"; + +function throttle(fn, delay) { + // 璁板綍涓婁竴娆″嚱鏁拌Е鍙戠殑鏃堕棿浠ュ強瀹氫箟涓�涓畾鏃跺櫒 + var lastTime, timer; + var delay = delay || 500; + return function (e) { + var nowTime = Date.now(); + if (lastTime && nowTime - lastTime < delay) { + clearTimeout(timer); + timer = setTimeout(function () { + // 璁板綍涓婁竴娆″嚱鏁拌Е鍙戠殑鏃堕棿 + lastTime = nowTime; + // 淇this鎸囧悜闂 + fn.call(this, e); + }, delay); + } else { + lastTime = nowTime; + fn.call(this, e); + } + }; +} export default { name: "VideoAnalyze", @@ -292,6 +374,15 @@ return {}; }, type: Object, + }, + }, + filters: { + fixPath(str) { + if (!str || str == undefined) { + return ""; + } + + return str.replace("/opt/vasystem", ""); }, }, data() { @@ -310,7 +401,6 @@ setLabelTime: 0, isCheckAllVideo: 1, curRoomVideos: [], - popDownArr: [], curCamera: "", showTable: false, showLocChoise: true, @@ -318,10 +408,7 @@ curTime: 0, showPlayBtn: true, eventMarks: [], - marks: { - 45: {}, - 373: {}, - }, + marks: {}, labelMarks: [], maxDuration: 0, maxVideoTime: "", @@ -342,85 +429,120 @@ deep: true, }, videoDetails: { - handler(newVal, oldVal) { + handler(newVal) { this.getCurVideos(newVal); }, deep: true, }, + curTime(newVal) { + this.curPlayTime = this.getTimeStr(newVal); + }, }, mounted() { this.renderLabelOpts(); + this.setGuid(1); + this.getCurVideos(this.videoDetails); + this.getRelatedVideos(this.videoDetails); }, - methods: { - getPlayStatus(e) { - console.log(e, 1111); + 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 + ); + }); }, - videoReady(a, b) {}, + }, + methods: { + triggerHover(e) { + let fn = throttle(this.hoverAction, 2000); + fn(e); + }, + hoverAction(e) { + if ( + e.target.className == "el-slider__button-wrapper hover" || + e.target.className == "el-tooltip el-slider__button hover" + ) { + this.$refs["time-clip"].style["left"] = + (this.curTime / this.maxSecond) * 880 - 20 + "px"; + this.$refs["time-clip"].innerHTML = this.curPlayTime; + return; + } + this.$refs["time-clip"].style["left"] = e.offsetX - 20 + "px"; + this.$refs["time-clip"].innerHTML = this.getTimeStr( + (e.offsetX / 880) * this.maxSecond + ); + }, + intoBar(e) { + this.$refs["time-clip"].style["display"] = "block"; + }, + leaveBar(e) { + this.$refs["time-clip"].style["display"] = "none"; + }, playAll() { this.showPlayBtn = false; if (this.guid == 1) { - this.$refs[`player_${this.curVideo.ID}`][0].play(); + this.$refs[`player_${this.curVideo.id}`][0].play(); this.maxDuration = this.$refs[ - `player_${this.curVideo.ID}` + `player_${this.curVideo.id}` ][0].getDuration(); } else { this.videoArrs.forEach((v) => { - this.$refs[`player_${v.ID}`][0].play(); + this.$refs[`player_${v.id}`][0].play(); }); } }, pauseAll() { this.showPlayBtn = true; if (this.guid == 1) { - this.$refs[`player_${this.curVideo.ID}`][0].pause(); + this.$refs[`player_${this.curVideo.id}`][0].pause(); } else { this.videoArrs.forEach((v) => { - this.$refs[`player_${v.ID}`][0].pause(); + this.$refs[`player_${v.id}`][0].pause(); }); } }, - inTimeChange(val) {}, + moveBar(val) { + this.curTime += val; + this.progressChange(this.curTime); + }, progressChange(val) { - console.log(val); this.showPlayBtn = false; - this.curPlayTime = this.getTimeStr(val); let that = this; 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(); + this.$refs[`player_${this.curVideo.id}`][0].pause(); + this.$refs[`player_${this.curVideo.id}`][0].seek(val); setTimeout(() => { let curT = that.$refs[ `player_${that.curVideo.ID}` ][0].getCurrentTime(); - that.barRolling(curT); }, 600); } else { this.videoArrs.forEach((v, i) => { - this.$refs[`player_${v.ID}`][0].seek(val); - this.$refs[`player_${v.ID}`][0].play(); + this.$refs[`player_${v.id}`][0].seek(val); if (i == 0) { - let curT = this.$refs[`player_${v.ID}`][0].getCurrentTime(); - this.barRolling(curT); + let curT = this.$refs[`player_${v.id}`][0].getCurrentTime(); } }); } }, getTimeStr(sec) { - return `${ - Math.floor(sec / 60) < 10 - ? "0" + Math.floor(sec / 60) - : Math.floor(sec / 60) - }:${ - Math.floor(sec % 60) < 10 - ? "0" + Math.floor(sec % 60) - : Math.floor(sec % 60) - }`; + return `${this.pad0(Math.floor(sec / 60))}:${this.pad0( + Math.floor(sec % 60) + )}`; }, - barRolling(curT) {}, timeUpdate(e, index) { if (this.isStop) { return; @@ -428,11 +550,11 @@ let curT; if (this.guid == 1) { curT = Math.floor( - this.$refs[`player_${this.curVideo.ID}`][0].getCurrentTime() + this.$refs[`player_${this.curVideo.id}`][0].getCurrentTime() ); } else { curT = Math.floor( - this.$refs[`player_${this.videoArrs[index].ID}`][0].getCurrentTime() + this.$refs[`player_${this.videoArrs[index].id}`][0].getCurrentTime() ); } if (curT <= this.curTime) { @@ -440,10 +562,6 @@ } else { this.curTime = curT; } - this.curPlayTime = this.getTimeStr(this.curTime); - }, - formatTooltip(val) { - return this.curPlayTime; }, videoMouseEnter(e) { let target = e.target; @@ -461,26 +579,17 @@ } }, handleClick(instance) { - if (instance.name == "second") { - this.showTable = true; - } else { - this.showTable = false; - } + this.showTable = instance.name == "third"; }, handleCommand(cmd) { let _this = this; - this.curCamera = cmd.Camera; - this.curRoomVideos = this.allCurVideos.filter((item) => { - return item.Camera == cmd.Camera; - }); - this.curVideo = this.curRoomVideos.find((item) => { - return item.UniqeID == this.curVideo.UniqeID; - }); - this.$nextTick(() => { - _this.$refs[`player_${_this.curVideo.ID}`][0].init(); + _this.curVideo = cmd; + _this.curCamera = _this.curVideo.CameraPosition; + _this.$nextTick(() => { + _this.$refs[`player_${_this.curVideo.id}`][0].init(); }); }, - zeroize(val) { + pad0(val) { return val < 10 ? "0" + val : val; }, checkCurVideo(index) { @@ -499,70 +608,34 @@ res.data.forEach((item) => { item.marks = _this.mergeMarks(item); }); - _this.curVideo = res.data.find((item) => item.ID == v.ID); - console.log(_this.curVideo); - let map = {}, - map2 = {}; - let arr1 = [], - arr2 = []; + _this.allCurVideos = res.data; + _this.curVideo = res.data.find((item) => item.id == v.id); + _this.refreshCurVideoLabel(_this.curVideo); + // 璁剧疆涓嬫媺鑿滃崟閫変腑椤� + _this.curCamera = _this.curVideo.CameraPosition; + _this.curVideo.marks.forEach((item) => { if (item.type == 0) { - map[item.offset] = { - style: { - color: "white", - }, - label: item.text, - }; + _this.eventMarks.push(item); } else { - map[+item.offset] = { - style: { - color: "yellow", - }, - label: item.text, - }; + _this.labelMarks.push(item); } }); - // _this.eventMarks = map - _this.labelMarks = map2; - // videoInfo.EventLst.forEach((item) => { - // map[item.SecondsInVideo] = { - // style:{ - // color: 'black' - // }, - // label: item.Event + (item.Desc == "" ? "" : ": " + item.Desc) - // } - // }); - - if (this.guid == 1) { - this.maxVideoTime = this.curVideo.VideoTime; + if (_this.guid == 1) { + _this.maxVideoTime = _this.curVideo.VideoTime; } - _this.videoArrs = res.data.filter((item) => v.UniqeID == item.UniqeID); - _this.allCurVideos = res.data; + _this.curRoomVideos = _this.allCurVideos.filter((item) => { - return item.Camera == "鍙告満瀹�"; + return item.IsCab == "0"; }); - - this.$nextTick(() => { - _this.$refs[`player_${_this.curVideo.ID}`][0].init(); - let arr = this.maxVideoTime.split(":"); - let min = +arr[0], - sec = +arr[1]; - this.maxSecond = min * 60 + sec; + _this.$nextTick(() => { + _this.$refs[`player_${_this.curVideo.id}`][0].init(); + let arr = _this.maxVideoTime.split(":"); + let min = +arr[1], + sec = +arr[2]; + _this.maxSecond = min * 60 + sec; }); - }); - }, - getRelatedVideos(video) { - let _this = this; - getRelatedVideoInfo({ UniqeID: video.UniqeID }).then((res) => { - let arr = []; - let map = {}; - res.data.forEach((item) => { - this.popDownArr.push(item); - }); - if (this.popDownArr.length) { - this.curCamera = this.popDownArr[0].Camera; - } }); }, renderLabelOpts() { @@ -571,23 +644,41 @@ _this.labelOptions = res.data; }); }, - refreshCurVideoLabel(video) { - getRelatedVideoInfo({ UniqeID: video.UniqeID }).then((res) => { - res.data.forEach((d) => { - if (d.ID === video.ID) { - video.LableLst = d.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.videoArrs = this.allCurVideos.filter( - (item) => video.UniqeID == item.UniqeID - ); + this.eventMarks = []; + this.labelMarks = []; + video.marks.forEach((item) => { + if (item.type == 0) { + this.eventMarks.push(item); + } else { + this.labelMarks.push(item); + } + }); + this.$nextTick(() => { - this.$refs[`player_${this.curVideo.ID}`][0].init(); + this.$refs[`player_${this.curVideo.id}`][0].init(); }); }, setGuid(guid) { @@ -597,36 +688,36 @@ this.showLocChoise = true; } else { this.showLocChoise = false; - this.$refs[`player_${this.curVideo.ID}`][0].pause(); - this.$refs[`player_${this.curVideo.ID}`][0].seek(0); + this.$refs[`player_${this.curVideo.id}`][0].pause(); + this.$refs[`player_${this.curVideo.id}`][0].seek(0); } 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["playerWrap"].offsetWidth / guid + "px"; this.$refs[`gridVideoItem_${i}`][0].style.height = `calc(` + 100 / guid + `%)`; - // this.$refs["playerWrap"].offsetHeight / guid + "px"; } - console.log(this.$refs[`player_${this.videoArrs[index].ID}`]); }); }, cancelLabelChecked() { this.labelDialogVisible = false; }, - dotJump(offset){ - this.curTime = offset - this.progressChange(offset) + dotJump(offset) { + this.curTime = offset; + this.progressChange(offset); }, submitLabelChecked() { let _this = this; let tempArr = []; - tempArr = this.videoArrs.map((video) => video.ID); + 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; } @@ -635,35 +726,37 @@ let query = { ID: this.selectedLabelId, - ParentID: tempArr.join(","), - ParentUniqID: this.curVideo.UniqeID + "", + VideoIds: tempArr.join(","), Time: Math.round(this.setLabelTime) + "", Codes: this.labelCheckedList.join(","), - Desc: desc.join("锛�"), + Desc: desc.join(","), }; + editLabel(query).then((rsp) => { if (rsp && rsp.success) { _this.labelDialogVisible = false; - this.$set(_this.curVideo, "LableLst", []); - //_this.curVideo.LableLst = []; + _this.$set(_this.curVideo, "LableLst", []); rsp.data.forEach((label) => { if (label.ParentID == _this.curVideo.ID) { _this.curVideo.LableLst.push(label); } }); - // getRelatedVideoInfo({ UniqeID: _this.videoDetails.UniqeID }).then(res => { - // res.data.forEach(d => { - // let someVideo = _this.videoArrs.find(video => video.ID === d.ID); - // someVideo.LableLst = d.LableLst - // }) - // }) - - this.$message.success("娣诲姞鎴愬姛"); + _this.labelMarks.push({ + type: 1, + offset: +query.Time, + text: query.Desc, + }); + _this.$message.success("娣诲姞鎴愬姛"); // 鏍囨敞 - _this.setMarks(this.curVideo); + _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); + _this.$message.warning(rsp.msg); } }); }, @@ -671,53 +764,64 @@ this.labelCheckedList = []; this.selectedLabelId = ""; this.labelDialogVisible = true; - // 淇濆瓨鐐瑰嚮鏍囨敞鐨勬椂闂� - this.setLabelTime = this.$refs[`player_${video.ID}`][0].getCurrentTime(); + this.setLabelTime = this.$refs[`player_${video.id}`][0].getCurrentTime(); }, editCurLabel(mark) { this.selectedLabelId = mark.ID; - this.labelCheckedList = mark.Codes.split(" ,"); + this.labelCheckedList = mark.Codes.split(","); this.labelDialogVisible = true; }, removeCurLabel(mark) { let _this = this; - delLabel({ ID: mark.ID, ParentID: this.curVideo.ID }).then((rsp) => { + let obj = { + ID: mark.ID, + VideoIds: mark.VideoIds, + }; + delLabel(obj).then((rsp) => { if (rsp && rsp.success) { _this.curVideo.LableLst = rsp.data; - this.$message.success("鍒犻櫎鎴愬姛"); + _this.$message.success("鍒犻櫎鎴愬姛"); // 鏍囨敞 + _this.labelMarks.length = 0; + _this.curVideo.LableLst.forEach((x) => { + _this.labelMarks.push({ + type: 1, + offset: +x.Time, + text: x.Desc, + }); + }); _this.setMarks(_this.curVideo); _this.$parent.$parent.filterSearchData(); } else { - this.$message.warning(rsp.msg); + _this.$message.warning(rsp.msg); } }); }, mergeMarks(videoInfo) { + if (!videoInfo.EventLst || !videoInfo.LableLst) { + return; + } const eMarks = videoInfo.EventLst.map((item) => { - let obj = { + return { offset: item.SecondsInVideo, text: item.Event + (item.Desc == "" ? "" : ": " + item.Desc), type: 0, + state: item.state, }; - this.eventMarks.push(obj); - return obj; }); const labMarks = videoInfo.LableLst.map((lable) => { - let obj = { - offset: lable.Time, + return { + offset: +lable.Time, text: lable.Desc, type: 1, }; - this.labelMarks.push(obj); - return obj; }); return eMarks.concat(labMarks); }, setMarks(video) { let marks = this.mergeMarks(video); - this.$refs[`player_${video.ID}`][0].setProgressMarkers(marks); + this.$refs[`player_${video.id}`][0].setProgressMarkers(marks); }, }, }; @@ -732,9 +836,6 @@ text-align: left; .content-top { margin-bottom: 15px; - - // height: calc(60% + -16px); - .grid-check { text-align: right; margin-bottom: 3px; @@ -753,7 +854,6 @@ } span { font-size: 17px; - color: #cacaca; padding-left: 12px; cursor: pointer; @@ -765,14 +865,12 @@ .video-area { display: flex; height: 100%; - .info-list { width: 180px; min-width: 180px; margin-right: 10px; .v-name-block { height: 484px; - overflow: auto; } .video-name { @@ -828,24 +926,57 @@ } } .player-control { - background-color: black; + background-color: #fff; height: 75px; width: 100%; .progress-bar { margin: 0px 30px; position: relative; .self-dot { - top: 16px; position: absolute; - height: 6px; - width: 3px; + height: 8px; + width: 6px; z-index: 1; - background-color: lightcoral; - border-radius: 60%; - // pointer-events: none; + background-color: yellowgreen; cursor: pointer; -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; + width: 6px; + z-index: 1; + background-color: lightcoral; + cursor: pointer; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); + } + .el-slider { + margin: 15px 0; + + .el-slider__runway { + margin: 0; + height: 8px; + .el-slider__bar { + height: 8px; + } + .el-slider__button-wrapper { + width: 16px; + } + } } .el-slider__button { width: 12px; @@ -854,30 +985,44 @@ .el-slider__stop { background-color: lightcoral; } + .time-clip { + width: 40px; + background-color: dimgray; + color: white; + display: none; + font-size: 12px; + top: -26px; + border-radius: 3px; + left: -20px; + height: 19px; + text-align: center; + line-height: 19px; + position: absolute; + } } .control-zone { .time { float: left; margin-left: 23px; - color: #fff; } .play-btn { - width: 24px; - height: 24px; - cursor: pointer; - background: url(/apps/shuohuangMonitorAnalyze/img/bigplay.png) - no-repeat; - background-size: contain; + width: 200px; + height: 27px; + border-radius: 4px; margin: 0 auto; - } - .stop-btn { - width: 24px; - height: 24px; - cursor: pointer; - background: url(/apps/shuohuangMonitorAnalyze/img/smallpause.png) - no-repeat; - background-size: contain; - margin: 0 auto; + .group { + text-align: center; + .el-icon-d-arrow-left { + cursor: pointer; + margin-right: 20px; + font-size: 27px; + } + .el-icon-d-arrow-right { + cursor: pointer; + font-size: 27px; + margin-left: 20px; + } + } } } } @@ -894,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; @@ -954,9 +1120,6 @@ } p.label { line-height: 36px; - } - .label-radio { - padding: 20px; } .label-check { padding: 20px; -- Gitblit v1.8.0