factory_web/src/views/bigScreen/index.vue

3400 lines
86 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">{{ currentDay }}</span>
<span class="action-time">{{ currentWeek }} </span>
<span class="action-time">{{ currentTime }}</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="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="postList" 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">
<span>数据统计</span>
<div class="countTypeWrap">
<span :class="{ 'activeCount': countIndex === '1' }" @click="countINdexChange('1')">有卡</span>
<el-divider direction="vertical"></el-divider>
<span :class="{ 'activeCount': countIndex === '2' }" @click="countINdexChange('2')">在厂</span>
</div>
</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">{{ userCount.count_employee }}</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">{{ userCount.count_visitor }}</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">{{ userCount.count_remployee }}</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>{{ wStatistics.total_count }}</span>&nbsp;报警
</div>
</div>
<div class="alarm-content">
<div class="content-left">
<div class="alarm-danger"></div>
</div>
<div class="content-right">
<!--alarm-item-safe-->
<div v-for="item in wStatistics.details" :key="item.cate" class="alarm-item alarm-item-danger">
<span class="item-icon"></span>
<span class="item-name">{{ item.cate__name }}</span>
<span class="item-number" style="">{{ item.count }}</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(null)">
<span class="multiple-select-label">全部</span>
</div>
<div v-for="typeItem in warningTypes" :key="typeItem.id"
class="multiple-select-li" @click="warningTypeSelected(typeItem.id)">
<span title="超员报警" class="multiple-select-label">{{ typeItem.name }}</span>
</div>
</div>
</div>
</div>
<div class="head-sound sound-ring"></div>
</div>
<div class="content-body" v-if="warningData.total > 0">
<!--warningList-->
<div class="alarm-item" v-for="(item) in warningData.list" :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>
<div v-if="warningData.total > 0" class="content-footer" style="">
<el-pagination :page-size="warningData.params.page_size" :pager-count="5"
v-model:currentPage="warningData.params.page" layout="prev, pager, next"
:total="warningData.total" @current-change="handleCurrentChange" />
</div>
<div class="noData" v-else>
<img src="/img/nodata.png">
</div>
</div>
</div>
</div>
<div class="cockpit-info">
<div class="divider"></div>
<div class="simple-title area-simple-title">
<div class="header-tab">
<span class="tab-item">区域信息情况</span>
<!--<span class="tab-item" :class="{'tab-item-active':LBType==='2'}" @click="cockpitChange('2')">部门信息情况</span>-->
</div>
<div class="simple-btn-bg alarm-btn">需充电卡片0人</div>
</div>
<div class="info-body area-info-body">
<el-table :data="areaList" style="width: 100%;" :height="areaTableHeight" highlight-current-row
class="bigScreenTable" @row-click="areaRowClick">
<el-table-column label="区域" prop="name"></el-table-column>
<el-table-column label="当前人数" prop="count_people"></el-table-column>
</el-table>
<!--<el-tree
ref="group"
id="bigScreenTree"
node-key="id"
:data="group"
:current-node-key="''"
:highlight-current="true"
:expand-on-click-node="false"
@node-click="groupClick"
></el-tree>-->
</div>
<div class="alarm-detail-info left_arrow" v-if="areaDetail" style="width:150%">
<div class="simple-title">
<div><span>区域统计</span></div>
<span class="icon-close" @click="areaDetail = false"></span>
</div>
<div class="detail-content">
<div class="content-head">
<div @click="areaItemHandle(1)" :class="{'areaActive':areaShowType==1,'areaNavItem':1}" style="color:#ffffff">作业</div>
<div @click="areaItemHandle(2)" :class="{'areaActive':areaShowType==2,'areaNavItem':1}" style="color:#ffffff">监控</div>
<div @click="areaItemHandle(3)" :class="{'areaActive':areaShowType==3,'areaNavItem':1}" style="color:#ffffff">喇叭</div>
</div>
<div class="content-body">
<el-table class="bigScreenTable" v-if="areaShowType==1" :data="areaOperation" :height="300">
<el-table-column label="作业简介" prop="name"></el-table-column>
<el-table-column label="开始时间" prop="start_time"></el-table-column>
<el-table-column label="结束时间" prop="end_time"></el-table-column>
<el-table-column label="业务部门">
<template #default="scope">
<span v-if="scope.row.dept_ter_">{{scope.row.dept_ter_.name}}</span>
</template>
</el-table-column>
</el-table>
<el-table class="bigScreenTable" v-if="areaShowType==2">
<el-table-column label="设备编号"></el-table-column>
<el-table-column label="通道名称"></el-table-column>
<el-table-column label="类型"></el-table-column>
<el-table-column label="是否在线"></el-table-column>
</el-table>
<el-table class="bigScreenTable" v-if="areaShowType==3">
<el-table-column label="喇叭名称"></el-table-column>
<el-table-column label="喇叭音量"></el-table-column>
<el-table-column label="ip"></el-table-column>
<el-table-column label="在线状态"></el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</div>
<div style="display:flex;flex-direction:colum">
</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>
&lt;!&ndash;<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>&ndash;&gt;
</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-user" v-if="screenUser">
<div class="simple-title">
<div>人员信息</div>
<div class="simple-btn" @click="screenUser = false">关闭</div>
</div>
<div class="h100" style="">
<div class="person-info-header">
<div class="header-basic">
<div class="basic-img">
<div style="width: 100%; height: 100%;">
<img :src="screenUserItem.photo" height="100%" width="100%">
</div>
</div>
<div class="basic-info">
<div class="info-item">
<span class="info-item-name">姓名:</span>
<span class="info-item-info">{{ screenUserItem.name }}</span>
</div>
<div class="info-item">
<span class="info-item-name">类型:</span>
<span class="info-item-info" v-if="screenUserItem.type === 'employee'">内部员工</span>
<span class="info-item-info" v-else>访客</span>
</div>
<div class="info-item">
<span class="info-item-name">定位卡:</span>
<span class="info-item-info">{{ screenUserItem.id }}</span>
</div>
<div class="info-item">
<span class="info-item-name">部门:</span>
<span class="info-item-info">{{ screenUserItem.belong_dept_name }}</span>
</div>
<div class="info-item">
<span class="info-item-name">岗位:</span>
<span class="info-item-info">{{ screenUserItem.post_name }}</span>
</div>
</div>
<div class="simple-btn basic-btn" @click="showUserDetail">查看详情</div>
</div>
</div>
<div class="basic-btn-group">
<div v-if="tracking" class="danger-btn-bg btn-item" @click="userUnTrack">
<span class="trackImg"></span>
<span>取消跟踪</span>
</div>
<div v-else class="danger-btn-bg btn-item" @click="userTrack">
<span class="trackImg"></span>
<span>跟踪</span>
</div>
<div class="simple-btn-bg btn-item">
<span class="viewImg"></span>
<span>轨迹</span>
</div>
</div>
<div class="screen-per-list">
<el-table :data="userList" style="width: 100%" :row-key="row => { return row.id }"
highlight-current-row class="bigScreenTable" @row-click="userRowClick">
<el-table-column label="姓名">
<template #default="scope">
<span v-if="scope.row.my_info.employee_">{{ scope.row.my_info.employee_.name }}</span>
</template>
</el-table-column>
<el-table-column label="部门">
<template #default="scope">
<span v-if="scope.row.my_info.employee_">{{ scope.row.my_info.employee_.belong_dept_name
}}</span>
</template>
</el-table-column>
<el-table-column label="岗位">
<template #default="scope">
<span v-if="scope.row.my_info.employee_">{{ scope.row.my_info.employee_.post_name
}}</span>
</template>
</el-table-column>
</el-table>
</div>
<!--人员选详细信息-->
<div class="person-cert right_arrow" v-if="screenUserDetail">
<div class="simple-title">
<div>人员信息</div>
<div class="icon-close" @click="screenUserDetail = false"></div>
</div>
<div class="basic-head">
<div class="header-tab">
<span class="tab-item tab-item-active">基本信息</span>
<!--<span class="tab-item">资质证件</span>-->
</div>
</div>
<div class="basic-info">
<div class="info-item">
<span class="info-item-name">姓名:</span>
<span class="info-item-info">{{ screenUserItemDetail.name }}</span>
</div>
<div class="info-item">
<span class="info-item-name">姓别:</span>
<span class="info-item-info">{{ screenUserItemDetail.gender }}</span>
</div>
<div class="info-item">
<span class="info-item-name">定位卡号:</span>
<span class="info-item-info">202106180008</span>
</div>
<div class="info-item">
<span class="info-item-name">部门:</span>
<span class="info-item-info" v-if="screenUserItemDetail.belong_dept_">{{
screenUserItemDetail.belong_dept_.name
}}</span>
</div>
<div class="info-item">
<span class="info-item-name">岗位:</span>
<span class="info-item-info" v-if="screenUserItemDetail.post_">{{
screenUserItemDetail.post_.name
}}</span>
</div>
<div class="info-item">
<span class="info-item-name">证件类型:</span>
<span class="info-item-info">中华人民共和国居民身份证</span>
</div>
<div class="info-item">
<span class="info-item-name">证件号码:</span>
<span class="info-item-info">{{ screenUserItemDetail.id_number }}</span>
</div>
<div class="info-item">
<span class="info-item-name">联系电话:</span>
<span class="info-item-info">{{ screenUserItemDetail.phone }}</span>
</div>
</div>
<div class="basic-cert" style="display: none;">
<div class="el-empty">
<div class="el-empty__image" style="width: 160px;">
<img src="/img/nodata.png" ondragstart="return false">
</div>
<div class="el-empty__description">
<p></p>
</div>
</div>
</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="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-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,
userMaskerLayer: null,
jobDomMarkerLayer: null,
riskMarkerLayer: null,//风险区域
areaMarkerLayer: null,//区域展示
pointMarkerLayer: null,//点位图层
polygonMaskerLayer: null,//危险作业
cameraMaskerLayer: null,//摄像头
materialsMaskerLayer: null,//消防物资
carsMaskerLayer: null,//车辆
manMaskerLayer: null,//人员
flyManager: null,
eareMarker: null,
dropIndex: '1',
countIndex: '2',
areaShowType: '1',
markList: [false, false, false, false, false, false],
autoRun: false,
tracking: false,
areaDetail: false,
screenJob: false,
screenUser: false,
screenRisk: false,
screenWarning: false,
screenUserDetail: false,
warningTypeShow: false,
showUserSelect: false,
warningDetail: false,
filterCtrlFocus: true,
warningListTotal: 0,
warningData: {
list: [],
total: 0,
params: {
page: 1,
page_size: 10,
start_create: '',
}
},
cateAggForm: {
start_create: '',
is_handled: false,
completed: true
},
wStatistics: {},
warningTypes: [],//事件类型
Vchannels: [],//摄像头列表
warningList: [],//报警事件列表
speakerList: [],//喇叭列表
userList: [],//人员列表
deptList: [],//部门列表
postList: [],//岗位列表
dangerList: [],//岗位列表
areaList: [],//区域列表/风险区域列表
areaOperation:[],
//数据统计
userCount: {
total: 0,
count_employee: 0,//内部员工
count_remployee: 0,//访客
count_visitor: 0//相关方
},
screenJobItem: {},//危险作业信息
screenRiskItem: {},//风险区域信息
screenWarningItem: {},//风险区域信息
screenUserItem: {},//人员信息
screenUserItemDetail: {},//人员信息
url: '',
params: {
json: {
data: {
channelId: "",
streamType: "2",
type: "flv",
}
},
code: 'video_realtime'
},
group: [],
groupsProps: {
value: "id",
label: "name",
multiple: true,
checkStrictly: true,
},
filters: {
type: '',
dept: '',
keyword: '',
},
warningId: '',
warningForm: {
handle_desc: '',
mark: '1',
},
LBType: '1',
userMarker: {},
todayDate: '',
currentDay: '',
currentTime: '',
currentWeek: '',
areaTableHeight: null,
}
},
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() {
let that = this;
let date = new Date();
that.timeNow = date.getDay();
that.todayDate = this.warningData.params.start_create = this.cateAggForm.start_create = this.$TOOL.dateFormat(new Date(), 'yyyy-MM-dd');
that.showTime();
setInterval(() => {
that.showTime();
}, 1000);
window.map = new jsmap.JSMap({
mapType: jsmap.JSMapType.MAP_3D,
container: 'mapContainer',
mapServerURL: 'data/map',
enableShadows: false, //是否开启阴影 默认false
enableLighting: false, //是否开发光照 默认false
showBuildingMarker: true,
// 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: 550,
// 旋转角(单位°)
rotate: 0,
//倾斜角(单位°)
tilt: 45,
}
});
window.map.openMapById('0000');
window.map.on('loadComplete', e => {
that.riskMaskerLayers();//风险区域
that.userMaskerLayers();//人员
that.cameraMaskerLayers();//摄像头
that.domMarkerLayers();//监控视频
that.polygonMarkerLayers();//危险作业
that.speakersMaskerLayers();//喇叭
that.jobDomMarkerLayers();//危险作业图片
that.areaMarkerLayers();//危险作业图片
let compassControl = new jsmap.JSCompassControl({
position: jsmap.JSControlPosition.LEFT_TOP,
offset: {
x: 420,
y: 50
}
});
window.map.addControl(compassControl);
let zoomControl = new jsmap.JSZoomControl({
position: jsmap.JSControlPosition.LEFT_TOP,
offset: {
x: 450,
y: 5
}
});
window.map.addControl(zoomControl);
});
window.map.on('mapClickNode', event => {
let item = event;
let that = this;
let type = event.nodeType.toString();
console.log(type === 'Symbol(icontextmaker)');
debugger;
console.log(item)
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);
}
});
this.domMarkerLayer.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 = () => {
newEle2.setAttribute("style", "width: 327px;height:183px;background:url(/img/rotate_line.png) no-repeat;background-size:60px 60px;background-position:center center;-webkit-animation: rotate 4s linear infinite;animation: rotate 4s linear infinite;");
this.$API.am.video.item.req(this.params).then(res => {
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();
newEle2.setAttribute("style", "width: 327px;height:183px;background:url(/img/rotate_line.png) no-repeat;background-size:60px 60px;background-position:center center;");
flvPlayer.play();
}
})
};
close.onclick = () => {
let nodeMark = document.getElementById(item.markers[0].id);
nodeMark.remove();
}
} else {
//人员
that.screenUserItem = item.properties.get("employee");
that.screenUser = true;
// debugger;
window.map.flyToMarker(that.userMarker[that.screenUserItem.mac], {
duration: 1000
})
}
}
} else if (type === 'Symbol(polygonmarker)') {
//危险作业
this.screenRisk = false;
this.screenWarning = false;
this.screenJob = true;
}
} else {
}
});
//左侧数据统计
this.getManCount();//人员统计$$
this.getWarnings();//报警统计$$
// this.getAreas();//区域/风险区域$$
this.getGroup();//部门$$
//右上展示数据
this.getDangers();//危险作业$$
this.getAllPost();//岗位
this.getWarningTotal();//事件统计
this.getWarningType();//事件类型
let pageHeight = document.getElementsByClassName('screen-cockpit')[0].clientHeight;
let height1 = document.getElementsByClassName('cockpit-count')[0].clientHeight;
let height2 = document.getElementsByClassName('cockpit-alarm')[0].clientHeight;
let height3 = document.getElementsByClassName('area-simple-title')[0].clientHeight;
let domHeight = pageHeight - height1 - height2 - 84;
let areaTableHeight = domHeight - height3 - 10;
this.areaTableHeight = areaTableHeight;
document.getElementsByClassName('cockpit-info')[0].style.height = domHeight + 'px';
// document.getElementsByClassName('area-info-body')[0].style.height = simpleBodyHeight + 'px';
setInterval(function () { }, 3000)
},
methods: {
showTime() {
this.currentTime = this.$TOOL.dateFormat(new Date(), 'hh:mm:ss');
this.currentWeek = this.$TOOL.dateFormat(new Date(), 'week');
this.currentDay = this.$TOOL.dateFormat(new Date(), 'yyyy年MM月dd日')
},
areaItemHandle(index){
this.areaShowType = index;
},
//报警统计
getWarningTotal() {
let that = this;
that.$API.ecm.event.cateAgg.req(that.cateAggForm).then(res => {
if (res.err_msg) { } else {
that.wStatistics = res;
}
})
},
//报警类型
getWarningType() {
let that = this;
that.$API.ecm.event_cate.list.req().then(res => {
if (res.err_msg) { } else {
that.warningTypes = res.results;
}
})
},
//区域点击事件
areaRowClick(data) {
let that = this;
that.areaDetail = true;
this.$API.opm.operation.list.req({area:data.id}).then(res=>{
console.log(res)
that.areaOperation = res.results;
})
// let points = data.third_info.xx_rail.detail.polygon.points[0];
window.map.flyToPosition(new jsmap.JSPoint(114.63168864138028, 38.81254802029822, 0), { duration: 1000 });
},
//岗位
getAllPost() {
this.$API.system.post.list.req({ page: 0 }).then(res => {
let arr = [];
let children = genTree(res);
for (let i = 0; i < 4; i++) {
let obj = new Object();
if (i === 0) {
obj.id = '';
obj.name = '全部';
obj.label = '全部';
} else if (i === 1) {
obj.id = '';
obj.name = '内部员工';
obj.label = '内部员工';
obj.children = children;
} else if (i === 2) {
obj.id = '';
obj.name = '相关方';
obj.label = '相关方';
} else if (i === 3) {
obj.id = '';
obj.name = '访客';
obj.label = '访客';
}
arr.push(obj)
}
this.postList = arr;
})
},
//人员统计
getManCount() {
let that = this;
if (that.countIndex === '2') {
that.$API.third.blt.countNow.req().then(res => {
if (res.err_msg) {
} else {
that.userCount = { ...res };
}
})
} else {
that.$API.third.blt.countBind.req().then(res => {
if (res.err_msg) {
} else {
that.userCount = { ...res };
}
})
}
},
//有卡/在线切换
countINdexChange(index) {
this.countIndex = index;
this.getManCount();
},
//获取危险作业
getDangers() {
let that = this;
that.$API.opm.operation.list.req().then(res => {
if (res.err_msg) {
} else {
that.dangerList = res.results;
}
})
},
//区域列表/获取风险区域
getAreas() {
let that = this;
let areaList = that.$TOOL.data.get('qyjyAreaList');
that.showRiskMarkers(areaList);
},
//获取人员列表(全部在线标签列表信息)
getAllMen() {
let that = this;
that.$API.third.blt.all.req().then(res => {
if (res.err_msg) {
} else {
that.userList = res.filter(item => {
return item.my_info.employee
});
that.showUserMarkers(that.userList);
}
})
},
handleCurrentChange() {
this.getWarnings();
},
//获取报警列表
getWarnings() {
this.$API.ecm.event.list.req(this.warningData.params).then(res => {
if (res.err_msg) {
} else {
// debugger;
this.warningData.list = res.results.filter(item => {
return item.handle_user === null;
});
this.warningData.total = this.warningData.list.length;
}
})
},
//警报类型查询
warningTypeSelected(id) {
// debugger;
let that = this;
this.warningTypeShow = false;
let params = new Object();
params = that.warningData.params;
if (id !== null) {
params.cates = id;
}
that.$API.ecm.event.list.req(params).then(res => {
if (res.err_msg) { } else {
that.warningData.list = res;
}
})
//获取新数据
},
//加载部门数据
getGroup() {
this.$API.system.dept.list.req({ page: 0 }).then(res => {
if (res.err_msg) {
} else {
this.group = genTree(res);
// console.log(this.group);
}
});
},
//选择部门
groupClick(data) {
// console.log(data);
},
//获取人员详细信息
showUserDetail() {
this.screenUserDetail = true;
this.$API.hrm.employee.item.req(this.screenUserItem.id).then(res => {
// console.log(res);
this.screenUserItemDetail = res;
})
},
//人员类型选择
userFilter() {
let that = this;
this.showUserSelect = false;
this.screenUser = true;
that.screenUserItem.name = this.userList[0].my_info.employee_.name;
that.screenUserItem.type = this.userList[0].my_info.employee_.type;
that.screenUserItem.id = this.userList[0].my_info.employee_.id;
that.screenUserItem.photo = this.userList[0].my_info.employee_.photo ? this.userList[0].my_info.employee_.photo : '';
that.screenUserItem.post_name = this.userList[0].my_info.employee_.post_name ? this.userList[0].my_info.employee_.post_name : '';
that.screenUserItem.belong_dept_name = this.userList[0].my_info.employee_.belong_dept_name ? this.userList[0].my_info.employee_.belong_dept_name : '';
},
//风险区域layer
riskMaskerLayers() {
let that = this;
that.riskMarkerLayer = new jsmap.JSBoxMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(that.riskMarkerLayer);
that.getAreas();//区域/风险区域$$
},
//摄像头layer
cameraMaskerLayers() {//图标文字
let that = this;
that.cameraMaskerLayer = new jsmap.JSIconTextMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(that.cameraMaskerLayer);
that.getVchannels();
},
//监控视频播放
domMarkerLayers() {
let that = this;
that.domMarkerLayer = new jsmap.JSDomMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: true
});
window.map.addLayer(that.domMarkerLayer);
},
jobDomMarkerLayers() {
let that = this;
that.jobDomMarkerLayer = new jsmap.JSDomMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(that.jobDomMarkerLayer);
that.showJobDomMarkers();
},
//点击区域显示图层
areaMarkerLayers() {
let that = this;
that.areaMarkerLayer = new jsmap.JSDomMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: true
});
window.map.addLayer(that.areaMarkerLayer);
},
//员工标记layer
userMaskerLayers() {//图标文字
let that = this;
that.userMaskerLayer = new jsmap.JSIconTextMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(that.userMaskerLayer);
that.getAllMen();
},
//喇叭layer
speakersMaskerLayers() {//消防物资
let that = this;
that.materialsMaskerLayer = new jsmap.JSIconTextMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(that.materialsMaskerLayer);
//获取喇叭列表
this.getSpeakers();
},
//危险作业Layer
polygonMarkerLayers() {//危险作业
let that = this;
that.polygonMaskerLayer = new jsmap.JSPolygonMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(that.polygonMaskerLayer);
that.showPolygonMarkers();
},
//风险区域
showRiskMarkers(list) {
let that = this;
if(list.length>0){
list.forEach(item => {
let boxMarker = null;
let pointsList = [], floorId = null;
if (item.third_info.xx_rail!==null&&item.third_info.xx_rail!==undefined) {
floorId = item.third_info.xx_rail.detail.floorId;
let points = item.third_info.xx_rail.detail.polygon.points;
pointsList = points.map(item => {
let obj = item;
obj.z = 0;
return obj
});
let maskColor = '',strokeColor='';
if(item.level===10){
maskColor = 'rgba(0,0,255,.44)';//蓝色
strokeColor = '#0000ff';
}else if(item.level===20){
maskColor = 'rgba(255,255,0,0.44)';//黄色
strokeColor = '#ffff00';
}else if(item.level===30){
maskColor = 'rgba(255,153,0,0.44)';//橙色
strokeColor = '#ff9900';
}else if(item.level===40){
maskColor = 'rgba(255,0,0,0.44)';//红色
strokeColor = '#ff0000';
}
boxMarker = new jsmap.JSBoxMarker({
id: item.id,
position: pointsList,
floorId: floorId,//楼层id
color: maskColor,//颜色
height: 0,//基底高度
stretchHeight: 25,//拉伸高度
strokeColor: strokeColor,//边线颜色
show: true, //是否显示
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),//可见范围
});
// debugger;
console.log(that.riskMarkerLayer);
that.riskMarkerLayer.addMarker(boxMarker);
}
})
}
},
//摄像头
showCameraMarkers(list) {
// debugger;
let that = this;
if(list.length>0){
list.forEach(item => {
let cameraMarker = null;
let pixel = item.my_info.location;
if(pixel.x){
cameraMarker = new jsmap.JSIconTextMarker({
id: item.channelCode,
position: { x: pixel.x, y: pixel.y, z: pixel.z }, //坐标
floorId: pixel.floorId, //楼层id,默认为1地面
image: "/img/camera.svg",
text: item.channelName,
font: 'lighter 12px serif',
fontColor: '#ffffff',
imageHeight: 25,
imageWidth: 25,
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, 1),
show: true,
callback: () => {
}
});
// debugger;
console.log(that.cameraMaskerLayer)
that.cameraMaskerLayer.addMarker(cameraMarker);
}
})
}
},
//喇叭
showSpeakersMarkers(list) {
let that = this;
list.forEach(item => {
// debugger;
console.log(item)
let materialMarker = null;
let pixel = item.my_info.location;
materialMarker = new jsmap.JSIconTextMarker({
id: item.id,
position: {x: pixel.x, y: pixel.y, z: pixel.z}, //坐标
floorId: pixel.floorId, //楼层id,默认为1地面
image: "/img/sound.svg",
text: item.name,
font: '10px sans-serif',
fontColor: '#ffffff',
imageHeight: 25,
imageWidth: 25,
// 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, 1),
show: true
});
this.materialsMaskerLayer.addMarker(materialMarker);
})
},
//人员
showUserMarkers(userList) {
let that = this;
//人员mark
let iconTextMarker = null;
//标记图片
let userImage = '';
if (userList.length > 0) {
// debugger;
console.log(userList);
// debugger;
let lng = [114.62923138539462, 114.6315404372349];//经度
let i = 0;
iconTextMarker = userList[0].mac;
let employee_ = userList[0].my_info.employee_;
employee_.mac = userList[0].mac;
console.log(userList[0].my_info.employee_.type)
// debugger;
if (userList[0].my_info.employee_.type === 'employee') {
userImage = "/img/employee.png"
} else if (serList[0].my_info.employee_.type === 'remployee') {
userImage = "/img/employee.png"
} else {
userImage = "/img/visitor.png"
}
that.userMarker[iconTextMarker] = new jsmap.JSIconTextMarker({
id: userList[0].my_info.code,
position: { x: 114.62923138539462, y: 38.8133418942645, z: 0 }, //坐标
floorId: 1, //楼层id,默认为1地面
image: userImage,
text: employee_.name,
font: '10px sans-serif',
fontColor: '#ffffff',
imageHeight: 25,
imageWidth: 25,
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, 1),
show: true,
properties: {
employee: employee_
},
});
that.userMaskerLayer.addMarker(that.userMarker[iconTextMarker]);
setInterval(function () {
i = (i + 1) % 2;
that.userMaskerLayer.updateMarkerPosition(that.userMarker[iconTextMarker], {
floorId: 1,
position: { x: lng[i], y: 38.8133418942642, z: 0 },
animate: { duration: 10000, }
});//动画效果,持续时间一秒
}, 11000)
}
/*setInterval(function () {
that.refreshUserMarker();
}, 8500)*/
},
//更新人员标记
refreshUserMarker() {
let that = this;
that.$API.third.blt.all.req().then(res => {
if (res.err_msg) {
} else {
let userList = res.filter(item => {
return item.my_info.employee
});
let addUser = that.func(userList, that.userList)[0];
let refreshList = that.func(userList, that.userList)[1];
let subUser = that.func(that.userList, userList)[0];
that.userList = refreshList.concat(addUser);//更新userList
that.showUserMarkers(addUser);//增加新进在线员工
//that.userMaskerLayer.removeMarker(sectorMarker)(addUser);//删除离线员工
refreshList.forEach(item => {
that.userMaskerLayer.updateMarkerPosition(that.userMarker[item.id], {
floorId: 1,
position: { x: item.longitude, y: item.latitude, z: item.z },
animate: { duration: 1000, }
});//动画效果,持续时间一秒
})
}
})
},
//比较两次获取的人数的变动 func(a,b)//a与b相比多出来的
func(arr1, arr2) {
/*var arr1 = [{name:1},{name:2},{name:3},{name:4}];
var arr2 = [{name:2},{name:3},{name:4},{name:5}];*/
let arr = [];
let list = [];
let bool = false;
let same = false;
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
//遇到相同直接跳出循环
if (arr1[i].id === arr2[j].id) {
same = i;
bool = false;
break;
} else {
same = false;
bool = i;
}
}
if (same !== false) list.push(arr1[same]);
if (bool !== false) arr.push(arr1[bool]);
}
let arrList = [arr, list];
// debugger;
console.log(arrList);
return arrList;
},
//危险作业
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);
},
//危险作业图片标记
showJobDomMarkers() {
let domMarker = new jsmap.JSDomMarker({
id: 'polygonmark',
position: new jsmap.JSPoint(114.63168864138028, 38.81254802029822, 0),
floorId: 1,
depthTest: true,
content: `<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 style="background-image: url('/img/speaker.png');width: 60px;height: 80px;"></div></div>`,
offset: jsmap.JSControlPosition.RIGHT_CENTER,
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),
marginOffset: {
x: 0,
y: 0
},
properties: {
type: 0,
},
callback: (node) => {
console.log(node);
}
});
this.jobDomMarkerLayer.addMarker(domMarker);
},
//显示人员类型选项
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
},
//页面maker的展示控制
markerClick(index) {
let arr = [];
let that = this;
that.markList[index] = !that.markList[index];
if (index === 0) {
if (that.markList[0]) {
arr = that.markList.map(value => {
return true
})
} else {
arr = that.markList.map(value => {
return false
})
}
that.markList = arr;
} else {
let list = that.markList.slice(1, 7);
if (list.indexOf(true) > -1 && list.indexOf(false) < 0) {
that.markList[0] = true;
} else {
that.markList[0] = false;
}
}
// if (that.markList[1]) {
// window.map.showBuildingMarker = true;
// } else {
// window.map.showBuildingMarker = false;
// }
if (that.markList[1]) {
that.cameraMaskerLayer.show = true;
} else {
that.cameraMaskerLayer.show = false;
}
if (that.markList[2]) {
that.materialsMaskerLayer.show = true;
} else {
that.materialsMaskerLayer.show = false;
}
if (that.markList[3]) {
that.jobDomMarkerLayer.show = true;
that.polygonMaskerLayer.show = true;
} else {
that.jobDomMarkerLayer.show = false;
that.polygonMaskerLayer.show = false;
}
if (that.markList[4]) {
that.riskMarkerLayer.show = true;
} else {
that.riskMarkerLayer.show = false;
}
if (that.markList[5]) {
that.userMaskerLayer.show = true;
} else {
that.userMaskerLayer.show = false;
}
},
//获取摄像头列表
getVchannels() {
let that = this;
// debugger;
that.$API.am.tdevice.vchannel.req({pageSize:999}).then(res => {
if (res.err_msg) {
that.$message.error(res.err_msg);
} else {
that.Vchannels = res.pageData;
that.showCameraMarkers(res.pageData);
}
});
},
//获取喇叭列表
getSpeakers() {
let that = this;
that.$API.am.tdevice.speaker.req().then(res => {
if (res.err_msg) {
that.$message.error(res.err_msg);
} else {
that.speakerList = res.rows;
that.showSpeakersMarkers(res.rows);
}
});
},
//报警详情
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() {
let that = this;
that.warningForm.mark = parseInt(that.warningForm.mark);
that.$API.ecm.event.handle.req(that.warningId, that.warningForm).then(res => {
if (res.err_msg) {
} else {
that.screenWarning = false;
that.getWarnings();
}
})
},
//员工列表点击
userRowClick(row) {
// debugger;
console.log(row);
let that = this;
that.screenUserItem.name = row.my_info.employee_.name;
that.screenUserItem.type = row.my_info.employee_.type;
that.screenUserItem.id = row.my_info.employee_.id;
that.screenUserItem.photo = row.my_info.employee_.photo ? row.my_info.employee_.photo : '';
that.screenUserItem.post_name = row.my_info.employee_.post_name ? row.my_info.employee_.post_name : '';
that.screenUserItem.belong_dept_name = row.my_info.employee_.belong_dept_name ? row.my_info.employee_.belong_dept_name : '';
},
//人员追踪
userTrack() {
this.tracking = true;
window.map.trackMarker(this.userMarker[this.screenUserItem.mac], {
range: 150
})
},
userUnTrack() {
window.map.cancelTrack();
this.tracking = false;
},
//区域/部门切换
cockpitChange(index) {
this.LBType = index;
},
/*pointMaskerLayers() {//点
this.pointMarkerLayer = new jsmap.JSPointMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: false
});
window.map.addLayer(this.pointMarkerLayer);
this.showPointMarkers();
},*/
//选择人员分类
changeDropIndex(index) {
let that = this;
that.dropIndex = index;
setTimeout(function () {
that.showUserSelect = false;
}, 300)
},
},
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;
}
.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
background: rgba(48, 255, 220, 0);
}
#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 {
width: 100%;
height: 100%;
.screen-per-list {
height: calc(100% - 270px);
}
.danger-btn-bg {
display: inline-block;
height: 32px;
line-height: 32px;
border-radius: 16px;
color: #fff;
font-size: 14px;
padding: 0 18px;
border: 1px solid #ffc679;
background: #dd8000;
box-shadow: inset 0 0 8px #fda732;
cursor: pointer;
}
.danger-btn-bg:hover {
box-shadow: 0 0 8px #fda732, inset 0 0 8px #fda732;
}
.h100 {
height: 100%;
}
.person-info-header {
position: relative;
.basic-btn {
position: absolute;
right: 0;
top: 0;
}
.header-basic {
margin-bottom: 8px;
display: flex;
justify-content: space-between;
.basic-img {
width: 104px;
height: 144px;
}
.basic-info {
width: calc(100% - 130px);
.info-item {
font-size: 14px;
margin-bottom: 6px;
display: flex;
.info-item-name {
color: #fff;
font-weight: 400;
flex-shrink: 0;
}
.info-item-info {
color: #fff;
font-weight: 500;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
}
}
.basic-btn-group {
margin: 12px 0;
display: flex;
justify-content: space-between;
.btn-item {
width: 48%;
text-align: center;
display: flex;
align-items: center;
justify-content: center;
.trackImg {
width: 16px;
height: 16px;
margin-right: 4px;
background-image: url("/public/img/v_track.png");
}
.viewImg {
width: 16px;
height: 16px;
margin-right: 4px;
background-image: url("/public/img/v_view.png");
}
img {
width: 16px;
height: 16px;
margin-right: 4px;
}
}
}
.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;
}
}
}
}
}
}
}
.screen-user {
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;
}
.common-basic-info {}
.person-cert {
right: 410px;
top: 0;
width: 390px;
max-height: 630px;
border-radius: 4px;
padding: 0 20px 20px;
position: absolute;
background: rgba(24, 36, 51, .7);
.basic-head {
position: relative;
margin-bottom: 16px;
.header-tab {
width: 160px;
}
}
.basic-info {
min-height: 400px;
.info-item {
font-size: 14px;
height: 30px;
display: flex;
align-items: center;
}
.info-item-name {
color: #fff;
font-weight: 400;
flex-shrink: 0;
}
.info-item-info {
color: #fff;
font-weight: 500;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
.right_arrow:before {
content: "";
display: inline-block;
position: absolute;
right: -15px;
top: 14px;
width: 15px;
height: 17px;
transform: rotate(180deg);
background: url(/public/img/left_arrow.png) no-repeat;
background-size: 100% 100%;
}
}
.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-info {
.normal {
font-size: 12px;
font-weight: 400;
color: #fff;
}
.large {
font-size: 30px;
font-weight: 400;
color: #fff;
}
}
}
}
.simple-title {
.countTypeWrap {
font-size: 14px;
span {
cursor: pointer;
}
.activeCount {
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;
}
}
}
}
.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% - 130px);
overflow: hidden;
height: fit-content;
.alarm-item {
min-width: 50%;
height: 26px;
font-size: 14px;
font-weight: 700;
padding-left: 8px;
position: relative;
display: flex;
align-items: center;
float: left;
.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: 520px;
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;
z-index: 10;
max-height: 50vh;
overflow-y: scroll;
.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: 5px;
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;
}
}
.noData {
width: 100%;
height: 300px;
img {
margin: 50px auto;
display: block;
}
}
}
.alarm-detail-info {
position: absolute;
left: 480px;
top: -73px;
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%;
}
.areaNavItem {
color: #ffffff;
padding: 8px 16px;
border-radius: 15px;
}
.areaActive {
border: 1px solid #32fde3;
background: #007767;
box-shadow: inset 0 0 8px #5aecf0;
}
[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);
}
#mapContainer {
width: 100%;
height: 100%;
}
#bigScreenUserTable {
color: #ffffff;
}
.bigScreenTable.el-table {
background-color: rgba(255, 255, 255, 0);
color: #ffffff;
}
.bigScreenTable.el-table thead {
color: rgba(255, 255, 255, 1);
}
.bigScreenTable.el-table tr {
background-color: rgba(255, 255, 255, 0);
}
.bigScreenTable.el-table .el-table__body-wrapper {
background-color: rgba(255, 255, 255, 0);
}
.bigScreenTable.el-table th.el-table__cell {
background-color: rgba(255, 255, 255, 0);
}
.bigScreenTable.el-table td.el-table__cell,
.bigScreenTable.el-table th.el-table__cell.is-leaf {
border-bottom: none;
}
.bigScreenTable.el-table .el-table__body tr:hover>td.el-table__cell {
background-color: rgba(255, 255, 255, 0);
}
.bigScreenTable.el-table .el-table__body tr.current-row>td.el-table__cell {
background-color: rgba(255, 255, 255, .1);
}
</style>