From 0175cda6150656bc74b34c6f6c71edd1e1fc653c Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@iotlink.com> Date: 星期四, 04 二月 2021 18:22:54 +0800 Subject: [PATCH] treee, 修复tab切换时树的选中状态.添加区域 --- src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue | 461 +++++--------------------------------------------------- 1 files changed, 47 insertions(+), 414 deletions(-) diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue index 0b626f0..e4b36d7 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue @@ -117,14 +117,14 @@ <div class="header-bar clearfix"> <div class="left"> <div> - <el-select v-model="watch" size="mini"> - <el-option value label="鍏ㄩ儴"></el-option> - <el-option value="1" label="鏈叧娉�"></el-option> - <el-option value="2" label="宸插叧娉�"></el-option> + <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="settle" size="mini"> + <el-select v-model="settle" size="mini" > <el-option value label="鍏ㄩ儴"></el-option> <el-option value="1" label="鏈鐞�"></el-option> <el-option value="2" label="宸插鐞�"></el-option> @@ -169,8 +169,8 @@ </div> </div> <div class="mark-info"> - <div class="abnormal" v-if="data.IsUnusual==='1'"> - <span v-for="(mark,index) in data.marks" :key="index">{{mark}}</span> + <div class="abnormal" v-if="data.LableLst&&data.LableLst.length"> + <span v-for="(label,index) in data.LableLst" :key="index">{{label.Desc}}</span> </div> <div v-else> <span>鏃犲紓甯�</span> @@ -208,9 +208,9 @@ <el-table-column label="淇敼鏃ユ湡" prop="UpdatedAt" sortable></el-table-column> <el-table-column label="鍒涘缓鏃ユ湡" prop="CreatedAt" sortable></el-table-column> <el-table-column label="鎿嶄綔"> - <template> + <template slot-scope="scope"> <div class="operation"> - <i class="el-icon-star-off" style="font-size: 18px;"></i> + <i class="el-icon-star-off" @click="toggleFollow(scope.row)"></i> </div> </template> </el-table-column> @@ -229,7 +229,6 @@ class="dialog-video" :visible="videoDialogVisible" @close="videoDialogVisible=false" - :append-to-body="false" > <div slot="title" class="title"> <div class="center"> @@ -237,146 +236,7 @@ <span>鎾斁瑙嗛</span> </div> </div> - <div class="content"> - <div class="content-top"> - <div class="grid-check"> - <span - :class="guid === 1 ? 'iconfont icongongge1 activegongge':'iconfont icongongge1'" - @click="setGuid(1)" - ></span> - <span - :class="guid === 2 ? 'iconfont icongongge activegongge':'iconfont icongongge'" - @click="setGuid(2)" - ></span> - <span - :class="guid === 3 ? 'iconfont icongongge2 activegongge':'iconfont icongongge2'" - @click="setGuid(3)" - ></span> - </div> - <div class="video-area"> - <div class="info-list block"> - <p class="title-partment">鐩稿叧瑙嗛</p> - <!-- <div class="video-name" v-for="video in videoDetails.videoList" :key="video.id"> - <i class="el-icon-film"></i> - <span>{{video.name}}</span> - </div>--> - <div - class="video-name" - :class="{'current':curVideo.ID==video.ID}" - @click="checkVideo(video,index)" - v-for="(video,index) in videoDetails.relativeVideos" - :key="video.ID" - > - <i class="el-icon-film"></i> - <span>{{video.Event}}</span> - </div> - </div> - <div class="players" ref="playerWrap"> - <div - class="video-item" - :ref="`gridVideoItem_${index}`" - v-for="(item,index) in videoWrapArr" - :key="index" - - > - <template v-if="index<=videoArrs.length-1"> - <div :class="{'currentPlayer':curVideo.ID==videoArrs[index].ID}"> - {{videoArrs[index].ID}} - <img - :src="CLIP+videoArrs[index].VideoCover" - style="width:100px" - /> - </div> - </template> - </div> - <!-- <div - class="video-item" - :class="{'active':item.ID==curVideo.ID}" - :ref="`gridVideoItem_${index}`" - v-for="(item,index) in videoWrapArr" - :key="index" - > - - </div>--> - </div> - </div> - </div> - <div class="content-bottom"> - <div class="bot-left block"> - <p class="title-partment">蹇�熸爣娉�</p> - <div class="flex-box" style="height:28px;"> - <label style="padding-right:10px;">闅愭偅闂:</label> - <el-radio v-model="curVideo.IsUnusual" label="0">鏃犲紓甯�</el-radio> - <el-radio v-model="curVideo.IsUnusual" label="1">鏈夊紓甯�</el-radio> - <el-button - icon="el-icon-plus" - size="mini" - v-show="curVideo.IsUnusual==1" - type="primary" - @click="addLabel(curVideo)" - >娣诲姞鏍囨敞</el-button> - </div> - <div class="flex-box"> - <label>鏍囨敞淇℃伅:</label> - <div class="mark-list"> - <div class="mark" v-for="mark in curVideo.LableLst" :key="mark.ID"> - <div class="time" v-if="mark.length"> - <span>{{mark[0].Time}}</span> - <i class="el-icon-edit" @click="editCurLabel(mark)"></i> - <i - class="el-icon-delete" - @click="removeCurLabel(mark[0].ParentID,mark[0].Time)" - ></i> - </div> - <div class="label-content"> - <span - v-for="content in mark" - :key="content.ID" - >{{findLabelNameById(content.CodeID)}}</span> - </div> - </div> - </div> - </div> - </div> - <div class="bot-right block"> - <p class="title-partment">瑙嗛璇︽儏</p> - <div class="base-info"> - <div> - <label>杞﹀彿:</label> - <span>{{videoDetails.CarNumber}}</span> - </div> - <div> - <label>杞︽:</label> - <span>{{videoDetails.TrainNumber}}</span> - </div> - <div> - <label>鏃堕棿:</label> - <span>{{videoDetails.VideoDate}}</span> - </div> - <div> - <label>鍙告満|鍓徃鏈�:</label> - <span>{{videoDetails.Driver1}}|{{videoDetails.Driver2}}</span> - </div> - </div> - </div> - </div> - </div> - </el-dialog> - <el-dialog - class="label-dialog" - :visible="labelDialogVisible" - @close="labelDialogVisible=false" - :append-to-body="false" - > - <div class="label-check"> - <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-group> - </div> - <div class="btns"> - <el-button @click="cancelLabelChecked" size="small">鍙栨秷</el-button> - <el-button @click="submitLabelChecked()" size="small" type="primary">纭畾</el-button> - </div> + <video-analyze :videoDetails="selectedVideo" /> </el-dialog> </div> </div> @@ -384,13 +244,19 @@ <script> import { getlstInit, updateVideoAnalyze, getlst, getRelatedVideoInfo, getLabelMap, delLabel, editLabel } from '@/api/shuohuang'; +import VideoAnalyze from "./videoAnalyze" export default { + name: "SearchMain", + components: { + VideoAnalyze + }, data () { return { CLIP: 'http://192.168.20.113/', keyword: '', - searchTime: [this.$moment(new Date().getTime() - 3600 * 1000 * 24 * 3).format("YYYY-MM-DD HH:mm:ss"), this.$moment(new Date()).format("YYYY-MM-DD HH:mm:ss")], + 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")], curTabPage: 1, curTablePage: 1, tabPageSize: 8, @@ -443,7 +309,6 @@ highLevelConfigs: [], showAdvance: true, fixedOneLineHeight: 40, - watch: '', settle: '', showType: 'menu', tableData: [ @@ -453,110 +318,26 @@ 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 } - ], - + ], videoDialogVisible: false, - videoDetails: {}, - guid: 1, - curVideo: {}, - videoArrs: [], - videoWrapArr: [], hiddenDanger: 1, labelDialogVisible: false, - labelOptions: [{ id: 'whh', name: '鏈懠鍞ゃ�佸懠鍞や笉鏍囧噯' }, { id: 'jsbz', name: '绮剧涓嶆尟銆佽繍琛屼腑鐫¤' }, { id: 'xxsj', name: '瀛︿範鍙告満鏈簲绛�' }, { id: 'myhb', name: '娌℃湁鍚庨儴鐬湜銆佷笉鎸夎瀹氬仛闃叉簻鎺柦' }], - labelCheckedList: [], + selectedVideo: {} } }, watch: { checkedConfigs: { handler (n, o) { - // let filterQuerys = []; - // n.forEach(config => { - // let checkedOpts = config.data.filter(option => option.isChecked); - // if (checkedOpts.length) { - // var linkOpts = checkedOpts.map(opt => opt.name); - // linkOpts = linkOpts.join(','); - // let obj = {}; - // obj[config.NameEn] = linkOpts; - // filterQuerys.push(obj); - // } - // }) - // console.log(filterQuerys) - this.filterSearchData() }, deep: true } }, mounted () { - // let mockConfigs = [ - // { id: 'jch', isHighLevel: false, title: '鏈鸿溅鍙�', data: [{ name: '鍏ㄩ儴', id: '' }, { name: 'K24', id: 'k24' }, { name: 'G172', id: 'g172' }, { name: 'K254', id: 'k254' }, { name: 'K264', id: 'k264' }, { name: 'G132', id: 'g132' }, { name: 'K257', id: 'k257' }, { name: 'K269', id: 'k269' }, { name: 'G176', id: 'g176' }, { name: 'G137', id: 'g137' }, { name: 'K297', id: 'k297' }, { name: 'K209', id: 'k209' }, { name: 'G777', id: 'g777' }, { name: 'G337', id: 'g337' }, { name: 'K277', id: 'k277' }, { name: 'K299', id: 'k299' }, { name: 'G866', id: 'g866' }, { name: 'K877', id: 'k877' }, { name: 'K699', id: 'k699' }, { name: 'G906', id: 'g906' }, { name: 'L677', id: 'l677' }, { name: 'M987', id: 'm987' }] }, - // { id: 'cc', isHighLevel: false, title: '杞︽', data: [{ name: '鍏ㄩ儴', id: '' }, { name: 'SS344', id: 'SS344' }, { name: 'SS345', id: 'SS345' }, { name: 'SS765', id: 'SS765' }, { name: 'SS776', id: 'SS776' }, { name: 'SS676', id: 'SS676' }, { name: 'SS876', id: 'SS876' }, { name: 'SS779', id: 'k779' }, { name: 'SS976', id: 'SS976' },] }, - // { id: 'sj', isHighLevel: true, title: '鍙告満', data: [{ name: '寮犱笁', id: 'zs' }, { name: '鏉庢柉', id: "ls" }, { name: '鏉庢柉鐗�', id: "lst" }] }, - // { id: 'lk', isHighLevel: true, title: '璺喌', data: [{ name: '鏍囩ず鐗�', id: 'bsp' }, { name: '淇″彿鏈�', id: "xhj" }, { name: '寮亾', id: "wd" }] } - // ]; - - // mockConfigs.forEach(config => { - // this.$set(config, 'isShow', true); - // config.data.forEach(item => { - // this.$set(item, 'isChecked', false); - // }) - // if (config.isHighLevel) { - // this.highLevelConfigs.push(config); - // } else { - // this.$set(config, 'isMultCheck', false); - // this.$set(config, 'showMore', false); - // this.optionalConfigs.push(config); - // } - // }) - // this.$nextTick(() => { - // this.optionalConfigs.forEach(config => { - // if (this.$refs[`options${config.id}`][0].scrollHeight > this.fixedOneLineHeight) { - // config.showMore = true; - // this.$set(config, 'isShowMore', false); - // } else { - // config.showMore = false; - // } - // }); - // console.log(this.optionalConfigs); - // }); this.init(); - this.renderLabelOpts(); }, methods: { - editCurLabel (mark) { - let arr = []; - mark.forEach(label => { - arr.push(label.CodeID) - }); - this.labelCheckedList = arr; - this.labelDialogVisible = true; - }, - removeCurLabel (ParentID, Time) { - delLabel({ ParentID, Time }).then(res => { - - }) - }, - renderLabelOpts () { - let _this = this; - getLabelMap().then(res => { - _this.labelOptions = res.data - }) - }, - findLabelNameById (id) { - debugger - let label = this.labelOptions.find(label => label.ID == id); - return label.Name; - }, - checkVideo (video,index) { - this.curVideo = video; - debugger - if(index>0&&this.guid==1){ - this.videoWrapArr - } - }, handleTabSizeChange (size) { - debugger this.tabPageSize = size; this.filterSearchData() }, @@ -570,13 +351,22 @@ //浜岀骇鏌ヨ filterSearchData () { let _this = this; + let isFollow = ''; + if(this.IsFollow === ''){ + isFollow = '' + }else if(!!this.IsFollow){ + isFollow = '1' + }else{ + isFollow = '0' + } let query = { KeyWord: this.keyword, StartDate: this.searchTime[0], EndDate: this.searchTime[1], PageIndex: this.showType == 'list' ? this.curTablePage : this.showType == 'list', PageSize: this.showType == 'list' ? this.tablePageSize : this.tabPageSize, - IsDetail: this.showType == 'list' + IsDetail: this.showType == 'list', + IsFollow: isFollow }; let filterQuerys = []; this.checkedConfigs.forEach(config => { @@ -610,7 +400,8 @@ EndDate: this.searchTime[1], PageIndex: this.showType == 'list' ? this.curTablePage : this.showType == 'list', PageSize: this.showType == 'list' ? this.tablePageSize : this.tabPageSize, - IsDetail: this.showType == 'list' + IsDetail: this.showType == 'list', + IsFollow: this.IsFollow }; this.optionalConfigs = []; this.highLevelConfigs = []; @@ -675,72 +466,17 @@ }); }, - cancelLabelChecked () { - this.labelDialogVisible = false; - }, - submitLabelChecked () { - console.log(this.labelCheckedList) - debugger - //this.curVideo - //this.curVideo.HotPoint[0].Time - editLabel({ ParentID: this.curVideo.ID + '', Time: this.curVideo.HotPoint[0].Time, CodeID: this.labelCheckedList.join(',') }).then(res => { - debugger - - }) - - }, - addLabel (video) { - this.labelDialogVisible = true; - }, - setGuid (guid) { - let _this = this; - this.guid = guid; - // for(var i = 0; i < Math.pow(guid,2); i++){ - // if(i>this.videoArrs.length-1){ - // this.videoWrapArr[i] = this.videoArrs[i] - // }else{ - // this.videoWrapArr[i] = {} - // } - // } - this.videoWrapArr = Math.pow(guid, 2); - - this.$nextTick(() => { - for (var i = 0; i < Math.pow(guid, 2); i++) { - this.$refs[`gridVideoItem_${i}`][0].style.width = this.$refs['playerWrap'].offsetWidth / guid + 'px'; - this.$refs[`gridVideoItem_${i}`][0].style.height = this.$refs['playerWrap'].offsetHeight / guid + 'px'; - - } - }) - - }, checkVideoDetail (data) { - this.videoDetails = data; let _this = this; - getRelatedVideoInfo({ UniqeID: data.UniqeID }).then(res => { - _this.videoDetails.relativeVideos = res.data; - _this.curVideo = res.data[0]; - _this.videoArrs = res.data; - // _this.videoWrapArr.push(res.data[0]); - _this.setGuid(1) - _this.videoDialogVisible = true; - }) + _this.selectedVideo = data; + _this.videoDialogVisible = true; + }, checkFollow () { }, checkType (type) { this.showType = type; - // let filterQuerys = []; - // this.checkedConfigs.forEach(config => { - // let checkedOpts = config.data.filter(option => option.isChecked); - // if (checkedOpts.length) { - // var linkOpts = checkedOpts.map(opt => opt.name); - // linkOpts = linkOpts.join(','); - // let obj = {}; - // obj[config.NameEn] = linkOpts; - // filterQuerys.push(obj); - // } - // }) this.filterSearchData() }, clearCheckedConfigs () { @@ -815,6 +551,9 @@ <style lang="scss"> .search-for-video-analyze { padding: 20px 30px; + .flex-box{ + display: flex; + } .filter-area { .input-area { display: flex; @@ -927,8 +666,8 @@ border-color: #7695ec; } &.checked { - color: #409EFF; - border-color: #409EFF; + color: #409eff; + border-color: #409eff; } } } @@ -978,15 +717,15 @@ padding: 2px 5px; cursor: pointer; border: 1px solid #eee; - background-color:#ecf0fc; + background-color: #ecf0fc; border-radius: 3px; color: #777; &.menu { margin-right: 10px; } &.current { - border-color: #409EFF; - background-color:#fff; + border-color: #409eff; + background-color: #fff; } } } @@ -1003,6 +742,7 @@ text-align: left; border: 1px solid #dedede; border-radius: 5px; + height: 350px; .video-wrap { background: aliceblue; border-radius: 3px; @@ -1047,7 +787,7 @@ bottom: 10px; color: #ccc; .follow { - color: #409EFF; + color: #409eff; } } } @@ -1063,8 +803,10 @@ } } .dialog-video { + z-index: 2096 !important; .el-dialog { width: 1180px; + height: 918px; } .el-dialog__body { background: #f5f5f5; @@ -1081,121 +823,12 @@ background: #fff; padding: 10px; border-radius: 3px; - .flex-box >label{ + .flex-box > label { color: #777; } } .title { font-size: 18px; - } - .content { - padding: 15px; - text-align: left; - .content-top { - margin-bottom: 10px; - .grid-check { - text-align: right; - margin-bottom: 6px; - span { - font-size: 20px; - color: #cacaca; - padding-left: 12px; - cursor: pointer; - &.activegongge{ - color: #3d68e1; - } - } - } - .video-area { - display: flex; - .info-list { - width: 160px; - margin-right: 10px; - .video-name { - cursor: pointer; - color: #777; - margin-bottom: 10px; - &.current { - color: #409eff; - } - i { - padding-right: 4px; - } - } - } - .players { - width: 960px; - height: 540px; - display: flex; - flex-wrap: wrap; - .video-item { - background: black; - border: 1px solid #fff; - box-sizing: border-box; - .currentPlayer { - border: 2px solid aqua; - } - } - } - } - } - .content-bottom { - display: flex; - .bot-left { - flex: 1; - .flex-box { - align-items: baseline; - label { - padding-right: 10px; - } - .mark-list { - .time { - cursor: pointer; - font-size: 15px; - font-weight: bold; - color: #409eff; - span{ - padding-right: 5px; - } - i[class^='el-icon'] { - padding: 3px; - } - } - .label-content { - font-size: 13px; - padding: 4px 0; - color: #888; - } - } - } - } - .bot-right { - width: 210px; - margin-left: 10px; - label { - color: #999; - padding-right: 8px; - } - } - } - } - } - .label-dialog { - .el-dialog { - width: 700px; - .label-check { - min-height: 400px; - margin-bottom: 20px; - .el-checkbox-group { - display: flex; - flex-wrap: wrap; - > label { - width: 50%; - text-align: left; - margin: 0; - } - } - } } } } -- Gitblit v1.8.0