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/searchForVideoAnalyze.vue |  874 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 637 insertions(+), 237 deletions(-)

diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
index f1556b5..06d8766 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
@@ -21,66 +21,99 @@
         <el-button size="small" type="primary" @click="init">鎼滅储</el-button>
       </div>
       <div class="checked-config">
-        <span style="margin-top:3px;">宸查�夋潯浠�:</span>
+        <span style="margin-top: 3px">宸查�夋潯浠�:</span>
         <span
           v-show="!checkedConfigs.length"
           class="tip"
-          style="padding-left: 5px;margin-top:3px;"
-        >杩樻湭閫夋嫨绛涢�夋潯浠�</span>
-        <div class="config-item" v-for="(config,index) in checkedConfigs" :key="index">
-          <span class="title">{{config.title}}</span>&nbsp;:
+          style="padding-left: 5px; margin-top: 3px"
+          >杩樻湭閫夋嫨绛涢�夋潯浠�</span
+        >
+        <div
+          class="config-item"
+          v-for="(config, index) in checkedConfigs"
+          :key="index"
+        >
+          <span class="title">{{ config.title }}</span
+          >&nbsp;:
           <span class="val" v-for="option in config.data" :key="option.id">
-            <!-- <template>
-              <div>
-                
-              </div>
-            </template>-->
             <span v-if="option.isChecked" class="val-show">
-              {{option.name}}
+              {{ option.name }}
               <i>銆�</i>
             </span>
           </span>
-          <i class="el-icon-close remove" @click="removeCheckedConfig(config)"></i>
+          <i
+            class="el-icon-close remove"
+            @click="removeCheckedConfig(config)"
+          ></i>
         </div>
         <el-button
           class="clear-config-btn"
           v-if="checkedConfigs.length"
           size="mini"
           @click="clearCheckedConfigs"
-        >鍙栨秷閫夋嫨</el-button>
+          >鍙栨秷閫夋嫨</el-button
+        >
       </div>
       <div class="optional-config">
-        <div class="config" v-for="(config,index) in optionalConfigs" :key="index">
+        <div
+          class="config"
+          v-for="(config, index) in optionalConfigs"
+          :key="index"
+        >
           <template v-if="config.isShow">
-            <div class="title">{{config.title}}</div>
+            <div class="title">{{ config.title }}</div>
             <div class="options-wrap">
               <div
                 class="options"
-                :ref="'options'+config.id"
-                :style="{height:fixedOneLineHeight+'px'}"
+                :ref="'options' + config.id"
+                :style="{ height: fixedOneLineHeight + 'px' }"
               >
-                <div class="option" v-for="(option,index) in config.data" :key="index">
+                <div
+                  class="option"
+                  v-for="(option, index) in config.data"
+                  :key="index"
+                >
                   <div v-show="config.isMultCheck">
                     <el-checkbox v-model="option.isChecked"></el-checkbox>
-                    <span>{{option.name}}</span>
+                    <span>{{ option.name }}</span>
                   </div>
-                  <div v-show="!config.isMultCheck" @click="checkOption(config,option)">
-                    <span>{{option.name}}</span>
+                  <div
+                    v-show="!config.isMultCheck"
+                    @click="checkOption(config, option)"
+                  >
+                    <span>{{ option.name }}</span>
                   </div>
                 </div>
               </div>
               <div class="btns text-center" v-show="config.isMultCheck">
-                <el-button size="mini" @click="cancleMultCheck(config)">鍙栨秷</el-button>
-                <el-button size="mini" type="primary" @click="checkOption(config)">纭畾</el-button>
+                <el-button size="mini" @click="cancleMultCheck(config)"
+                  >鍙栨秷</el-button
+                >
+                <el-button
+                  size="mini"
+                  type="primary"
+                  @click="checkOption(config)"
+                  >纭畾</el-button
+                >
               </div>
             </div>
             <div class="right-btns">
-              <div class="more" v-if="config.showMore" @click="showMore(config)">
+              <div
+                class="more"
+                v-if="config.showMore"
+                @click="showMore(config)"
+              >
                 <span>鏇村</span>&nbsp;
-                <i :class="config.isShowMore?'el-icon-arrow-up':'el-icon-arrow-down'"></i>
+                <i
+                  :class="
+                    config.isShowMore
+                      ? 'el-icon-arrow-up'
+                      : 'el-icon-arrow-down'
+                  "
+                ></i>
               </div>
               <div
-                :class="[{'checked':config.isMultCheck},'multCheck']"
+                :class="[{ checked: config.isMultCheck }, 'multCheck']"
                 @click="toggleMultCheck(config)"
               >
                 <i class="el-icon-plus"></i>&nbsp;
@@ -92,21 +125,27 @@
         <div class="config" v-if="showAdvance">
           <div class="title">楂樼骇閫夐」</div>
           <div>
