From 6e3d8234a4b1bae86b3c896468e20ea9f13c7fb7 Mon Sep 17 00:00:00 2001
From: heyujie <516346543@qq.com>
Date: 星期三, 24 三月 2021 11:46:44 +0800
Subject: [PATCH] 朔黄视频播放进度条

---
 src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue |  642 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 468 insertions(+), 174 deletions(-)

diff --git a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue
index 191953e..de1e4f0 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue
@@ -2,16 +2,25 @@
   <div class="video-analyze-content">
     <div class="content-top">
       <div class="grid-check">
-     
-       <el-dropdown trigger="click" :popper-append-to-body="false" @command="handleCommand" v-show="showLocChoise">
-        <span class="el-dropdown-link">
-          {{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" :key="index" :command="item">{{item.Camera}}</el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
-        
+        <el-dropdown
+          trigger="click"
+          :popper-append-to-body="false"
+          @command="handleCommand"
+          v-show="showLocChoise"
+        >
+          <span class="el-dropdown-link">
+            {{ 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"
+              :key="index"
+              :command="item"
+              >{{ item.Camera }}</el-dropdown-item
+            >
+          </el-dropdown-menu>
+        </el-dropdown>
+
         <span
           :class="
             guid === 1
@@ -42,15 +51,15 @@
           <p class="title-partment">鐩稿叧瑙嗛</p>
           <div class="v-name-block">
             <div
-            class="video-name"
-            :class="{ current: curVideo.ID == video.ID }"
-            @click="checkVideo(video, index)"
-            v-for="(video, index) in curRoomVideos"
-            :key="video.ID"
-          >
-            <i class="el-icon-film"></i>
-            <span>{{ video.VideoDate }}</span>
-          </div>
+              class="video-name"
+              :class="{ current: curVideo.ID == video.ID }"
+              @click="checkVideo(video, index)"
+              v-for="(video, index) in curRoomVideos"
+              :key="video.ID"
+            >
+              <i class="el-icon-film"></i>
+              <span>{{ video.VideoDate }}</span>
+            </div>
           </div>
         </div>
         <div class="players" ref="playerWrap">
@@ -61,10 +70,13 @@
               v-for="(item, index) in videoWrapArr"
               :key="index"
             >
+              <div style="display: none"></div>
               <div class="currentPlayer">
-                <!-- {{curVideo.ID}} -->
-                <!-- <img :src="curVideo.VideoCover" style="width:100px" /> -->
                 <ali-player
+                  @playing="getPlayStatus"
+                  @pause="isStop = true"
+                  @play="isStop = false"
+                  @timeupdate="timeUpdate"
                   :source="curVideo.VideoPath"
                   :markers="curVideo.marks"
                   :ref="`player_${curVideo.ID}`"
@@ -79,80 +91,122 @@
               v-for="(item, index) in videoWrapArr"
               :key="index"
               @click="checkCurVideo(index)"
-              style="position: relative;"
+              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>
+                </div>
                 <div
-                  :class="{ currentPlayer: curVideo.ID == videoArrs[index].ID,videoZone:true }"
-                  @mouseover="overShowLoc(index)"
+                  :class="{
+                    currentPlayer: curVideo.ID == videoArrs[index].ID,
+                  }"
                 >
-                  <!-- @mouseover="" -->
-                  <!-- {{videoArrs[index].ID}} -->
-                  <!-- <img
-                    :src="videoArrs[index].VideoCover"
-                    style="width:100px"
-                  />-->
-                  <div class="pos-desc"  style="position: absolute;top: 5px;left: 10px;color: #fff;z-index: 1;height: fit-content;background-color: black;">{{videoArrs[index].Camera}}</div>
                   <ali-player
+                    @timeupdate="timeUpdate(e, index)"
                     :source="videoArrs[index].VideoPath"
                     :markers="videoArrs[index].marks"
+                    @pause="isStop = true"
+                    @play="isStop = false"
                     :ref="`player_${videoArrs[index].ID}`"
+                    @ready="videoReady"
                   />
                 </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"
+              >
+                <div slot="content">
+                  {{ getTimeStr(item.offset) }}<br />{{ item.text }}
+                </div>
+                <div
+                  class="self-dot"
+                  :style="{
+                    left: (item.offset / maxSecond) * 100 + '%',
+                  }"
+                  @click="dotJump(item.offset)"
+                ></div>
+              </el-tooltip>
+              <!-- :marks="marks"  -->
+              <el-slider
+                v-model="curTime"
+                :format-tooltip="formatTooltip"
+                :max="maxSecond"
+                @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>
+          </div>
         </div>
       </div>
     </div>
     <div class="content-bottom">
-      <div class="bot-left ">
+      <div class="bot-left">
         <!-- <p class="title-partment">蹇�熸爣娉�</p> -->
-         <el-tabs v-model="activeName" @tab-click="handleClick">
-          <el-tab-pane label="蹇�熸爣娉�" name="first"> <div class="flex-box" style="height: 28px">
-          <label style="padding-right: 10px">闅愭偅闂:</label>
-          <el-radio-group v-model="isUnusual">
-            <el-radio :label="0">鏃犲紓甯�</el-radio>
-            <el-radio :label="1">鏈夊紓甯�</el-radio>
-          </el-radio-group>
-          <el-button
-            icon="el-icon-plus"
-            size="mini"
-            v-show="isUnusual == 1"
-            type="primary"
-            @click="addLabel(curVideo)"
-            >娣诲姞鏍囨敞</el-button
-          >
-        </div>
-        <div class="flex-box fixed-height-box">
-          <label v-if="!showTable">鏍囨敞淇℃伅:</label>
-          <div class="mark-list" v-if="!showTable">
-            <div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID">
-              <div class="time">
-                <span
-                  >{{ zeroize(Math.floor(mark.Time / 60)) }}:{{
-                    zeroize(mark.Time % 60)
-                  }}</span
-                >
-                <i class="el-icon-edit" @click="editCurLabel(mark)"></i>
-                <i class="el-icon-delete" @click="removeCurLabel(mark)"></i>
-              </div>
-              <div class="label-content">
-                <span>{{ mark.Desc }}</span>
-              </div>
+        <el-tabs v-model="activeName" @tab-click="handleClick">
+          <el-tab-pane label="蹇�熸爣娉�" name="first">
+            <div class="flex-box" style="height: 28px">
+              <label style="padding-right: 10px">闅愭偅闂:</label>
+              <el-radio-group v-model="isUnusual">
+                <el-radio :label="0">鏃犲紓甯�</el-radio>
+                <el-radio :label="1">鏈夊紓甯�</el-radio>
+              </el-radio-group>
+              <el-button
+                icon="el-icon-plus"
+                size="mini"
+                v-show="isUnusual == 1"
+                type="primary"
+                @click="addLabel(curVideo)"
+                >娣诲姞鏍囨敞</el-button
+              >
             </div>
-          </div>
-        </div></el-tab-pane>
-            <!-- <div class="flex-box fixed-height-box2"></div> -->
-            <dataset-chart style="width:100%" v-if="showTable"></dataset-chart>
+            <div class="flex-box fixed-height-box">
+              <label v-if="!showTable">鏍囨敞淇℃伅:</label>
+              <div class="mark-list" v-if="!showTable">
+                <div
+                  class="mark"
+                  v-for="mark in curVideo.LableLst"
+                  :key="mark.ID"
+                >
+                  <div class="time">
+                    <span
+                      >{{ zeroize(Math.floor(mark.Time / 60)) }}:{{
+                        zeroize(mark.Time % 60)
+                      }}</span
+                    >
+                    <i class="el-icon-edit" @click="editCurLabel(mark)"></i>
+                    <i class="el-icon-delete" @click="removeCurLabel(mark)"></i>
+                  </div>
+                  <div class="label-content">
+                    <span>{{ mark.Desc }}</span>
+                  </div>
+                </div>
+              </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="second"> </el-tab-pane>
         </el-tabs>
-       
       </div>
       <div class="bot-right block">
         <p class="title-partment">瑙嗛璇︽儏</p>
@@ -182,8 +236,7 @@
       :visible="labelDialogVisible"
       @close="labelDialogVisible = false"
       :append-to-body="false"
-        :modal="false"
-
+      :modal="false"
     >
       <!-- <div class="label-radio">
         <p class="label">閫夋嫨灏嗚鏍囨敞鐨勮棰�:</p>
@@ -224,7 +277,7 @@
   delLabel,
   editLabel,
 } from "@/api/shuohuang";
-import DatasetChart from './charts/datasetForVideo';
+import DatasetChart from "./charts/datasetForVideo";
 import AliPlayer from "./aliPlayer/index";
 
 export default {
@@ -249,19 +302,32 @@
       isUnusual: "",
       videoArrs: [],
       relativeVideos: [],
-      allCurVideos:[],
+      allCurVideos: [],
       labelCheckedList: [],
       videoWrapArr: [],
       labelOptions: [],
       selectedLabelId: "",
       setLabelTime: 0,
       isCheckAllVideo: 1,
-      curRoomVideos:[],
-      popDownArr:[],
-      curCamera:"",
-      showTable:false,
-      showLocChoise:true,
-      activeName:"first",
+      curRoomVideos: [],
+      popDownArr: [],
+      curCamera: "",
+      showTable: false,
+      showLocChoise: true,
+      activeName: "first",
+      curTime: 0,
+      showPlayBtn: true,
+      eventMarks: [],
+      marks: {
+        45: {},
+        373: {},
+      },
+      labelMarks: [],
+      maxDuration: 0,
+      maxVideoTime: "",
+      curPlayTime: "00:00",
+      maxSecond: 0,
+      isStop: false,
     };
   },
   watch: {
@@ -286,27 +352,133 @@
     this.renderLabelOpts();
     this.setGuid(1);
     this.getCurVideos(this.videoDetails);
-    this.getRelatedVideos(this.videoDetails)
+    this.getRelatedVideos(this.videoDetails);
   },
   methods: {
-    handleClick(instance){
-      if (instance.name=="second") {
-        this.showTable=true       
-      }else{
-        this.showTable=false
+    getPlayStatus(e) {
+      console.log(e, 1111);
+    },
+    videoReady(a, b) {},
+    playAll() {
+      this.showPlayBtn = false;
+      if (this.guid == 1) {
+        this.$refs[`player_${this.curVideo.ID}`][0].play();
+        this.maxDuration = this.$refs[
+          `player_${this.curVideo.ID}`
+        ][0].getDuration();
+      } else {
+        this.videoArrs.forEach((v) => {
+          this.$refs[`player_${v.ID}`][0].play();
+        });
       }
     },
-    handleCommand(cmd){
-      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();
+    pauseAll() {
+      this.showPlayBtn = true;
+      if (this.guid == 1) {
+        this.$refs[`player_${this.curVideo.ID}`][0].pause();
+      } else {
+        this.videoArrs.forEach((v) => {
+          this.$refs[`player_${v.ID}`][0].pause();
         });
+      }
+    },
+    inTimeChange(val) {},
+    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();
+        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();
+          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)
+      }`;
+    },
+    barRolling(curT) {},
+    timeUpdate(e, index) {
+      if (this.isStop) {
+        return;
+      }
+      let curT;
+      if (this.guid == 1) {
+        curT = Math.floor(
+          this.$refs[`player_${this.curVideo.ID}`][0].getCurrentTime()
+        );
+      } else {
+        curT = Math.floor(
+          this.$refs[`player_${this.videoArrs[index].ID}`][0].getCurrentTime()
+        );
+      }
+      if (curT <= this.curTime) {
+        return;
+      } else {
+        this.curTime = curT;
+      }
+      this.curPlayTime = this.getTimeStr(this.curTime);
+    },
+    formatTooltip(val) {
+      return this.curPlayTime;
+    },
+    videoMouseEnter(e) {
+      let target = e.target;
+      if (target.children.length > 1) {
+        target.children[0].style.display = "block";
+      }
+    },
+    videoMouseLeave(e) {
+      let target = e.target;
+      if (
+        target.children.length == 2 &&
+        target.children[0].className == "video-box-top"
+      ) {
+        target.children[0].style.display = "none";
+      }
+    },
+    handleClick(instance) {
+      if (instance.name == "second") {
+        this.showTable = true;
+      } else {
+        this.showTable = false;
+      }
+    },
+    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();
+      });
     },
     zeroize(val) {
       return val < 10 ? "0" + val : val;
@@ -317,38 +489,79 @@
         this.refreshCurVideoLabel(this.curVideo);
       }
     },
-    getCurVideos(v){
+    getCurVideos(v) {
       let _this = this;
       getCarVideos({
-        TrainNumber:v.TrainNumber,
-        CarNumber:v.CarNumber,
-        Driver1:v.Driver1,
-      }).then(res=>{
-        res.data.forEach(item=>{
-          item.marks = _this.mergeMarks(item)
-        })
-        _this.curVideo=res.data.find((item) => item.ID == v.ID)
-        // debugger
-        _this.videoArrs = res.data.filter(item=> v.UniqeID== item.UniqeID);
-        _this.allCurVideos = res.data;
-        _this.curRoomVideos = _this.allCurVideos.filter(item=>{
-          return item.Camera == "鍙告満瀹�"
-        })
-         this.$nextTick(() => {
-          _this.$refs[`player_${_this.curVideo.ID}`][0].init();
+        TrainNumber: v.TrainNumber,
+        CarNumber: v.CarNumber,
+        Driver1: v.Driver1,
+      }).then((res) => {
+        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.curVideo.marks.forEach((item) => {
+          if (item.type == 0) {
+            map[item.offset] = {
+              style: {
+                color: "white",
+              },
+              label: item.text,
+            };
+          } else {
+            map[+item.offset] = {
+              style: {
+                color: "yellow",
+              },
+              label: item.text,
+            };
+          }
+        });
+        // _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;
+        }
+        _this.videoArrs = res.data.filter((item) => v.UniqeID == item.UniqeID);
+        _this.allCurVideos = res.data;
+        _this.curRoomVideos = _this.allCurVideos.filter((item) => {
+          return item.Camera == "鍙告満瀹�";
+        });
+
+        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;
+        });
+      });
     },
     getRelatedVideos(video) {
       let _this = this;
       getRelatedVideoInfo({ UniqeID: video.UniqeID }).then((res) => {
-        let arr = []
-        let map = {}
-        res.data.forEach(item=>{
-          this.popDownArr.push(item)
-        })
+        let arr = [];
+        let map = {};
+        res.data.forEach((item) => {
+          this.popDownArr.push(item);
+        });
         if (this.popDownArr.length) {
-          this.curCamera=this.popDownArr[0].Camera
+          this.curCamera = this.popDownArr[0].Camera;
         }
       });
     },
@@ -364,57 +577,54 @@
           if (d.ID === video.ID) {
             video.LableLst = d.LableLst;
           }
-          // let someVideo = _this.videoArrs.find(video => video.ID === d.ID);
-          // someVideo.LableLst = d.LableLst
         });
       });
     },
     checkVideo(video, index) {
-      // debugger
       this.refreshCurVideoLabel(video);
       this.curVideo = video;
-      this.videoArrs = this.allCurVideos.filter(item=> video.UniqeID== item.UniqeID);
-
+      this.videoArrs = this.allCurVideos.filter(
+        (item) => video.UniqeID == item.UniqeID
+      );
       this.$nextTick(() => {
         this.$refs[`player_${this.curVideo.ID}`][0].init();
       });
     },
-
     setGuid(guid) {
       let _this = this;
       this.guid = guid;
-      if (guid==1) {
-        this.showLocChoise=true
-      }else{
-        this.showLocChoise=false
+      if (guid == 1) {
+        this.showLocChoise = true;
+      } else {
+        this.showLocChoise = false;
+        this.$refs[`player_${this.curVideo.ID}`][0].pause();
+        this.$refs[`player_${this.curVideo.ID}`][0].seek(0);
       }
-      // for(var i = 0; i < Math.pow(guid,2); i++){
-      //   if(i>this.videoArrs.length-1){
-      //       this.videoWrapArr[i] = this.videoArrs[i]
-      //     }else{
-      //       this.videoWrapArr[i] = {}
-      //     }
-      // }
       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 =
-            this.$refs["playerWrap"].offsetWidth / guid + "px";
+            `calc(` + 100 / guid + `%)`;
+          // this.$refs["playerWrap"].offsetWidth / guid + "px";
           this.$refs[`gridVideoItem_${i}`][0].style.height =
-            this.$refs["playerWrap"].offsetHeight / guid + "px";
+            `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)
     },
     submitLabelChecked() {
       let _this = this;
       let tempArr = [];
-      // if (this.isCheckAllVideo == 1) {
-        tempArr = this.videoArrs.map((video) => video.ID);
-      // }
+      tempArr = this.videoArrs.map((video) => video.ID);
       let desc = this.labelCheckedList.map((lableId) => {
         for (let label of this.labelOptions) {
           if (label.ID == lableId) {
@@ -425,7 +635,7 @@
 
       let query = {
         ID: this.selectedLabelId,
-        ParentID:  tempArr.join(","),
+        ParentID: tempArr.join(","),
         ParentUniqID: this.curVideo.UniqeID + "",
         Time: Math.round(this.setLabelTime) + "",
         Codes: this.labelCheckedList.join(","),
@@ -485,19 +695,24 @@
       });
     },
     mergeMarks(videoInfo) {
-      const eMarks = videoInfo.EventLst.map(function (item) {
-        return {
-          offset: item.SecondsInVideo + "",
+      const eMarks = videoInfo.EventLst.map((item) => {
+        let obj = {
+          offset: item.SecondsInVideo,
           text: item.Event + (item.Desc == "" ? "" : ": " + item.Desc),
+          type: 0,
         };
+        this.eventMarks.push(obj);
+        return obj;
       });
       const labMarks = videoInfo.LableLst.map((lable) => {
-        return {
+        let obj = {
           offset: lable.Time,
           text: lable.Desc,
+          type: 1,
         };
+        this.labelMarks.push(obj);
+        return obj;
       });
-
       return eMarks.concat(labMarks);
     },
     setMarks(video) {
@@ -511,29 +726,33 @@
 <style lang="scss" >
 .video-analyze-content {
   margin: 0;
-    padding: 6px 15px 15px 15px;
+  padding: 6px 15px 15px 15px;
+  height: 100%;
 
   text-align: left;
   .content-top {
-    margin-bottom: 10px;
+    margin-bottom: 15px;
+
+    // height: calc(60% + -16px);
+
     .grid-check {
       text-align: right;
-         margin-bottom: 3px;
+      margin-bottom: 3px;
       position: relative;
-      .el-dropdown{
+      .el-dropdown {
         position: absolute;
         top: -4px;
         left: 200px;
       }
       .el-dropdown-link {
         cursor: pointer;
-        color: #409EFF;
+        color: #409eff;
       }
       .el-icon-arrow-down {
         font-size: 12px;
       }
       span {
-          font-size: 17px;
+        font-size: 17px;
 
         color: #cacaca;
         padding-left: 12px;
@@ -545,14 +764,16 @@
     }
     .video-area {
       display: flex;
-      .info-list {
-       width: 180px;
+      height: 100%;
 
+      .info-list {
+        width: 180px;
+        min-width: 180px;
         margin-right: 10px;
-        .v-name-block{
+        .v-name-block {
           height: 484px;
 
-            overflow: auto;
+          overflow: auto;
         }
         .video-name {
           cursor: pointer;
@@ -567,20 +788,34 @@
         }
       }
       .players {
-          width: 940px;
-
-        height: 530px;
+        width: 100%;
         display: flex;
         flex-wrap: wrap;
+        height: 455px;
         .video-item {
           background: black;
           border: 1px solid #fff;
           box-sizing: border-box;
-          
           & > div {
             height: 100%;
             & > div {
               height: 100%;
+            }
+          }
+          .video-box-top {
+            color: white;
+            display: none;
+            width: 100%;
+            height: 32px;
+            line-height: 32px;
+            padding: 0px 20px;
+            box-sizing: border-box;
+            background: #27293190;
+            position: absolute;
+            top: 0px;
+            z-index: 2;
+            b {
+              float: left;
             }
           }
           .currentPlayer {
@@ -592,21 +827,78 @@
             }
           }
         }
+        .player-control {
+          background-color: black;
+          height: 75px;
+          width: 100%;
+          .progress-bar {
+            margin: 0px 30px;
+            position: relative;
+            .self-dot {
+              top: 16px;
+              position: absolute;
+              height: 6px;
+              width: 3px;
+              z-index: 1;
+              background-color: lightcoral;
+              border-radius: 60%;
+              // pointer-events: none;
+              cursor: pointer;
+              -webkit-transform: translateX(-50%);
+              transform: translateX(-50%);
+            }
+            .el-slider__button {
+              width: 12px;
+              height: 12px;
+            }
+            .el-slider__stop {
+              background-color: lightcoral;
+            }
+          }
+          .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;
+              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;
+            }
+          }
+        }
       }
     }
   }
   .content-bottom {
     display: flex;
+
     .bot-left {
       flex: 1;
       padding: 0px 15px 8px 15px;
       background: #fff;
-    border-radius: 3px;
-    .el-tabs__header {
-    padding: 0;
-    position: relative;
-    margin: 0 0 10px;
-}
+      border-radius: 3px;
+      min-width: 400px;
+      height: 343px;
+      .el-tabs__header {
+        padding: 0;
+        position: relative;
+        margin: 0 0 10px;
+      }
       .flex-box {
         align-items: baseline;
         label {
@@ -644,6 +936,8 @@
     .bot-right {
       width: 210px;
       margin-left: 10px;
+      min-width: 210px;
+
       label {
         color: #999;
         padding-right: 8px;
@@ -654,7 +948,7 @@
   .label-dialog {
     .el-dialog {
       width: 700px !important;
-      height: 558px  !important;
+      height: 558px !important;
       .el-dialog__header {
         height: 20px;
       }

--
Gitblit v1.8.0