From 0175cda6150656bc74b34c6f6c71edd1e1fc653c Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期四, 04 二月 2021 18:22:54 +0800
Subject: [PATCH] treee, 修复tab切换时树的选中状态.添加区域

---
 src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue |  461 +++++---------------------------------------------------
 1 files changed, 47 insertions(+), 414 deletions(-)

diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
index 0b626f0..e4b36d7 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
@@ -117,14 +117,14 @@
       <div class="header-bar clearfix">
         <div class="left">
           <div>
-            <el-select v-model="watch" size="mini">
-              <el-option value label="鍏ㄩ儴"></el-option>
-              <el-option value="1" label="鏈叧娉�"></el-option>
-              <el-option value="2" label="宸插叧娉�"></el-option>
+            <el-select v-model="IsFollow" size="mini" @change="filterSearchData">
+              <el-option value='' label="鍏ㄩ儴"></el-option>
+              <el-option :value="false" label="鏈叧娉�"></el-option>
+              <el-option :value="true" label="宸插叧娉�"></el-option>
             </el-select>
           </div>
           <div>
-            <el-select v-model="settle" size="mini">
+            <el-select v-model="settle" size="mini" >
               <el-option value label="鍏ㄩ儴"></el-option>
               <el-option value="1" label="鏈鐞�"></el-option>
               <el-option value="2" label="宸插鐞�"></el-option>
@@ -169,8 +169,8 @@
                   </div>
                 </div>
                 <div class="mark-info">
-                  <div class="abnormal" v-if="data.IsUnusual==='1'">
-                    <span v-for="(mark,index) in data.marks" :key="index">{{mark}}</span>
+                  <div class="abnormal" v-if="data.LableLst&&data.LableLst.length">
+                    <span v-for="(label,index) in data.LableLst" :key="index">{{label.Desc}}</span>
                   </div>
                   <div v-else>
                     <span>鏃犲紓甯�</span>
@@ -208,9 +208,9 @@
           <el-table-column label="淇敼鏃ユ湡" prop="UpdatedAt" sortable></el-table-column>
           <el-table-column label="鍒涘缓鏃ユ湡" prop="CreatedAt" sortable></el-table-column>
           <el-table-column label="鎿嶄綔">
-            <template>
+            <template slot-scope="scope">
               <div class="operation">
-                <i class="el-icon-star-off" style="font-size: 18px;"></i>
+                <i class="el-icon-star-off" @click="toggleFollow(scope.row)"></i>
               </div>
             </template>
           </el-table-column>
@@ -229,7 +229,6 @@
         class="dialog-video"
         :visible="videoDialogVisible"
         @close="videoDialogVisible=false"
-        :append-to-body="false"
       >
         <div slot="title" class="title">
           <div class="center">
@@ -237,146 +236,7 @@
             <span>鎾斁瑙嗛</span>
           </div>
         </div>
