| | |
| | | <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" |
| | |
| | | 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" |
| | |
| | | <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 }} |
| | | <i>、</i> |
| | |
| | | :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" |
| | |
| | | v-for="(option, index) in config.data" |
| | | :key="index" |
| | | > |
| | | <div v-show="config.isMultCheck"> |
| | | <div v-show="config.isMultCheck" class="check-name"> |
| | | <el-checkbox v-model="option.isChecked"></el-checkbox> |
| | | <span>{{ option.name }}</span> |
| | | </div> |
| | | <div |
| | | class="option-name" |
| | | v-show="!config.isMultCheck" |
| | | @click="checkOption(config, option)" |
| | | > |
| | |
| | | </div> |
| | | </div> |
| | | <div class="btns text-center" v-show="config.isMultCheck"> |
| | | <el-button size="mini" @click="cancleMultCheck(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> |
| | |
| | | v-if="config.showMore" |
| | | @click="showMore(config)" |
| | | > |
| | | <span>更多</span> |
| | | <span>更多</span> |
| | | <i |
| | | :class=" |
| | | config.isShowMore |
| | | ? 'el-icon-arrow-up' |
| | | : 'el-icon-arrow-down' |
| | | ? 'el-icon-caret-top' |
| | | : 'el-icon-caret-bottom' |
| | | " |
| | | ></i> |
| | | </div> |
| | |
| | | </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" |
| | |
| | | v-model="IsFollow" |
| | | size="mini" |
| | | @change="filterSearchData" |
| | | style="width: 120px" |
| | | > |
| | | <el-option value label="全部"></el-option> |
| | | <el-option :value="false" label="未关注"></el-option> |
| | | <el-option :value="true" label="已关注"></el-option> |
| | | <el-option :value="'1'" label="未关注"></el-option> |
| | | <el-option :value="'0'" label="已关注"></el-option> |
| | | </el-select> |
| | | </div> |
| | | <div> |
| | |
| | | v-model="IsOperate" |
| | | size="mini" |
| | | @change="filterSearchData" |
| | | style="width: 120px" |
| | | > |
| | | <el-option value label="全部"></el-option> |
| | | <el-option value="0" label="未处理"></el-option> |
| | |
| | | :class="{ current: showType == 'menu' }" |
| | | @click="checkType('menu')" |
| | | > |
| | | <i class="el-icon-menu"></i> |
| | | <span class="iconfont icon"> </span> |
| | | </div> |
| | | <div |
| | | class="type" |
| | | class="type list" |
| | | :class="{ current: showType == 'list' }" |
| | | @click="checkType('list')" |
| | | > |
| | | <i class="el-icon-s-operation"></i> |
| | | <span class="iconfont icon"></span> |
| | | <!-- <i class="el-icon-s-operation"></i> --> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | > |
| | | <div class="card"> |
| | | <div class="video-wrap" @click="checkVideoDetail(data)"> |
| | | <img :src="data.VideoCover" alt /> |
| | | <img :src="data.VideoCover | fixPath" alt /> |
| | | </div> |
| | | <div class="video-info"> |
| | | <div class="base-info"> |
| | |
| | | </div> |
| | | <div class="flex-box"> |
| | | <label>时间:</label> |
| | | <span>{{ data.VideoDate }}</span> |
| | | <span>{{ data.StartTime }}</span> |
| | | </div> |
| | | <div class="flex-box"> |
| | | <label>司机 | 副司机:</label> |
| | |
| | | class="abnormal-label" |
| | | v-for="(label, index) in data.LableLst" |
| | | :key="index" |
| | | >{{ |
| | | label.Desc + |
| | | (index == data.LableLst.length - 1 ? "" : ",") |
| | | }}</span |
| | | > |
| | | {{ 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 |
| | |
| | | <div class="star" @click="toggleFollow(data)"> |
| | | <i |
| | | class="iconfont" |
| | | :class="[data.IsFollow ? 'follow' : '', 'iconguanzhu']" |
| | | :class="[data.IsFollow == '0' ? 'follow' : '', 'iconguanzhu']" |
| | | ></i> |
| | | </div> |
| | | </div> |
| | |
| | | <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" style="cursor: pointer"> |
| | |
| | | </template> |
| | | </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="VideoSize" |
| | | label="视频时间" |
| | | prop="StartTime" |
| | | 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="VideoCreateDate" sortable></el-table-column> --> |
| | | |
| | | <el-table-column label="操作"> |
| | | <template slot-scope="scope"> |
| | |
| | | <div class="star"> |
| | | <i |
| | | class="iconfont" |
| | | :class="[scope.row.IsFollow ? 'follow' : '', 'iconguanzhu']" |
| | | :class="[ |
| | | scope.row.IsFollow == '0' ? 'follow' : '', |
| | | 'iconguanzhu', |
| | | ]" |
| | | @click.stop="toggleFollow(scope.row)" |
| | | ></i> |
| | | </div> |
| | | <!-- <i class="el-icon-star-off" @click="toggleFollow(scope.row)"></i> --> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | |
| | | 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"> |
| | | <img src="/images/shuohuang/路径 414.png" alt="" /> |
| | | <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 |
| | |
| | | @close="eventDialogVisible = false" |
| | | > |
| | | <div class="title" slot="title"> |
| | | <i class="el-icon-connection"></i> |
| | | <img src="/images/shuohuang/路径 414.png" alt="" /> |
| | | <span>{{ curEvName }}视频</span> |
| | | </div> |
| | | <event-videos :eventVideoArr="eventVideoArr"></event-videos> |
| | |
| | | <script> |
| | | import { |
| | | getlstInit, |
| | | updateVideoAnalyze, |
| | | updateFollow, |
| | | getlst, |
| | | getRelatedVideoInfo, |
| | | getLabelMap, |
| | | delLabel, |
| | | editLabel, |
| | | getEventVideo, |
| | | } from "@/api/shuohuang"; |
| | | import VideoAnalyze from "./videoAnalyze"; |
| | |
| | | VideoAnalyze, |
| | | EventVideos, |
| | | }, |
| | | filters: { |
| | | fixPath(str) { |
| | | if (!str || str == undefined) { |
| | | return ""; |
| | | } |
| | | |
| | | return str.replace("/opt/vasystem", ""); |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | CLIP: "http://", |
| | | 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, |
| | |
| | | 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]); |
| | | }, |
| | | }, |
| | |
| | | }, |
| | | methods: { |
| | | checkEventVideo(label) { |
| | | if (label.LKGID != "") { |
| | | this.$message.warning("该事件没有相关联的视频"); |
| | | return; |
| | | } |
| | | |
| | | this.eventDialogVisible = true; |
| | | this.curEventDetail = label; |
| | | let _this = this; |
| | | getEventVideo({ Event: label.Event, LkgID: label.ParentID }).then( |
| | | getEventVideo({ event: label.Event, videoId: label.VideoIds }).then( |
| | | (res) => { |
| | | _this.eventVideoArr = res.data; |
| | | _this.curEvName = label.Event; |
| | | } |
| | | ); |
| | | }, |
| | | closeDial(){ |
| | | this.videoDialogVisible = false |
| | | this.selectedVideo={} |
| | | closeDial() { |
| | | this.videoDialogVisible = false; |
| | | this.selectedVideo = {}; |
| | | }, |
| | | handleTabSizeChange(size) { |
| | | this.tabPageSize = size; |
| | |
| | | //二级查询 |
| | | 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], |
| | |
| | | PageSize: |
| | | this.showType == "list" ? this.tablePageSize : this.tabPageSize, |
| | | IsDetail: this.showType == "list", |
| | | IsFollow: isFollow, |
| | | IsFollow: this.IsFollow, |
| | | IsOperate: this.IsOperate, |
| | | }; |
| | | let filterQuerys = []; |
| | |
| | | _this.tabData = _this.tabData.map(function (item) { |
| | | const set = new Set(); |
| | | item.LableLst.forEach(function (label) { |
| | | label.Desc.split(",").forEach(function (d) { |
| | | label.Desc.split(",").forEach(function (d) { |
| | | set.add(d); |
| | | }); |
| | | }); |
| | |
| | | }, |
| | | //一级查询 |
| | | init() { |
| | | if (this.checkedConfigs.length) { |
| | | this.filterSearchData(); |
| | | return; |
| | | } |
| | | let _this = this; |
| | | let query = { |
| | | KeyWord: this.keyword, |
| | |
| | | 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) => { |
| | |
| | | _this.tabData = _this.tabData.map(function (item) { |
| | | const set = new Set(); |
| | | item.LableLst.forEach(function (label) { |
| | | label.Desc.split(",").forEach(function (d) { |
| | | label.Desc.split(",").forEach(function (d) { |
| | | set.add(d); |
| | | }); |
| | | }); |
| | |
| | | return item; |
| | | }); |
| | | } |
| | | |
| | | res.filterlst.forEach((config) => { |
| | | this.$set(config, "isShow", true); |
| | | // config.data = Object.keys(config.Node).map(key => { |
| | | // let obj = {}; |
| | | // obj.name = key; |
| | | // obj.id = config.Node[key] |
| | | // return obj |
| | | // }); |
| | | config.data = config.Node.map((item) => { |
| | | let obj = {}; |
| | | obj.name = item[0]; |
| | |
| | | config.showMore = false; |
| | | } |
| | | }); |
| | | console.log(this.optionalConfigs); |
| | | }); |
| | | }); |
| | | }, |
| | | 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 = !data.IsFollow; |
| | | this.updataVideo(data); |
| | | if (data.IsFollow) { |
| | | data.IsFollow == "0" ? (data.IsFollow = "1") : (data.IsFollow = "0"); |
| | | updateFollow({ |
| | | id: data.id, |
| | | IsFollow: data.IsFollow, |
| | | }).then((res) => { |
| | | this.$notify({ |
| | | type: "success", |
| | | message: "已添加关注!", |
| | | message: data.IsFollow == "0" ? "已添加关注!" : "已取消关注!", |
| | | }); |
| | | } |
| | | }, |
| | | updataVideo(data) { |
| | | let _this = this; |
| | | updateVideoAnalyze(data).then((res) => { |
| | | //二级查询 |
| | | }); |
| | | }, |
| | | |
| | | checkVideoDetail(data) { |
| | | let _this = this; |
| | | _this.selectedVideo = data; |
| | | _this.videoDialogVisible = true; |
| | | }, |
| | | checkFollow() {}, |
| | | checkType(type) { |
| | | this.showType = type; |
| | | this.filterSearchData(); |
| | |
| | | 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.data.forEach((opt) => { |
| | | opt.isChecked = false; |
| | | }); |
| | | }, |
| | | 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) { |
| | |
| | | }; |
| | | }, |
| | | 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的dialog控制居中的,所以水平拉伸效果是双倍 |
| | | 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的dialog控制居中的,所以水平拉伸效果是双倍 |
| | | 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; |
| | | }; |
| | | }; |
| | | }, |
| | | }, |
| | | }; |
| | |
| | | |
| | | <style lang="scss"> |
| | | .search-for-video-analyze { |
| | | //padding: 20px 30px; |
| | | //出横向滚动条 |
| | | padding: 20px 40px; |
| | | 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 { |
| | |
| | | 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; |
| | |
| | | .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; |
| | | color: rgb(133, 133, 133); |
| | | background: #ecf0fc; |
| | | font-weight: bold; |
| | | span { |
| | | font-size: 14px; |
| | | color: #2d52d7; |
| | | } |
| | | .icon { |
| | | margin-right: 10px; |
| | | } |
| | | } |
| | | .options-wrap { |
| | | flex: 1; |
| | |
| | | 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; |
| | |
| | | } |
| | | } |
| | | .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 { |
| | |
| | | user-select: none; |
| | | justify-content: flex-end; |
| | | .more { |
| | | margin-top: 6px; |
| | | margin-top: 7px; |
| | | padding: 0px 6px; |
| | | border: 1px solid #ccc; |
| | | cursor: pointer; |
| | | margin-right: 10px; |
| | | width: 44px; |
| | | height: 26px; |
| | | line-height: 26px; |
| | | width: 46px; |
| | | height: 25px; |
| | | line-height: 25px; |
| | | border-radius: 2px; |
| | | background: #edeff2; |
| | | &:hover { |
| | | color: #6486e7; |
| | | } |
| | | } |
| | | .multCheck { |
| | | margin-top: 6px; |
| | | margin-top: 7px; |
| | | width: 44px; |
| | | height: 26px; |
| | | line-height: 26px; |
| | | padding: 0px 6px; |
| | | border: 1px solid #ccc; |
| | | cursor: pointer; |
| | | height: 23px; |
| | | line-height: 23px; |
| | | padding: 0px 12px; |
| | | border: 1px solid #d7dce7; |
| | | border-radius: 2px; |
| | | &:hover { |
| | | color: #7695ec; |
| | | border-color: #7695ec; |
| | | .el-icon-plus { |
| | | color: #ee4e6e; |
| | | } |
| | | &.checked { |
| | | color: #409eff; |
| | | border-color: #409eff; |
| | | span { |
| | | color: #ee4e6e; |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | .config-submenu { |
| | | .el-menu--horizontal { |
| | | //max-width: 700px; |
| | | //overflow-x: auto; |
| | | left: 20px !important; |
| | | // left: 20px !important; |
| | | & > ul { |
| | | flex-wrap: wrap; |
| | | } |
| | |
| | | border: none; |
| | | color: #2c3e50; |
| | | font-size: 12px; |
| | | padding: 0 10px; |
| | | min-width: 100px; |
| | | text-align: left; |
| | | } |
| | | .el-menu--popup { |
| | | display: flex; |
| | |
| | | } |
| | | } |
| | | .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: 10px; |
| | | margin-bottom: 24px; |
| | | |
| | | .left { |
| | | float: left; |
| | | display: flex; |
| | |
| | | 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; |
| | | background: #f5f5f5; |
| | | background: #fff; |
| | | margin: 0 -30px; |
| | | margin-bottom: -30px; |
| | | padding: 0; |
| | | // .el-row { |
| | | // display: flex; |
| | | // flex-wrap: wrap; |
| | | // } |
| | | .el-table__row { |
| | | cursor: pointer; |
| | | } |
| | | .el-row { |
| | | padding-top: 20px; |
| | | background: #f5f5f5; |
| | | .el-table { |
| | | border: none; |
| | | margin-bottom: 20px; |
| | | } |
| | | .el-col { |
| | | margin-bottom: 10px; |
| | | } |
| | | .card { |
| | | cursor: pointer; |
| | | position: relative; |
| | | text-align: left; |
| | | background: #fff; |
| | | border-radius: 5px; |
| | | height: 360px; |
| | | border-radius: 0 0 5px 5px; |
| | | height: 368px; |
| | | margin-bottom: 10px; |
| | | border: 1px solid#CCD9F0; |
| | | &:hover { |
| | | box-shadow: 3px 2px 5px 1px rgba(0, 0, 0, 0.3); |
| | | box-shadow: 3px 3px 4px #d3def2; |
| | | } |
| | | .video-wrap { |
| | | cursor: pointer; |
| | | border-radius: 3px; |
| | | width: 100%; |
| | | padding-top: 56.25%; |
| | |
| | | top: 0; |
| | | width: 100%; |
| | | height: 100%; |
| | | object-fit: contain; |
| | | // width: 100%; |
| | | // max-height: 200px; |
| | | // border-radius: 3px; |
| | | object-fit: unset; |
| | | } |
| | | } |
| | | .video-info { |
| | | padding: 10px; |
| | | padding: 14px; |
| | | .base-info { |
| | | > div { |
| | | 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: 10px; |
| | | 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 { |
| | |
| | | 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; |
| | | .star { |
| | | color: #ccc; |
| | | } |
| | | .follow { |
| | | color: #409eff; |
| | | } |
| | | 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; |
| | | background: #f5f5f5; |
| | | } |
| | | } |
| | | .el-dialog__wrapper{ |
| | | top: -22px; |
| | | .star { |
| | | font-size: 20px; |
| | | i { |
| | | color: #c7d0e5; |
| | | } |
| | | .follow { |
| | | color: #f90741; |
| | | } |
| | | } |
| | | .el-dialog__wrapper { |
| | | top: -22px; |
| | | } |
| | | .dialog-video { |
| | | // z-index: 2020 !important; |
| | | .el-dialog { |
| | | width: 1180px; |
| | | // height: 893px; |
| | | width: 1340px; |
| | | top: 70px; |
| | | transform: none; |
| | | } |
| | | .el-dialog__body { |
| | | background: #eaeaea; |
| | | padding: 0; |
| | | // height: 100%; |
| | | height: inherit; |
| | | |
| | | height: inherit; |
| | | } |
| | | .el-dialog__header { |
| | | padding: 3px; |
| | | padding: 0px; |
| | | .el-dialog__headerbtn { |
| | | top: 6px; |
| | | top: 10px; |
| | | font-size: 20px; |
| | | } |
| | | } |
| | | .title-partment { |
| | |
| | | } |
| | | } |
| | | .title { |
| | | font-size: 15px; |
| | | 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; |
| | | // height: 100%; |
| | | // min-height: 684px; |
| | | overflow: auto; |
| | | z-index: 2000; |
| | | } |