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