From fa7044f3ccc9a91bc2bc117d1a06f650d86554f2 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期二, 15 六月 2021 16:07:16 +0800
Subject: [PATCH] 优化联动规则加载场景列表的操作

---
 src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue |  375 +++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 279 insertions(+), 96 deletions(-)

diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
index 23901ef..8645349 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
@@ -148,6 +148,7 @@
                   :key="ind"
                   :index="index + '-' + ind"
                   @click="checkOption(config, option)"
+                  class="highlevel-option"
                   >{{ option.name }}</el-menu-item
                 >
               </el-submenu>
@@ -240,12 +241,16 @@
                     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
+                      >{{
+                        label.Desc +
+                        (index == data.LableLst.length - 1 ? "" : "锛�")
+                      }}</span
                     >
                   </div>
-                  <div v-else >
+                  <div v-else>
                     <span>鏃犲紓甯�</span>
                   </div>
                   <div
@@ -257,7 +262,8 @@
                       type="info"
                       v-for="(label, index) in data.EventLst"
                       :key="index"
-                      style="margin-right:5px;margin-bottom:5px"
+                      style="margin-right: 5px; margin-bottom: 5px"
+                      @click="checkEventVideo(label)"
                       >{{ label.Event }}</el-tag
                     >
                   </div>
@@ -274,7 +280,8 @@
               </div>
               <div class="star" @click="toggleFollow(data)">
                 <i
-                  :class="[data.IsFollow ? 'follow' : '', 'el-icon-star-off']"
+                  class="iconfont"
+                  :class="[data.IsFollow ? 'follow' : '', 'iconguanzhu']"
                 ></i>
               </div>
             </div>
@@ -293,14 +300,18 @@
         ></el-pagination>
       </div>
       <div class="content" v-show="showType == 'list'">
-        <el-table :data="tableData" fit ref="elTable">
+        <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" @click="checkVideoDetail(scope.row)">
-                {{ 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"
@@ -308,21 +319,26 @@
           ></el-table-column>
           <el-table-column
             label="淇敼鏃ユ湡"
-            prop="UpdatedAt"
+            prop="VideoUpdateDate"
             sortable
           ></el-table-column>
           <el-table-column
             label="鍒涘缓鏃ユ湡"
-            prop="CreatedAt"
+            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 ? 'follow' : '', 'iconguanzhu']"
+                    @click.stop="toggleFollow(scope.row)"
+                  ></i>
+                </div>
+                <!-- <i class="el-icon-star-off" @click="toggleFollow(scope.row)"></i> -->
               </div>
             </template>
           </el-table-column>
@@ -338,18 +354,41 @@
           :total="tableTotal"
         ></el-pagination>
       </div>
-      <el-dialog
-        class="dialog-video"
-        :visible="videoDialogVisible"
-        @close="videoDialogVisible = false"
-      >
-        <div slot="title" class="title">
-          <div class="center">
-            <i class="el-icon-connection"></i>
-            <span>鎾斁瑙嗛</span>
+      <!-- 
+
+       v-drag v-resize
+
+       -->
+      <!-- <div > -->
+          <!-- :modal="false" -->
+        <el-dialog v-drag  v-resize
+          class="dialog-video"
+          :visible="videoDialogVisible"
+          @close="closeDial"
+          :close-on-click-modal="false"
+          :destroy-on-close="true"
+          :modal-append-to-body="false"
+        >
+          <div slot="title" class="title">
+            <div class="center">
+              <i class="el-icon-connection"></i>
+              <span>鎾斁瑙嗛</span>
+            </div>
           </div>
+          <video-analyze v-if="videoDialogVisible" :videoDetails="selectedVideo" />
+        </el-dialog>
+      <!-- </div> -->
+
+      <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>
-        <video-analyze :videoDetails="selectedVideo" />
+        <event-videos :eventVideoArr="eventVideoArr"></event-videos>
       </el-dialog>
     </div>
   </div>
@@ -364,20 +403,21 @@
   getLabelMap,
   delLabel,
   editLabel,
+  getEventVideo,
 } from "@/api/shuohuang";
 import VideoAnalyze from "./videoAnalyze";
-
+import EventVideos from "./eventVideos";
 export default {
   name: "SearchMain",
   components: {
     VideoAnalyze,
+    EventVideos,
   },
   data() {
     return {
       CLIP: "http://",
       keyword: "",
       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")],
       searchTime: [
         new Date(2020, 0, 1, 0, 0, 0),
         new Date(2020, 11, 31, 23, 59, 59),
@@ -385,7 +425,7 @@
       curTabPage: 1,
       curTablePage: 1,
       tabPageSize: 8,
-      pageSizes: [2, 8, 12, 24],
+      pageSizes: [8, 12, 24],
       tabTotal: 0,
       tablePageSize: 8,
       tableTotal: 0,
@@ -442,48 +482,15 @@
       settle: "",
       IsOperate: "",
       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,
-        },
-      ],
+      tableData: [],
+      tabData: [],
       videoDialogVisible: false,
       hiddenDanger: 1,
       labelDialogVisible: false,
       selectedVideo: {},
+      eventDialogVisible: false,
+      curEvName: "",
+      eventVideoArr: [],
     };
   },
   watch: {
@@ -498,6 +505,21 @@
     this.init();
   },
   methods: {
+    checkEventVideo(label) {
+      this.eventDialogVisible = true;
+      this.curEventDetail = label;
+      let _this = this;
+      getEventVideo({ Event: label.Event, LkgID: label.ParentID }).then(
+        (res) => {
+          _this.eventVideoArr = res.data;
+          _this.curEvName = label.Event;
+        }
+      );
+    },
+    closeDial(){
+      this.videoDialogVisible = false
+      this.selectedVideo={}
+    },
     handleTabSizeChange(size) {
       this.tabPageSize = size;
       this.filterSearchData();
@@ -552,7 +574,20 @@
         } 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;
+          });
         }
       });
     },
