From ccee429d379e0108b7445f72ade8d97c110a6fb3 Mon Sep 17 00:00:00 2001
From: ZZJ <zzjdsg2300@163.com>
Date: 星期二, 09 十一月 2021 18:01:59 +0800
Subject: [PATCH] 问题修复
---
src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue | 1191 +++++++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 911 insertions(+), 280 deletions(-)
diff --git a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
index 033f1e5..ead0f1a 100644
--- a/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
+++ b/src/pages/shuohuangMonitorAnalyze/components/searchForVideoAnalyze.vue
@@ -2,13 +2,8 @@
<div class="search-for-video-analyze">
<div class="filter-area">
<div class="input-area">
- <el-input
- class="search-input"
- size="small"
- v-model="keyword"
- placeholder="璇疯緭鍏ュ徃鏈恒�佽溅娆°�佹満杞﹀彿绛夊叧閿瘝杩涜鎼滅储"
- ></el-input>
<el-date-picker
+ style="width: 350px"
v-model="searchTime"
type="datetimerange"
size="small"
@@ -16,71 +11,124 @@
range-separator="鑷�"
start-placeholder="寮�濮嬫棩鏈�"
end-placeholder="缁撴潫鏃ユ湡"
- align="right"
></el-date-picker>
- <el-button size="small" type="primary" @click="init">鎼滅储</el-button>
+ <el-input
+ class="search-input"
+ size="small"
+ v-model="keyword"
+ placeholder="璇疯緭鍏ュ徃鏈恒�佽溅娆°�佹満杞﹀彿绛夊叧閿瘝"
+ style="width: 315px"
+ >
+ <el-button
+ slot="append"
+ icon="el-icon-search"
+ size="small"
+ @click="init"
+ ></el-button>
+ </el-input>
</div>
<div class="checked-config">
- <span style="margin-top:3px;">宸查�夋潯浠�:</span>
+ <span style="margin-top: 3px; color: #425277">宸茬瓫閫夋潯浠�:</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">
+ <div
+ class="config"
+ v-for="(config, index) in optionalConfigs"
+ :key="index"
+ >
<template v-if="config.isShow">
- <div class="title">{{config.title}}</div>
+ <div class="title">
+ <span class="icon iconfont">{{ getIcon(config.title) }}</span>
+ <span>{{ config.title }}</span>
+ </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 v-show="config.isMultCheck">
+ <div
+ class="option"
+ v-for="(option, index) in config.data"
+ :key="index"
+ >
+ <div v-show="config.isMultCheck" class="check-name">
<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
+ class="option-name"
+ 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
+ class="sure"
+ size="mini"
+ type="primary"
+ @click="checkOption(config)"
+ >纭畾</el-button
+ >
+ <el-button
+ size="mini"
+ @click="cancleMultCheck(config)"
+ class="cancel"
+ >鍙栨秷</el-button
+ >
</div>
</div>
<div class="right-btns">
- <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>
+ <div
+ class="more"
+ v-if="config.showMore"
+ @click="showMore(config)"
+ >
+ <span>鏇村</span>
+ <i
+ :class="
+ config.isShowMore
+ ? 'el-icon-caret-top'
+ : 'el-icon-caret-bottom'
+ "
+ ></i>
</div>
<div
- :class="[{'checked':config.isMultCheck},'multCheck']"
+ :class="[{ checked: config.isMultCheck }, 'multCheck']"
@click="toggleMultCheck(config)"
>
<i class="el-icon-plus"></i>
@@ -90,23 +138,32 @@
</template>
</div>
<div class="config" v-if="showAdvance">
- <div class="title">楂樼骇閫夐」</div>
+ <div class="title">
+ <span class="icon iconfont">{{ "\ue793" }}</span>
+ <span>楂樼骇閫夐」</span>
+ </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,76 +174,138 @@
<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"
+ style="width: 120px"
+ >
<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"
+ style="width: 120px"
+ >
<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')">
- <i class="el-icon-menu"></i>
+ <div
+ class="type menu"
+ :class="{ current: showType == 'menu' }"
+ @click="checkType('menu')"
+ >
+ <span class="iconfont icon"> </span>
</div>
- <div class="type" :class="{'current':showType=='list'}" @click="checkType('list')">
- <i class="el-icon-s-operation"></i>
+ <div
+ class="type list"
+ :class="{ current: showType == 'list' }"
+ @click="checkType('list')"
+ >
+ <span class="iconfont icon"></span>
+ <!-- <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 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="CLIP+data.VideoCover" alt />
+ <img :src="data.VideoCover | fixPath" alt />
</div>
<div class="video-info">
<div class="base-info">
<div class="flex-box">
<label>杞﹀彿:</label>
- <span>{{data.CarNumber}}</span>
+ <span>{{ data.CarNumber }}</span>
</div>
<div class="flex-box">
<label>杞︽:</label>
- <span>{{data.TrainNumber}}</span>
+ <span>{{ data.TrainNumber }}</span>
</div>
<div class="flex-box">
<label>鏃堕棿:</label>
- <span>{{data.VideoDate}}</span>
+ <span>{{ data.StartTime }}</span>
</div>
<div class="flex-box">
- <label>鍙告満|鍓徃鏈�:</label>
- <span>{{data.Driver1}}|{{data.Driver2}}</span>
+ <label>鍙告満 | 鍓徃鏈�:</label>
+ <span>{{ data.Driver1 }} | {{ data.Driver2 }}</span>
</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
+ class="abnormal-label"
+ v-for="(label, index) in data.LableLst"
+ :key="index"
+ >
+ {{ label.Desc }}
+ </span>
</div>
- <div v-else>
+ <div v-else-if="hasError(data)" class="has-error">
+ <span>鏈夊紓甯�</span>
+ </div>
+ <div v-else class="no-error">
<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" @click="toggleFollow(data)">
- <i :class="[data.IsFollow?'follow':'','el-icon-star-off']"></i>
+ <i
+ class="iconfont"
+ :class="[data.IsFollow == '0' ? 'follow' : '', 'iconguanzhu']"
+ ></i>
</div>
</div>
</el-col>
</el-row>
<el-pagination
+ class="pagination-center"
background
@size-change="handleTabSizeChange"
@current-change="handleCurrentChange"
@@ -197,25 +316,59 @@
:total="tabTotal"
></el-pagination>
</div>
- <div class="content" v-show="showType=='list'">
- <el-table :data="tableData" fit ref="elTable">
+ <div class="content" v-show="showType == 'list'">
+ <el-table
+ :data="tableData"
+ stripe
+ fit
+ ref="elTable"
+ @row-click="checkVideoDetail"
+ :header-cell-style="{
+ background: '#2D52D7',
+ color: '#fff',
+ height: '50px',
+ padding: 0,
+ }"
+ >
<el-table-column label="鍚嶇О" prop="VideoName" sortable width="500">
- <template slot-scope="scope">
- <div style="cursor:pointer;">{{scope.row.VideoName}}</div>
+ <template slot-scope="scope" style="cursor: pointer">
+ <div>{{ scope.row.VideoName }}</div>
</template>
</el-table-column>
- <el-table-column label="澶у皬" prop="VideoSize" sortable></el-table-column>
- <el-table-column label="淇敼鏃ユ湡" prop="UpdatedAt" sortable></el-table-column>
- <el-table-column label="鍒涘缓鏃ユ湡" prop="CreatedAt" 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 slot-scope="scope">
<div class="operation">
- <i class="el-icon-star-off" @click="toggleFollow(scope.row)"></i>
+ <div class="star">
+ <i
+ class="iconfont"
+ :class="[
+ scope.row.IsFollow == '0' ? 'follow' : '',
+ 'iconguanzhu',
+ ]"
+ @click.stop="toggleFollow(scope.row)"
+ ></i>
+ </div>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
+ class="pagination-center"
@size-change="handleTableSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="curTablePage"
@@ -225,132 +378,197 @@
: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">
- <i class="el-icon-connection"></i>
+ <img src="/images/shuohuang/璺緞 414.png" alt="" />
<span>鎾斁瑙嗛</span>
</div>
</div>
+ <video-analyze
+ v-if="videoDialogVisible"
+ :videoDetails="selectedVideo"
+ />
+ </el-dialog>
+ <!-- </div> -->
- <video-analyze :videoDetails="selectedVideo" />
+ <el-dialog
+ class="dialog-event"
+ :visible="eventDialogVisible"
+ @close="eventDialogVisible = false"
+ >
+ <div class="title" slot="title">
+ <img src="/images/shuohuang/璺緞 414.png" alt="" />
+ <span>{{ curEvName }}瑙嗛</span>
+ </div>
+ <event-videos :eventVideoArr="eventVideoArr"></event-videos>
</el-dialog>
</div>
</div>
</template>
<script>
-import { getlstInit, updateVideoAnalyze, getlst, getRelatedVideoInfo, getLabelMap, delLabel, editLabel } from '@/api/shuohuang';
-import VideoAnalyze from "./videoAnalyze"
-
+import {
+ getlstInit,
+ updateFollow,
+ getlst,
+ getLabelMap,
+ getEventVideo,
+} from "@/api/shuohuang";
+import VideoAnalyze from "./videoAnalyze";
+import EventVideos from "./eventVideos";
export default {
name: "SearchMain",
components: {
- VideoAnalyze
+ VideoAnalyze,
+ EventVideos,
+ },
+ filters: {
+ fixPath(str) {
+ if (!str || str == undefined) {
+ return "";
+ }
+
+ return str.replace("/opt/vasystem", "");
+ },
},
data() {
return {
- CLIP: 'http://192.168.20.113/',
- keyword: '',
- 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")],
+ 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: [2, 8, 12, 24],
+ 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' }
- ],
- 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 }
- ],
-
+ settle: "",
+ IsOperate: "",
+ showType: "menu",
+ tableData: [],
+ tabData: [],
videoDialogVisible: false,
hiddenDanger: 1,
labelDialogVisible: false,
- selectedVideo: {}
- }
+ selectedVideo: {},
+ eventDialogVisible: false,
+ curEvName: "",
+ eventVideoArr: [],
+ };
},
watch: {
checkedConfigs: {
handler(n, o) {
- this.filterSearchData()
+ this.filterSearchData();
},
- deep: true
- }
+ deep: true,
+ },
},
mounted() {
this.init();
},
methods: {
+ 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;
+ }
+ );
+ },
+ closeDial() {
+ this.videoDialogVisible = false;
+ this.selectedVideo = {};
+ },
handleTabSizeChange(size) {
- debugger
this.tabPageSize = size;
- this.filterSearchData()
+ this.filterSearchData();
},
handleTableSizeChange(size) {
this.tablePageSize = size;
- this.filterSearchData()
+ this.filterSearchData();
},
handleCurrentChange() {
- this.filterSearchData()
+ this.filterSearchData();
},
//浜岀骇鏌ヨ
filterSearchData() {
@@ -359,124 +577,175 @@
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);
+ 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(',');
+ 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') {
+ 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;
+ });
}
- })
+ });
},
//涓�绾ф煡璇�
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'
+ 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 => {
- if (_this.showType == 'list') {
+ getlstInit(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;
+ });
}
-
- 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]
- 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);
});
-
- })
- },
- toggleFollow(data) {
- data.IsFollow = !data.IsFollow;
- this.updataVideo(data);
- if (data.IsFollow) {
- this.$notify({
- type: 'success',
- message: '宸叉坊鍔犲叧娉�!'
- });
- }
- },
- updataVideo(data) {
- let _this = this;
- updateVideoAnalyze(data).then(res => {
- //浜岀骇鏌ヨ
});
},
-
+ 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";
+ },
+ 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" ? "宸叉坊鍔犲叧娉�!" : "宸插彇娑堝叧娉�!",
+ });
+ });
+ },
checkVideoDetail(data) {
let _this = this;
_this.selectedVideo = data;
_this.videoDialogVisible = true;
},
- checkFollow() {
-
- },
checkType(type) {
this.showType = type;
- this.filterSearchData()
+ this.filterSearchData();
},
clearCheckedConfigs() {
- this.checkedConfigs.forEach(config => {
+ this.checkedConfigs.forEach((config) => {
config.isShow = true;
- config.data.forEach(d => {
- d.isChecked = false
+ config.data.forEach((d) => {
+ d.isChecked = false;
});
});
this.checkedConfigs = [];
@@ -487,10 +756,10 @@
if (config.IsAdvanced) {
this.showAdvance = true;
}
- config.data.forEach(d => {
+ config.data.forEach((d) => {
d.isChecked = false;
});
- let index = this.checkedConfigs.findIndex(one => one.id == config.id);
+ let index = this.checkedConfigs.findIndex((one) => one.id == config.id);
this.checkedConfigs.splice(index, 1);
},
checkOption(config, option) {
@@ -498,62 +767,192 @@
option.isChecked = true;
}
this.checkedConfigs.push(config);
-
config.isShow = false;
config.isMultCheck = false;
if (config.IsAdvanced) {
this.showAdvance = false;
}
- // this.$nextTick(() => {
- // this.$set(config, 'isShow', false)
- // })
-
},
cancleMultCheck(config) {
config.isMultCheck = false;
- config.data.forEach(opt => {
+ config.data.forEach((opt) => {
opt.isChecked = false;
});
},
- handleSelect(key, keyPath) {
+ getIcon(name) {
+ switch (name) {
+ case "鏈鸿溅鍙�":
+ return "\ue796";
+ case "杞︽":
+ return "\ue795";
+ case "鍖烘/涓棿绔�":
+ return "\ue797";
+ case "閲嶇偣鍦版":
+ return "\ue78f";
+ case "鍗曚綅":
+ return "\ue794";
+ case "楂樼骇閫夐」":
+ return "\ue793";
+ default:
+ break;
+ }
},
+ 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) {
config.isMultCheck = !config.isMultCheck;
- this.optionalConfigs.forEach(conf => {
+ this.optionalConfigs.forEach((conf) => {
if (conf.id == config.id) {
return;
}
conf.isMultCheck = false;
- })
+ });
},
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;
+ background-color: #f4f6f9;
+ margin: 0 5px;
+ margin-bottom: 10px;
+
+ * {
+ box-sizing: content-box;
+ color: #425277;
+ }
+ .el-input__inner {
+ border: 1px solid #d7dce8;
+ // border-color: #CCD9F0;
+ }
+ .flex-box {
+ display: flex;
+ height: 18px;
+ line-height: 18px;
+ }
.filter-area {
+ background: #fff;
+ padding: 22px 33px;
+ box-shadow: 0px 3px 6px#D0D7F1;
+
+ border-radius: 10px;
.input-area {
display: flex;
align-items: center;
height: 50px;
+
+ .el-range-editor--small .el-range-input {
+ font-size: 13px;
+ color: #7084b1;
+ }
+ .el-input__inner::placeholder {
+ color: #c7d0e5;
+ }
+ .el-range-editor--small .el-range-separator {
+ line-height: 25px;
+ font-size: 13px;
+ color: #7084b1;
+ }
.search-input {
width: 408px;
}
.el-date-editor {
- margin: 0 20px;
+ margin-right: 20px;
+ }
+ .el-input-group__append {
+ background-color: #2d52d7;
+ border: 1px solid #2d52d7;
+ padding: 0 16px;
+
+ white-space: nowrap;
+ font-size: 18px;
+ .el-icon-search {
+ color: #fff;
+ }
}
}
.checked-config {
@@ -562,18 +961,18 @@
margin-bottom: 10px;
position: relative;
.config-item {
- padding-left: 10px;
- margin: 0 0 5px 5px;
- background: #f3f3f3;
- border: 1px solid #ddd;
+ padding-left: 8px;
+ margin: 0 5px;
+ background: #cfd5e3;
.remove {
cursor: pointer;
padding: 5px 5px;
margin-left: 5px;
+ background: #e1e4ed;
}
&:hover {
background: #fff;
- border-color: #3d68e1;
+ outline: 1px solid #2d52d7;
.remove {
background: #3d68e1;
color: #fff;
@@ -596,13 +995,19 @@
.config {
display: flex;
flex-wrap: no-wrap;
- cursor: pointer;
- border-bottom: 1px solid #ddd;
+ border-bottom: 1px solid #d7dce8;
.title {
padding: 10px 20px;
- width: 100px;
+ width: 105px;
text-align: left;
- background: #f3f3f3;
+ font-weight: bold;
+ span {
+ font-size: 14px;
+ color: #2d52d7;
+ }
+ .icon {
+ margin-right: 10px;
+ }
}
.options-wrap {
flex: 1;
@@ -612,11 +1017,25 @@
height: 40px;
overflow: hidden;
.option {
- padding: 10px 20px;
+ padding: 10px 0px;
height: 20px;
line-height: 20px;
- &:hover {
- color: #6486e7;
+ min-width: 100px;
+ .check-name {
+ text-align: left;
+ padding-left: 10px;
+ }
+ .option-name {
+ padding: 0 10px;
+ text-align: left;
+ width: fit-content;
+ }
+ &:hover > .option-name {
+ // outline: 1px solid #a8b7ee;
+ background: #e2e7f9;
+ span {
+ color: #2d52d7;
+ }
}
.el-checkbox {
padding-right: 6px;
@@ -624,7 +1043,23 @@
}
}
.btns {
- margin: 20px 0;
+ margin: 12px 0;
+ .el-button--mini {
+ padding: 6px 17px;
+ font-size: 12px;
+ border-radius: 4px;
+ }
+ .sure span,
+ .cancel span {
+ color: #fff;
+ }
+ .cancel {
+ background: rgba(175, 185, 208, 1);
+ border-color: rgba(175, 185, 208, 1);
+ }
+ .el-button + .el-button {
+ margin-left: 20px;
+ }
}
}
.right-btns {
@@ -633,31 +1068,33 @@
user-select: none;
justify-content: flex-end;
.more {
- margin-top: 6px;
- padding: 0px 12px;
- border: 1px solid #ccc;
+ margin-top: 7px;
+ padding: 0px 6px;
+ cursor: pointer;
margin-right: 10px;
- width: 48px;
- height: 26px;
- line-height: 26px;
+ width: 46px;
+ height: 25px;
+ line-height: 25px;
+ border-radius: 2px;
+ background: #edeff2;
&:hover {
color: #6486e7;
}
}
.multCheck {
- margin-top: 6px;
- width: 48px;
- height: 26px;
- line-height: 26px;
+ margin-top: 7px;
+ width: 44px;
+ cursor: pointer;
+ height: 23px;
+ line-height: 23px;
padding: 0px 12px;
- border: 1px solid #ccc;
- &:hover {
- color: #7695ec;
- border-color: #7695ec;
+ border: 1px solid #d7dce7;
+ border-radius: 2px;
+ .el-icon-plus {
+ color: #ee4e6e;
}
- &.checked {
- color: #409eff;
- border-color: #409eff;
+ span {
+ color: #ee4e6e;
}
}
}
@@ -665,10 +1102,21 @@
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;
+ padding: 0 10px;
+ min-width: 100px;
+ text-align: left;
}
.el-menu--popup {
display: flex;
@@ -676,6 +1124,13 @@
li.el-menu-item {
display: inline-block;
min-width: auto;
+ }
+ }
+ .highlevel-option {
+ font-size: 12px;
+ color: #2c3e50;
+ &:hover {
+ color: #6486e7;
}
}
}
@@ -686,10 +1141,14 @@
}
}
.data-list {
- margin-top: 20px;
+ margin-top: 24px;
+ background: #ffffff;
+ box-shadow: 0px 3px 6px #d0d7f1;
+ border-radius: 10px;
+ padding: 24px 33px;
.header-bar {
- padding-bottom: 5px;
- border-bottom: 1px solid #ddd;
+ margin-bottom: 24px;
+
.left {
float: left;
display: flex;
@@ -702,60 +1161,130 @@
display: flex;
.show-type {
display: flex;
- .type {
+ .list span {
font-size: 20px;
- padding: 2px 5px;
+ }
+ .type {
+ font-size: 18px;
+ padding: 2px 4px 0px 4px;
+ border-radius: 4px;
cursor: pointer;
- border: 1px solid #eee;
- background-color: #ecf0fc;
- border-radius: 3px;
- color: #777;
&.menu {
margin-right: 10px;
+ span {
+ font-size: 15px;
+ }
}
&.current {
- border-color: #409eff;
- background-color: #fff;
+ span {
+ color: #fff;
+ }
+ background-color: #2d52d7;
}
}
}
}
}
.content {
- padding-top: 14px;
+ padding: 0;
+ .el-table__row {
+ cursor: pointer;
+ }
+ .el-table {
+ border: none;
+ margin-bottom: 20px;
+ }
.el-col {
margin-bottom: 10px;
}
.card {
- cursor: pointer;
position: relative;
text-align: left;
- border: 1px solid #dedede;
- border-radius: 5px;
+ background: #fff;
+ border-radius: 0 0 5px 5px;
+ height: 368px;
+ margin-bottom: 10px;
+ border: 1px solid#CCD9F0;
+ &:hover {
+ box-shadow: 3px 3px 4px #d3def2;
+ }
.video-wrap {
- background: aliceblue;
+ cursor: pointer;
border-radius: 3px;
+ width: 100%;
+ padding-top: 56.25%;
+ height: 0;
+ position: relative;
img {
+ position: absolute;
+ top: 0;
width: 100%;
- border-radius: 3px;
+ height: 100%;
+ object-fit: unset;
}
}
.video-info {
- padding: 10px;
+ padding: 14px;
.base-info {
> div {
- margin-bottom: 5px;
+ margin-bottom: 1px;
}
label {
- color: #999;
+ color: #808dab;
padding-right: 8px;
+ line-height: 16px;
+ }
+ span {
+ font-weight: bold;
+ color: #425277;
+ line-height: 16px;
}
}
.mark-info {
margin: 10px 0;
color: #3d68e1;
.abnormal {
- color: red;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ .abnormal-label {
+ display: inline-block;
+ border: 1px solid;
+ border: 1px solid #bf3a3a;
+ border-radius: 2px;
+ color: #bf3a3a;
+ padding: 0 3px;
+ margin-right: 3px;
+ }
+ }
+ .event-tag {
+ margin-top: 8px;
+ .el-tag.el-tag--info {
+ background-color: #96a0b7;
+ border-color: #96a0b7;
+ color: #fff;
+ cursor: pointer;
+ height: 19px;
+ padding: 0 5px;
+ }
+ }
+ .has-error {
+ width: fit-content;
+ background: #bf3a3a;
+ padding: 1px 5px;
+ border-radius: 2px;
+ span {
+ color: #fff;
+ }
+ }
+ .no-error {
+ width: fit-content;
+ background: #2d52d7;
+ padding: 1px 5px;
+ border-radius: 2px;
+ span {
+ color: #fff;
+ }
}
}
.tag-info {
@@ -774,30 +1303,64 @@
font-size: 20px;
right: 10px;
bottom: 10px;
- color: #ccc;
- .follow {
- color: #409eff;
- }
}
}
+ .el-table--striped
+ .el-table__body
+ tr.el-table__row--striped
+ td.el-table__cell {
+ background: #f4f6f9;
+ }
.el-table {
- border: 1px solid #dedede;
th {
background: #f5f5f5;
color: #333;
}
- .operation {
- cursor: pointer;
+ th.el-table__cell > .cell {
+ color: #fff;
+ }
+ .el-table__row > td {
+ border: none;
+ }
+ th.is-leaf {
+ border: none;
}
}
+ .pagination-center {
+ text-align: center;
+ margin: 0 -10px;
+ padding: 10px 0 20px;
+ }
+ }
+ .star {
+ font-size: 20px;
+ i {
+ color: #c7d0e5;
+ }
+ .follow {
+ color: #f90741;
+ }
+ }
+ .el-dialog__wrapper {
+ top: -22px;
}
.dialog-video {
.el-dialog {
- width: 1180px;
+ width: 1340px;
+ top: 70px;
+ transform: none;
}
.el-dialog__body {
- background: #f5f5f5;
+ background: #eaeaea;
padding: 0;
+ height: inherit;
+ }
+ .el-dialog__header {
+ padding: 0px;
+ .el-dialog__headerbtn {
+ top: 10px;
+ font-size: 20px;
+ }
}
.title-partment {
font-size: 14px;
@@ -815,9 +1378,77 @@
}
}
.title {
- font-size: 18px;
+ font-size: 16px;
+ height: 40px;
+ line-height: 40px;
+ background: #2d52d7;
+
+ span {
+ line-height: 40px;
+ color: #fcfcfc;
+ }
+
+ img {
+ width: 20px;
+ vertical-align: middle;
+ margin-right: 10px;
+ }
+ }
+ .el-dialog__close::before {
+ color: #fff;
+ }
+ }
+ .dialog-event {
+ z-index: 2096 !important;
+
+ .el-dialog {
+ width: 1000px;
+ height: 800px;
+ background: #efefef;
+ .el-dialog__body {
+ padding: 0;
+ }
+ .el-dialog__header {
+ padding: 0px;
+ .el-dialog__headerbtn {
+ top: 6px;
+ }
+ }
+ .title {
+ font-size: 16px;
+ height: 40px;
+ line-height: 40px;
+ background: #2d52d7;
+
+ span {
+ line-height: 40px;
+ color: #fcfcfc;
+ }
+
+ img {
+ width: 20px;
+ vertical-align: middle;
+ margin-right: 10px;
+ }
+ }
+ .el-dialog__close::before {
+ color: #fff;
+ &:hover {
+ color: #fff;
+ }
+ }
+
+ .more-videos .top .title {
+ background-color: #fff;
+ }
}
}
}
}
+.window-view {
+ width: 100%;
+ height: auto;
+ overflow: auto;
+ z-index: 2000;
+}
</style>
\ No newline at end of file
--
Gitblit v1.8.0