-            <el-menu class="el-menu-demo" mode="horizontal" @select="handleSelect">
+            <el-menu
+              class="el-menu-demo"
+              mode="horizontal"
+              @select="handleSelect"
+            >
               <el-submenu
                 class="config-submenu"
                 :popper-append-to-body="false"
-                v-for="(config,index) in highLevelConfigs"
+                v-for="(config, index) in highLevelConfigs"
                 :key="index"
-                :index="index+''"
+                :index="index + ''"
               >
-                <template slot="title">{{config.title}}</template>
+                <template slot="title">{{ config.title }}</template>
                 <el-menu-item
-                  v-for="(option,ind) in config.data"
+                  v-for="(option, ind) in config.data"
                   :key="ind"
-                  :index="index+'-'+ind"
-                  @click="checkOption(config,option)"
-                >{{option.name}}</el-menu-item>
+                  :index="index + '-' + ind"
+                  @click="checkOption(config, option)"
+                  class="highlevel-option"
+                  >{{ option.name }}</el-menu-item
+                >
               </el-submenu>
             </el-menu>
           </div>
@@ -117,76 +156,138 @@
       <div class="header-bar clearfix">
         <div class="left">
           <div>
-            <el-select v-model="watch" size="mini">
+            <el-select
+              v-model="IsFollow"
+              size="mini"
+              @change="filterSearchData"
+            >
               <el-option value label="鍏ㄩ儴"></el-option>
-              <el-option value="1" label="鏈叧娉�"></el-option>
-              <el-option value="2" label="宸插叧娉�"></el-option>
+              <el-option :value="'1'" label="鏈叧娉�"></el-option>
+              <el-option :value="'0'" label="宸插叧娉�"></el-option>
             </el-select>
           </div>
           <div>
-            <el-select v-model="settle" size="mini">
+            <el-select
+              v-model="IsOperate"
+              size="mini"
+              @change="filterSearchData"
+            >
               <el-option value label="鍏ㄩ儴"></el-option>
-              <el-option value="1" label="鏈鐞�"></el-option>
-              <el-option value="2" label="宸插鐞�"></el-option>
+              <el-option value="0" label="鏈鐞�"></el-option>
+              <el-option value="1" label="宸插鐞�"></el-option>
             </el-select>
           </div>
         </div>
         <div class="right">
           <div class="show-type">
-            <div class="type menu" :class="{'current':showType=='menu'}" @click="checkType('menu')">
+            <div
+              class="type menu"
+              :class="{ current: showType == 'menu' }"
+              @click="checkType('menu')"
+            >
               <i class="el-icon-menu"></i>
             </div>
-            <div class="type" :class="{'current':showType=='list'}" @click="checkType('list')">
+            <div
+              class="type"
+              :class="{ current: showType == 'list' }"
+              @click="checkType('list')"
+            >
               <i class="el-icon-s-operation"></i>
             </div>
           </div>
         </div>
       </div>
-      <div class="content" v-show="showType=='menu'">
+      <div class="content" v-show="showType == 'menu'">
         <el-row :gutter="20">
-          <el-col :xs="8" :sm="6" :md="6" :lg="6" v-for="data in tabData" :key="data.id">
+          <el-col
+            :xs="8"
+            :sm="6"
+            :md="6"
+            :lg="6"
+            v-for="data in tabData"
+            :key="data.id"
+          >
             <div class="card">
               <div class="video-wrap" @click="checkVideoDetail(data)">
-                <img :src="CLIP+data.VideoCover" alt />
+                <img :src="data.VideoCover | fixPath" alt />
               </div>
               <div class="video-info">
                 <div class="base-info">
                   <div class="flex-box">
                     <label>杞﹀彿:</label>
-                    <span>{{data.CarNumber}}</span>
+                    <span>{{ data.CarNumber }}</span>
                   </div>
                   <div class="flex-box">
                     <label>杞︽:</label>
-                    <span>{{data.TrainNumber}}</span>
+                    <span>{{ data.TrainNumber }}</span>
                   </div>
                   <div class="flex-box">
                     <label>鏃堕棿:</label>
-                    <span>{{data.VideoDate}}</span>
+                    <span>{{ data.StartTime }}</span>
                   </div>
                   <div class="flex-box">
-                    <label>鍙告満|鍓徃鏈�:</label>
-                    <span>{{data.Driver1}}|{{data.Driver2}}</span>
+                    <label>鍙告満 | 鍓徃鏈�:</label>
+                    <span>{{ data.Driver1 }} | {{ data.Driver2 }}</span>
                   </div>
                 </div>
                 <div class="mark-info">
