ZZJ
2021-11-03 b4d2703e653bf702d705b18c20d9edb9066c7c8a
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>
@@ -52,13 +52,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,7 +68,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">
@@ -88,7 +88,7 @@
              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)"
@@ -118,7 +118,11 @@
          </template>
          <div class="player-control">
            <div class="progress-bar">
              <el-tooltip placement="top" v-for="(item, index) in eventMarks" :key="index">
              <el-tooltip
                placement="top"
                v-for="(item, index) in eventMarks"
                :key="item.offset + index"
              >
                <div slot="content">
                  {{ getTimeStr(item.offset) }}
                  <br />
@@ -126,6 +130,7 @@
                </div>
                <div
                  class="self-dot"
                  :class="getColor(item.text)"
                  :style="{
                    left: (item.offset / maxSecond) * 100 + '%',
                  }"
@@ -208,11 +213,7 @@
              <div class="mark-list" v-if="!showTable">
                <div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID">
                  <div class="time">
                    <span>
                      {{ pad0(Math.floor(mark.Time / 60)) }}:{{
                      pad0(mark.Time % 60)
                      }}
                    </span>
                    <span>{{ pad0(Math.floor(mark.Time / 60)) }}:{{ pad0(mark.Time % 60) }}</span>
                    <i class="el-icon-edit" @click="editCurLabel(mark)"></i>
                    <i class="el-icon-delete" @click="removeCurLabel(mark)"></i>
                  </div>
@@ -242,7 +243,7 @@
          </div>
          <div>
            <label>时间:</label>
            <span>{{ videoDetails.VideoDate }}</span>
            <span>{{ videoDetails.StartTime }}</span>
          </div>
          <div>
            <label>司机 | 副司机:</label>
