From fa7044f3ccc9a91bc2bc117d1a06f650d86554f2 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期二, 15 六月 2021 16:07:16 +0800 Subject: [PATCH] 优化联动规则加载场景列表的操作 --- src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue | 318 +++++++++++++++++++++++++++++++--------------------- 1 files changed, 189 insertions(+), 129 deletions(-) diff --git a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue index 37885b5..c1a6ea0 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue @@ -73,7 +73,6 @@ <div style="display: none"></div> <div class="currentPlayer"> <ali-player - @playing="getPlayStatus" @pause="isStop = true" @play="isStop = false" @timeupdate="timeUpdate" @@ -112,7 +111,6 @@ @pause="isStop = true" @play="isStop = false" :ref="`player_${videoArrs[index].ID}`" - @ready="videoReady" /> </div> </template> @@ -125,7 +123,7 @@ v-for="(item, index) in eventMarks" :key="index" > - <div slot="content"> + <div slot="content"> {{ getTimeStr(item.offset) }}<br />{{ item.text }} </div> <div @@ -147,39 +145,43 @@ <div class="label-dot" :style="{ - left: (item.offset/maxSecond)*100 + '%', + left: (item.offset / maxSecond) * 100 + '%', }" @click="dotJump(item.offset)" ></div> </el-tooltip> + <div ref="time-clip" class="time-clip"></div> - <el-tooltip placement="top" :offset="440-hoverOffset" - :hide-after="0" :visible-arrow="false" - > - <div slot="content" >{{hoverTime}}</div> <el-slider v-model="curTime" - :format-tooltip="formatTooltip" + :show-tooltip="false" :max="maxSecond" - @mousemove.native="triggerHover" + @mousemove.native.stop="triggerHover" + @mouseleave.native="leaveBar" + @mouseover.native="intoBar" @change="progressChange" - @input="inTimeChange" ></el-slider> -</el-tooltip> - - </div> + </div> <div class="control-zone"> <span class="time">{{ curPlayTime }} / {{ maxVideoTime }}</span> - - - <div class="play-btn" @click="playAll" v-if="showPlayBtn"> - - <span class="icon iconfont"></span> - - </div> - <div class="stop-btn" @click="pauseAll" v-else> - - <span class="icon iconfont"></span> + <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> + <!-- <span class="icon iconfont"></span> --> </div> </div> </div> @@ -216,8 +218,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> @@ -286,7 +288,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> @@ -307,6 +309,27 @@ } 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", @@ -353,8 +376,6 @@ curPlayTime: "00:00", maxSecond: 0, isStop: false, - hoverTime:"", - hoverOffset:0, }; }, watch: { @@ -369,10 +390,13 @@ deep: true, }, videoDetails: { - handler(newVal, oldVal) { + handler(newVal) { this.getCurVideos(newVal); }, deep: true, + }, + curTime(newVal) { + this.curPlayTime = this.getTimeStr(newVal); }, }, mounted() { @@ -381,15 +405,36 @@ this.getCurVideos(this.videoDetails); this.getRelatedVideos(this.videoDetails); }, + destroyed() { + this.videoArrs.length = 0; + }, methods: { - triggerHover(e){ - this.hoverOffset=e.offsetX - this.hoverTime=this.getTimeStr((e.offsetX/880)*this.maxSecond) + triggerHover(e) { + let fn = throttle(this.hoverAction, 2000); + fn(e); }, - getPlayStatus(e) { - console.log(e, 1111); + 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" + ) { + 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 + ); }, - videoReady(a, b) {}, + 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) { @@ -413,45 +458,37 @@ }); } }, - 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].play(); 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].play(); if (i == 0) { let curT = this.$refs[`player_${v.ID}`][0].getCurrentTime(); - this.barRolling(curT); } }); } }, 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; @@ -471,10 +508,6 @@ } else { this.curTime = curT; } - this.curPlayTime = this.getTimeStr(this.curTime); - }, - formatTooltip(val) { - return this.curPlayTime; }, videoMouseEnter(e) { let target = e.target; @@ -500,18 +533,27 @@ }, handleCommand(cmd) { let _this = this; - this.curCamera = cmd.Camera; - this.curRoomVideos = this.allCurVideos.filter((item) => { + + getCarVideos({ + TrainNumber: cmd.TrainNumber, + CarNumber: cmd.CarNumber, + Driver1: cmd.Driver1, + }).then((res) => { + _this.allCurVideos = res.data; + _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.curVideo = _this.curRoomVideos.find((item) => { + return item.ID == cmd.ID; }); - this.$nextTick(() => { + _this.$nextTick(() => { _this.$refs[`player_${_this.curVideo.ID}`][0].init(); }); + }); + }, - zeroize(val) { + pad0(val) { return val < 10 ? "0" + val : val; }, checkCurVideo(index) { @@ -531,13 +573,13 @@ item.marks = _this.mergeMarks(item); }); _this.curVideo = res.data.find((item) => item.ID == v.ID); - _this.curVideo.marks.forEach(item=>{ + _this.curVideo.marks.forEach((item) => { if (item.type == 0) { - _this.eventMarks.push(item) + _this.eventMarks.push(item); } else { - _this.labelMarks.push(item) + _this.labelMarks.push(item); } - }) + }); if (_this.guid == 1) { _this.maxVideoTime = _this.curVideo.VideoTime; } @@ -562,10 +604,10 @@ let arr = []; let map = {}; res.data.forEach((item) => { - this.popDownArr.push(item); + _this.popDownArr.push(item); }); - if (this.popDownArr.length) { - this.curCamera = this.popDownArr[0].Camera; + if (_this.popDownArr.length) { + _this.curCamera = _this.popDownArr[0].Camera; } }); }, @@ -610,7 +652,6 @@ 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"; @@ -621,9 +662,9 @@ cancelLabelChecked() { this.labelDialogVisible = false; }, - dotJump(offset){ - this.curTime = offset - this.progressChange(offset) + dotJump(offset) { + this.curTime = offset; + this.progressChange(offset); }, submitLabelChecked() { let _this = this; @@ -645,23 +686,27 @@ Codes: this.labelCheckedList.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); } }); - - 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(); } else { - this.$message.warning(rsp.msg); + _this.$message.warning(rsp.msg); } }); }, @@ -669,7 +714,6 @@ this.labelCheckedList = []; this.selectedLabelId = ""; this.labelDialogVisible = true; - // 淇濆瓨鐐瑰嚮鏍囨敞鐨勬椂闂� this.setLabelTime = this.$refs[`player_${video.ID}`][0].getCurrentTime(); }, @@ -680,34 +724,46 @@ }, removeCurLabel(mark) { let _this = this; - delLabel({ ID: mark.ID, ParentID: this.curVideo.ID }).then((rsp) => { + let obj = { + Desc: mark.Desc, + ParentUniqID: mark.ParentUniqID, + Time: mark.Time, + ParentID:mark.ParentID + }; + 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) { const eMarks = videoInfo.EventLst.map((item) => { - let obj = { + return { offset: item.SecondsInVideo, text: item.Event + (item.Desc == "" ? "" : ": " + item.Desc), type: 0, }; - return obj; }); const labMarks = videoInfo.LableLst.map((lable) => { - let obj = { + return { offset: +lable.Time, text: lable.Desc, type: 1, }; - return obj; }); return eMarks.concat(labMarks); }, @@ -728,9 +784,7 @@ text-align: left; .content-top { margin-bottom: 15px; - // height: calc(60% + -16px); - .grid-check { text-align: right; margin-bottom: 3px; @@ -749,7 +803,6 @@ } span { font-size: 17px; - color: #cacaca; padding-left: 12px; cursor: pointer; @@ -761,14 +814,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 { @@ -814,9 +865,6 @@ float: left; } } - // .prism-controlbar{ - // display: none; - // } .currentPlayer { border: 2px solid aqua; height: 100%; @@ -834,22 +882,18 @@ margin: 0px 30px; position: relative; .self-dot { - // top: 16px; position: absolute; - height: 6px; + height: 8px; width: 6px; z-index: 1; background-color: lightcoral; - // border-radius: 30%; - // pointer-events: none; cursor: pointer; -webkit-transform: translateX(-50%); transform: translateX(-50%); } - .label-dot{ - // top: 16px; + .label-dot { position: absolute; - height: 6px; + height: 8px; width: 6px; z-index: 1; background-color: yellowgreen; @@ -857,11 +901,19 @@ -webkit-transform: translateX(-50%); transform: translateX(-50%); } - .el-slider{ - margin: 16px 0; - .el-slider__runway{ - margin: 0; - } + .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; @@ -870,33 +922,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/smallplay.png) - + width: 200px; + height: 27px; + border-radius: 4px; margin: 0 auto; - .iconfont{ - font-size: 25px; + .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; + } } - } - .stop-btn { - width: 24px; - height: 24px; - cursor: pointer; - // background: url(/apps/shuohuangMonitorAnalyze/img/smallpause.png) - .iconfont{ - font-size: 25px; - } - margin: 0 auto; } } } @@ -973,9 +1036,6 @@ } p.label { line-height: 36px; - } - .label-radio { - padding: 20px; } .label-check { padding: 20px; -- Gitblit v1.8.0