-        <div class="content">
-          <div class="content-top">
-            <div class="grid-check">
-              <span
-                :class="guid === 1 ? 'iconfont icongongge1 activegongge':'iconfont icongongge1'"
-                @click="setGuid(1)"
-              ></span>
-              <span
-                :class="guid === 2 ? 'iconfont icongongge activegongge':'iconfont icongongge'"
-                @click="setGuid(2)"
-              ></span>
-              <span
-                :class="guid === 3 ? 'iconfont icongongge2 activegongge':'iconfont icongongge2'"
-                @click="setGuid(3)"
-              ></span>
-            </div>
-            <div class="video-area">
-              <div class="info-list block">
-                <p class="title-partment">鐩稿叧瑙嗛</p>
-                <!-- <div class="video-name" v-for="video in videoDetails.videoList" :key="video.id">
-                  <i class="el-icon-film"></i>
-                  <span>{{video.name}}</span>
-                </div>-->
-                <div
-                  class="video-name"
-                  :class="{'current':curVideo.ID==video.ID}"
-                  @click="checkVideo(video,index)"
-                  v-for="(video,index) in videoDetails.relativeVideos"
-                  :key="video.ID"
-                >
-                  <i class="el-icon-film"></i>
-                  <span>{{video.Event}}</span>
-                </div>
-              </div>
-              <div class="players" ref="playerWrap">
-                <div
-                  class="video-item"
-                  :ref="`gridVideoItem_${index}`"
-                  v-for="(item,index) in videoWrapArr"
-                  :key="index"
-                  
-                >
-                  <template v-if="index<=videoArrs.length-1">
-                    <div :class="{'currentPlayer':curVideo.ID==videoArrs[index].ID}">
-                      {{videoArrs[index].ID}}
-                      <img
-                        :src="CLIP+videoArrs[index].VideoCover"
-                        style="width:100px"
-                      />
-                    </div>
-                  </template>
-                </div>
-                <!-- <div
-                  class="video-item"
-                  :class="{'active':item.ID==curVideo.ID}"
-                  :ref="`gridVideoItem_${index}`"
-                  v-for="(item,index) in videoWrapArr"
-                  :key="index"
-                >
-                  
-                </div>-->
-              </div>
-            </div>
-          </div>
-          <div class="content-bottom">
-            <div class="bot-left block">
-              <p class="title-partment">蹇�熸爣娉�</p>
-              <div class="flex-box" style="height:28px;">
-                <label style="padding-right:10px;">闅愭偅闂:</label>
-                <el-radio v-model="curVideo.IsUnusual" label="0">鏃犲紓甯�</el-radio>
-                <el-radio v-model="curVideo.IsUnusual" label="1">鏈夊紓甯�</el-radio>
-                <el-button
-                  icon="el-icon-plus"
-                  size="mini"
-                  v-show="curVideo.IsUnusual==1"
-                  type="primary"
-                  @click="addLabel(curVideo)"
-                >娣诲姞鏍囨敞</el-button>
-              </div>
-              <div class="flex-box">
-                <label>鏍囨敞淇℃伅:</label>
-                <div class="mark-list">
-                  <div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID">
-                    <div class="time" v-if="mark.length">
-                      <span>{{mark[0].Time}}</span>
-                      <i class="el-icon-edit" @click="editCurLabel(mark)"></i>
-                      <i
-                        class="el-icon-delete"
-                        @click="removeCurLabel(mark[0].ParentID,mark[0].Time)"
-                      ></i>
-                    </div>
-                    <div class="label-content">
-                      <span
-                        v-for="content in mark"
-                        :key="content.ID"
-                      >{{findLabelNameById(content.CodeID)}}</span>
-                    </div>
-                  </div>
-                </div>
-              </div>
-            </div>
-            <div class="bot-right block">
-              <p class="title-partment">瑙嗛璇︽儏</p>
-              <div class="base-info">
-                <div>
-                  <label>杞﹀彿:</label>
-                  <span>{{videoDetails.CarNumber}}</span>
-                </div>
-                <div>
-                  <label>杞︽:</label>
-                  <span>{{videoDetails.TrainNumber}}</span>
-                </div>
-                <div>
-                  <label>鏃堕棿:</label>
-                  <span>{{videoDetails.VideoDate}}</span>
-                </div>
-                <div>
-                  <label>鍙告満|鍓徃鏈�:</label>
-                  <span>{{videoDetails.Driver1}}|{{videoDetails.Driver2}}</span>
-                </div>
-              </div>
-            </div>
-          </div>
-        </div>
-      </el-dialog>
-      <el-dialog
-        class="label-dialog"
-        :visible="labelDialogVisible"
-        @close="labelDialogVisible=false"
-        :append-to-body="false"
-      >
-        <div class="label-check">
-          <el-checkbox-group v-model="labelCheckedList">
-            <el-checkbox v-for="item in labelOptions" :key="item.ID" :label="item.ID">{{item.Name}}</el-checkbox>
-          </el-checkbox-group>
-        </div>
-        <div class="btns">
-          <el-button @click="cancelLabelChecked" size="small">鍙栨秷</el-button>
-          <el-button @click="submitLabelChecked()" size="small" type="primary">纭畾</el-button>
-        </div>
+        <video-analyze :videoDetails="selectedVideo" />
       </el-dialog>
     </div>
   </div>
