factory_web/src/views/bigScreen/index.vue

2341 lines
62 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="screen-main">
<!--头部展示-->
<div class="screen-header">
<div class="header-left-bg">驾驶舱</div>
<div class="header-right-action">
<div class="right-action-clock">
<span class="action-time">2022-06-22</span>
<span class="action-time">周三下午 </span>
<span class="action-time">17:59:52</span>
</div>
</div>
</div>
<!--图层控制-->
<div class="screen-ctrl">
<div class="screen-filter">
<div class="filter-content">
<div class="filter-ctrl" v-show="filterCtrlFocus">
<div class="screen-check-content hoverPointer" @click="markerClick(0)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[0]}"></span>
<span class="box-text">全部</span>
</div>
<div class="screen-check-content hoverPointer" @click="markerClick(1)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[1]}"></span>
<span class="box-text">车间名称</span>
</div>
<div class="screen-check-content hoverPointer" @click="markerClick(2)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[2]}"></span>
<span class="box-text">摄像头</span>
</div>
<div class="screen-check-content hoverPointer" @click="markerClick(3)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[3]}"></span>
<span class="box-text">喇叭</span>
</div>
<div class="screen-check-content hoverPointer" @click="markerClick(4)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[4]}"></span>
<span class="box-text">危险作业</span>
</div>
<div class="screen-check-content hoverPointer" @click="markerClick(5)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[5]}"></span>
<span class="box-text">风险区域</span>
</div>
<div class="screen-check-content hoverPointer" @click="markerClick(6)">
<span class="box-btn box-uncheck" :class="{'box-check':markList[6]}"></span>
<span class="box-text">人员</span>
</div>
<div class="caret-dropdown">
<el-icon @click="userSelect" v-if="showUserSelect" :size="14">
<ArrowUpBold/>
</el-icon>
<el-icon @click="userSelect" v-else :size="14">
<ArrowDownBold/>
</el-icon>
</div>
</div>
<div class="drop-content" v-if="showUserSelect">
<div @click="changeDropIndex('1')" class="drop-content-item"
:class="{'active':dropIndex==='1'}">全部
</div>
<div @click="changeDropIndex('2')" class="drop-content-item"
:class="{'active':dropIndex==='2'}">内部员工
<div></div>
</div>
<div @click="changeDropIndex('3')" class="drop-content-item"
:class="{'active':dropIndex==='3'}">相关方
</div>
<div @click="changeDropIndex('4')" class="drop-content-item"
:class="{'active':dropIndex==='4'}">访客
</div>
<el-tree
ref="group"
id="bigScreenTree"
node-key="id"
:data="group"
show-checkbox
:current-node-key="''"
:highlight-current="true"
:expand-on-click-node="false"
@node-click="groupClick"
></el-tree>
<el-button type="primary" @click="userFilter">确定
</el-button>
</div>
<div class="filter-action showroam">
<div v-if="filterCtrlFocus" class="action-shrink" @click="filterCtrlFocusChange"></div>
<div v-else class="action-shrink shrink-hidden" @click="filterCtrlFocusChange"></div>
<div v-if="autoRun" class="action-roam roam-pause" @click="autoRunChange"></div>
<div v-else class="action-roam roam-play" @click="autoRunChange"></div>
</div>
</div>
</div>
<!--搜索-->
<div class="screen-search">
<div class="search-content"><input type="text" placeholder="输入姓名/定位卡号/车牌号进行查找" class="input-focus"><span
class="close-btn el-icon-circle-close" style="display: none;"></span>
<div class="search"></div>
<div class="auto-suggestion" style="display: none;">
<div class="suggestion-select-ul"></div>
</div>
</div>
</div>
</div>
<!--人员统计-->
<div class="screen-cockpit">
<div class="cockpit-count">
<div class="divider"></div>
<div class="simple-title">数据统计</div>
<div class="count-list">
<div class="count-list-item">
<div class="item-img item-img2"></div>
<div class="item-info">
<div title="员工" class="normal">内部员工</div>
<div class="bottom">
<span class="large">76</span>&nbsp;<span class="normal">人</span>
</div>
</div>
</div>
<div class="count-list-item">
<div class="item-img item-img1"></div>
<div class="item-info">
<div title="外来人员" class="normal">访客</div>
<div class="bottom"><span class="large">0</span>&nbsp;<span class="normal">人</span>
</div>
</div>
</div>
<div class="count-list-item">
<div class="item-img item-img3"></div>
<div class="item-info">
<div title="承包商" class="normal">相关方</div>
<div class="bottom">
<span class="large">0</span>&nbsp;<span class="normal">人</span>
</div>
</div>
</div>
</div>
</div>
<div class="cockpit-alarm">
<div class="divider"></div>
<div class="simple-title" @click="warningDetail= true">
<span>告警实时展示</span>
<div class="simple-btn-bg alarm-bell danger">
<span>{{warningList.length}}</span>&nbsp;报警
</div>
</div>
<div class="alarm-content">
<div class="content-left">
<div class="alarm-danger"></div>
</div>
<div class="content-right">
<div title="缺员报警 3" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
class="item-name">缺员报警</span><span class="item-number" style="">3</span></div>
<div title="超员报警 2" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
class="item-name">超员报警</span><span class="item-number" style="">2</span></div>
<div title="静止报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
class="item-name">静止报警</span><span class="item-number" style="display: none;">0</span></div>
<div title="越界报警 2" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
class="item-name">越界报警</span><span class="item-number" style="">2</span></div>
<div title="一键报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
class="item-name">一键报警</span><span class="item-number" style="display: none;">0</span></div>
<div title="滞留报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
class="item-name">滞留报警</span><span class="item-number" style="display: none;">0</span></div>
<div title="车辆报警 0" class="alarm-item alarm-item-safe"><span class="item-icon"></span><span
class="item-name">车辆报警</span><span class="item-number" style="display: none;">0</span></div>
<div title="作业报警 2" class="alarm-item alarm-item-danger"><span class="item-icon"></span><span
class="item-name">作业报警</span><span class="item-number" style="">2</span></div>
</div>
</div>
<div class="alarm-detail-info left_arrow" v-if="warningDetail">
<div class="simple-title">
<div><span>告警数据</span></div>
<div class="action-group">
<span class="detail-text-btn">查看详情</span>
<span class="icon-close" @click="warningDetail=false"></span>
</div>
</div>
<div class="detail-content">
<div class="content-head">
<div class="screen-multiple-select head-select">
<div class="multiple-select-tags" @click="warningTypeShow=true">
<span class="multiple-select-input">全部</span>
<el-icon color="#ffffff" class="no-inherit">
<ArrowDownBold/>
</el-icon>
</div>
<div v-show="warningTypeShow" class="multiple-select-wrap">
<div class="multiple-select-ul">
<div class="multiple-select-li" @click="warningTypeSelected">
<span class="multiple-select-label">全部</span>
</div>
<div class="multiple-select-li" @click="warningTypeSelected">
<span title="超员报警" class="multiple-select-label">超员报警</span>
</div>
<div class="multiple-select-li" @click="warningTypeSelected">
<span title="缺员报警" class="multiple-select-label">缺员报警</span>
</div>
<div class="multiple-select-li" @click="warningTypeSelected">
<span title="静止报警" class="multiple-select-label">静止报警</span>
</div>
<div class="multiple-select-li" @click="warningTypeSelected">
<span title="越界报警" class="multiple-select-label">越界报警</span>
</div>
<div class="multiple-select-li" @click="warningTypeSelected">
<span title="滞留报警" class="multiple-select-label">滞留报警</span>
</div>
<div class="multiple-select-li">
<span title="一键报警" class="multiple-select-label">一键报警</span>
</div>
<div class="multiple-select-li">
<span title="车辆超速报警" class="multiple-select-label">车辆超速报警</span>
</div>
<div class="multiple-select-li">
<span title="车辆越界报警" class="multiple-select-label">车辆越界报警</span>
</div>
<div class="multiple-select-li">
<span title="车辆滞留报警" class="multiple-select-label">车辆滞留报警</span>
</div>
<div class="multiple-select-li">
<span title="非作业人员闯入报警" class="multiple-select-label">非作业人员闯入报警</span>
</div>
<div class="multiple-select-li">
<span title="作业人员离开报警" class="multiple-select-label">作业人员离开报警</span>
</div>
</div>
</div>
</div>
<div class="head-sound sound-ring"></div>
</div>
<div class="content-body">
<!--warningList-->
<div class="alarm-item" v-for="(item) in warningList" :key="item.id">
<div class="item-type">未处理</div>
<div class="item-content" @click="warningItemShow(item)">
<div class="item-content-top"><span class="time">{{item.create_time}}</span><span
class="status">待处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">{{item.voice_msg}}</div>
</div>
</div >
</div>
<!--<div class="alarm-item">
<div class="item-type">越界报警</div>
<div class="item-content">
<div class="item-content-top"><span class="time">2022-07-01 11:39:03</span><span
class="status">未处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">【生产管理部】【马经艺】进入【测试-绿地】【0分钟】触发了【越界报警】</div>&lt;!&ndash;&ndash;&gt;&lt;!&ndash;&ndash;&gt;
</div>
</div>
</div>
<div class="alarm-item">
<div class="item-type">超员报警</div>
<div class="item-content">
<div class="item-content-top"><span class="time">2022-06-28 10:41:04</span><span
class="status">未处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">【生产车间三】多于【5人】【1分钟】发生了【超员报警】</div>&lt;!&ndash;&ndash;&gt;&lt;!&ndash;&ndash;&gt;</div>
</div>
</div>
<div class="alarm-item">
<div class="item-type">越界报警</div>
<div class="item-content">
<div class="item-content-top"><span class="time">2022-06-28 10:38:40</span><span
class="status">未处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">【生产管理部】【马浩初】进入【测试-绿地】【0分钟】触发了【越界报警】</div>&lt;!&ndash;&ndash;&gt;&lt;!&ndash;&ndash;&gt;
</div>
</div>
</div>
<div class="alarm-item">
<div class="item-type">缺员报警</div>
<div class="item-content">
<div class="item-content-top"><span class="time">2022-06-28 10:37:53</span><span
class="status">未处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">【生产车间三】少于【8人】发生了【缺员报警】</div>&lt;!&ndash;&ndash;&gt;&lt;!&ndash;&ndash;&gt;</div>
</div>
</div>
<div class="alarm-item">
<div class="item-type">超员报警</div>
<div class="item-content">
<div class="item-content-top"><span class="time">2022-06-28 10:37:41</span><span
class="status">未处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">【承包商开票区】多于【2人】【0分钟】发生了【超员报警】</div>&lt;!&ndash;&ndash;&gt;&lt;!&ndash;&ndash;&gt;</div>
</div>
</div>
<div class="alarm-item">
<div class="item-type">缺员报警</div>
<div class="item-content">
<div class="item-content-top"><span class="time">2022-06-28 10:37:27</span><span
class="status">未处理</span></div>
<div class="item-content-middle mt6">
<div class="alarm-info">【浓硫酸车间二】少于【2人】发生了【缺员报警】</div>&lt;!&ndash;&ndash;&gt;&lt;!&ndash;&ndash;&gt;</div>
</div>
</div>-->
</div>
<div class="content-footer" style="">
<el-pagination
:page-size="20"
:pager-count="11"
layout="prev, pager, next"
:total="100" />
</div>
<div class="el-loading-mask" style="background-color: transparent; display: none;">
<div class="el-loading-spinner"><i class="el-icon-loading"></i><!----></div>
</div>
</div>
</div>
</div>
<div class="cockpit-info">
<div class="divider"></div>
<div class="simple-title">
<div class="header-tab"><span class="tab-item tab-item-active">区域信息情况</span><span class="tab-item">部门信息情况</span>
</div>
<div class="simple-btn-bg alarm-btn">需充电卡片0人</div>
</div>
</div>
</div>
<!--切换-->
<div class="screen-tab">
<div class="screen-tab-content">
<div class="tab-menu tab-menu-item tab-menu-active"><span class="tab-menu-text">驾驶舱</span></div>
<div class="tab-menu tab-menu-item"><span class="tab-menu-text">监控</span></div>
<!--<div class="tab-menu tab-menu-item"><span class="tab-menu-text">追踪</span></div>
<div class="tab-menu tab-menu-item"><span class="tab-menu-text">最终位置</span></div>
<div class="tab-menu tab-menu-item"><span class="tab-menu-text">疏散演练</span></div>-->
</div>
</div>
<!--地图-->
<div id='mapContainer'></div>
<!--视频弹窗-->
<!-- <div style="display: block;position:absolute;z-index: 10;top: 0;
background: rgba(24,36,51,.7);
padding: 0 16px 16px;box-sizing: border-box" id="vchannelWrap">
<div class="v_title">1111111</div>
<div class="v_masker"></div>
</div>-->
<!--危险作业-->
<div class="screen-job" v-if="screenJob">
<div class="simple-title">
<div>查看作业详情</div>
<div class="simple-btn" @click="closeScreenJob">关闭</div>
</div>
<div class="job-content">
<div class="job-basic">
<div class="job-item">
<span class="job-item-name">作业证名称:</span>
<span class="job-item-info">动火作业</span>
</div>
<div class="job-item">
<span class="job-item-name">作业证编号:</span>
<span class="job-item-info">111111111</span>
</div>
<div class="job-item">
<span class="job-item-name">作业证等级:</span>
<span class="job-item-info">特级</span>
</div>
<div class="job-item">
<span class="job-item-name">申请单位:</span>
<span class="job-item-info">金隅</span>
</div>
<div class="job-item">
<span class="job-item-name">申请人:</span>
<span class="job-item-info">金隅工人</span>
</div>
<div class="job-item">
<span class="job-item-name">开始时间:</span>
<span class="job-item-info">2022-07-01 10:00:00</span>
</div>
<div class="job-item">
<span class="job-item-name">结束时间:</span>
<span class="job-item-info">2022-07-02 00:00:00</span>
</div>
<div class="job-item">
<span class="job-item-name">作业内容:</span>
<span class="job-item-info">设备检修</span>
</div>
<div class="job-item">
<span class="job-item-name">作业人员:</span>
<span class="job-item-info">张江,李斯</span>
</div>
</div>
<div class="simple-title">
<div>安全措施</div>
</div>
<div class="job-list">
<div class="custom-table">
<div class="custom-table-head">
<div class="table-head-item w50">序号</div>
<div class="table-head-item grow">安全措施</div>
<div class="table-head-item w80">确认人</div>
</div>
<div class="custom-table-body">
<div class="table-body-item">
<div class="body-item-label w50">1</div>
<div class="body-item-label grow">佩戴安全帽,穿安全衣,系安全绳</div>
<div class="body-item-label w80">chen</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!--风险区域-->
<div class="screen-risk" v-if="screenRisk">
<div class="simple-title">
<div>区域风险详情</div>
<div class="simple-btn" @click="closeScreenRisk">关闭</div>
</div>
<div class="risk-content">
<div class="risk-basic">
<div class="risk-item"><span class="risk-item-name">风险区域名称:</span><span class="risk-item-info">重大风险区域</span>
</div>
<div class="risk-item"><span class="risk-item-name">风险等级:</span><span class="risk-item-info">重大风险</span>
</div>
<div class="risk-item"><span class="risk-item-name">创建人:</span><span
class="risk-item-info">李英</span></div>
</div>
<div class="simple-title">
<div>详细信息</div>
</div>
</div>
</div>
<!--警告详情-->
<div class="screen-risk" v-if="screenWarning">
<div class="simple-title">
<div>警报信息</div>
<div class="simple-btn" @click="closeScreenWarning">关闭</div>
</div>
<div class="risk-content">
<div class="risk-basic">
<div class="risk-item">
<span class="risk-item-info">{{screenWarningItem.voice_msg}}</span>
</div>
</div>
</div>
<div class="simple-title">
<div>警告详情</div>
</div>
<div class="risk-content">
<div class="risk-basic">
<div class="risk-item">
<span class="risk-item-name">报警区域:</span>
<span class="risk-item-info" v-if="screenWarningItem.area_">{{screenWarningItem.area_.name}}</span>
</div>
<div class="risk-item" v-if="screenWarningItem.employee_!==null">
<span class="risk-item-name">触发人:</span>
<span class="risk-item-info" v-if="screenWarningItem.employee_">{{screenWarningItem.employee_.name}}</span>
</div>
<div class="risk-item" v-if="screenWarningItem.employee_!==null">
<span class="risk-item-name">触发人部门:</span>
<span class="risk-item-info" v-if="screenWarningItem.employee_.belong_dept_">{{screenWarningItem.employee_.belong_dept_.name}}</span>
</div>
<div class="risk-item">
<span class="risk-item-name">触发事件:</span>
<span class="risk-item-info" v-for="ite in screenWarningItem.cates_" :key="ite">{{ite.name}}</span>
</div>
<div class="risk-item">
<span class="risk-item-name">触发时间</span>
<span class="risk-item-info">{{screenWarningItem.create_time}}</span>
</div>
<div class="risk-item">
<span class="risk-item-name">事件截图</span>
<img :src="'http://10.0.11.101:8000'+screenWarningItem.global_img" style="width: 250px;">
</div>
</div>
</div>
<div class="simple-title">
<div>警告处理</div>
</div>
<div class="risk-content">
<div class="risk-basic">
<div class="risk-item">
<span class="risk-item-name">处理描述</span>
<el-input
class="item-textarea"
v-model="warningForm.handle_desc"
:rows="3"
type="textarea"
placeholder="请输入处理描述"
/>
</div>
<div class="risk-item">
<span class="risk-item-name">事件类型:</span>
<el-radio-group v-model="warningForm.mark">
<el-radio label="10" size="small">正常</el-radio>
<el-radio label="20" size="small">误报</el-radio>
</el-radio-group>
</div>
</div>
</div>
<div style="text-align: center">
<el-button class="handleWarningBtn" @click="handleWarning">处理</el-button>
</div>
</div>
</div>
</template>
<script>
import {genTree} from "@/utils/verificate";
export default {
data() {
return {
domMarkerLayer: null,
boxMarkerLayer: null,//风险区域
pointMarkerLayer: null,//点位图层
polygonMaskerLayer: null,//危险作业
cameraMaskerLayer: null,//摄像头
materialsMaskerLayer: null,//消防物资
carsMaskerLayer: null,//车辆
manMaskerLayer: null,//人员
flyManager: null,
dropIndex: '1',
markList: [false, false, false, false, false, false, false],
autoRun: false,
screenJob: false,
screenRisk: false,
screenWarning: false,
warningTypeShow: false,
showUserSelect: false,
warningDetail: false,
filterCtrlFocus: true,
Vchannels: [],//摄像头列表
warningList: [],//报警事件列表
speakerList: [],//喇叭列表
userList: [],//人员列表
deptList: [],//部门列表
userCount:{
employee:0,//内部员工
visitor:0,//访客
parties:0//相关方
},
screenJobItem: {},//危险作业信息
screenRiskItem: {},//风险区域信息
screenWarningItem: {},//风险区域信息
screenUserItem: {},//人员信息
url: '',
params: {
json: {
data: {
channelId: "",
streamType: "2",
type: "flv"
}
},
code: 'video_realtime'
},
/*groupsProps: {
multiple: true,
emitPath: false,
checkStrictly: true,
},*/
group: [],
groupsProps: {
value: "id",
multiple: true,
checkStrictly: true,
},
filters:{
type:'',
dept:'',
keyword:'',
},
warningId:'',
warningForm:{
handle_desc:'',
mark:'1',
},
}
},
created() {
const scriptInfo = document.createElement("script");
scriptInfo.setAttribute("data-callType", "callScript");
scriptInfo.src = "https://cdn.bootcdn.net/ajax/libs/flv.js/1.6.2/flv.js";
document.head.appendChild(scriptInfo)
},
mounted() {
window.map = new jsmap.JSMap({
mapType: jsmap.JSMapType.MAP_3D,
container: 'mapContainer',
mapServerURL: 'data/map',
enableShadows: false, //是否开启阴影 默认false
enableLighting: false, //是否开发光照 默认false
showBuildingMarker: false,
// showNavigationDisplay: true,
mapScaleLevelRange: [16, 23],//比例尺级别范围, 16级到23级,默认[1,24]
floorControlOptions: {
floorHeight: 20,//楼层间距
position: jsmap.JSControlPosition.RIGHT_TOP,//控件位置
offset: {
x: 50,
y: 200,
}//控件偏移位置
},
imageryProvider: jsmap.JSImageryProviderType.IMAGE_TDT,
backgroundColor: '#3798ff', //背景颜色
viewOptions: {
//屏幕中心坐标
center: {x: 114.63059258861512, y: 38.81407163905287, z: 1},
// center: {x:120,y:30,z:10},
//相机距屏幕中心点距离单位m
distance: 400,
// 旋转角(单位°)
rotate: 0,
//倾斜角(单位°)
tilt: 45,
}
});
window.map.openMapById('0000');
window.map.on('loadComplete', e => {
this.domMarkerLayers();
this.boxMaskerLayers();//风险区域
this.pointMaskerLayers();
this.cameraMaskerLayers();//摄像头
this.polygonMarkerLayers();//危险作业
this.speakersMaskerLayers();//laba
});
window.map.on('mapClickNode', event => {
debugger;
let item = event;
let type = event.nodeType.toString();
console.log(type==='Symbol(icontextmaker)');
if (item.markers.length > 0) {
if(type==='Symbol(boxmarker)'){
this.screenJob = false;
this.screenWarning = false;
this.screenRisk = true;
//风险区域
}else if(type==='Symbol(icontextmaker)'){
//摄像头和人员
if (document.getElementById(item.markers[0].id) === null) {
if (item.markers[0].image === "/img/camera.svg") {
//摄像头
this.params.json.data.channelId = item.markers[0].id;
let domMarker = new jsmap.JSDomMarker({
id: item.markers[0].id + 'mark',
position: new jsmap.JSPoint(item.markers[0].position.x, item.markers[0].position.y, 0),
floorId: 1,
depthTest: true,
content: `<div id="` + item.markers[0].id + `" style="display: block;position:absolute;z-index: 10;top: 0;background: rgba(24,36,51,.7);padding: 0 16px 16px;box-sizing: border-box" id="vchannelWrap"></div>`,
offset: jsmap.JSControlPosition.RIGHT_CENTER,
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),
marginOffset: {
x: 30,
y: -50
},
properties: {
type: 0,
},
callback: (node) => {
console.log(node);
}
});
window.map.addMarker(domMarker);
var otest = document.getElementById(item.markers[0].id);
// 创建一个新dom,并设置icon绑定点击事件
let newEle = document.createElement("div");
newEle.className = "v_title";
newEle.setAttribute("style", "display:flex;justify-content: space-between;padding:10px 0");
let title = document.createElement("div");
title.innerText = "实时监控";
newEle.style.color = "#ffffff";
let close = document.createElement("div");
close.className = "v_close";
close.setAttribute("style", "width: 16px;height: 16px;background: url(/img/close.png) no-repeat;background-size: 100% 100%;");
newEle.appendChild(title);
newEle.appendChild(close);
let newEle2 = document.createElement("video");
newEle2.id = item.markers[0].id + 'videoPlayer';
newEle2.setAttribute("style", "width: 327px;height:183px;background:url('/img/v_mask.png') no-repeat;background-size: 100% 100%;");
// 在对应dom 下追加创建的dom
otest.appendChild(newEle);
otest.appendChild(newEle2);
newEle2.onclick = () => {
this.$API.am.video.item.req(this.params).then(res => {
debugger;
console.log(res);
this.url = res.url;
if (flvjs.isSupported()) {
let videoElement = document.getElementById(item.markers[0].id + 'videoPlayer');
let flvPlayer = flvjs.createPlayer({
type: 'flv',
url: res.url
});
flvPlayer.attachMediaElement(videoElement);
flvPlayer.load();
flvPlayer.play();
}
})
};
close.onclick = () => {
let nodeMark = document.getElementById(item.markers[0].id);
nodeMark.remove();
}
}else{
//人员
}
}
}else if(type==='Symbol(polygonmarker)'){
//危险作业
this.screenRisk = false;
this.screenWarning = false;
this.screenJob = true;
}
} else {
}
});
/*
* <div class="v_title" style="width: 327px;height: 45px;padding: 10px 0;font-size: 16px;font-weight: 700;color: #fff;position: relative;padding-left: 8px;display: flex;justify-content: space-between">
<div>`+event.markers[0].text+`</div><div style="width: 16px;height: 16px;background: url(.//public/img/close.png) no-repeat;background-size: 100% 100%;" @click="closeVideo"></div>
</div>
<div class="v_masker" style="width: 327px;height: 183px;background: url(.//public/img/v_mask.png) no-repeat;background-size: 100% 100%;" @click="playVideo()"></div>
<div id="`+event.markers[0].id+`"></div>
* */
this.getGroup();
//左侧数据统计
this.getVchannels();//数据统计
this.getWarnings();//报警统计
this.getAreas();//区域
this.getDepts();//部门
//右上展示数据
this.getVchannels();//摄像头
this.getDangers();//危险作业
this.getRisks();//风险区域
this.getSpeakers();//喇叭
this.getCars();//车辆
this.getMen();//人员
},
methods: {
warningTypeSelected() {
debugger;
this.warningTypeShow = false;
//获取新数据
},
getSpeakers() {
},
getDangers() {
},
getCars() {
},
getRisks() {
},
getMen() {
},
getDepts() {
},
getAreas() {
},
getWarnings() {
this.$API.ecm.event.list.req().then(res=>{
if(res.err_msg){}else{
this.warningList = res.results.filter(item=>{return item.handle_user===null});
}
})
},
//加载部门数据
getGroup() {
this.$API.system.dept.list.req({page: 0}).then(res=>{
debugger;
if(res.err_msg){}else{
this.group = genTree(res);
let obj = new Object();
}
});
},
groupClick(data) {
console.log(data);
},
userFilter(){
this.showUserSelect = false;
},
domMarkerLayers() {//风险区域
this.domMarkerLayer = new jsmap.JSDomMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: true
});
window.map.addLayer(this.domMarkerLayer);
},
boxMaskerLayers() {//风险区域
this.boxMarkerLayer = new jsmap.JSBoxMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(this.boxMarkerLayer);
this.showBoxMarkers();
},
pointMaskerLayers() {//点
this.pointMarkerLayer = new jsmap.JSPointMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(this.pointMarkerLayer);
this.showPointMarkers();
},
cameraMaskerLayers() {//图标文字
this.cameraMaskerLayer = new jsmap.JSIconTextMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(this.cameraMaskerLayer);
this.showCameraMarkers();
},
speakersMaskerLayers() {//消防物资
this.materialsMaskerLayer = new jsmap.JSIconTextMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(this.materialsMaskerLayer);
this.showSpeakersMarkers();
},
polygonMarkerLayers() {//危险作业
this.polygonMaskerLayer = new jsmap.JSPolygonMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(this.polygonMaskerLayer);
this.showPolygonMarkers();
},
//风险区域
showBoxMarkers() {
var boxMarker = new jsmap.JSBoxMarker({
id: 'box',
position: [
{x: 114.63059258861512, y: 38.81407163905287, z: 0},
{x: 114.63044857916901, y: 38.81396178326786, z: 0},
{x: 114.63060812029352, y: 38.81386267832651, z: 0},
{x: 114.63073035356713, y: 38.81395745716681, z: 0},
],
floorId: 1,//楼层id
color: 'rgba(255,0,0,0.44)',//颜色
height: 0,//基底高度
stretchHeight: 6,//拉伸高度
strokeColor: '#ff0000',//边线颜色
show: true, //是否显示
depthTest: Boolean,
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),//可见范围
callback: (marker) => {
// console.log(marker);
}
});
this.boxMarkerLayer.addMarker(boxMarker);
var boxMarker1 = new jsmap.JSBoxMarker({
id: 'box',
position: [
{x: 114.6284236353879, y: 38.81587979561416, z: 0},
{x: 114.62920209224112, y: 38.81519905830823, z: 0},
{x: 114.63022009284202, y: 38.81594033572247, z: 0},
{x: 114.62938229018444, y: 38.81656925374177, z: 0},
],
floorId: 1,//楼层id
color: 'rgba(134,255,78,0.44)',//颜色
height: 0,//基底高度
stretchHeight: 20,//拉伸高度
strokeColor: '#87FF4F',//边线颜色
show: true, //是否显示
depthTest: Boolean,
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),//可见范围
callback: (marker) => {
// console.log(marker);
}
});
this.boxMarkerLayer.addMarker(boxMarker1);
},
showPointMarkers() {
let pointMarker = new jsmap.JSPointMarker({
id: 'point1',
color: '#00FF00', //填充颜色
size: 10, //尺寸
position: new jsmap.JSPoint(114.6318495165543, 38.81301151091491, 3), //坐标
floorId: 1, //楼层id,默认为1地面
outlineColor: '#CD5C5C', //边线颜色
outlineWidth: 2, //边线宽
// depthTest: true, //是否开启深度检测
show: true, //是否显示
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000), //可见范围
nearFarScale: new jsmap.JSNearFarScale(0.0, 10.0, 500, 0.5), //比例缩放
callback: (node) => {
// console.log(node);
}//回调事件
});
this.pointMarkerLayer.addMarker(pointMarker);
},
//摄像头
showCameraMarkers() {
let that = this;
let iconTextMarker = null;
that.Vchannels.forEach(item => {
let pixel = item.my_info.location;
iconTextMarker = new jsmap.JSIconTextMarker({
id: item.channelCode,
position: {x: pixel[0], y: pixel[1], z: pixel[2]}, //坐标
floorId: 1, //楼层id,默认为1地面
image: "/img/camera.svg",
text: '摄像头',
font: '10px sans-serif',
fontColor: '#fff645',
imageHeight: 16,
imageWidth: 16,
backgroundColor: 'rgba(0,0,0,0.3)',
backgroundRadius: 1,
backgroundStrokeColor: 'rgba(0,0,0,0.3)',
backgroundStrokeWidth: 1,
iconTextType: jsmap.JSIconTextType.TOPTEXT_BOTTOMICON,
allowPicking: true,
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),
nearFarScale: new jsmap.JSNearFarScale(0.0, 1, 500, 2),
show: true,
callback: (marker) => {
debugger;
console.log(marker);
}
});
that.cameraMaskerLayer.addMarker(iconTextMarker);
})
},
//危险作业
showPolygonMarkers() {
let polygonMarker = new jsmap.JSPolygonMarker({
id: 'polygon',//id
position: [new jsmap.JSPoint(114.63168864138028, 38.81254802029822, 0),
new jsmap.JSPoint(114.63185023632963, 38.81241816295427, 0),
new jsmap.JSPoint(114.63160294240738, 38.812229296478634, 0),
new jsmap.JSPoint(114.63143965827588, 38.81235778393449, 0),
],//坐标集合
floorId: 1,//楼层id
color: 'rgba(0,0,255,.44)',//填充颜色
strokeColor: '#2bff1d',//边线颜色
depthTest: false,//是否开启深度检测
// material: new jsmap.JSWaterMaterial(), //材质材质属性一旦设置color属性就会失效
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000), //可见范围
properties: {
test: 'polygonTest'
},//属性设置
callback: (marker) => {
// console.log(marker);
}//回调
});
this.polygonMaskerLayer.addMarker(polygonMarker);
},
//喇叭
showSpeakersMarkers() {
let materialMarker = new jsmap.JSIconTextMarker({
id: 'iconTextMarker',
position: {x: 114.6302317964304, y: 38.81315596674133}, //坐标
floorId: 1, //楼层id,默认为1地面
image: "/img/speaker.png",
text: '喇叭1',
font: '10px sans-serif',
fontColor: '#fff645',
imageHeight: 16,
imageWidth: 16,
// fontStrokeColor: '#1f0fdd',
fontStrokeWidth: 1,
backgroundColor: 'rgba(0,0,0,0.3)',
backgroundRadius: 1,
backgroundStrokeColor: 'rgba(0,0,0,0.3)',
backgroundStrokeWidth: 1,
iconTextType: jsmap.JSIconTextType.TOPTEXT_BOTTOMICON,
allowPicking: false,
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),
nearFarScale: new jsmap.JSNearFarScale(0.0, 1, 500, 2),
show: true
});
this.materialsMaskerLayer.addMarker(materialMarker);
},
userSelect() {
this.showUserSelect = !this.showUserSelect
},
//暂停或旋转
autoRunChange() {
this.autoRun = !this.autoRun;
if (this.autoRun) {
this.mapRun();
} else {
this.mapPause();
}
},
//自动旋转
mapRun() {
if (this.flyManager !== null) {
this.flyManager.restartFly();
} else {
//地图旋转展示
this.flyManager = new jsmap.JSFlyManager(window.map);
this.flyManager.flyByCircle({
center: {x: 114.63059258861512, y: 38.81407163905287, z: 1},
distance: 500,
duration: 100000,
tilt: 30
});
}
},
mapPause() {
// this.flyManager.destroy();
this.flyManager.pauseFly();
},
filterCtrlFocusChange() {
this.filterCtrlFocus = !this.filterCtrlFocus
},
markerClick(index) {
let arr = [];
this.markList[index] = !this.markList[index];
if (index === 0) {
if (this.markList[0]) {
arr = this.markList.map(value => {
return true
})
} else {
arr = this.markList.map(value => {
return false
})
}
this.markList = arr;
} else {
let list = this.markList.slice(1, 7);
if (list.indexOf(true) > -1 && list.indexOf(false) < 0) {
this.markList[0] = true;
} else {
this.markList[0] = false;
}
}
debugger;
if (this.markList[1]) {
window.map.showBuildingMarker = true;
} else {
window.map.showBuildingMarker = false;
}
if (this.markList[2]) {
this.cameraMaskerLayer.show = true;
} else {
this.cameraMaskerLayer.show = false;
}
if (this.markList[3]) {
this.materialsMaskerLayer.show = true;
} else {
this.materialsMaskerLayer.show = false;
}
if (this.markList[4]) {
this.polygonMaskerLayer.show = true;
} else {
this.polygonMaskerLayer.show = false;
}
if (this.markList[5]) {
this.boxMarkerLayer.show = true;
} else {
this.boxMarkerLayer.show = false;
}
if (this.markList[6]) {
// this.boxMarkerLayer.show = true;
} else {
// this.boxMarkerLayer.show = false;
}
},
//选择人员分类
changeDropIndex(index) {
let that = this;
that.dropIndex = index;
setTimeout(function () {
that.showUserSelect = false;
}, 300)
},
//获取摄像头列表
getVchannels() {
this.$API.am.video.list.req(this.params).then(res => {
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.Vchannels = res.pageData;
}
});
},
warningItemShow(item){
this.screenJob = false;
this.screenRisk = false;
this.screenWarningItem = item;
this.warningId = item.id;
console.log(item);
this.$nextTick(()=>{
this.screenWarning = true;
});
},
closeScreenJob(){
this.screenJob = false;
},
closeScreenRisk(){
this.screenRisk = false;
},
closeScreenWarning(){
this.screenWarning = false;
},
handleWarning(){
this.warningForm.mark = parseInt(this.warningForm.mark);
this.$API.ecm.req(this.warningId,this.warningForm).then(res=>{
if(res.err_msg){
}else{
this.screenWarning = false;
this.getWarnings();
}
})
},
},
unmounted() {
window.map.destroy();
window.map = null;
},
}
</script>
<style lang="scss">
.handleWarningBtn,.handleWarningBtn:active,
.handleWarningBtn:focus,.handleWarningBtn:hover{
cursor: pointer;
border: 1px solid #30ffdd;
color: #ffffff;
background: rgba(48, 255, 220, 0.35);
}
.el-radio.el-radio--small .el-radio__label{
color: #ffffff;
}
.el-radio__input.is-checked .el-radio__inner{
border-color:#30ffdd;
background: #30ffdd;
}
.el-radio__input.is-checked+.el-radio__label{
color:#30ffdd;
}
#bigScreenTree{
background: none!important;
}
#bigScreenTree .el-tree-node__content{
color: #ffffff;
/*background-color:rgba(255,255,255,.1);*/
}
#bigScreenTree .el-tree-node__content:hover{
background-color:rgba(255,255,255,.1)
}
#bigScreenTree .el-tree-node:focus>.el-tree-node__content{
background-color:rgba(255,255,255,.1)
}
.v_title :before {
content: "";
display: inline-block;
position: absolute;
left: 0;
top: 14px;
width: 0;
height: 16px;
border: 1px solid #31fe27;
}
.v_masker {
width: 327px !important;
height: 183px !important;
background: url(/public/img/v_mask.png) no-repeat !important;
background-size: 100% 100% !important;
}
.hoverPointer:hover {
cursor: pointer;
}
.screen-main {
.screen-header {
width: 100% !important;
height: 84px !important;
position: absolute !important;
left: 0 !important;
top: 0 !important;
background: linear-gradient(0deg, rgba(0, 113, 155, 0) 0, #00455f) !important;
z-index: 2 !important;
transition: all .5s linear !important;
.header-left-bg {
height: 60px;
position: absolute;
left: 18px;
top: 12px;
font-size: 40px;
font-weight: 700;
color: #fff;
}
.header-right-action {
position: absolute;
top: 10px;
right: 18px;
display: flex;
align-items: center;
.right-action-clock {
:before {
content: " ";
display: inline;
position: absolute;
left: -24px;
top: 9px;
width: 16px;
height: 16px;
/*background: url(/img/screen5/clock.png) no-repeat;*/
background-size: 100% 100%;
}
.action-time {
width: 56px;
height: 19px;
font-size: 14px;
font-weight: 400;
color: #fff;
position: relative;
margin-right: 20px;
}
}
}
}
.screen-cockpit {
width: 430px;
height: 100%;
z-index: 1;
display: flex;
position: absolute;
flex-direction: column;
background: linear-gradient(90deg, #00455f, rgba(0, 113, 155, 0));
transition: all .5s linear;
padding-top: 84px;
box-sizing: border-box;
.cockpit-count {
width: 100%;
padding: 0 10px 0 18px;
position: relative;
}
.cockpit-alarm {
width: 100%;
position: relative;
padding: 0 10px 0 18px;
}
.cockpit-info {
width: 100%;
position: relative;
padding: 0 10px 0 18px;
}
.divider {
display: block;
height: 1px;
width: 100%;
background: hsla(0, 0%, 100%, .5);
z-index: 2;
}
.simple-title {
line-height: 22px;
font-size: 16px;
font-weight: 700;
color: #fff;
position: relative;
padding-left: 8px;
height: 44px;
display: flex;
align-items: center;
justify-content: space-between;
}
.simple-title:before {
content: "";
display: inline-block;
position: absolute;
left: 0;
top: 14px;
width: 0;
height: 16px;
border: 1px solid #31fe27;
}
}
.screen-ctrl {
position: absolute;
top: 60px;
right: 18px;
z-index: 2;
transition: all .5s linear;
}
.screen-tab {
position: absolute;
bottom: 0;
left: 50%;
z-index: 9;
transform: translate(-50%);
transition: all .5s linear;
}
.screen-multiple-select {
position: relative;
display: inline-block;
.multiple-select-tags {
position: relative;
background: rgba(48, 255, 220, .35);
border: 1px solid #30ffdc;
display: flex;
align-items: center;
justify-content: center;
height: 32px;
border-radius: 16px;
cursor: pointer;
.multiple-select-input {
max-width: calc(100% - 50px);
box-sizing: border-box;
font-size: 12px;
color: #fff;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
margin-right: 8px;
}
.multiple-select-caret {
color: #fff;
font-size: 12px;
}
}
.multiple-select-wrap {
width: 100%;
z-index: 20;
position: absolute;
top: 36px;
left: 0;
overflow: auto;
max-height: 250px;
border-radius: 4px;
background: #007767;
box-shadow: inset 0 0 4px #0bf1ff;
.multiple-select-ul {
padding: 4px 0;
.multiple-select-li {
position: relative;
padding: 0 16px 0 32px;
width: 100%;
font-size: 14px;
white-space: nowrap;
text-overflow: ellipsis;
color: #fff;
height: 34px;
line-height: 34px;
box-sizing: border-box;
cursor: pointer;
text-align: left;
}
.multiple-select-label {
color: #fff;
font-size: 12px;
}
}
}
}
.screen-risk {
width: 390px;
height: fit-content;
max-height: calc(100% - 180px);
padding: 0 16px 16px;
background: rgba(24,36,51,.7);
position: absolute;
top: 170px;
right: 18px;
z-index: 9999;
overflow-y: scroll;
transition: all .5s linear;
.risk-content {
height: calc(100% - 44px);
.risk-item {
font-size: 14px;
margin-bottom: 12px;
display: flex;
.risk-item-name {
color: hsla(0,0%,100%,.8);
font-weight: 400;
}
.risk-item-info {
color: #fff;
font-weight: 500;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
}
.screen-job {
width: 390px;
padding: 0 16px 16px;
background: rgba(24,36,51,.7);
position: absolute;
top: 170px;
right: 18px;
z-index: 1;
transition: all .5s linear;
.job-content {
height: calc(100% - 44px);
overflow-y: auto;
.job-basic{
.job-item {
font-size: 14px;
margin-bottom: 12px;
display: flex;
.job-item-name {
color: hsla(0,0%,100%,.8);
font-weight: 400;
flex-shrink: 0;
width: 90px;
text-align: right;
}
.job-item-info {
color: #fff;
font-weight: 500;
}
}
}
.job-list{
.custom-table {
height: 100%;
.custom-table-head {
display: flex;
.table-head-item {
padding: 0 4px;
color: #fff;
font-size: 14px;
font-weight: 700;
height: 34px;
line-height: 34px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: left;
}
}
.custom-table-body {
max-height: calc(50vh - 100px);
.table-body-item {
display: flex;
.body-item-label {
padding: 0 4px;
color: #fff;
font-size: 13px;
font-weight: 400;
height: 34px;
line-height: 34px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: left;
}
}
}
}
}
}
}
.simple-title {
line-height: 22px;
font-size: 16px;
font-weight: 700;
color: #fff;
position: relative;
padding-left: 8px;
height: 44px;
display: flex;
align-items: center;
justify-content: space-between;
}
.simple-title:before {
content: "";
display: inline-block;
position: absolute;
left: 0;
top: 14px;
width: 0;
height: 16px;
border: 1px solid #31fe27;
}
.simple-btn {
display: inline-block;
height: 32px;
line-height: 32px;
border-radius: 16px;
color: #32fde3;
font-size: 14px;
padding: 0 18px;
background: transparent;
border: 1px solid #32fde3;
cursor: pointer;
}
.grow {
flex-grow: 1;
}
}
.el-dialog__wrapper {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
overflow: auto;
margin: 0;
.el-dialog {
top: 50%;
margin-top: 0!important;
transform: translateY(-50%);
background: rgba(24,36,51,.7);
.el-dialog__header {
padding: 0;
height: 44px;
line-height: 44px;
background-size: 250px 70px;
text-align: center;
}
.el-dialog__title {
color: #fff;
font-size: 15px;
}
.el-dialog__headerbtn {
top: 14px;
}
}
}
.screen-cockpit {
.cockpit-count {
.count-list {
display: flex;
flex-wrap: wrap;
margin-bottom: 10px;
.count-list-item {
width: 33.3333%;
height: 50%;
display: flex;
.item-img {
width: 50px;
height: 50px;
position: relative;
margin-right: 6px;
flex-shrink: 0;
}
.item-img:after {
content: "";
width: 38px;
height: 38px;
position: absolute;
left: 7px;
top: 7px;
background: url(/public/img/rotate_line.png) no-repeat;
background-size: 100% 100%;
-webkit-animation: rotate 4s linear infinite;
animation: rotate 4s linear infinite;
}
.item-img1 {
background: url(/public/img/icon_wlry.png) no-repeat;
background-size: 100% 100%;
}
.item-img2 {
background: url(/public/img/icon_nbyg.png) no-repeat;
background-size: 100% 100%;
}
.item-img3 {
background: url(/public/img/icon_cbs.png) no-repeat;
background-size: 100% 100%;
}
.item-img4 {
background: url(/public/img/icon_nbcl.png) no-repeat;
background-size: 100% 100%;
}
.item-img5 {
background: url(/public/img/icon_wbcl.png) no-repeat;
background-size: 100% 100%;
}
.item-info {
.normal {
font-size: 12px;
font-weight: 400;
color: #fff;
}
.large {
font-size: 30px;
font-weight: 400;
color: #fff;
}
}
}
}
}
.cockpit-alarm {
.alarm-bell {
padding: 0 18px 0 32px;
position: relative;
color: #fff;
}
.alarm-bell:after {
content: "";
position: absolute;
left: 12px;
top: 8px;
width: 14px;
height: 16px;
background: url(/public/img/bell.png) no-repeat;
background-size: 100% 100%;
}
.alarm-bell.danger {
border: 1px solid #ffc679;
background: #dd8000;
box-shadow: inset 0 0 8px #fda732;
}
.alarm-bell.danger:hover {
box-shadow: 0 0 8px #fda732, inset 0 0 8px #fda732;
}
.alarm-content {
display: flex;
justify-content: space-between;
height: calc(100% - 50px);
.content-left {
width: 160px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.alarm-danger {
width: 150px;
height: 150px;
background: url(/public/img/a_danger.png) no-repeat;
background-size: 100% 100%;
}
}
.content-right {
width: calc(100% - 170px);
height: 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
.alarm-item {
width: 50%;
height: 25%;
font-size: 14px;
font-weight: 700;
padding-left: 8px;
position: relative;
display: flex;
align-items: center;
.item-name {
margin-right: 4px;
flex-shrink: 0;
}
.item-number {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.item-icon {
width: 14px;
height: 14px;
margin-right: 4px;
flex-shrink: 0;
}
}
.alarm-item-danger {
color: #fda732;
.item-icon {
background: url(/public/img/r_danger.png) no-repeat;
background-size: 100% 100%;
}
}
.alarm-item-safe {
color: #fff;
.item-icon {
background: url(/public/img/r_safe.png) no-repeat;
background-size: 100% 100%;
}
}
}
}
}
.cockpit-info {
.header-tab {
width: 210px;
}
}
}
.screen-ctrl {
.screen-filter {
position: absolute;
top: 0;
right: 0;
.filter-content {
display: flex;
align-items: center;
background: rgba(24, 36, 51, .5);
border-radius: 20px;
.filter-ctrl {
width: 610px;
height: 40px;
display: flex;
align-items: center;
background: transparent;
overflow: hidden;
padding: 0 20px;
z-index: 8;
transition: all .5s linear;
.screen-check-content {
margin-right: 16px;
}
}
.caret-dropdown {
color: #fff;
}
.drop-content {
position: absolute;
right: 50px;
top: 44px;
padding: 4px;
box-shadow: inset 0 0 4px #2cedff;
background: rgba(24, 36, 51, .8);
border-radius: 4px;
transition: .5s;
.drop-content-item {
color: #fff;
position: relative;
width: 110px;
font-size: 13px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
height: 34px;
line-height: 34px;
box-sizing: border-box;
text-align: center;
cursor: pointer;
}
.drop-content-item.active {
color: rgba(44, 237, 255, .8);
background-color: rgba(24, 36, 51, .3);
}
.drop-content-item:hover {
color: rgba(44, 237, 255, .8);
background-color: rgba(24, 36, 51, .3);
}
}
.filter-action {
width: 56px;
height: 40px;
padding: 0 18px;
background: rgba(24, 36, 51, .7);
border-radius: 20px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: space-between;
z-index: 2;
.action-shrink {
width: 20px;
height: 20px;
background: url(/public/img/shrink.png) no-repeat;
background-size: 100% 100%;
cursor: pointer;
transition: all .5s linear;
transform: rotate(180deg);
}
.action-shrink.shrink-hidden {
transform: rotate(0deg);
background: url(/public/img/shrink.png) no-repeat;
}
.roam-play {
background: url(/public/img/play.png) no-repeat;
background-size: 100% 100%;
}
.roam-pause {
background: url(/public/img/pause.png) no-repeat;
background-size: 100% 100%;
}
.action-roam {
width: 20px;
height: 20px;
cursor: pointer;
}
}
.filter-action.showroam {
width: 96px;
}
}
}
.screen-search {
position: absolute;
top: 54px;
right: 0;
.search-content {
padding: 5px;
background: rgba(24, 36, 51, .5);
border-radius: 20px;
display: flex;
align-items: center;
position: relative;
}
input {
width: 0;
height: 30px;
font-size: 13px;
outline: none;
border: none;
padding: 0;
margin: 0;
background: transparent;
color: #fff;
transition: all .5s linear;
opacity: 0;
}
.input-focus {
width: 250px;
opacity: 1;
padding: 0 20px 0 12px;
}
.close-btn {
position: absolute;
top: 12px;
right: 50px;
width: 8px;
height: 8px;
cursor: pointer;
color: #fff;
}
.search {
margin: auto;
width: 30px;
height: 30px;
background: #5bde0b;
border-radius: 50%;
transition: all 1s;
position: relative;
}
.search:after {
content: "";
display: inline-block;
position: absolute;
top: 8px;
left: 8px;
width: 13px;
height: 13px;
background: url(/public/img/search.png) no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
.auto-suggestion {
position: absolute;
left: 10px;
top: 46px;
background: rgba(24, 36, 51, .8);
.suggestion-select-ul {
padding: 4px;
max-height: 350px;
overflow-y: auto;
}
}
}
}
.screen-tab {
.screen-tab-content {
display: flex;
align-items: center;
}
.tab-menu-item {
width: 150px;
height: 80px;
text-align: center;
margin: 0 10px;
cursor: pointer;
}
.tab-menu-text {
height: 80px;
line-height: 80px;
font-size: 14px;
font-weight: 400;
color: #2cedff;
}
.tab-menu {
background: url(/public/img/menu.png) no-repeat;
background-size: 100% 100%;
}
.tab-menu-active {
background: url(/public/img/menu_active.png) no-repeat;
background-size: 100% 100%;
.tab-menu-text {
font-weight: 700;
color: #fff;
}
}
}
.screen-main {
.header-tab {
display: flex;
align-items: center;
justify-content: space-between;
.tab-item {
padding: 0 4px;
text-align: center;
font-size: 15px;
font-weight: 400;
color: #fff;
position: relative;
cursor: pointer;
}
.tab-item-active {
font-weight: 700;
}
.tab-item-active:after {
content: "";
position: absolute;
left: 0;
bottom: -2px;
height: 8px;
width: 100%;
background: linear-gradient(90deg, rgba(48, 255, 221, 0), rgba(48, 255, 221, .8) 50%, rgba(48, 255, 221, 0));
}
}
}
.screen-main {
.icon-close {
width: 14px;
height: 14px;
background: url(/public/img/close.png) no-repeat;
background-size: 100% 100%;
cursor: pointer;
}
.simple-btn-bg {
display: inline-block;
height: 32px;
line-height: 32px;
border-radius: 16px;
color: #fff;
font-size: 14px;
padding: 0 18px;
border: 1px solid #32fde3;
background: #007767;
box-shadow: inset 0 0 8px #5aecf0;
cursor: pointer;
}
.simple-btn-bg:hover {
box-shadow: 0 0 8px #5aecf0, inset 0 0 8px #5aecf0;
}
.screen-check-content {
display: flex;
align-items: center;
height: 40px;
.box-btn {
width: 16px;
height: 16px;
margin-right: 6px;
cursor: pointer;
border: 1px solid #5bde0b;
border-radius: 3px;
}
.box-text {
font-size: 14px;
font-weight: 400;
line-height: 40px;
color: #fff;
white-space: nowrap;
}
.box-check {
background: url(/public/img/check.png) no-repeat 100% 100% !important;
}
}
}
.alarm-detail-info {
position: absolute;
left: 445px;
top: 0;
width: 390px;
background: rgba(24, 36, 51, .7);
border-radius: 4px;
padding: 0 12px 0 12px;
z-index: 20;
.action-group {
display: flex;
align-items: center;
width: 90px;
justify-content: space-between;
}
.detail-text-btn {
cursor: pointer;
color: #30ffdd;
font-size: 12px;
position: relative;
padding-right: 12px;
font-weight: 400;
}
.detail-content {
position: relative;
.content-head {
display: flex;
align-items: center;
justify-content: space-around;
.head-select {
width: calc(100% - 60px);
}
.head-sound {
width: 20px;
height: 20px;
cursor: pointer;
}
.sound-ring {
background: url(/public/img/b_ring.png) no-repeat;
background-size: 100% 100%;
}
}
.content-body {
min-height: 200px;
max-height: calc(60vh - 120px);
overflow-y: auto;
overflow-x: hidden;
margin-top: 10px;
.alarm-item {
display: flex;
.item-type {
width: 40px;
height: 45px;
background: url(/public/img/alarm_bg.png) 50% no-repeat;
font-size: 14px;
color: #fff;
text-align: center;
margin-top: 10px;
}
.item-content {
margin-left: 14px;
padding: 10px 0 10px 10px;
color: #fff;
width: calc(100% - 56px);
font-size: 14px;
border-left: 1px dashed rgba(225, 255, 255, .3);
position: relative;
.item-content-top {
display: flex;
justify-content: space-between;
padding: 0 4px;
font-size: 14px;
cursor: pointer;
.time {
color: #fff;
}
.status {
color: #fd8018;
}
}
.item-content-middle {
.alarm-info {
font-size: 14px;
font-weight: 700;
cursor: pointer;
}
}
}
.item-content:before {
content: "";
display: inline-block;
position: absolute;
left: -7px;
top: 12px;
width: 12px;
height: 12px;
background: url(/public/img/round.png) no-repeat;
background-size: 100% 100%;
}
}
}
.content-footer {
text-align: center;
.btn-prev {
color: #fff;
background: transparent;
.el-icon {
display: block;
font-size: 12px;
font-weight: 700;
}
}
.btn-next {
color: #fff;
background: transparent;
.el-icon {
display: block;
font-size: 12px;
font-weight: 700;
}
}
.el-pagination {
white-space: nowrap;
padding: 2px 5px;
color: #ffffff;
font-weight: 700;
button {
border: none;
padding: 0 6px;
display: inline-block;
font-size: 13px;
min-width: 35.5px;
height: 28px;
line-height: 28px;
vertical-align: top;
box-sizing: border-box;
background: rgba(255,255,255,0)!important;
}
.btn-prev{
background: rgba(255,255,255,0)!important;
}
.el-pager {
vertical-align: top;
margin: 0;
display: inline-block;
background: rgba(255,255,255,0)!important;
li {
vertical-align: top;
margin: 0;
display: inline-block;
padding: 0 4px;
font-size: 13px;
min-width: 35.5px;
height: 28px;
line-height: 28px;
box-sizing: border-box;
text-align: center;
background: rgba(255,255,255,0)!important;
}
}
.btn-next {
padding-left: 12px;
cursor: pointer;
margin: 0;
}
}
}
.el-loading-mask {
position: absolute;
z-index: 2000;
background-color: hsla(0, 0%, 100%, .9);
margin: 0;
top: 0;
right: 0;
bottom: 0;
left: 0;
transition: opacity .3s;
.el-loading-spinner {
top: 50%;
margin-top: -21px;
width: 100%;
text-align: center;
position: absolute;
.el-loading-spinner i {
color: #409eff;
}
}
}
}
}
.screen-main .left_arrow:before,
.screen-main .left_middle_arrow:before {
content: "";
display: inline-block;
position: absolute;
left: -15px;
width: 15px;
height: 17px;
/*background: url(/public/img/left_arrow.png) no-repeat;*/
background-size: 100% 100%;
}
[class*=" el-icon-"], [class^=el-icon-] {
font-family: element-icons !important;
speak: none;
font-style: normal;
font-weight: 400;
font-variant: normal;
text-transform: none;
line-height: 1;
vertical-align: baseline;
display: inline-block;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.el-dialog__headerbtn {
position: absolute;
top: 20px;
right: 20px;
padding: 0;
background: 0 0;
border: none;
outline: 0;
cursor: pointer;
font-size: 16px;
}
.item-textarea{
width: 250px;
}
.item-textarea>.el-textarea__inner{
resize: none;
width: 100%;
height: 70px;
margin-top: 8px;
outline: none;
color: #fff;
background: hsla(0,0%,100%,.26);
border: 1px solid hsla(0,0%,100%,.5);
}
</style>