-                  <div class="abnormal" v-if="data.LableLst&&data.LableLst.length">
-                    <span v-for="(label,index) in data.LableLst" :key="index">{{label.Desc}}</span>
+                  <div
+                    class="abnormal"
+                    v-if="data.LableLst && data.LableLst.length"
+                  >
+                    <span
+                      class="abnormal-label"
+                      v-for="(label, index) in data.LableLst"
+                      :key="index"
+                    >
+                      {{
+                        label.Desc +
+                        (index == data.LableLst.length - 1 ? "" : ",")
+                      }}
+                    </span>
+                  </div>
+                  <div v-else-if=" hasError(data)">
+                    <span style="color:orangered;">鏈夊紓甯�</span>
                   </div>
                   <div v-else>
                     <span>鏃犲紓甯�</span>
                   </div>
+                  <div
+                    class="event-tag"
+                    v-if="data.EventLst && data.EventLst.length"
+                  >
+                    <el-tag
+                      size="mini"
+                      type="info"
+                      v-for="(label, index) in data.EventLst"
+                      :key="index"
+                      style="margin-right: 5px; margin-bottom: 5px"
+                      @click="checkEventVideo(label)"
+                      >{{ label.Event }}</el-tag
+                    >
+                  </div>
                 </div>
                 <div class="tag-info">
-                  <div class="tag" v-for="(tag,index) in data.tags" :key="index">{{tag}}</div>
+                  <div
+                    class="tag"
+                    v-for="(tag, index) in data.tags"
+                    :key="index"
+                  >
+                    {{ tag }}
+                  </div>
                 </div>
               </div>
               <div class="star" @click="toggleFollow(data)">
-                <i :class="[data.IsFollow?'follow':'','el-icon-star-off']"></i>
+                <i
+                  class="iconfont"
+                  :class="[data.IsFollow == '0' ? 'follow' : '', 'iconguanzhu']"
+                ></i>
               </div>
             </div>
           </el-col>
         </el-row>
         <el-pagination
+          class="pagination-center"
           background
           @size-change="handleTabSizeChange"
           @current-change="handleCurrentChange"
@@ -197,25 +298,52 @@
           :total="tabTotal"
         ></el-pagination>
       </div>
-      <div class="content" v-show="showType=='list'">
-        <el-table :data="tableData" fit ref="elTable">
+      <div class="content" v-show="showType == 'list'">
+        <el-table
+          :data="tableData"
+          fit
+          ref="elTable"
+          @row-click="checkVideoDetail"
+        >
           <el-table-column label="鍚嶇О" prop="VideoName" sortable width="500">
-            <template slot-scope="scope">
-              <div style="cursor:pointer;">{{scope.row.VideoName}}</div>
+            <template slot-scope="scope" style="cursor: pointer">
+              <div>{{ scope.row.VideoName }}</div>
             </template>
           </el-table-column>
-          <el-table-column label="澶у皬" prop="VideoSize" sortable></el-table-column>
-          <el-table-column label="淇敼鏃ユ湡" prop="UpdatedAt" sortable></el-table-column>
-          <el-table-column label="鍒涘缓鏃ユ湡" prop="CreatedAt" sortable></el-table-column>
+
+          <el-table-column label="澶у皬" prop="VideoSize" sortable>
+            <template slot-scope="scope" style="cursor: pointer">
+              <div>
+                {{ Math.round(+scope.row.VideoSize / (1024 * 1024)) + " MB" }}
+              </div>
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="瑙嗛鏃堕棿"
+            prop="StartTime"
+            sortable
+          ></el-table-column>
+          <!-- <el-table-column label="鍒涘缓鏃ユ湡" prop="VideoCreateDate" sortable></el-table-column> -->
+
           <el-table-column label="鎿嶄綔">
             <template slot-scope="scope">
               <div class="operation">
-                <i class="el-icon-star-off" @click="toggleFollow(scope.row)"></i>
+                <div class="star">
+                  <i
+                    class="iconfont"
+                    :class="[
+                      scope.row.IsFollow == '0' ? 'follow' : '',
+                      'iconguanzhu',
+                    ]"
+                    @click.stop="toggleFollow(scope.row)"
+                  ></i>
+                </div>
               </div>
             </template>
           </el-table-column>
         </el-table>
         <el-pagination
+          class="pagination-center"
           @size-change="handleTableSizeChange"
           @current-change="handleCurrentChange"
           :current-page.sync="curTablePage"
@@ -225,10 +353,22 @@
           :total="tableTotal"
         ></el-pagination>
       </div>
+      <!-- 
+
+       v-drag v-resize
+
+      -->
+      <!-- <div > -->
+      <!-- :modal="false" -->
       <el-dialog
+        v-drag
+        v-resize
         class="dialog-video"
         :visible="videoDialogVisible"