@@ -384,13 +244,19 @@
 
 <script>
 import { getlstInit, updateVideoAnalyze, getlst, getRelatedVideoInfo, getLabelMap, delLabel, editLabel } from '@/api/shuohuang';
+import VideoAnalyze from "./videoAnalyze"
 
 export default {
+  name: "SearchMain",
+  components: {
+    VideoAnalyze
+  },
   data () {
     return {
       CLIP: 'http://192.168.20.113/',
       keyword: '',
-      searchTime: [this.$moment(new Date().getTime() - 3600 * 1000 * 24 * 3).format("YYYY-MM-DD HH:mm:ss"), this.$moment(new Date()).format("YYYY-MM-DD HH:mm:ss")],
+      IsFollow: '',
+      searchTime: [this.$moment(new Date().getTime() - 3600 * 1000 * 24 * 5).format("YYYY-MM-DD HH:mm:ss"), this.$moment(new Date()).format("YYYY-MM-DD HH:mm:ss")],
       curTabPage: 1,
       curTablePage: 1,
       tabPageSize: 8,
@@ -443,7 +309,6 @@
       highLevelConfigs: [],
       showAdvance: true,
       fixedOneLineHeight: 40,
-      watch: '',
       settle: '',
       showType: 'menu',
       tableData: [
@@ -453,110 +318,26 @@
       tabData: [
         { id: 'ss1', no: 'SS4B115', frequency: '8084', time: '2020-09-21 20:45:08', driver: '寮犱笁', marks: ['鏈懠鍞ゃ�佸懠鍞や笉鏍囧噯', '瀛︿範鍙告満鏈簲绛�'], markType: 1, tags: ['杩涘嚭绔�', '鍙告満绂诲矖'], follow: true },
         { id: 'ss2', no: 'SS4B115', frequency: '8084', time: '2020-09-21 20:45:08', driver: '寮犱笁', marks: [], markType: 0, tags: ['杩涘嚭绔�', '鍙告満绂诲矖'], follow: false }
-      ],
-
+      ], 
       videoDialogVisible: false,
-      videoDetails: {},
-      guid: 1,
-      curVideo: {},
-      videoArrs: [],
-      videoWrapArr: [],
       hiddenDanger: 1,
       labelDialogVisible: false,
-      labelOptions: [{ id: 'whh', name: '鏈懠鍞ゃ�佸懠鍞や笉鏍囧噯' }, { id: 'jsbz', name: '绮剧涓嶆尟銆佽繍琛屼腑鐫¤' }, { id: 'xxsj', name: '瀛︿範鍙告満鏈簲绛�' }, { id: 'myhb', name: '娌℃湁鍚庨儴鐬湜銆佷笉鎸夎瀹氬仛闃叉簻鎺柦' }],
-      labelCheckedList: [],
+      selectedVideo: {}
     }
   },
   watch: {
     checkedConfigs: {
       handler (n, o) {
-        // let filterQuerys = [];
-        // n.forEach(config => {
-        //   let checkedOpts = config.data.filter(option => option.isChecked);
-        //   if (checkedOpts.length) {
-        //     var linkOpts = checkedOpts.map(opt => opt.name);
-        //     linkOpts = linkOpts.join(',');
-        //     let obj = {};
-        //     obj[config.NameEn] = linkOpts;
-        //     filterQuerys.push(obj);
-        //   }
-        // })
-        // console.log(filterQuerys)
-
         this.filterSearchData()
       },
       deep: true
     }
   },
   mounted () {
-    // let mockConfigs = [
-    //   { id: 'jch', isHighLevel: false, title: '鏈鸿溅鍙�', data: [{ name: '鍏ㄩ儴', id: '' }, { name: 'K24', id: 'k24' }, { name: 'G172', id: 'g172' }, { name: 'K254', id: 'k254' }, { name: 'K264', id: 'k264' }, { name: 'G132', id: 'g132' }, { name: 'K257', id: 'k257' }, { name: 'K269', id: 'k269' }, { name: 'G176', id: 'g176' }, { name: 'G137', id: 'g137' }, { name: 'K297', id: 'k297' }, { name: 'K209', id: 'k209' }, { name: 'G777', id: 'g777' }, { name: 'G337', id: 'g337' }, { name: 'K277', id: 'k277' }, { name: 'K299', id: 'k299' }, { name: 'G866', id: 'g866' }, { name: 'K877', id: 'k877' }, { name: 'K699', id: 'k699' }, { name: 'G906', id: 'g906' }, { name: 'L677', id: 'l677' }, { name: 'M987', id: 'm987' }] },
-    //   { id: 'cc', isHighLevel: false, title: '杞︽', data: [{ name: '鍏ㄩ儴', id: '' }, { name: 'SS344', id: 'SS344' }, { name: 'SS345', id: 'SS345' }, { name: 'SS765', id: 'SS765' }, { name: 'SS776', id: 'SS776' }, { name: 'SS676', id: 'SS676' }, { name: 'SS876', id: 'SS876' }, { name: 'SS779', id: 'k779' }, { name: 'SS976', id: 'SS976' },] },
-    //   { id: 'sj', isHighLevel: true, title: '鍙告満', data: [{ name: '寮犱笁', id: 'zs' }, { name: '鏉庢柉', id: "ls" }, { name: '鏉庢柉鐗�', id: "lst" }] },
-    //   { id: 'lk', isHighLevel: true, title: '璺喌', data: [{ name: '鏍囩ず鐗�', id: 'bsp' }, { name: '淇″彿鏈�', id: "xhj" }, { name: '寮亾', id: "wd" }] }
-    // ];
-
-    // mockConfigs.forEach(config => {
-    //   this.$set(config, 'isShow', true);
-    //   config.data.forEach(item => {
-    //     this.$set(item, 'isChecked', false);
-    //   })
-    //   if (config.isHighLevel) {
-    //     this.highLevelConfigs.push(config);
-    //   } else {
-    //     this.$set(config, 'isMultCheck', false);
-    //     this.$set(config, 'showMore', false);
-    //     this.optionalConfigs.push(config);
-    //   }
-    // })
-    // this.$nextTick(() => {
-    //   this.optionalConfigs.forEach(config => {
-    //     if (this.$refs[`options${config.id}`][0].scrollHeight > this.fixedOneLineHeight) {
-    //       config.showMore = true;
-    //       this.$set(config, 'isShowMore', false);
-    //     } else {
-    //       config.showMore = false;
-    //     }
-    //   });
-    //   console.log(this.optionalConfigs);
-    // });
     this.init();
-    this.renderLabelOpts();
   },
   methods: {
-    editCurLabel (mark) {
-      let arr = [];
-      mark.forEach(label => {
-        arr.push(label.CodeID)
-      });
-      this.labelCheckedList = arr;
-      this.labelDialogVisible = true;
-    },
-    removeCurLabel (ParentID, Time) {
-      delLabel({ ParentID, Time }).then(res => {
-        
-      })
-    },
-    renderLabelOpts () {
-      let _this = this;
-      getLabelMap().then(res => {
-        _this.labelOptions = res.data
-      })
-    },
-    findLabelNameById (id) {
-      debugger
-      let label = this.labelOptions.find(label => label.ID == id);
-      return label.Name;
-    },
-    checkVideo (video,index) {
-      this.curVideo = video;
-      debugger
-      if(index>0&&this.guid==1){
-        this.videoWrapArr
-      }
-    },
     handleTabSizeChange (size) {
-      debugger
       this.tabPageSize = size;
       this.filterSearchData()
     },
@@ -570,13 +351,22 @@
     //浜岀骇鏌ヨ
     filterSearchData () {
       let _this = this;
+      let isFollow = '';
+      if(this.IsFollow === ''){
+        isFollow = ''
+      }else if(!!this.IsFollow){
+        isFollow = '1'
+      }else{
+        isFollow = '0'
+      }
       let query = {
         KeyWord: this.keyword,
         StartDate: this.searchTime[0],
         EndDate: this.searchTime[1],
         PageIndex: this.showType == 'list' ? this.curTablePage : this.showType == 'list',
         PageSize: this.showType == 'list' ? this.tablePageSize : this.tabPageSize,
-        IsDetail: this.showType == 'list'
+        IsDetail: this.showType == 'list',
+        IsFollow: isFollow
       };
       let filterQuerys = [];
       this.checkedConfigs.forEach(config => {
@@ -610,7 +400,8 @@
         EndDate: this.searchTime[1],
         PageIndex: this.showType == 'list' ? this.curTablePage : this.showType == 'list',
         PageSize: this.showType == 'list' ? this.tablePageSize : this.tabPageSize,
-        IsDetail: this.showType == 'list'
+        IsDetail: this.showType == 'list',
+        IsFollow: this.IsFollow
       };
       this.optionalConfigs = [];
       this.highLevelConfigs = [];
@@ -675,72 +466,17 @@
       });
     },
 
-    cancelLabelChecked () {
-      this.labelDialogVisible = false;
-    },
-    submitLabelChecked () {
-      console.log(this.labelCheckedList)
-      debugger
-      //this.curVideo
-      //this.curVideo.HotPoint[0].Time
-      editLabel({ ParentID: this.curVideo.ID + '', Time: this.curVideo.HotPoint[0].Time, CodeID: this.labelCheckedList.join(',') }).then(res => {
-        debugger
-
-      })
-
-    },
-    addLabel (video) {
-      this.labelDialogVisible = true;
-    },
-    setGuid (guid) {
-      let _this = this;
-      this.guid = guid;
-      // 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++) {
-          this.$refs[`gridVideoItem_${i}`][0].style.width = this.$refs['playerWrap'].offsetWidth / guid + 'px';
-          this.$refs[`gridVideoItem_${i}`][0].style.height = this.$refs['playerWrap'].offsetHeight / guid + 'px';
-
-        }
-      })
-
-    },
     checkVideoDetail (data) {
-      this.videoDetails = data;
       let _this = this;
-      getRelatedVideoInfo({ UniqeID: data.UniqeID }).then(res => {
-        _this.videoDetails.relativeVideos = res.data;
-        _this.curVideo = res.data[0];
-        _this.videoArrs = res.data;
-        // _this.videoWrapArr.push(res.data[0]);
-        _this.setGuid(1)
-        _this.videoDialogVisible = true;
-      })
+      _this.selectedVideo = data;
+      _this.videoDialogVisible = true;
+
     },
     checkFollow () {
 
     },
     checkType (type) {
       this.showType = type;
-      // let filterQuerys = [];
-      // this.checkedConfigs.forEach(config => {
-      //   let checkedOpts = config.data.filter(option => option.isChecked);
-      //   if (checkedOpts.length) {
-      //     var linkOpts = checkedOpts.map(opt => opt.name);
-      //     linkOpts = linkOpts.join(',');
-      //     let obj = {};
-      //     obj[config.NameEn] = linkOpts;
-      //     filterQuerys.push(obj);
-      //   }
-      // })
       this.filterSearchData()
     },
     clearCheckedConfigs () {
@@ -815,6 +551,9 @@
 <style lang="scss">
 .search-for-video-analyze {
   padding: 20px 30px;
+  .flex-box{
+    display: flex;
+  }
   .filter-area {
     .input-area {
       display: flex;
@@ -927,8 +666,8 @@
               border-color: #7695ec;
             }
             &.checked {
-              color: #409EFF;
-              border-color: #409EFF;
+              color: #409eff;
+              border-color: #409eff;
             }
           }
         }
@@ -978,15 +717,15 @@
             padding: 2px 5px;
             cursor: pointer;
             border: 1px solid #eee;
-            background-color:#ecf0fc;
+            background-color: #ecf0fc;
             border-radius: 3px;
             color: #777;
             &.menu {
               margin-right: 10px;
             }
             &.current {
-              border-color: #409EFF;
-              background-color:#fff;
+              border-color: #409eff;
+              background-color: #fff;
             }
           }
         }
