From bae0368f502f524fc739003fe751fb0eb06c5859 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期四, 17 六月 2021 14:48:29 +0800 Subject: [PATCH] 修改朔黄前端分析 --- src/pages/shuohuangMonitorAnalyze/index/App.vue | 56 +++- vue.config.js | 7 src/pages/shuohuangMonitorAnalyze/components/charts/line.vue | 4 src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue | 273 ++++++++---------------- src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue | 25 +- src/pages/cameraAccess/components/DataStackInfo.vue | 4 src/pages/shuohuangMonitorAnalyze/components/leftNav.vue | 26 +- src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue | 110 ++++----- src/api/shuohuang.ts | 39 ++- src/pages/shuohuangMonitorAnalyze/components/lkgManage.vue | 65 +++++ 10 files changed, 301 insertions(+), 308 deletions(-) diff --git a/src/api/shuohuang.ts b/src/api/shuohuang.ts index 592f571..869ca98 100644 --- a/src/api/shuohuang.ts +++ b/src/api/shuohuang.ts @@ -36,7 +36,7 @@ method: 'get', params: query }) - export const getCarVideos = (query: any) => +export const getCarVideos = (query: any) => request({ url: '/data/api-c/lkg/getCarVideos', method: 'get', @@ -125,39 +125,46 @@ method: 'post', data }) -export const uploadDirectory = (data:any) => +export const uploadDirectory = (data: any) => request({ - url:'/data/api-c/user/uploadMulti', - method:'post', + url: '/data/api-c/user/uploadMulti', + method: 'post', data }) -export const getTransferRecord = (query:any) => request({ - url:'/data/api-c/saverecord/getlst', +export const getTransferRecord = (query: any) => request({ + url: '/data/api-c/saverecord/getlst', method: 'get', params: query }) export const getTransferStatusList = () => request({ - url:'/data/api-c/saverecord/getStatusList', + url: '/data/api-c/saverecord/getStatusList', method: 'get' }) -export const addDevice = (data:any)=>request({ - url:'/data/api-c/device/add', +export const addDevice = (data: any) => request({ + url: '/data/api-c/device/add', method: 'post', data }) -export const getDeviceList = ()=>request({ - url:'/data/api-c/device/getlst', +export const getDeviceList = () => request({ + url: '/data/api-c/device/getlst', method: 'get' }) -export const getDeviceInfoById = (query:any) => request({ - url:'/data/api-c/slot/getlst', +export const getDeviceInfoById = (query: any) => request({ + url: '/data/api-c/slot/getlst', method: 'get', params: query }) -export const getEventVideo = (query:any) => request({ - url:'/data/api-c/lkg/getEventClip', +export const getEventVideo = (query: any) => request({ + url: '/data/api-c/lkg/getEventClip', method: 'get', params: query -}) \ No newline at end of file +}) + +export const uploadLKG = (data: any) => + request({ + url: '/data/api-c/lkg/uploadLKGExcel', + method: 'post', + data + }) \ No newline at end of file diff --git a/src/pages/cameraAccess/components/DataStackInfo.vue b/src/pages/cameraAccess/components/DataStackInfo.vue index 1806173..abf7198 100644 --- a/src/pages/cameraAccess/components/DataStackInfo.vue +++ b/src/pages/cameraAccess/components/DataStackInfo.vue @@ -457,8 +457,10 @@ if (row.type === 1) { this.videoUrl = "/files/" + row.identifier + ".mp4" + if (row.identifier == "") { + this.videoUrl = row.path; + } } else if (row.type === 2) { - this.imgUrl = "/files/" + row.path.substr(row.path.lastIndexOf('/') + 1) } }, diff --git a/src/pages/shuohuangMonitorAnalyze/components/charts/line.vue b/src/pages/shuohuangMonitorAnalyze/components/charts/line.vue index 4e491b5..ef984b6 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/charts/line.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/charts/line.vue @@ -9,11 +9,11 @@ type: Object } }, - mounted () { + mounted() { this.initLineChart(); }, methods: { - initLineChart () { + initLineChart() { this.$nextTick(() => { let dom = this.$echarts.init(this.$refs['lineChart']); dom && dom.setOption(this.options); diff --git a/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue b/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue index 3b6cb23..afeeec2 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/leftNav.vue @@ -40,6 +40,7 @@ </template> <el-menu-item index="transferMemo">瑙嗛杞偍璁板綍</el-menu-item> <el-menu-item index="transferDeviceManage">杞偍璁惧绠$悊</el-menu-item> + <el-menu-item index="lkgManage">LKG鏁版嵁绠$悊</el-menu-item> </el-submenu> <el-submenu index="7"> <template slot="title"> @@ -66,33 +67,33 @@ type: Function } }, - data () { + data() { return { publicPath: process.env.BASE_URL, activeIndex: 'guideIndex' } }, - mounted(){ + mounted() { console.log('mounted') window.onbeforeunload = () => { // debugger console.log('beforeunload') sessionStorage.setItem('leftNavAct', this.activeIndex); } - if(!!sessionStorage.getItem('leftNavAct')){ + if (!!sessionStorage.getItem('leftNavAct')) { this.activeIndex = sessionStorage.getItem('leftNavAct'); - this.$emit('menuChange',this.activeIndex); + this.$emit('menuChange', this.activeIndex); } }, methods: { - handleSelect(index,indePath){ + handleSelect(index, indePath) { this.activeIndex = index; - this.$emit('menuChange',index); + this.$emit('menuChange', index); }, - handleOpen () { + handleOpen() { }, - handleClose () { + handleClose() { } } @@ -111,20 +112,19 @@ border-bottom: 1px solid #eee; color: rgb(0, 150, 250); } - .iconfont{ + .iconfont { padding-right: 10px; } - .el-menu-vertical-demo:not(.el-menu--collapse){ + .el-menu-vertical-demo:not(.el-menu--collapse) { width: 250px; } .el-menu-item, .el-submenu__title { text-align: left; } - .el-menu-item.is-active{ - color:#409EFF; + .el-menu-item.is-active { + color: #409eff; background-color: #ecf0fc; } - } </style> \ No newline at end of file diff --git a/src/pages/shuohuangMonitorAnalyze/components/lkgManage.vue b/src/pages/shuohuangMonitorAnalyze/components/lkgManage.vue new file mode 100644 index 0000000..e765b28 --- /dev/null +++ b/src/pages/shuohuangMonitorAnalyze/components/lkgManage.vue @@ -0,0 +1,65 @@ +<template> + <div class="lkg-manage"> + <div class="import-btn"> + <label>涓婁紶LKG鏁版嵁鏂囦欢</label> + <el-button + size="mini" + type="primary" + @click="uploadDirectoryTrigger" + :loading="uploading" + >鐐瑰嚮涓婁紶</el-button> + <input + ref="directoryInput" + @change="importDirectory" + hidden + type="file" + accept=".xlsx, .xls" + multiple + /> + </div> + </div> +</template> + +<script> +import { uploadLKG } from "@/api/shuohuang" + +export default { + data() { + return { + uploading: false + } + }, + methods: { + uploadDirectoryTrigger() { + this.$refs['directoryInput'].click(); + }, + importDirectory() { + let _this = this; + _this.uploading = true; + let formData = new FormData; + for (let i = 0; i < this.$refs['directoryInput'].files.length; i++) { + formData.append('files', this.$refs['directoryInput'].files[i]) + } + + uploadLKG(formData).then(res => { + if (res && res.success) { + this.$message.success("涓婁紶鎴愬姛") + } + _this.uploading = false; + }).catch(err => { + this.$message.warning("涓婁紶澶辫触", err) + _this.uploading = false; + }) + }, + } +} +</script> + +<style lang="scss"> +.lkg-manage { + .import-btn { + text-align: left; + margin: 10px 20px; + } +} +</style> \ No newline at end of file diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue index 8645349..0dddf47 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue @@ -26,15 +26,9 @@ 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 - > : + >杩樻湭閫夋嫨绛涢�夋潯浠�</span> + <div class="config-item" v-for="(config, index) in checkedConfigs" :key="index"> + <span class="title">{{ config.title }}</span> : <span class="val" v-for="option in config.data" :key="option.id"> <!-- <template> <div> @@ -46,25 +40,17 @@ <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="options-wrap"> @@ -73,41 +59,23 @@ :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> </div> - <div - v-show="!config.isMultCheck" - @click="checkOption(config, option)" - > + <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> <i :class=" @@ -130,11 +98,7 @@ <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" @@ -149,8 +113,7 @@ :index="index + '-' + ind" @click="checkOption(config, option)" class="highlevel-option" - >{{ option.name }}</el-menu-item - > + >{{ option.name }}</el-menu-item> </el-submenu> </el-menu> </div> @@ -161,22 +124,14 @@ <div class="header-bar clearfix"> <div class="left"> <div> - <el-select - v-model="IsFollow" - size="mini" - @change="filterSearchData" - > + <el-select v-model="IsFollow" size="mini" @change="filterSearchData"> <el-option value label="鍏ㄩ儴"></el-option> <el-option :value="false" label="鏈叧娉�"></el-option> <el-option :value="true" label="宸插叧娉�"></el-option> </el-select> </div> <div> - <el-select - v-model="IsOperate" - size="mini" - @change="filterSearchData" - > + <el-select v-model="IsOperate" size="mini" @change="filterSearchData"> <el-option value label="鍏ㄩ儴"></el-option> <el-option value="0" label="鏈鐞�"></el-option> <el-option value="1" label="宸插鐞�"></el-option> @@ -192,11 +147,7 @@ > <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> @@ -204,14 +155,7 @@ </div> <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="data.VideoCover" alt /> @@ -236,27 +180,22 @@ </div> </div> <div class="mark-info"> - <div - class="abnormal" - v-if="data.LableLst && data.LableLst.length" - > + <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 > + {{ + label.Desc + + (index == data.LableLst.length - 1 ? "" : "锛�") + }} + </span> </div> <div v-else> <span>鏃犲紓甯�</span> </div> - <div - class="event-tag" - v-if="data.EventLst && data.EventLst.length" - > + <div class="event-tag" v-if="data.EventLst && data.EventLst.length"> <el-tag size="mini" type="info" @@ -264,25 +203,15 @@ :key="index" style="margin-right: 5px; margin-bottom: 5px" @click="checkEventVideo(label)" - >{{ label.Event }}</el-tag - > + >{{ 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="iconfont" - :class="[data.IsFollow ? 'follow' : '', 'iconguanzhu']" - ></i> + <i class="iconfont" :class="[data.IsFollow ? 'follow' : '', 'iconguanzhu']"></i> </div> </div> </el-col> @@ -300,33 +229,16 @@ ></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"> <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></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="鎿嶄綔"> <template slot-scope="scope"> @@ -358,25 +270,27 @@ 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> + <!-- :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> - <video-analyze v-if="videoDialogVisible" :videoDetails="selectedVideo" /> - </el-dialog> + </div> + <video-analyze v-if="videoDialogVisible" :videoDetails="selectedVideo" /> + </el-dialog> <!-- </div> --> <el-dialog @@ -419,8 +333,8 @@ keyword: "", IsFollow: "", searchTime: [ - new Date(2020, 0, 1, 0, 0, 0), - new Date(2020, 11, 31, 23, 59, 59), + new Date(2021, 0, 1, 0, 0, 0), + new Date(2021, 11, 31, 23, 59, 59), ], curTabPage: 1, curTablePage: 1, @@ -516,9 +430,9 @@ } ); }, - closeDial(){ + closeDial() { this.videoDialogVisible = false - this.selectedVideo={} + this.selectedVideo = {} }, handleTabSizeChange(size) { this.tabPageSize = size; @@ -696,7 +610,7 @@ _this.selectedVideo = data; _this.videoDialogVisible = true; }, - checkFollow() {}, + checkFollow() { }, checkType(type) { this.showType = type; this.filterSearchData(); @@ -744,7 +658,7 @@ opt.isChecked = false; }); }, - handleSelect(key, keyPath) {}, + handleSelect(key, keyPath) { }, showMore(config) { config.isShowMore = !config.isShowMore; this.$refs[`options${config.id}`][0].style.height = config.isShowMore @@ -799,43 +713,43 @@ }; }, 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' //榧犳爣鎷変几寮圭獥 + const dragDom = el.querySelector('.el-dialog') + dragDom.style.overflow = 'hidden' + let minWidth = 400 + let minHeight = 300 // - resizeEl.onmousedown = (e) => { - // 璁板綍鍒濆x浣嶇疆 - const clientX = e.clientX // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂� - const disX = e.clientX - resizeEl.offsetLeft - const disY = e.clientY - resizeEl.offsetTop + // 鎷変几 + 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' //榧犳爣鎷変几寮圭獥 - document.onmousemove = function(e) { - e.preventDefault() // 绉诲姩鏃剁鐢ㄩ粯璁や簨浠� // 閫氳繃浜嬩欢濮旀墭锛岃绠楃Щ鍔ㄧ殑璺濈 + resizeEl.onmousedown = (e) => { + // 璁板綍鍒濆x浣嶇疆 + const clientX = e.clientX // 榧犳爣鎸変笅锛岃绠楀綋鍓嶅厓绱犺窛绂诲彲瑙嗗尯鐨勮窛绂� + const disX = e.clientX - resizeEl.offsetLeft + const disY = e.clientY - resizeEl.offsetTop - 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 - } + 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 } + } }, }, }; @@ -1164,8 +1078,8 @@ background: #f5f5f5; } } - .el-dialog__wrapper{ - top: -22px; + .el-dialog__wrapper { + top: -22px; } .dialog-video { // z-index: 2020 !important; @@ -1176,9 +1090,8 @@ .el-dialog__body { background: #eaeaea; padding: 0; - // height: 100%; - height: inherit; - + // height: 100%; + height: inherit; } .el-dialog__header { padding: 3px; diff --git a/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue b/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue index f11d59a..9ad68c8 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/transferDeviceManage.vue @@ -34,7 +34,10 @@ :key="indicator.id" > <div class="title"> - <span class="dot" :class="{'kx':indicator.id=='kx','dx':indicator.id=='dx','ccgz':indicator.id=='ccgz'}"></span> + <span + class="dot" + :class="{'kx':indicator.id=='kx','dx':indicator.id=='dx','ccgz':indicator.id=='ccgz'}" + ></span> <span class="word">{{indicator.title}}</span> </div> <div class="indicator-val">{{indicator.slots.length}}</div> @@ -52,7 +55,7 @@ <label>璁惧鐘舵��:</label> <div> <el-select v-model="deviceState" size="small"> - <el-option></el-option> + <el-option value="work" label="宸ヤ綔"></el-option> </el-select> </div> </div> @@ -111,7 +114,7 @@ <script> import { addDevice, getDeviceList, getDeviceInfoById } from '@/api/shuohuang'; export default { - data () { + data() { return { actTab: 'dev1', devices: [], @@ -124,11 +127,11 @@ IP: '', } }, - mounted () { + mounted() { this.findDeviceList(); }, methods: { - findDeviceList () { + findDeviceList() { let _this = this; getDeviceList().then(res => { _this.devices = res.data; @@ -136,7 +139,7 @@ _this.findDeviceIfo() }) }, - findDeviceIfo () { + findDeviceIfo() { let _this = this; getDeviceInfoById({ DeviceID: this.actTab }).then(res => { // debugger @@ -162,7 +165,7 @@ //_this.generalIndicators }) }, - toAddDevice () { + toAddDevice() { let _this = this; let params = { Name: this.Name, @@ -178,14 +181,14 @@ } }) }, - showAddDevice () { + showAddDevice() { this.visibleOfialogAddDev = true; }, - checkTab (tab, event) { + checkTab(tab, event) { this.findDeviceIfo(); }, - checkSlot (row) { + checkSlot(row) { } } @@ -247,7 +250,7 @@ flex: 1; position: relative; &:not(.lastOne):after { - content: ''; + content: ""; width: 1px; height: 57px; background: #e9e9e9; diff --git a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue index c1a6ea0..90ab683 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/videoAnalyze.vue @@ -9,15 +9,15 @@ v-show="showLocChoise" > <span class="el-dropdown-link"> - {{ curCamera }}<i class="el-icon-arrow-down el-icon--right"></i> + {{ curCamera }} + <i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item v-for="(item, index) in popDownArr" :key="index" :command="item" - >{{ item.Camera }}</el-dropdown-item - > + >{{ item.Camera }}</el-dropdown-item> </el-dropdown-menu> </el-dropdown> @@ -118,13 +118,11 @@ </template> <div class="player-control"> <div class="progress-bar"> - <el-tooltip - placement="top" - v-for="(item, index) in eventMarks" - :key="index" - > + <el-tooltip placement="top" v-for="(item, index) in eventMarks" :key="index"> <div slot="content"> - {{ getTimeStr(item.offset) }}<br />{{ item.text }} + {{ getTimeStr(item.offset) }} + <br /> + {{ item.text }} </div> <div class="self-dot" @@ -134,13 +132,11 @@ @click="dotJump(item.offset)" ></div> </el-tooltip> - <el-tooltip - placement="top" - v-for="(item, index) in labelMarks" - :key="index" - > + <el-tooltip placement="top" v-for="(item, index) in labelMarks" :key="index"> <div slot="content"> - {{ getTimeStr(item.offset) }}<br />{{ item.text }} + {{ getTimeStr(item.offset) }} + <br /> + {{ item.text }} </div> <div class="label-dot" @@ -161,7 +157,7 @@ @mouseover.native="intoBar" @change="progressChange" ></el-slider> - </div> + </div> <div class="control-zone"> <span class="time">{{ curPlayTime }} / {{ maxVideoTime }}</span> <div class="play-btn"> @@ -205,23 +201,18 @@ v-show="isUnusual == 1" type="primary" @click="addLabel(curVideo)" - >娣诲姞鏍囨敞</el-button - > + >娣诲姞鏍囨敞</el-button> </div> <div class="flex-box fixed-height-box"> <label v-if="!showTable">鏍囨敞淇℃伅:</label> <div class="mark-list" v-if="!showTable"> - <div - class="mark" - v-for="mark in curVideo.LableLst" - :key="mark.ID" - > + <div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID"> <div class="time"> - <span - >{{ pad0(Math.floor(mark.Time / 60)) }}:{{ - pad0(mark.Time % 60) - }}</span - > + <span> + {{ pad0(Math.floor(mark.Time / 60)) }}:{{ + pad0(mark.Time % 60) + }} + </span> <i class="el-icon-edit" @click="editCurLabel(mark)"></i> <i class="el-icon-delete" @click="removeCurLabel(mark)"></i> </div> @@ -230,12 +221,12 @@ </div> </div> </div> - </div></el-tab-pane - > + </div> + </el-tab-pane> <!-- <div class="flex-box fixed-height-box2"></div> --> <dataset-chart style="width: 100%" v-if="showTable"></dataset-chart> - <el-tab-pane label="鍏噷鏍�" name="second"> </el-tab-pane> + <el-tab-pane label="鍏噷鏍�" name="second"></el-tab-pane> </el-tabs> </div> <div class="bot-right block"> @@ -274,23 +265,16 @@ <el-radio :label="1">鏍囨敞鍦ㄥ叏閮ㄤ綅缃殑瑙嗛娈�</el-radio> <el-radio :label="0">浠呮爣娉ㄩ�変腑鐨勮棰戞</el-radio> </el-radio-group> - </div> --> + </div>--> <div class="label-check"> <p class="label">闅愭偅闂:</p> <el-checkbox-group v-model="labelCheckedList"> - <el-checkbox - v-for="item in labelOptions" - :key="item.ID" - :label="item.ID" - >{{ item.Name }}</el-checkbox - > + <el-checkbox v-for="item in labelOptions" :key="item.ID" :label="item.ID">{{ item.Name }}</el-checkbox> </el-checkbox-group> </div> <div class="btns"> <el-button @click="cancelLabelChecked" size="small">鍙栨秷</el-button> - <el-button @click="submitLabelChecked" size="small" type="primary" - >纭畾</el-button - > + <el-button @click="submitLabelChecked" size="small" type="primary">纭畾</el-button> </div> </el-dialog> </div> @@ -540,18 +524,18 @@ Driver1: cmd.Driver1, }).then((res) => { _this.allCurVideos = res.data; - _this.curCamera = cmd.Camera; - _this.curRoomVideos = _this.allCurVideos.filter((item) => { - return item.Camera == cmd.Camera; + _this.curCamera = cmd.Camera; + _this.curRoomVideos = _this.allCurVideos.filter((item) => { + return item.Camera == cmd.Camera; + }); + _this.curVideo = _this.curRoomVideos.find((item) => { + return item.ID == cmd.ID; + }); + _this.$nextTick(() => { + _this.$refs[`player_${_this.curVideo.ID}`][0].init(); + }); }); - _this.curVideo = _this.curRoomVideos.find((item) => { - return item.ID == cmd.ID; - }); - _this.$nextTick(() => { - _this.$refs[`player_${_this.curVideo.ID}`][0].init(); - }); - }); - + }, pad0(val) { return val < 10 ? "0" + val : val; @@ -583,7 +567,8 @@ if (_this.guid == 1) { _this.maxVideoTime = _this.curVideo.VideoTime; } - _this.videoArrs = res.data.filter((item) => v.UniqeID == item.UniqeID); + + _this.videoArrs = res.data.filter((item) => v.GroupID == item.GroupID); _this.allCurVideos = res.data; _this.curRoomVideos = _this.allCurVideos.filter((item) => { return item.Camera == "鍙告満瀹�"; @@ -600,7 +585,7 @@ }, getRelatedVideos(video) { let _this = this; - getRelatedVideoInfo({ UniqeID: video.UniqeID }).then((res) => { + getRelatedVideoInfo({ GroupID: video.GroupID }).then((res) => { let arr = []; let map = {}; res.data.forEach((item) => { @@ -618,7 +603,7 @@ }); }, refreshCurVideoLabel(video) { - getRelatedVideoInfo({ UniqeID: video.UniqeID }).then((res) => { + getRelatedVideoInfo({ GroupID: video.GroupID }).then((res) => { res.data.forEach((d) => { if (d.ID === video.ID) { video.LableLst = d.LableLst; @@ -630,7 +615,7 @@ this.refreshCurVideoLabel(video); this.curVideo = video; this.videoArrs = this.allCurVideos.filter( - (item) => video.UniqeID == item.UniqeID + (item) => video.GroupID == item.GroupID ); this.$nextTick(() => { this.$refs[`player_${this.curVideo.ID}`][0].init(); @@ -656,7 +641,7 @@ `calc(` + 100 / guid + `%)`; // this.$refs["playerWrap"].offsetHeight / guid + "px"; } - console.log(this.$refs[`player_${this.videoArrs[index].ID}`]); + // console.log(this.$refs[`player_${this.videoArrs[index].ID}`]); }); }, cancelLabelChecked() { @@ -681,12 +666,12 @@ let query = { ID: this.selectedLabelId, ParentID: tempArr.join(","), - ParentUniqID: this.curVideo.UniqeID + "", + ParentUniqID: this.curVideo.GroupID + "", Time: Math.round(this.setLabelTime) + "", Codes: this.labelCheckedList.join(","), Desc: desc.join("锛�"), }; - + editLabel(query).then((rsp) => { if (rsp && rsp.success) { _this.labelDialogVisible = false; @@ -728,7 +713,7 @@ Desc: mark.Desc, ParentUniqID: mark.ParentUniqID, Time: mark.Time, - ParentID:mark.ParentID + ParentID: mark.ParentID }; delLabel(obj).then((rsp) => { if (rsp && rsp.success) { @@ -751,6 +736,11 @@ }); }, mergeMarks(videoInfo) { + if (!videoInfo.EventLst || !videoInfo.LableLst) { + console.log("mergeMarks data null") + return; + } + const eMarks = videoInfo.EventLst.map((item) => { return { offset: item.SecondsInVideo, diff --git a/src/pages/shuohuangMonitorAnalyze/index/App.vue b/src/pages/shuohuangMonitorAnalyze/index/App.vue index 66b81b3..be77a89 100644 --- a/src/pages/shuohuangMonitorAnalyze/index/App.vue +++ b/src/pages/shuohuangMonitorAnalyze/index/App.vue @@ -11,55 +11,71 @@ <top-nav></top-nav> </div> <div class="container"> + <!-- 棣栭〉 --> + <guideIndex v-show="actPage=='guideIndex'"></guideIndex> + <searchForVideoAnalyze v-if="actPage=='searchForVideoAnalyze'"></searchForVideoAnalyze> <memberManage v-if="actPage=='memberManage'"></memberManage> <taskManage v-if="actPage=='taskManage'"></taskManage> <transferMemo v-if="actPage=='transferMemo'"></transferMemo> <transferDeviceManage v-if="actPage=='transferDeviceManage'"></transferDeviceManage> <configManage v-if="actPage=='configManage'"></configManage> - <guideIndex v-if="actPage=='guideIndex'"></guideIndex> + <lkg v-if="actPage=='lkgManage'"></lkg> </div> </div> </div> </template> <script> -import LeftNav from '../components/leftNav'; +import Lkg from '../components/lkgManage' import TopNav from '../components/topNav'; -import SearchForVideoAnalyze from '../components/searchForVideoAnalyze'; -import MemberManage from '../components/memberManage'; +import LeftNav from '../components/leftNav'; +import GuideIndex from '../components/guideIndex'; import TaskManage from '../components/taskManage'; import TransferMemo from '../components/transferMemo'; -import TransferDeviceManage from '../components/transferDeviceManage'; import ConfigManage from '../components/configManage'; -import GuideIndex from '../components/guideIndex'; +import MemberManage from '../components/memberManage'; +import TransferDeviceManage from '../components/transferDeviceManage'; +import SearchForVideoAnalyze from '../components/searchForVideoAnalyze'; + export default { - components: { LeftNav, TopNav, SearchForVideoAnalyze, MemberManage, TaskManage, TransferMemo, TransferDeviceManage, ConfigManage, GuideIndex }, - data () { + components: { + Lkg, + LeftNav, + TopNav, + SearchForVideoAnalyze, + MemberManage, + TaskManage, + TransferMemo, + TransferDeviceManage, + ConfigManage, + GuideIndex + }, + data() { return { isCollapse: false, actPage: 'guideIndex', } }, - mounted () { - + mounted() { + // this.actPage = 'guideIndex'; }, methods: { - markNav () { + markNav() { sessionStorage.setItem('actPage', this.actPage); this.menuChange(this.actPage); }, - toggleCollapse () { + toggleCollapse() { this.isCollapse = !this.isCollapse; //閫氱煡褰撳墠娲诲姩椤祎able(濡傛灉鏈�) doLayout }, - menuChange (path) { - if(path == 'taskscreen'){ + menuChange(path) { + if (path == 'taskscreen') { //window.location.href = window.location.href+'taskscreen/index.html' - window.open(window.location.href+'taskscreen/index.html','_blank') - }else if(path == 'hiddendangerscreen'){ + window.open(window.location.href + 'taskscreen/index.html', '_blank') + } else if (path == 'hiddendangerscreen') { //window.location.href = window.location.href+'hiddendangerscreen/index.html' - window.open(window.location.href+'hiddendangerscreen/index.html','_blank') + window.open(window.location.href + 'hiddendangerscreen/index.html', '_blank') } this.actPage = path; } @@ -70,11 +86,11 @@ <style lang="scss"> .flex-box { display: flex; - >label { + > label { padding-right: 10px; } } -.flex-end{ +.flex-end { display: flex; justify-content: flex-end; } @@ -119,7 +135,7 @@ padding: 0 3px; color: #0096fa; } - i[class^='el-icon'] { + i[class^="el-icon"] { padding: 3px; font-size: 16px; color: #0096fa; diff --git a/vue.config.js b/vue.config.js index 54707a5..f623575 100644 --- a/vue.config.js +++ b/vue.config.js @@ -41,10 +41,7 @@ }) // const serverUrl = "http://58.118.225.79:41243" // 缇婁簲 -const serverUrl = "http://192.168.20.10:7009" - - - +const serverUrl = "http://192.168.20.117:7009" module.exports = { pages, @@ -91,7 +88,7 @@ }, "/data/api-v/app/findAllApp": { // target: '/', - target: 'http://localhost:8081/', + target: 'http://localhost:8080/', changeOrigin: true, pathRewrite: { '^/data/api-v/app/findAllApp': 'apps.json' -- Gitblit v1.8.0