From 1f23f1d0a311c04d231485f8e419970104a2566b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@iotlink.com>
Date: 星期二, 22 六月 2021 16:37:59 +0800
Subject: [PATCH] 修复全景跟踪展示页图片

---
 src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue |  337 ++++++++++++++++++++++++++++++++++++-------------------
 1 files changed, 220 insertions(+), 117 deletions(-)

diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
index eb74ebd..7b6daaf 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
@@ -154,11 +154,11 @@
         </div>
       </div>
       <div class="content" v-show="showType == 'menu'">
-        <el-row :gutter="20" >
+        <el-row :gutter="20">
           <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="data.VideoCover" alt />
+                <img :src="data.VideoCover | fixPath" alt />
               </div>
               <div class="video-info">
                 <div class="base-info">
@@ -185,7 +185,12 @@
                       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>
                     <span>鏃犲紓甯�</span>
@@ -196,7 +201,7 @@
                       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>
@@ -224,22 +229,31 @@
         ></el-pagination>
       </div>
       <div class="content" v-show="showType == 'list'">
-        <el-table :data="tableData" fit ref="elTable" @row-click="checkVideoDetail" >
+        <el-table :data="tableData" fit ref="elTable" @row-click="checkVideoDetail">
           <el-table-column label="鍚嶇О" prop="VideoName" sortable width="500">
-            <template slot-scope="scope"  style="cursor: pointer">
+            <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="VideoUpdateDate" sortable></el-table-column>
-          <el-table-column label="鍒涘缓鏃ユ湡" prop="VideoCreateDate" 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="VideoDate" 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">
-                <div class="star" >
-                  <i class="iconfont"  :class="[scope.row.IsFollow ? 'follow' : '', 'iconguanzhu']" @click.stop="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>
@@ -257,10 +271,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">
@@ -268,8 +294,10 @@
             <span>鎾斁瑙嗛</span>
           </div>
         </div>
-        <video-analyze :videoDetails="selectedVideo" />
+        <video-analyze v-if="videoDialogVisible" :videoDetails="selectedVideo" />
       </el-dialog>
+      <!-- </div> -->
+
       <el-dialog
         class="dialog-event"
         :visible="eventDialogVisible"
@@ -277,7 +305,7 @@
       >
         <div class="title" slot="title">
           <i class="el-icon-connection"></i>
-          <span>{{curEvName}}瑙嗛</span>
+          <span>{{ curEvName }}瑙嗛</span>
         </div>
         <event-videos :eventVideoArr="eventVideoArr"></event-videos>
       </el-dialog>
@@ -293,8 +321,7 @@
   getRelatedVideoInfo,
   getLabelMap,
   delLabel,
-  editLabel,
-  getEventVideo
+  getEventVideo,
 } from "@/api/shuohuang";
 import VideoAnalyze from "./videoAnalyze";
 import EventVideos from "./eventVideos";
@@ -302,22 +329,30 @@
   name: "SearchMain",
   components: {
     VideoAnalyze,
-    EventVideos
+    EventVideos,
   },
-  data () {
+  filters: {
+    fixPath(str) {
+      if (!str || str == undefined) {
+        return ""
+      }
+
+      return str.replace("/opt/vasystem", "")
+    }
+  },
+  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),
+        new Date(2021, 11, 31, 23, 59, 59),
       ],
       curTabPage: 1,
       curTablePage: 1,
       tabPageSize: 8,
-      pageSizes: [ 8, 12, 24],
+      pageSizes: [8, 12, 24],
       tabTotal: 0,
       tablePageSize: 8,
       tableTotal: 0,