@@ -580,21 +615,20 @@
         } else {
           _this.tabTotal = res.total;
           _this.tabData = res.data;
-          // debugger
-           _this.tabData =  _this.tabData.map(function (item) {
-            const set =new Set()
+          _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.add(d);
+              });
+            });
+            const lblst = [];
             set.forEach(function (d) {
-              lblst.push({Desc:d})
-            })
-            item.LableLst=lblst
-            return item
-          })
+              lblst.push({ Desc: d });
+            });
+            item.LableLst = lblst;
+            return item;
+          });
         }
 
         res.filterlst.forEach((config) => {
@@ -731,12 +765,87 @@
       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 30px;
+  //鍑烘í鍚戞粴鍔ㄦ潯
+  padding: 20px 40px;
   .flex-box {
     display: flex;
   }
@@ -799,6 +908,8 @@
           width: 100px;
           text-align: left;
           background: #f3f3f3;
+          color: rgb(133, 133, 133);
+          background: #ecf0fc;
         }
         .options-wrap {
           flex: 1;
@@ -830,23 +941,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;
@@ -873,6 +986,8 @@
             height: 40px;
             line-height: 40px;
             border: none;
+            color: #2c3e50;
+            font-size: 12px;
           }
           .el-menu--popup {
             display: flex;
@@ -880,6 +995,13 @@
             li.el-menu-item {
               display: inline-block;
               min-width: auto;
+            }
+          }
+          .highlevel-option {
+            font-size: 12px;
+            color: #2c3e50;
+            &:hover {
+              color: #6486e7;
             }
           }
         }
@@ -892,8 +1014,7 @@
   .data-list {
     margin-top: 20px;
     .header-bar {
-      padding-bottom: 5px;
-      border-bottom: 1px solid #ddd;
+      padding-bottom: 10px;
       .left {
         float: left;
         display: flex;
@@ -926,7 +1047,23 @@
       }
     }
     .content {
-      padding-top: 14px;
+      //padding-top: 14px;
+      background: #f5f5f5;
+      background: #fff;
+      margin: 0 -30px;
+      margin-bottom: -30px;
+      padding: 0;
+      // .el-row {
+      //   display: flex;
+      //   flex-wrap: wrap;
+      // }
+      .el-table__row {
+        cursor: pointer;
+      }
+      .el-row {
+        padding-top: 20px;
+        background: #f5f5f5;
+      }
       .el-col {
         margin-bottom: 10px;
       }
@@ -934,9 +1071,13 @@
         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 {
           border-radius: 3px;
           width: 100%;
@@ -958,7 +1099,7 @@
           padding: 10px;
           .base-info {
             > div {
-              margin-bottom: 5px;
+              margin-bottom: 1px;
             }
             label {
               color: #999;
@@ -970,8 +1111,11 @@
             color: #3d68e1;
             .abnormal {
               color: red;
+              overflow: hidden;
+              text-overflow: ellipsis;
+              white-space: nowrap;
             }
-            .event-tag{
+            .event-tag {
               margin-top: 10px;
             }
           }
@@ -1005,22 +1149,42 @@
         }
         .operation {
           cursor: pointer;
+          .star {
+            color: #ccc;
+          }
+          .follow {
+            color: #409eff;
+          }
         }
       }
       .pagination-center {
         text-align: center;
-        margin: 10px auto;
+        margin: 0 -10px;
+        padding: 10px 0 20px;
+        background: #f5f5f5;
       }
     }
+    .el-dialog__wrapper{
+          top: -22px;
+    }
     .dialog-video {
-      z-index: 2096 !important;
+      // z-index: 2020 !important;
       .el-dialog {
         width: 1180px;
-        height: 918px;
+        // height: 893px;
       }
       .el-dialog__body {
-        background: #f5f5f5;
+        background: #eaeaea;
         padding: 0;
+            // height: 100%;
+    height: inherit;
+
+      }
+      .el-dialog__header {
+        padding: 3px;
+        .el-dialog__headerbtn {
+          top: 6px;
+        }
       }
       .title-partment {
         font-size: 14px;
@@ -1038,9 +1202,28 @@
         }
       }
       .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;
+  // height: 100%;
+  // min-height: 684px;
+  overflow: auto;
+  z-index: 2000;
+}
 </style>
\ No newline at end of file

--
Gitblit v1.8.0