-        @close="videoDialogVisible=false"
+        @close="closeDial"
+        :close-on-click-modal="false"
+        :destroy-on-close="true"
+        :modal-append-to-body="false"
       >
         <div slot="title" class="title">
           <div class="center">
@@ -236,313 +376,490 @@
             <span>鎾斁瑙嗛</span>
           </div>
         </div>
+        <video-analyze
+          v-if="videoDialogVisible"
+          :videoDetails="selectedVideo"
+        />
+      </el-dialog>
+      <!-- </div> -->
 
-        <video-analyze :videoDetails="selectedVideo" />
+      <el-dialog
+        class="dialog-event"
+        :visible="eventDialogVisible"
+        @close="eventDialogVisible = false"
+      >
+        <div class="title" slot="title">
+          <i class="el-icon-connection"></i>
+          <span>{{ curEvName }}瑙嗛</span>
+        </div>
+        <event-videos :eventVideoArr="eventVideoArr"></event-videos>
       </el-dialog>
     </div>
   </div>
 </template>
 
 <script>
-import { getlstInit, updateVideoAnalyze, getlst, getRelatedVideoInfo, getLabelMap, delLabel, editLabel } from '@/api/shuohuang';
-import VideoAnalyze from "./videoAnalyze"
-
+import {
+  getlstInit,
+  updateFollow,
+  getlst,
+  getLabelMap,
+  getEventVideo,
+} from "@/api/shuohuang";
+import VideoAnalyze from "./videoAnalyze";
+import EventVideos from "./eventVideos";
 export default {
   name: "SearchMain",
   components: {
-    VideoAnalyze
+    VideoAnalyze,
+    EventVideos,
   },
-  data () {
+  filters: {
+    fixPath(str) {
+      if (!str || str == undefined) {
+        return "";
+      }
+
+      return str.replace("/opt/vasystem", "");
+    },
+  },
+  data() {
     return {
-      CLIP: 'http://192.168.20.113/',
-      keyword: '',
-      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")],
+      CLIP: "http://",
+      keyword: "",
+      IsFollow: "",
+      searchTime: [
+        new Date(2021, 0, 1, 0, 0, 0),
+        new Date(2021, 11, 31, 23, 59, 59),
+      ],
       curTabPage: 1,
       curTablePage: 1,
       tabPageSize: 8,
-      pageSizes: [2, 8, 12, 24],
+      pageSizes: [8, 12, 24],
       tabTotal: 0,
       tablePageSize: 8,
       tableTotal: 0,
       currentPage: 1,
       pickerOptions: {
-        shortcuts: [{
-          text: '浠婂ぉ',
-          onClick (picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setHours(0, 0, 0);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '鏄ㄥぉ',
-          onClick (picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24);
-            start.setHours(0, 0, 0);
-            end.setTime(end.getTime() - 3600 * 1000 * 24);
-            end.setHours(23, 59, 59);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '杩戜笁澶�',
-          onClick (picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);
-            picker.$emit('pick', [start, end]);
-          }
-        }, {
-          text: '杩戜竴鍛�',
-          onClick (picker) {
-            const end = new Date();
-            const start = new Date();
-            start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
-            //start.setHours(0,0,0);
-            picker.$emit('pick', [start, end]);
-          }
-        }]
+        shortcuts: [
+          {
+            text: "浠婂ぉ",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setHours(0, 0, 0);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏄ㄥぉ",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24);
+              start.setHours(0, 0, 0);
+              end.setTime(end.getTime() - 3600 * 1000 * 24);
+              end.setHours(23, 59, 59);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "杩戜笁澶�",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "杩戜竴鍛�",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
       },
       checkedConfigs: [],
       optionalConfigs: [],
       highLevelConfigs: [],
       showAdvance: true,
       fixedOneLineHeight: 40,
-      watch: '',
-      settle: '',
-      showType: 'menu',
-      tableData: [
-        { name: 'SS4B115_06_B鑺備簩绔徃鏈哄_20201115_091500.mp4', size: '17.66M', updateTime: '2020-11-04 15:41', createTime: '2020-11-04 15:41' },
-        { name: 'SS4B115_06_B鑺備簩绔徃鏈哄_20201115_091700.mp4', size: '17.76M', updateTime: '2020-11-04 15:41', createTime: '2020-11-07 17:41' }
-      ],
-      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 }
-      ],
-
+      settle: "",
+      IsOperate: "",
+      showType: "menu",
+      tableData: [],
+      tabData: [],
       videoDialogVisible: false,
       hiddenDanger: 1,
       labelDialogVisible: false,
-      selectedVideo: {}
-    }
+      selectedVideo: {},
+      eventDialogVisible: false,
+      curEvName: "",
+      eventVideoArr: [],
+    };
   },
   watch: {
     checkedConfigs: {
-      handler (n, o) {
-        this.filterSearchData()
+      handler(n, o) {
+        this.filterSearchData();
       },
-      deep: true
-    }
+      deep: true,
+    },
   },
-  mounted () {
+  mounted() {
     this.init();
   },
   methods: {
-    handleTabSizeChange (size) {
-      debugger
+    checkEventVideo(label) {
+      if (label.LKGID != "") {
+        this.$message.warning("璇ヤ簨浠舵病鏈夌浉鍏宠仈鐨勮棰�");
+        return;
+      }
+
+      this.eventDialogVisible = true;
+      this.curEventDetail = label;
+      let _this = this;
+      getEventVideo({ event: label.Event, videoId: label.VideoIds }).then(
+        (res) => {
+          _this.eventVideoArr = res.data;
+          _this.curEvName = label.Event;
+        }
+      );
+    },
+    closeDial() {
+      this.videoDialogVisible = false;
+      this.selectedVideo = {};
+    },
+    handleTabSizeChange(size) {
       this.tabPageSize = size;
-      this.filterSearchData()
+      this.filterSearchData();
     },
-    handleTableSizeChange (size) {
+    hasError(data){
+      if (!data.EventLst||data.EventLst.length==0) {
+        return false
+      }
+
+      const t =  data.EventLst.some((x) => x.state==0)
+      return t && data.IsOperate=="1"
+    },
+    handleTableSizeChange(size) {
       this.tablePageSize = size;
-      this.filterSearchData()
+      this.filterSearchData();
     },
-    handleCurrentChange () {
-      this.filterSearchData()
+    handleCurrentChange() {
+      this.filterSearchData();
     },
     //浜岀骇鏌ヨ
-    filterSearchData () {
+    filterSearchData() {
       let _this = this;
       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'
+        PageIndex:
+          this.showType == "list" ? this.curTablePage : this.curTabPage,
+        PageSize:
+          this.showType == "list" ? this.tablePageSize : this.tabPageSize,
+        IsDetail: this.showType == "list",
+        IsFollow: this.IsFollow ,
+        IsOperate: this.IsOperate,
       };
       let filterQuerys = [];
-      this.checkedConfigs.forEach(config => {
-        let checkedOpts = config.data.filter(option => option.isChecked);
+      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(',');
+          var linkOpts = checkedOpts.map((opt) => opt.name);
+          linkOpts = linkOpts.join(",");
           let obj = {};
           obj[config.NameEn] = linkOpts;
           filterQuerys.push(obj);
         }
-      })
+      });
       Object.assign(query, ...filterQuerys);
 
-      getlst(query).then(res => {
-        if (_this.showType == 'list') {
+      getlst(query).then((res) => {
+        if (_this.showType == "list") {
           _this.tableTotal = res.total;
           _this.tableData = res.data;
         } else {
           _this.tabTotal = res.total;
           _this.tabData = res.data;
+          _this.tabData = _this.tabData.map(function (item) {
+            const set = new Set();
+            item.LableLst.forEach(function (label) {
+              label.Desc.split(",").forEach(function (d) {
+                set.add(d);
+              });
+            });
+            const lblst = [];
+            set.forEach(function (d) {
+              lblst.push({ Desc: d });
+            });
+            item.LableLst = lblst;
+            return item;
+          });
+          _this.tabData
         }
-      })
+      });
     },
     //涓�绾ф煡璇�
-    init () {
+    init() {
+      if (this.checkedConfigs.length) {
+        this.filterSearchData()
+        return
+      }
       let _this = this;
       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'
+        PageIndex:
+          this.showType == "list" ? this.curTablePage : this.showType == "list",
+        PageSize:
+          this.showType == "list" ? this.tablePageSize : this.tabPageSize,
+        IsDetail: this.showType == "list",
+        IsFollow: this.IsFollow,
+        IsOperate: this.IsOperate,
       };
+      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);
+        }
+      });
+      Object.assign(query, ...filterQuerys);
       this.optionalConfigs = [];
       this.highLevelConfigs = [];
-      getlstInit(query).then(res => {
-        if (_this.showType == 'list') {
+      getlstInit(query).then((res) => {
+        if (_this.showType == "list") {
           _this.tableTotal = res.total;
           _this.tableData = res.data;
         } else {
           _this.tabTotal = res.total;
           _this.tabData = res.data;
+          _this.tabData = _this.tabData.map(function (item) {
+            const set = new Set();
+            item.LableLst.forEach(function (label) {
+              label.Desc.split(",").forEach(function (d) {
+                set.add(d);
+              });
+            });
+            const lblst = [];
+            set.forEach(function (d) {
+              lblst.push({ Desc: d });
+            });
+            item.LableLst = lblst;
+            return item;
+          });
         }
-
-        res.filterlst.forEach(config => {
-          this.$set(config, 'isShow', true);
-          config.data = Object.keys(config.Node).map(key => {
+        res.filterlst.forEach((config) => {
+          this.$set(config, "isShow", true);
+          config.data = config.Node.map((item) => {
             let obj = {};
-            obj.name = key;
-            obj.id = config.Node[key]
-            return obj
+            obj.name = item[0];
+            obj.id = item[1];
+            return obj;
           });
           config.id = config.ID;
           config.title = config.NameZn;
-          config.data.forEach(item => {
-            this.$set(item, 'isChecked', false);
+          config.data.forEach((item) => {
+            this.$set(item, "isChecked", false);
           });
           if (config.IsAdvanced) {
             this.highLevelConfigs.push(config);
           } else {
-            this.$set(config, 'isMultCheck', false);
-            this.$set(config, 'showMore', false);
-            this.optionalConfigs.push(config)
+            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) {
+          this.optionalConfigs.forEach((config) => {
+            if (
+              this.$refs[`options${config.id}`][0].scrollHeight >
+              this.fixedOneLineHeight
+            ) {
               config.showMore = true;
-              this.$set(config, 'isShowMore', false);
+              this.$set(config, "isShowMore", false);
             } else {
               config.showMore = false;
             }
           });
-          console.log(this.optionalConfigs);
         });
-
-      })
-    },
-    toggleFollow (data) {
-      data.IsFollow = !data.IsFollow;
-      this.updataVideo(data);
-      if (data.IsFollow) {
-        this.$notify({
-          type: 'success',
-          message: '宸叉坊鍔犲叧娉�!'
-        });
-      }
-    },
-    updataVideo (data) {
-      let _this = this;
-      updateVideoAnalyze(data).then(res => {
-        //浜岀骇鏌ヨ
       });
     },
-
-    checkVideoDetail (data) {
+    toggleFollow(data) {
+      data.IsFollow == "0" ? (data.IsFollow = "1") : (data.IsFollow = "0");
+      updateFollow({
+        id: data.id,
+        IsFollow: data.IsFollow,
+      }).then((res) => {
+        this.$notify({
+          type: "success",
+          message: data.IsFollow == "0" ? "宸叉坊鍔犲叧娉�!" : "宸插彇娑堝叧娉�!",
+        });
+      });
+    },
+    checkVideoDetail(data) {
       let _this = this;
       _this.selectedVideo = data;
       _this.videoDialogVisible = true;
     },
-    checkFollow () {
-
-    },
-    checkType (type) {
+    checkType(type) {
       this.showType = type;
-      this.filterSearchData()
+      this.filterSearchData();
     },
-    clearCheckedConfigs () {
-      this.checkedConfigs.forEach(config => {
+    clearCheckedConfigs() {
+      this.checkedConfigs.forEach((config) => {
         config.isShow = true;
-        config.data.forEach(d => {
-          d.isChecked = false
+        config.data.forEach((d) => {
+          d.isChecked = false;
         });
       });
       this.checkedConfigs = [];
       this.showAdvance = true;
     },
-    removeCheckedConfig (config) {
+    removeCheckedConfig(config) {
       config.isShow = true;
       if (config.IsAdvanced) {
         this.showAdvance = true;
       }
-      config.data.forEach(d => {
+      config.data.forEach((d) => {
         d.isChecked = false;
       });
-      let index = this.checkedConfigs.findIndex(one => one.id == config.id);
+      let index = this.checkedConfigs.findIndex((one) => one.id == config.id);
       this.checkedConfigs.splice(index, 1);
     },
-    checkOption (config, option) {
+    checkOption(config, option) {
       if (option) {
         option.isChecked = true;
       }
       this.checkedConfigs.push(config);
-
       config.isShow = false;
       config.isMultCheck = false;
       if (config.IsAdvanced) {
         this.showAdvance = false;
       }
-      // this.$nextTick(() => {
-      //   this.$set(config, 'isShow', false)
-      // })
-
     },
 
-    cancleMultCheck (config) {
+    cancleMultCheck(config) {
       config.isMultCheck = false;
-      config.data.forEach(opt => {
+      config.data.forEach((opt) => {
         opt.isChecked = false;
       });
     },
-    handleSelect (key, keyPath) {
-
-    },
-    showMore (config) {
+    handleSelect(key, keyPath) {},
+    showMore(config) {
       config.isShowMore = !config.isShowMore;
-      this.$refs[`options${config.id}`][0].style.height = config.isShowMore ? this.$refs[`options${config.id}`][0].scrollHeight + 'px' : this.fixedOneLineHeight + 'px';
+      this.$refs[`options${config.id}`][0].style.height = config.isShowMore
+        ? this.$refs[`options${config.id}`][0].scrollHeight + "px"
+        : this.fixedOneLineHeight + "px";
     },
-    toggleMultCheck (config) {
+    toggleMultCheck(config) {
       config.isMultCheck = !config.isMultCheck;
-      this.optionalConfigs.forEach(conf => {
+      this.optionalConfigs.forEach((conf) => {
         if (conf.id == config.id) {
           return;
         }
         conf.isMultCheck = false;
-      })
+      });
     },
-    dataSearch () {
+    dataSearch() {
       console.log(this.checkedConfigs);
       this.$forceUpdate();
     },
+  },
+  directives: {
+    drag(el, binding) {
+      const dialogHeaderEl = el.querySelector(".el-dialog__header");
+      const dragDom = el.querySelector(".el-dialog");
+      dialogHeaderEl.style.cursor = "move";
+      const sty =
+        dragDom.currentStyle || window.getComputedStyle(dragDom, null);
+      dialogHeaderEl.onmousedown = (e) => {
+        const disX = e.clientX - dialogHeaderEl.offsetLeft;
+        const disY = e.clientY - dialogHeaderEl.offsetTop;
+        let styL, styT;
 
-  }
-}
+        if (sty.left.includes("%")) {
+          styL =
+            +document.body.clientWidth * (+sty.left.replace(/\%/g, "") / 100);
+          styT =
+            +document.body.clientHeight * (+sty.top.replace(/\%/g, "") / 100);
+        } else {
+          styL = +sty.left.replace(/\px/g, "");
+          styT = +sty.top.replace(/\px/g, "");
+        }
+        document.onmousemove = function (e) {
+          const l = e.clientX - disX;
+          const t = e.clientY - disY;
+          dragDom.style.left = `${l + styL}px`;
+          dragDom.style.top = `${t + styT}px`;
+        };
+        document.onmouseup = function (e) {
+          document.onmousemove = null;
+          document.onmouseup = null;
+        };
+      };
+    },
+    resize(el, binding, vnode) {
+      const dragDom = el.querySelector(".el-dialog");
+      dragDom.style.overflow = "hidden";
+      let minWidth = 400;
+      let minHeight = 300; //
+
+      // 鎷変几
+      let resizeEl = document.createElement("div");
+      dragDom.appendChild(resizeEl); // 鍦ㄥ脊绐楀彸涓嬭鍔犱笂涓�涓�10-10px鐨勬帶鍒跺潡
+      resizeEl.style.cursor = "nwse-resize";
+      // resizeEl.style.cursor = 'se-resize'
+      resizeEl.style.position = "absolute";
+      resizeEl.style.height = "12px";
+      resizeEl.style.width = "12px";
+      resizeEl.style.right = "0px";
+      resizeEl.style.bottom = "0px"; //榧犳爣鎷変几寮圭獥
+      resizeEl.style.background = 'url("/images/desktop/resize.png") no-repeat'; //榧犳爣鎷変几寮圭獥
+
+      resizeEl.onmousedown = (e) => {
+        // 璁板綍鍒濆x浣嶇疆
+        const clientX = e.clientX; // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂�
+        const disX = e.clientX - resizeEl.offsetLeft;
+        const disY = e.clientY - resizeEl.offsetTop;
+
+        document.onmousemove = function (e) {
+          e.preventDefault(); // 绉诲姩鏃剁鐢ㄩ粯璁や簨浠� 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈
+
+          const x = e.clientX - disX + (e.clientX - clientX); //杩欓噷 鐢变簬elementUI鐨刣ialog鎺у埗灞呬腑鐨勶紝鎵�浠ユ按骞虫媺浼告晥鏋滄槸鍙屽��
+          const y = e.clientY - disY; //姣旇緝鏄惁灏忎簬鏈�灏忓楂�
+          dragDom.style.width = x > minWidth ? `${x}px` : minWidth + "px";
+          dragDom.style.height = y > minHeight ? `${y}px` : minHeight + "px";
+        }; //鎷変几缁撴潫
+        document.onmouseup = function (e) {
+          document.onmousemove = null;
+          document.onmouseup = null;
+        };
+      };
+    },
+  },
+};
 </script>
 
 <style lang="scss">
 .search-for-video-analyze {
-  padding: 20px 30px;
+  //鍑烘í鍚戞粴鍔ㄦ潯
+  padding: 20px 40px;
+  .flex-box {
+    display: flex;
+  }
   .filter-area {
     .input-area {
       display: flex;
@@ -602,6 +919,8 @@
           width: 100px;
           text-align: left;
           background: #f3f3f3;
+          color: rgb(133, 133, 133);
+          background: #ecf0fc;
         }
         .options-wrap {
           flex: 1;
@@ -633,23 +952,25 @@
           justify-content: flex-end;
           .more {
             margin-top: 6px;
-            padding: 0px 12px;
+            padding: 0px 6px;
             border: 1px solid #ccc;
             margin-right: 10px;
-            width: 48px;
+            width: 44px;
             height: 26px;
             line-height: 26px;
+            border-radius: 2px;
             &:hover {
               color: #6486e7;
             }
           }
           .multCheck {
             margin-top: 6px;
-            width: 48px;
+            width: 44px;
             height: 26px;
             line-height: 26px;
-            padding: 0px 12px;
+            padding: 0px 6px;
             border: 1px solid #ccc;
+            border-radius: 2px;
             &:hover {
               color: #7695ec;
               border-color: #7695ec;
@@ -664,10 +985,18 @@
           border: none;
         }
         .config-submenu {
+          .el-menu--horizontal {
+            left: 20px !important;
+            & > ul {
+              flex-wrap: wrap;
+            }
+          }
           .el-submenu__title {
             height: 40px;
             line-height: 40px;
             border: none;
+            color: #2c3e50;
+            font-size: 12px;
           }
           .el-menu--popup {
             display: flex;
@@ -675,6 +1004,13 @@
             li.el-menu-item {
               display: inline-block;
               min-width: auto;
+            }
+          }
+          .highlevel-option {
+            font-size: 12px;
+            color: #2c3e50;
+            &:hover {
+              color: #6486e7;
             }
           }
         }
@@ -687,8 +1023,7 @@
   .data-list {
     margin-top: 20px;
     .header-bar {
-      padding-bottom: 5px;
-      border-bottom: 1px solid #ddd;
+      padding-bottom: 10px;
       .left {
         float: left;
         display: flex;
@@ -721,7 +1056,19 @@
       }
     }
     .content {
-      padding-top: 14px;
+      //padding-top: 14px;
+      background: #f5f5f5;
+      background: #fff;
+      margin: 0 -30px;
+      margin-bottom: -30px;
+      padding: 0;
+      .el-table__row {
+        cursor: pointer;
+      }
+      .el-row {
+        padding-top: 20px;
+        background: #f5f5f5;
+      }
       .el-col {
         margin-bottom: 10px;
       }
@@ -729,22 +1076,32 @@
         cursor: pointer;
         position: relative;
         text-align: left;
-        border: 1px solid #dedede;
+        background: #fff;
         border-radius: 5px;
-        height: 350px;
+        height: 360px;
+        margin-bottom: 10px;
+        &:hover {
+          box-shadow: 3px 2px 5px 1px rgba(0, 0, 0, 0.3);
+        }
         .video-wrap {
-          background: aliceblue;
           border-radius: 3px;
+          width: 100%;
+          padding-top: 56.25%;
+          height: 0;
+          position: relative;
           img {
+            position: absolute;
+            top: 0;
             width: 100%;
-            border-radius: 3px;
+            height: 100%;
+            object-fit: contain;
           }
         }
         .video-info {
           padding: 10px;
           .base-info {
             > div {
-              margin-bottom: 5px;
+              margin-bottom: 1px;
             }
             label {
               color: #999;
@@ -756,6 +1113,12 @@
             color: #3d68e1;
             .abnormal {
               color: red;
+              overflow: hidden;
+              text-overflow: ellipsis;
+              white-space: nowrap;
+            }
+            .event-tag {
+              margin-top: 10px;
             }
           }
           .tag-info {
@@ -788,18 +1151,38 @@
         }
         .operation {
           cursor: pointer;
+          .star {
+            color: #ccc;
+          }
+          .follow {
+            color: #409eff;
+          }
         }
       }
+      .pagination-center {
+        text-align: center;
+        margin: 0 -10px;
+        padding: 10px 0 20px;
+        background: #f5f5f5;
+      }
+    }
+    .el-dialog__wrapper {
+      top: -22px;
     }
     .dialog-video {
-      z-index: 2096 !important;
       .el-dialog {
         width: 1180px;
-        height: 918px;
       }
       .el-dialog__body {
-        background: #f5f5f5;
+        background: #eaeaea;
         padding: 0;
+        height: inherit;
+      }
+      .el-dialog__header {
+        padding: 3px;
+        .el-dialog__headerbtn {
+          top: 6px;
+        }
       }
       .title-partment {
         font-size: 14px;
@@ -817,9 +1200,26 @@
         }
       }
       .title {
-        font-size: 18px;
+        font-size: 15px;
+      }
+    }
+    .dialog-event {
+      z-index: 2096 !important;
+      .el-dialog {
+        width: 1000px;
+        height: 800px;
+        background: #efefef;
+        .el-dialog__body {
+          padding: 0;
+        }
       }
     }
   }
 }
+.window-view {
+  width: 100%;
+  height: auto;
+  overflow: auto;
+  z-index: 2000;
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0