@@ -282,9 +283,6 @@
<script>
import {
  getlstInit,
  updateVideoAnalyze,
  getlst,
  getRelatedVideoInfo,
  getCarVideos,
  getLabelMap,
@@ -332,11 +330,11 @@
  filters: {
    fixPath(str) {
      if (!str || str == undefined) {
        return ""
        return "";
      }
      return str.replace("/opt/vasystem", "")
    }
      return str.replace("/opt/vasystem", "");
    },
  },
  data() {
    return {
@@ -354,7 +352,6 @@
      setLabelTime: 0,
      isCheckAllVideo: 1,
      curRoomVideos: [],
      popDownArr: [],
      curCamera: "",
      showTable: false,
      showLocChoise: true,
@@ -393,10 +390,14 @@
    },
  },
  mounted() {
    this.renderLabelOpts();
    this.setGuid(1);
    this.getCurVideos(this.videoDetails);
    // this.getRelatedVideos(this.videoDetails);
    this.getRelatedVideos(this.videoDetails);
  },
  destroyed() {
    this.videoArrs.length = 0;
@@ -470,7 +471,6 @@
      } else {
        this.videoArrs.forEach((v, i) => {
          this.$refs[`player_${v.id}`][0].seek(val);
          // this.$refs[`player_${v.ID}`][0].play();
          if (i == 0) {
            let curT = this.$refs[`player_${v.id}`][0].getCurrentTime();
          }
@@ -525,33 +525,16 @@
      }
    },
    handleCommand(cmd) {
      console.log(cmd)
      console.log(this.$refs)
      let _this = this;
      _this.curVideo = cmd;
      _this.curCamera = _this.curVideo.CameraPosition;
      _this.$nextTick(() => {
        console.log(_this.$refs)
        _this.$refs[`player_${_this.curVideo.id}`][0].init();
      });
      // let _this = this;
      // console.log(cmd)
      // getCarVideos({
      //   TrainNumber: cmd.TrainNumber,
      //   CarNumber: cmd.CarNumber,
      //   Driver1: cmd.Driver1,
      // }).then((res) => {
      //   _this.allCurVideos = res.data;
      //   _this.curCamera = cmd.CameraPosition;
      //   _this.curRoomVideos = _this.allCurVideos.filter((item) => {
      //     return item.CameraPosition == cmd.CameraPosition;
      //   });
      //   _this.curVideo = _this.curRoomVideos.find((item) => {
      //     return item.ID == cmd.ID;
      //   });
      //   _this.$nextTick(() => {
      //     _this.$refs[`player_${_this.curVideo.ID}`][0].init();
      //   });
      // });
    },
    pad0(val) {
      return val < 10 ? "0" + val : val;
@@ -569,19 +552,15 @@
        CarNumber: v.CarNumber,
        Driver1: v.Driver1,
      }).then((res) => {
        // 填充单窗口的下拉菜单
        res.data.forEach((item) => {
          _this.popDownArr.push(item);
        });
        // if (_this.popDownArr.length) {
        //   _this.curCamera = _this.popDownArr[0].CameraPosition;
        // }
        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;
@@ -598,32 +577,16 @@
          _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";
        });
        _this.$nextTick(() => {
          _this.$refs[`player_${_this.curVideo.id}`][0].init();
          let arr = _this.maxVideoTime.split(":");
          let min = +arr[1], sec = +arr[2];
          let min = +arr[1],
            sec = +arr[2];
          _this.maxSecond = min * 60 + sec;
        });
      });
    },
    getRelatedVideos(video) {
      let _this = this;
      getRelatedVideoInfo({ GroupID: video.GroupID }).then((res) => {
        let arr = [];
        let map = {};
        res.data.forEach((item) => {
          _this.popDownArr.push(item);
        });
        if (_this.popDownArr.length) {
          _this.curCamera = _this.popDownArr[0].CameraPosition;
        }
      });
    },
    renderLabelOpts() {
@@ -632,23 +595,41 @@
        _this.labelOptions = res.data;
      });
    },
    refreshCurVideoLabel(video) {
      getRelatedVideoInfo({ GroupID: video.GroupID }).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) {
      console.log(video)
      this.refreshCurVideoLabel(video);
      this.curVideo = video;
      this.videoArrs = this.allCurVideos.filter(
        (item) => video.GroupID == item.GroupID
      );
      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();
        console.log(this.$refs)
      });
    },
    setGuid(guid) {
@@ -664,14 +645,11 @@
      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 =
            `calc(` + 100 / guid + `%)`;
          // this.$refs["playerWrap"].offsetHeight / guid + "px";
        }
        // console.log(this.$refs[`player_${this.videoArrs[index].ID}`]);
      });
    },
    cancelLabelChecked() {
@@ -684,9 +662,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;
          }
@@ -719,6 +701,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);
        }
@@ -733,16 +720,14 @@
    },
    editCurLabel(mark) {
      this.selectedLabelId = mark.ID;
      this.labelCheckedList = mark.Codes.split(" ,");
      this.labelCheckedList = mark.Codes.split(",");
      this.labelDialogVisible = true;
    },
    removeCurLabel(mark) {
      let _this = this;
      let obj = {
        Desc: mark.Desc,
        ParentUniqID: mark.ParentUniqID,
        Time: mark.Time,
        ParentID: mark.ParentID
        ID: mark.ID,
        VideoIds: mark.VideoIds,
      };
      delLabel(obj).then((rsp) => {
        if (rsp && rsp.success) {
@@ -766,7 +751,7 @@
    },
    mergeMarks(videoInfo) {
      if (!videoInfo.EventLst || !videoInfo.LableLst) {
        console.log("mergeMarks data null")
        console.log("mergeMarks data null");
        return;
      }
@@ -905,17 +890,29 @@
              height: 8px;
              width: 6px;
              z-index: 1;
              background-color: lightcoral;
              background-color: yellowgreen;
              cursor: pointer;
              -webkit-transform: translateX(-50%);
              transform: translateX(-50%);
            }
            .yellow{
              background-color: yellow;
            }
            .purple{
              background-color: purple;
            }
            .blue{
              background-color: blue;
            }
            .label-dot {
              position: absolute;
              height: 8px;
              width: 6px;
              z-index: 1;
              background-color: yellowgreen;
              background-color: lightcoral;
              cursor: pointer;
              -webkit-transform: translateX(-50%);
              transform: translateX(-50%);