From 4a800a8fc83c6bd1f86a8e847b079a51a7532c09 Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期三, 20 七月 2022 15:05:58 +0800 Subject: [PATCH] 修复国标配置的bug --- src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue | 1158 ++++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 720 insertions(+), 438 deletions(-) diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue index f1478cb..06d8766 100644 --- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue +++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue @@ -18,69 +18,102 @@ end-placeholder="缁撴潫鏃ユ湡" align="right" ></el-date-picker> - <el-button size="small" type="primary" @click="dataSearch">鎼滅储</el-button> + <el-button size="small" type="primary" @click="init">鎼滅储</el-button> </div> <div class="checked-config"> - <span style="margin-top:3px;">宸查�夋潯浠�:</span> + <span style="margin-top: 3px">宸查�夋潯浠�:</span> <span 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> : + 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 class="val" v-for="option in config.data" :key="option.id"> - <!-- <template> - <div> - - </div> - </template>--> <span v-if="option.isChecked" class="val-show"> - {{option.name}} + {{ option.name }} <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"> - <template v-show="config.isShow"> - <div class="title">{{config.title}}</div> + <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"> <div class="options" - :ref="'options'+config.id" - :style="{height:fixedOneLineHeight+'px'}" + :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> + <span>{{ option.name }}</span> </div> - <div v-show="!config.isMultCheck" @click="checkOption(config,option)"> - <span>{{option.name}}</span> + <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="config.isShowMore?'el-icon-arrow-up':'el-icon-arrow-down'"></i> + <i + :class=" + config.isShowMore + ? 'el-icon-arrow-up' + : 'el-icon-arrow-down' + " + ></i> </div> <div - :class="[{'checked':config.isMultCheck},'multCheck']" + :class="[{ checked: config.isMultCheck }, 'multCheck']" @click="toggleMultCheck(config)" > <i class="el-icon-plus"></i> @@ -89,24 +122,30 @@ </div> </template> </div> - <div class="config"> + <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" - v-for="(config,index) in highLevelConfigs" + v-for="(config, index) in highLevelConfigs" :key="index" - :index="index+''" + :index="index + ''" > - <template slot="title">{{config.title}}</template> + <template slot="title">{{ config.title }}</template> <el-menu-item - v-for="(option,ind) in config.data" + v-for="(option, ind) in config.data" :key="ind" - :index="index+'-'+ind" - @click="checkOption(config,option)" - >{{option.name}}</el-menu-item> + :index="index + '-' + ind" + @click="checkOption(config, option)" + class="highlevel-option" + >{{ option.name }}</el-menu-item + > </el-submenu> </el-menu> </div> @@ -117,118 +156,219 @@ <div class="header-bar clearfix"> <div class="left"> <div> - <el-select v-model="watch" size="mini"> + <el-select + v-model="IsFollow" + size="mini" + @change="filterSearchData" + > <el-option value label="鍏ㄩ儴"></el-option> - <el-option value="1" label="鏈叧娉�"></el-option> - <el-option value="2" label="宸插叧娉�"></el-option> + <el-option :value="'1'" label="鏈叧娉�"></el-option> + <el-option :value="'0'" label="宸插叧娉�"></el-option> </el-select> </div> <div> - <el-select v-model="settle" size="mini"> + <el-select + v-model="IsOperate" + size="mini" + @change="filterSearchData" + > <el-option value label="鍏ㄩ儴"></el-option> - <el-option value="1" label="鏈鐞�"></el-option> - <el-option value="2" label="宸插鐞�"></el-option> + <el-option value="0" label="鏈鐞�"></el-option> + <el-option value="1" label="宸插鐞�"></el-option> </el-select> </div> </div> <div class="right"> <div class="show-type"> - <div class="type menu" :class="{'current':showType=='menu'}" @click="checkType('menu')"> + <div + class="type menu" + :class="{ current: showType == 'menu' }" + @click="checkType('menu')" + > <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> </div> </div> - <div class="content" v-show="showType=='menu'"> + <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 menuList" :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="checkVideo(data)"> - <video src></video> + <div class="video-wrap" @click="checkVideoDetail(data)"> + <img :src="data.VideoCover | fixPath" alt /> </div> <div class="video-info"> <div class="base-info"> - <div> + <div class="flex-box"> <label>杞﹀彿:</label> - <span>{{data.no}}</span> + <span>{{ data.CarNumber }}</span> </div> - <div> + <div class="flex-box"> <label>杞︽:</label> - <span>{{data.frequency}}</span> + <span>{{ data.TrainNumber }}</span> </div> - <div> + <div class="flex-box"> <label>鏃堕棿:</label> - <span>{{data.time}}</span> + <span>{{ data.StartTime }}</span> </div> - <div> - <label>鍙告満|鍓徃鏈�:</label> - <span>{{data.driver}}</span> + <div class="flex-box"> + <label>鍙告満 | 鍓徃鏈�:</label> + <span>{{ data.Driver1 }} | {{ data.Driver2 }}</span> </div> </div> <div class="mark-info"> - <div class="abnormal" v-if="data.markType==1"> - <span v-for="(mark,index) in data.marks" :key="index">{{mark}}</span> + <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> + </div> + <div v-else-if=" hasError(data)"> + <span style="color:orangered;">鏈夊紓甯�</span> </div> <div v-else> <span>鏃犲紓甯�</span> </div> + <div + class="event-tag" + v-if="data.EventLst && data.EventLst.length" + > + <el-tag + size="mini" + type="info" + v-for="(label, index) in data.EventLst" + :key="index" + style="margin-right: 5px; margin-bottom: 5px" + @click="checkEventVideo(label)" + >{{ 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"> - <i :class="[data.follow?'follow':'','el-icon-star-off']"></i> + <div class="star" @click="toggleFollow(data)"> + <i + class="iconfont" + :class="[data.IsFollow == '0' ? 'follow' : '', 'iconguanzhu']" + ></i> </div> </div> </el-col> </el-row> <el-pagination + class="pagination-center" background - @size-change="handleSizeChange" + @size-change="handleTabSizeChange" @current-change="handleCurrentChange" :current-page.sync="curTabPage" + :page-sizes="pageSizes" :page-size="tabPageSize" - layout="total, prev, pager, next" - :total="tabTotal"> - </el-pagination> + layout="total,sizes, prev, pager, next" + :total="tabTotal" + ></el-pagination> </div> - <div class="content" v-show="showType=='list'"> - <el-table :data="tableData" fit ref="elTable"> - <el-table-column label="鍚嶇О" prop="name" sortable width="500"> - <template slot-scope="scope"> - <div style="cursor:pointer;">{{scope.row.name}}</div> + <div class="content" v-show="showType == 'list'"> + <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="size" sortable></el-table-column> - <el-table-column label="淇敼鏃ユ湡" prop="updateTime" sortable></el-table-column> - <el-table-column label="鍒涘缓鏃ユ湡" prop="createTime" 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="StartTime" + sortable + ></el-table-column> + <!-- <el-table-column label="鍒涘缓鏃ユ湡" prop="VideoCreateDate" 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> + <div class="star"> + <i + class="iconfont" + :class="[ + scope.row.IsFollow == '0' ? 'follow' : '', + 'iconguanzhu', + ]" + @click.stop="toggleFollow(scope.row)" + ></i> + </div> </div> </template> </el-table-column> </el-table> - <!-- <el-pagination background layout="prev, pager, next" :page-size="pageSize" :total="tableListTotal"></el-pagination> --> <el-pagination - @size-change="handleSizeChange" + class="pagination-center" + @size-change="handleTableSizeChange" @current-change="handleCurrentChange" :current-page.sync="curTablePage" :page-size="tablePageSize" - layout="total, prev, pager, next" - :total="tableTotal"> - </el-pagination> + :page-sizes="pageSizes" + layout="total,sizes, prev, pager, next" + :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" - :append-to-body="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"> @@ -236,367 +376,490 @@ <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"> - <i class="el-icon-film"></i> - <span>椹鹃┒瀹�</span> - </div> - <div class="video-name"> - <i class="el-icon-film"></i> - <span>鏈烘埧</span> - </div> - </div> - <div class="players"> - <div class="video-item" 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 style="height:28px;"> - <label style="padding-right:10px;">闅愭偅闂:</label> - <el-radio v-model="hiddenDanger" :label="1">鏃犲紓甯�</el-radio> - <el-radio v-model="hiddenDanger" :label="2">鏈夊紓甯�</el-radio> - <el-button - icon="el-icon-plus" - size="mini" - v-show="hiddenDanger==2" - type="primary" - @click="addLabel(videoDetails)" - >娣诲姞鏍囨敞</el-button> - </div> - </div> - <div class="bot-right block"> - <p class="title-partment">瑙嗛璇︽儏</p> - <div class="base-info"> - <div> - <label>杞﹀彿:</label> - <span>{{videoDetails.no}}</span> - </div> - <div> - <label>杞︽:</label> - <span>{{videoDetails.frequency}}</span> - </div> - <div> - <label>鏃堕棿:</label> - <span>{{videoDetails.time}}</span> - </div> - <div> - <label>鍙告満|鍓徃鏈�:</label> - <span>{{videoDetails.driver}}</span> - </div> - </div> - </div> - </div> - </div> + <video-analyze + v-if="videoDialogVisible" + :videoDetails="selectedVideo" + /> </el-dialog> + <!-- </div> --> + <el-dialog - class="label-dialog" - :visible="labelDialogVisible" - @close="labelDialogVisible=false" - :append-to-body="false" + class="dialog-event" + :visible="eventDialogVisible" + @close="eventDialogVisible = 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 class="title" slot="title"> + <i class="el-icon-connection"></i> + <span>{{ curEvName }}瑙嗛</span> </div> - <div class="btns"> - <el-button @click="delLabelChecked" size="small">鍒犻櫎</el-button> - <el-button @click="cancelLabelChecked" size="small">鍙栨秷</el-button> - <el-button @click="submitLabelChecked(videoDetails)" size="small" type="primary">纭畾</el-button> - </div> + <event-videos :eventVideoArr="eventVideoArr"></event-videos> </el-dialog> </div> </div> </template> <script> -import { getlstInit } from '@/api/shuohuang'; - +import { + getlstInit, + updateFollow, + getlst, + getLabelMap, + getEventVideo, +} from "@/api/shuohuang"; +import VideoAnalyze from "./videoAnalyze"; +import EventVideos from "./eventVideos"; export default { - data () { + name: "SearchMain", + components: { + VideoAnalyze, + EventVideos, + }, + filters: { + fixPath(str) { + if (!str || str == undefined) { + return ""; + } + + return str.replace("/opt/vasystem", ""); + }, + }, + data() { return { - 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")], + CLIP: "http://", + keyword: "", + IsFollow: "", + searchTime: [ + new Date(2021, 0, 1, 0, 0, 0), + new Date(2021, 11, 31, 23, 59, 59), + ], curTabPage: 1, curTablePage: 1, tabPageSize: 8, + pageSizes: [8, 12, 24], tabTotal: 0, tablePageSize: 8, tableTotal: 0, currentPage: 1, pickerOptions: { - shortcuts: [{ - text: '浠婂ぉ', - onClick (picker) { - const end = new Date(); - const start = new Date(); - start.setHours(0, 0, 0); - picker.$emit('pick', [start, end]); - } - }, { - text: '鏄ㄥぉ', - onClick (picker) { - const end = new Date(); - const start = new Date(); - start.setTime(start.getTime() - 3600 * 1000 * 24); - start.setHours(0, 0, 0); - end.setTime(end.getTime() - 3600 * 1000 * 24); - end.setHours(23, 59, 59); - picker.$emit('pick', [start, end]); - } - }, { - text: '杩戜笁澶�', - onClick (picker) { - const end = new Date(); - const start = new Date(); - start.setTime(start.getTime() - 3600 * 1000 * 24 * 3); - picker.$emit('pick', [start, end]); - } - }, { - text: '杩戜竴鍛�', - onClick (picker) { - const end = new Date(); - const start = new Date(); - start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); - //start.setHours(0,0,0); - picker.$emit('pick', [start, end]); - } - }] + shortcuts: [ + { + text: "浠婂ぉ", + onClick(picker) { + const end = new Date(); + const start = new Date(); + start.setHours(0, 0, 0); + picker.$emit("pick", [start, end]); + }, + }, + { + text: "鏄ㄥぉ", + onClick(picker) { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24); + start.setHours(0, 0, 0); + end.setTime(end.getTime() - 3600 * 1000 * 24); + end.setHours(23, 59, 59); + picker.$emit("pick", [start, end]); + }, + }, + { + text: "杩戜笁澶�", + onClick(picker) { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24 * 3); + picker.$emit("pick", [start, end]); + }, + }, + { + text: "杩戜竴鍛�", + onClick(picker) { + const end = new Date(); + const start = new Date(); + start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); + picker.$emit("pick", [start, end]); + }, + }, + ], }, checkedConfigs: [], optionalConfigs: [], highLevelConfigs: [], + showAdvance: true, fixedOneLineHeight: 40, - watch: '', - settle: '', - 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' } - ], - menuList: [ - { 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 } - ], - + settle: "", + IsOperate: "", + showType: "menu", + tableData: [], + tabData: [], videoDialogVisible: false, - videoDetails: {}, - guid: 1, - videoWrapArr: [], hiddenDanger: 1, labelDialogVisible: false, - labelOptions: [{ id: 'whh', name: '鏈懠鍞ゃ�佸懠鍞や笉鏍囧噯' }, { id: 'jsbz', name: '绮剧涓嶆尟銆佽繍琛屼腑鐫¤' }, { id: 'xxsj', name: '瀛︿範鍙告満鏈簲绛�' }, { id: 'myhb', name: '娌℃湁鍚庨儴鐬湜銆佷笉鎸夎瀹氬仛闃叉簻鎺柦' }], - labelCheckedList: [], - } + selectedVideo: {}, + eventDialogVisible: false, + curEvName: "", + eventVideoArr: [], + }; }, - 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); - // }); + watch: { + checkedConfigs: { + handler(n, o) { + this.filterSearchData(); + }, + deep: true, + }, + }, + mounted() { this.init(); }, methods: { - handleSizeChange(){ + checkEventVideo(label) { + if (label.LKGID != "") { + this.$message.warning("璇ヤ簨浠舵病鏈夌浉鍏宠仈鐨勮棰�"); + return; + } + this.eventDialogVisible = true; + this.curEventDetail = label; + let _this = this; + getEventVideo({ event: label.Event, videoId: label.VideoIds }).then( + (res) => { + _this.eventVideoArr = res.data; + _this.curEvName = label.Event; + } + ); }, - handleCurrentChange(){ + closeDial() { + this.videoDialogVisible = false; + this.selectedVideo = {}; + }, + handleTabSizeChange(size) { + this.tabPageSize = size; + this.filterSearchData(); + }, + hasError(data){ + if (!data.EventLst||data.EventLst.length==0) { + return false + } + const t = data.EventLst.some((x) => x.state==0) + return t && data.IsOperate=="1" }, - init () { + handleTableSizeChange(size) { + this.tablePageSize = size; + this.filterSearchData(); + }, + handleCurrentChange() { + this.filterSearchData(); + }, + //浜岀骇鏌ヨ + filterSearchData() { let _this = this; 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' + PageIndex: + this.showType == "list" ? this.curTablePage : this.curTabPage, + PageSize: + this.showType == "list" ? this.tablePageSize : this.tabPageSize, + IsDetail: this.showType == "list", + IsFollow: this.IsFollow , + IsOperate: this.IsOperate, }; + 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); + } + }); + Object.assign(query, ...filterQuerys); + + getlst(query).then((res) => { + if (_this.showType == "list") { + _this.tableTotal = res.total; + _this.tableData = res.data; + } 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; + }); + _this.tabData + } + }); + }, + //涓�绾ф煡璇� + init() { + if (this.checkedConfigs.length) { + this.filterSearchData() + return + } + let _this = this; + 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", + IsFollow: this.IsFollow, + IsOperate: this.IsOperate, + }; + 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); + } + }); + Object.assign(query, ...filterQuerys); this.optionalConfigs = []; this.highLevelConfigs = []; - getlstInit(query).then(res => { - debugger - if(_this.showType=='list'){ + getlstInit(query).then((res) => { + if (_this.showType == "list") { _this.tableTotal = res.total; - }else{ + _this.tableData = res.data; + } 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; + }); } - - res.filterlst.forEach(config => { - this.$set(config, 'isShow', true); - config.data = Object.keys(config.Node).map(key => { + res.filterlst.forEach((config) => { + this.$set(config, "isShow", true); + config.data = config.Node.map((item) => { let obj = {}; - obj.name = key; - obj.id = config.Node[key] - // item.id = item; - // item.name = k; - return obj + obj.name = item[0]; + obj.id = item[1]; + return obj; }); config.id = config.ID; config.title = config.NameZn; - config.data.forEach(item => { - this.$set(item, 'isChecked', false); + config.data.forEach((item) => { + this.$set(item, "isChecked", false); }); if (config.IsAdvanced) { this.highLevelConfigs.push(config); } else { - this.$set(config, 'isMultCheck', false); - this.$set(config, 'showMore', false); - this.optionalConfigs.push(config) + 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) { + this.optionalConfigs.forEach((config) => { + if ( + this.$refs[`options${config.id}`][0].scrollHeight > + this.fixedOneLineHeight + ) { config.showMore = true; - this.$set(config, 'isShowMore', false); + this.$set(config, "isShowMore", false); } else { config.showMore = false; } }); - console.log(this.optionalConfigs); }); - }) + }); }, - delLabelChecked () { - + toggleFollow(data) { + data.IsFollow == "0" ? (data.IsFollow = "1") : (data.IsFollow = "0"); + updateFollow({ + id: data.id, + IsFollow: data.IsFollow, + }).then((res) => { + this.$notify({ + type: "success", + message: data.IsFollow == "0" ? "宸叉坊鍔犲叧娉�!" : "宸插彇娑堝叧娉�!", + }); + }); }, - cancelLabelChecked () { - + checkVideoDetail(data) { + let _this = this; + _this.selectedVideo = data; + _this.videoDialogVisible = true; }, - submitLabelChecked () { - - }, - addLabel (videoDetails) { - debugger - this.labelDialogVisible = true; - - }, - setGuid (guid) { - this.videoWrapArr = Math.pow(guid, 2); - - }, - checkVideo (data) { - this.videoDialogVisible = true; - this.videoDetails = data; - - }, - checkFollow () { - - }, - checkType (type) { + checkType(type) { this.showType = type; - this.init(); + this.filterSearchData(); }, - clearCheckedConfigs () { + clearCheckedConfigs() { + this.checkedConfigs.forEach((config) => { + config.isShow = true; + config.data.forEach((d) => { + d.isChecked = false; + }); + }); this.checkedConfigs = []; + this.showAdvance = true; }, - removeCheckedConfig (config) { - let index = this.checkedConfigs.findIndex(one => one.id == config.id); + removeCheckedConfig(config) { + config.isShow = true; + if (config.IsAdvanced) { + this.showAdvance = true; + } + config.data.forEach((d) => { + d.isChecked = false; + }); + 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; } this.checkedConfigs.push(config); - - //config.isShow = false; - - // this.dataSearch(); - this.$nextTick(() => { - config.isShow = false; - }) - + config.isShow = false; + config.isMultCheck = false; + if (config.IsAdvanced) { + this.showAdvance = false; + } }, - cancleMultCheck (config) { + cancleMultCheck(config) { config.isMultCheck = false; - config.data.forEach(opt => { + 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'; + 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 => { + this.optionalConfigs.forEach((conf) => { if (conf.id == config.id) { return; } 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; + }; + }; + }, + }, +}; </script> <style lang="scss"> .search-for-video-analyze { - padding: 20px 30px; + //鍑烘í鍚戞粴鍔ㄦ潯 + padding: 20px 40px; + .flex-box { + display: flex; + } .filter-area { .input-area { display: flex; @@ -656,6 +919,8 @@ width: 100px; text-align: left; background: #f3f3f3; + color: rgb(133, 133, 133); + background: #ecf0fc; } .options-wrap { flex: 1; @@ -687,30 +952,32 @@ 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: #6486e7; - border-color: #6486e7; + color: #7695ec; + border-color: #7695ec; } &.checked { - color: #3d68e1; - border-color: #3d68e1; + color: #409eff; + border-color: #409eff; } } } @@ -718,10 +985,18 @@ border: none; } .config-submenu { + .el-menu--horizontal { + left: 20px !important; + & > ul { + flex-wrap: wrap; + } + } .el-submenu__title { height: 40px; line-height: 40px; border: none; + color: #2c3e50; + font-size: 12px; } .el-menu--popup { display: flex; @@ -729,6 +1004,13 @@ li.el-menu-item { display: inline-block; min-width: auto; + } + } + .highlevel-option { + font-size: 12px; + color: #2c3e50; + &:hover { + color: #6486e7; } } } @@ -741,8 +1023,7 @@ .data-list { margin-top: 20px; .header-bar { - padding-bottom: 5px; - border-bottom: 1px solid #ddd; + padding-bottom: 10px; .left { float: left; display: flex; @@ -760,19 +1041,34 @@ padding: 2px 5px; cursor: pointer; border: 1px solid #eee; + background-color: #ecf0fc; border-radius: 3px; + color: #777; &.menu { margin-right: 10px; } &.current { - border-color: #3d68e1; + border-color: #409eff; + background-color: #fff; } } } } } .content { - padding-top: 14px; + //padding-top: 14px; + background: #f5f5f5; + background: #fff; + margin: 0 -30px; + margin-bottom: -30px; + padding: 0; + .el-table__row { + cursor: pointer; + } + .el-row { + padding-top: 20px; + background: #f5f5f5; + } .el-col { margin-bottom: 10px; } @@ -780,20 +1076,32 @@ cursor: pointer; position: relative; text-align: left; - border: 1px solid #dedede; + background: #fff; border-radius: 5px; + height: 360px; + margin-bottom: 10px; + &:hover { + box-shadow: 3px 2px 5px 1px rgba(0, 0, 0, 0.3); + } .video-wrap { - background: aliceblue; border-radius: 3px; - video { - border-radius: 3px; + width: 100%; + padding-top: 56.25%; + height: 0; + position: relative; + img { + position: absolute; + top: 0; + width: 100%; + height: 100%; + object-fit: contain; } } .video-info { padding: 10px; .base-info { > div { - margin-bottom: 5px; + margin-bottom: 1px; } label { color: #999; @@ -805,6 +1113,12 @@ color: #3d68e1; .abnormal { color: red; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .event-tag { + margin-top: 10px; } } .tag-info { @@ -823,8 +1137,9 @@ font-size: 20px; right: 10px; bottom: 10px; + color: #ccc; .follow { - color: #3d68e1; + color: #409eff; } } } @@ -836,19 +1151,42 @@ } .operation { cursor: pointer; + .star { + color: #ccc; + } + .follow { + color: #409eff; + } } } + .pagination-center { + text-align: center; + margin: 0 -10px; + padding: 10px 0 20px; + background: #f5f5f5; + } + } + .el-dialog__wrapper { + top: -22px; } .dialog-video { .el-dialog { width: 1180px; } .el-dialog__body { - background: #f5f5f5; + background: #eaeaea; padding: 0; + height: inherit; + } + .el-dialog__header { + padding: 3px; + .el-dialog__headerbtn { + top: 6px; + } } .title-partment { font-size: 14px; + font-weight: 500; color: #333; line-height: 18px; margin-bottom: 8px; @@ -857,87 +1195,31 @@ background: #fff; padding: 10px; border-radius: 3px; + .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; - } - } - .video-area { - display: flex; - .info-list { - width: 160px; - margin-right: 10px; - .video-name { - color: #666; - margin-bottom: 10px; - &.current { - color: #3d68e1; - } - i { - padding-right: 4px; - } - } - } - .players { - width: 960px; - height: 540px; - display: flex; - .video-item { - flex: 1; - background: black; - border: 1px solid #fff; - } - } - } - } - .content-bottom { - display: flex; - .bot-left { - flex: 1; - } - .bot-right { - width: 210px; - margin-left: 10px; - label { - color: #999; - padding-right: 8px; - } - } - } + font-size: 15px; } } - .label-dialog { + .dialog-event { + z-index: 2096 !important; .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; - } - } + width: 1000px; + height: 800px; + background: #efefef; + .el-dialog__body { + padding: 0; } } } } } +.window-view { + width: 100%; + height: auto; + overflow: auto; + z-index: 2000; +} </style> \ No newline at end of file -- Gitblit v1.8.0