@@ -326,7 +361,7 @@
         shortcuts: [
           {
             text: "浠婂ぉ",
-            onClick (picker) {
+            onClick(picker) {
               const end = new Date();
               const start = new Date();
               start.setHours(0, 0, 0);
@@ -335,7 +370,7 @@
           },
           {
             text: "鏄ㄥぉ",
-            onClick (picker) {
+            onClick(picker) {
               const end = new Date();
               const start = new Date();
               start.setTime(start.getTime() - 3600 * 1000 * 24);
@@ -347,7 +382,7 @@
           },
           {
             text: "杩戜笁澶�",
-            onClick (picker) {
+            onClick(picker) {
               const end = new Date();
               const start = new Date();
               start.setTime(start.getTime() - 3600 * 1000 * 24 * 3);
@@ -356,7 +391,7 @@
           },
           {
             text: "杩戜竴鍛�",
-            onClick (picker) {
+            onClick(picker) {
               const end = new Date();
               const start = new Date();
               start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
@@ -374,87 +409,62 @@
       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: []
+      curEvName: "",
+      eventVideoArr: [],
     };
   },
   watch: {
     checkedConfigs: {
-      handler (n, o) {
+      handler(n, o) {
         this.filterSearchData();
       },
       deep: true,
     },
   },
-  mounted () {
+  mounted() {
     this.init();
   },
   methods: {
-    checkEventVideo (label) {
+    checkEventVideo(label) {
+      if (label.LKGID != "") {
+        this.$message.warning("璇ヤ簨浠舵病鏈夌浉鍏宠仈鐨勮棰�")
+        return
+      }
+
       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;
-      })
+      getEventVideo({ event: label.Event, videoId: label.VideoIds }).then(
+        (res) => {
+          _this.eventVideoArr = res.data;
+          _this.curEvName = label.Event;
+        }
+      );
     },
-    handleTabSizeChange (size) {
+    closeDial() {
+      this.videoDialogVisible = false
+      this.selectedVideo = {}
+    },
+    handleTabSizeChange(size) {
       this.tabPageSize = size;
       this.filterSearchData();
     },
-    handleTableSizeChange (size) {
+    handleTableSizeChange(size) {
       this.tablePageSize = size;
       this.filterSearchData();
     },
-    handleCurrentChange () {
+    handleCurrentChange() {
       this.filterSearchData();
     },
     //浜岀骇鏌ヨ
-    filterSearchData () {
+    filterSearchData() {
       let _this = this;
       let isFollow = "";
       if (this.IsFollow === "") {
@@ -493,28 +503,29 @@
         if (_this.showType == "list") {
           _this.tableTotal = res.total;
           _this.tableData = res.data;
+          debugger
         } else {
           _this.tabTotal = res.total;
           _this.tabData = res.data;
           _this.tabData = _this.tabData.map(function (item) {
-            const set = new Set()
+            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;
+          });
         }
       });
     },
     //涓�绾ф煡璇�
-    init () {
+    init() {
       let _this = this;
       let query = {
         KeyWord: this.keyword,
@@ -538,19 +549,19 @@
           _this.tabTotal = res.total;
           _this.tabData = res.data;
           _this.tabData = _this.tabData.map(function (item) {
-            const set = new Set()
+            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) => {
@@ -596,7 +607,7 @@
         });
       });
     },
-    toggleFollow (data) {
+    toggleFollow(data) {
       data.IsFollow = !data.IsFollow;
       this.updataVideo(data);
       if (data.IsFollow) {
@@ -606,24 +617,24 @@
         });
       }
     },
-    updataVideo (data) {
+    updataVideo(data) {
       let _this = this;
       updateVideoAnalyze(data).then((res) => {
         //浜岀骇鏌ヨ
       });
     },
 
-    checkVideoDetail (data) {
+    checkVideoDetail(data) {
       let _this = this;
       _this.selectedVideo = data;
       _this.videoDialogVisible = true;
     },
-    checkFollow () { },
-    checkType (type) {
+    checkFollow() { },
+    checkType(type) {
       this.showType = type;
       this.filterSearchData();
     },
-    clearCheckedConfigs () {
+    clearCheckedConfigs() {
       this.checkedConfigs.forEach((config) => {
         config.isShow = true;
         config.data.forEach((d) => {
@@ -633,7 +644,7 @@
       this.checkedConfigs = [];
       this.showAdvance = true;
     },
-    removeCheckedConfig (config) {
+    removeCheckedConfig(config) {
       config.isShow = true;
       if (config.IsAdvanced) {
         this.showAdvance = true;
@@ -644,7 +655,7 @@
       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;
       }
@@ -660,20 +671,20 @@
       // })
     },
 
-    cancleMultCheck (config) {
+    cancleMultCheck(config) {
       config.isMultCheck = false;
       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";
     },
-    toggleMultCheck (config) {
+    toggleMultCheck(config) {
       config.isMultCheck = !config.isMultCheck;
       this.optionalConfigs.forEach((conf) => {
         if (conf.id == config.id) {
@@ -682,9 +693,82 @@
         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
+        }
+      }
     },
   },
 };
@@ -906,7 +990,7 @@
       //   display: flex;
       //   flex-wrap: wrap;
       // }
-      .el-table__row{
+      .el-table__row {
         cursor: pointer;
       }
       .el-row {
@@ -998,10 +1082,10 @@
         }
         .operation {
           cursor: pointer;
-          .star{
+          .star {
             color: #ccc;
           }
-          .follow{
+          .follow {
             color: #409eff;
           }
         }
@@ -1013,15 +1097,26 @@
         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;
@@ -1039,7 +1134,7 @@
         }
       }
       .title {
-        font-size: 18px;
+        font-size: 15px;
       }
     }
     .dialog-event {
@@ -1055,4 +1150,12 @@
     }
   }
 }
+.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