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