@@ -1003,6 +742,7 @@
         text-align: left;
         border: 1px solid #dedede;
         border-radius: 5px;
+        height: 350px;
         .video-wrap {
           background: aliceblue;
           border-radius: 3px;
@@ -1047,7 +787,7 @@
           bottom: 10px;
           color: #ccc;
           .follow {
-            color: #409EFF;
+            color: #409eff;
           }
         }
       }
@@ -1063,8 +803,10 @@
       }
     }
     .dialog-video {
+      z-index: 2096 !important;
       .el-dialog {
         width: 1180px;
+        height: 918px;
       }
       .el-dialog__body {
         background: #f5f5f5;
@@ -1081,121 +823,12 @@
         background: #fff;
         padding: 10px;
         border-radius: 3px;
-        .flex-box >label{
+        .flex-box > label {
           color: #777;
         }
       }
       .title {
         font-size: 18px;
-      }
-      .content {
-        padding: 15px;
-        text-align: left;
-        .content-top {
-          margin-bottom: 10px;
-          .grid-check {
-            text-align: right;
-            margin-bottom: 6px;
-            span {
-              font-size: 20px;
-              color: #cacaca;
-              padding-left: 12px;
-              cursor: pointer;
-              &.activegongge{
-                color: #3d68e1;
-              }
-            }
-          }
-          .video-area {
-            display: flex;
-            .info-list {
-              width: 160px;
-              margin-right: 10px;
-              .video-name {
-                cursor: pointer;
-                color: #777;
-                margin-bottom: 10px;
-                &.current {
-                  color: #409eff;
-                }
-                i {
-                  padding-right: 4px;
-                }
-              }
-            }
-            .players {
-              width: 960px;
-              height: 540px;
-              display: flex;
-              flex-wrap: wrap;
-              .video-item {
-                background: black;
-                border: 1px solid #fff;
-                box-sizing: border-box;
-                .currentPlayer {
-                  border: 2px solid aqua;
-                }
-              }
-            }
-          }
-        }
-        .content-bottom {
-          display: flex;
-          .bot-left {
-            flex: 1;
-            .flex-box {
-              align-items: baseline;
-              label {
-                padding-right: 10px;
-              }
-              .mark-list {
-                .time {
-                  cursor: pointer;
-                  font-size: 15px;
-                  font-weight: bold;
-                  color: #409eff;
-                  span{
-                    padding-right: 5px;
-                  }
-                  i[class^='el-icon'] {
-                    padding: 3px;
-                  }
-                }
-                .label-content {
-                  font-size: 13px;
-                  padding: 4px 0;
-                  color: #888;
-                }
-              }
-            }
-          }
-          .bot-right {
-            width: 210px;
-            margin-left: 10px;
-            label {
-              color: #999;
-              padding-right: 8px;
-            }
-          }
-        }
-      }
-    }
-    .label-dialog {
-      .el-dialog {
-        width: 700px;
-        .label-check {
-          min-height: 400px;
-          margin-bottom: 20px;
-          .el-checkbox-group {
-            display: flex;
-            flex-wrap: wrap;
-            > label {
-              width: 50%;
-              text-align: left;
-              margin: 0;
-            }
-          }
-        }
       }
     }
   }

--
Gitblit v1.8.0