factory_web/src/views/bigScreen/index.vue

4033 lines
104 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">{{$store.state.global.baseName}}</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">
<el-tree
ref="group"
id="bigScreenTree"
node-key="id"
:data="postList"
show-checkbox
:current-node-key="''"
:highlight-current="true"
:expand-on-click-node="true"
@check="handleChange"
></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="输入姓名/定位卡号/车牌号进行查找" v-model="searchKeyWord" class="input-focus">
<span class="close-btn el-icon-circle-close" style="display: none;"></span>
<div class="search" @click="searchOne(searchKeyWord)"></div>
<!-- <div class="auto-suggestion" style="display: none;">
<div class="suggestion-select-ul"></div>
</div> -->
</div>
<div style="text-align: right;margin-top: 15px;">
<div v-if="tracking&&!screenUser" class="danger-btn-bg btn-item" @click="userUnTrack">
<span class="trackImg"></span>
<span>取消跟踪</span>
</div>
<div v-if="lineTracking&&!screenUser" class="simple-btn-bg btn-item" @click="userLineTrackCancel">
<span class="viewImg"></span>
<span>取消轨迹</span>
</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 class="count-list-item">
<div class="item-img item-img4"></div>
<div class="item-info">
<div title="司机" class="normal">司机</div>
<div class="bottom">
<span class="large">{{ userCount.count_driver }}</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 style="display:flex">
<div class="alarm-danger"></div>
<div id="eventScrenWrap">
<div id="eventScrenItem">
<div v-for="(item1,index1) in warningData.list" :key="item1.id">
<text v-if="index1<3">{{item1.voice_msg}}</text>
</div>
</div>
</div>
</div>
<div class="content-right">
<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" @click="allWarningView">查看所有</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"> -->
<div class="multiple-select-tags" @click="warningTypeChange">
<span class="multiple-select-input">{{eventTypeName}}</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,typeItem.name)">
<span title="超员报警" class="multiple-select-label">{{ typeItem.name }}</span>
</div>
</div>
</div>
</div>
<div v-if="speakerPlayStatus" class="head-sound sound-ring" @click="speakerPasue"></div>
<div v-else class="head-sound sound-quiet" @click="speakerPlay"></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>
</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="areaDetailClose"></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 @click="areaItemHandle(4)" :class="{'areaActive':areaShowType==4,'areaNavItem':1}" style="color:#ffffff">人员</div>
</div>
<div class="content-body">
<el-table class="bigScreenTable" v-if="areaShowType==1" :data="areaOperation" :height="300" @row-click="areaOperationRowClick">
<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" :data="areaVideo" v-if="areaShowType==2" :height="300" @row-click="showVchannel">
<el-table-column label="通道名称" prop="name"></el-table-column>
<el-table-column label="所在区域" prop="area_name"></el-table-column>
<el-table-column label="code" prop="code"></el-table-column>
</el-table>
<el-table class="bigScreenTable" :data="areaSpeaker" v-if="areaShowType==3" :height="300">
<el-table-column label="喇叭名称" prop="name"></el-table-column>
<el-table-column label="所在区域" prop="area_name"></el-table-column>
<el-table-column label="唯一标识" prop="code"></el-table-column>
</el-table>
<el-table class="bigScreenTable" :data="areaUser" v-if="areaShowType==4" :height="300" @row-click="areaEmployeeRowClick">
<el-table-column label="人员姓名" prop="my_info.employee_.name"></el-table-column>
<el-table-column label="人员姓名" prop="my_info.employee_.type"></el-table-column>
<el-table-column label="定位卡号" prop="mac"></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 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 style="width: 100%; height: 100%;" :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&&!lineTracking" class="danger-btn-bg btn-item" @click="userTrack">
<span class="trackImg"></span>
<span>跟踪</span>
</div>
<div v-else-if="!tracking&&lineTracking" class="danger-btn-bg btn-item">
<span class="trackImg"></span>
<span>跟踪</span>
</div>
<div v-else-if="tracking" class="danger-btn-bg btn-item" @click="userUnTrack">
<span class="trackImg"></span>
<span>取消跟踪</span>
</div>
<div v-if="!lineTracking&&!tracking" class="simple-btn-bg btn-item" @click="userLineTrack">
<span class="viewImg"></span>
<span>轨迹</span>
</div>
<div v-if="!lineTracking&&tracking" class="simple-btn-bg btn-item">
<span class="viewImg"></span>
<span>轨迹</span>
</div>
<div v-else-if="lineTracking" class="simple-btn-bg btn-item" @click="userLineTrackCancel">
<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="alarm-detail-info left_arrow" v-if="workDetail" style="width: 50%;top: 220px;">
<div class="simple-title">
<div>作业</div>
<span class="icon-close" @click="workDetailClose"></span>
</div>
<div class="detail-content">
<div class="content-body">
<div style="color:#ffffff;font-size: 14px;">
<p>作业区域:{{ areaName }}</p>
<div v-if="areaVideo.length>0">区域下监控:
<el-tag
v-for="item in areaVideo"
:key="item.id"
@click="showVchannel(item)"
style="margin-right: 10px;margin-left:0"
>{{ item.name }}
</el-tag>
</div>
<div v-else>区域下监控:该作业所在区域没有监控设备</div>
</div>
<el-table class="bigScreenTable" v-if="areaShowType==1" :data="areaOperation" :height="300" @row-click="areaOperationRowClick">
<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-column label="已选监控">
<template #default="scope">
<el-tag
v-for="item in scope.row.vchannels_"
:key="item.id"
@click="showVchannel(item)"
style="margin-right: 10px;margin-left:0"
>{{ item.name }}
</el-tag>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
<!--危险作业-->
<div class="screen-job" v-if="screenOperation">
<div class="simple-title">
<div>作业详情</div>
<div class="simple-btn" @click="closeScreenOperation">关闭</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">{{screenJobItem.name}}</span>
</div>
<div class="job-item">
<span class="job-item-name">作业编号:</span>
<span class="job-item-info">{{screenJobItem.number}}</span>
</div>
<div class="job-item">
<span class="job-item-name">生产状态:</span>
<span class="job-item-info">{{screenJobItem.state_work}}</span>
</div>
<div class="job-item">
<span class="job-item-name">作业区域:</span>
<span class="job-item-info">{{screenJobItem.area_.name}}</span>
</div>
<div class="job-item">
<span class="job-item-name">部门协调员:</span>
<span class="job-item-info">{{screenJobItem.coordinator_name}}</span>
</div>
<div class="job-item">
<span class="job-item-name">开始时间:</span>
<span class="job-item-info">{{screenJobItem.start_time}}</span>
</div>
<div class="job-item">
<span class="job-item-name">结束时间:</span>
<span class="job-item-info">{{screenJobItem.end_time}}</span>
</div>
<div class="job-item">
<span class="job-item-name">属地部门:</span>
<span class="job-item-info">{{screenJobItem.dept_ter_.name}}</span>
</div>
<div class="job-item">
<span class="job-item-name">业务部门:</span>
<span class="job-item-info">{{screenJobItem.dept_bus_.name}}</span>
</div>
</div>
<div class="simple-title">
<div>作业票</div>
</div>
<div class="job-list">
<el-tag
v-for="item in screenJobItem.cates_"
:key="item.id"
@click="showOpretion(item)"
style="margin-right: 10px;margin-left:0"
>{{ item.cate_name }}
</el-tag>
</div>
<div class="simple-title">
<div>监控设备</div>
</div>
<div class="job-list" v-if="screenJobItem.vchannels_.length>0">
<el-tag
v-for="item in screenJobItem.vchannels_"
:key="item.id"
@click="showVchannel(item)"
style="margin-right: 10px;margin-left:0"
>{{ item.name }}
</el-tag>
</div>
<div class="job-list" v-else style="color:#ffffff">该作业没有选择监控设备</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">{{areaItemDetail.name}}</span>
</div>
<div class="risk-item"><span class="risk-item-name">风险等级:</span><span
class="risk-item-info">{{levelOption[areaItemDetail.level]}}</span>
</div>
<div class="risk-item"><span class="risk-item-name">区域编号:</span><span
class="risk-item-info">{{areaItemDetail.number}}</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" v-if="screenWarningItem.global_img!=null">
<span class="risk-item-name">事件截图:</span>
<sc-upload v-model="screenWarningItem.global_img" title="全景照" style="width: 250px;"></sc-upload>
<sc-upload v-if="screenWarningItem.face_img!=null" v-model="screenWarningItem.face_img" title="人脸照" style="width: 250px;"></sc-upload>
<!-- <img :src="screenWarningItem.global_img" style="width: 250px;"> -->
<!-- <img v-if="screenWarningItem.face_img!=null" :src="screenWarningItem.face_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>
<audio id="audio" :src="audioSrc" autoplay @ended="audioFinished" preload>
对不起您的浏览器不支持HTML5音频播放。
</audio>
<el-dialog class="videoViewWrap" :title="channelName" v-model="limitedVisible" with="100%">
<video-view id="videoView" v-if="limitedVisible" :channelCode="channelCode"></video-view>
<template #footer>
<el-button @click="viewClose">关闭</el-button>
</template>
</el-dialog>
<el-dialog class="videoViewWrap" :title="opreationName" v-model="limitedOpreation" with="100%">
<opreation-view v-if="limitedOpreation" :ticketId="ticketId" :projectId="projectId" :cateType="cateType"></opreation-view>
<template #footer>
<el-button @click="viewClose">关闭</el-button>
</template>
</el-dialog>
</div>
</template>
<script>
// import flvjs from "./../../utils/flv";
import { genTree } from "@/utils/verificate";
import sysConfig from "@/config";
import videoView from "./../am/videoView";
import opreationView from "./oplDetail";
export default {
components: {
videoView,
opreationView
},
data() {
return {
line1:null,
music:null,
ticketId:null,
projectId:null,
cateType:null,
timerUser: null,
timerTime: null,
eventTimer:null,
timerEventRoll:null,
eventAudioTimer:null,
trackMarker:null,
domMarkerLayer: null,
userMaskerLayer: null,
jobDomMarkerLayer: null,
riskMarkerLayer: null,//风险区域
areaMarkerLayer: null,//区域展示
pointMarkerLayer: null,//点位图层
polygonMaskerLayer: null,//危险作业
cameraMaskerLayer: null,//摄像头
materialsMaskerLayer: null,//喇叭
singleAreaMaskerLayer: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,
lineTracking:false,
areaDetail: false,
workDetail:false,
screenJob: false,
screenUser: false,
screenRisk: false,
speakerPlayStatus:true,
screenWarning: false,
screenUserDetail: false,
warningTypeShow: false,
showUserSelect: false,
warningDetail: false,
filterCtrlFocus: true,
screenOperation:false,
limitedVisible:false,
limitedOpreation:false,
warningListTotal: 0,
heightNum:0,
warningData: {
list: [],
total: 0,
params: {
page: 1,
page_size: 10,
start_create: '',
}
},
cateAggForm: {
start_create: '',
is_handled: false,
completed: true
},
areaItemDetail:{},
wStatistics: {},
warningTypes: [],//事件类型
Vchannels: [],//摄像头列表
warningList: [],//报警事件列表
speakerList: [],//喇叭列表
userList: [],//人员列表
allUserList:[],
deptList: [],//部门列表
postList: [
{id:0,name:'全部',label:'全部'},
{id:1,name:'曲阳金隅',label:'曲阳金隅'},
{id:2,name:'访客',label:'访客'},
{id:3,name:'司机',label:'司机'}],//岗位列表
dangerList: [],//岗位列表
areaList: [],//区域列表/风险区域列表
areaOperation:[],
areaVideo:[],
areaSpeaker:[],
areaUser:[],
deptChecked:[],
//数据统计
userCount: {
total: 0,
count_employee: 0,//正式员工
count_remployee: 0,//访客
count_visitor: 0//相关方
},
screenJobItem: {},//危险作业信息
screenRiskItem: {},//风险区域信息
screenWarningItem: {},//风险区域信息
screenUserItem: {},//人员信息
screenUserItemDetail: {},//人员信息
url: '',
areaDetailId:'',
params: {
json: {
data: {
channelId: "",
streamType: "2",
type: "flv",
}
},
code: 'video_realtime'
},
userParams:{
depts:[],
},
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,
levelOption:{
10:'低风险',
20:'一般风险',
30:'较大风险',
40:'重大风险'
},
eventTypeName:'全部',
audioSrc:'',
audioIndex:0,
audioList:{},
employeeScroll:0,
searchKeyWord:'',
ElLoading:null,
channelCode:'',
channelName:'',
}
},
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.music = document.getElementById("audio");
that.showTime();
that.timerTime = setInterval(() => {
that.showTime();
}, 1000);
let host = window.location.host;
let jsUrl = '/jsmap/jsmap.js';
that.loadScript('mapId',jsUrl, () => {
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)');
if (item.markers.length > 0) {
if (type === 'Symbol(boxmarker)') {
let areaId = item.properties.get("areaId");
console.log(areaId);
that.$API.am.area.item.req(areaId).then(res=>{
that.areaItemDetail = res;
that.screenJob = false;
that.screenWarning = false;
that.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.controls = true;
newEle2.autoplay = true;
newEle2.id = item.markers[0].id + 'videoPlayer';
newEle2.name = 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);
let flvPlayer = null,URLS=null;
newEle2.setAttribute("style", "width: 327px;height:183px;background:url(/img/rotate_line.png) no-repeat;background-size:60px 60px;background-position:center center;");
this.$API.am.video.item.req(this.params).then(res => {
console.log(res);
this.url = res.url;
URLS = res.url.replace('192.168.10.253',sysConfig.VUE_APP_VIDEOHOST);
if (flvjs.isSupported()) {
let videoElement = document.getElementById(item.markers[0].id + 'videoPlayer');
var mediaDataSource = {
type: 'flv',
hasAudio:false,
hasVideo:true,
isLive:false,
withCredentials:false,
url:URLS
};
flvPlayer = flvjs.createPlayer(mediaDataSource, {
enableWorker: false,
lazyLoadMaxDuration: 3 * 60,
seekType: 'range',
});
flvPlayer.attachMediaElement(videoElement);
newEle2.setAttribute("style", "width: 327px;height:183px;background:url(/img/rotate_line.png) no-repeat;background-size:60px 60px;background-position:center center;");
flvPlayer.load();
flvPlayer.play();
}
})
close.onclick = () => {
let nodeMark = document.getElementById(item.markers[0].id);
nodeMark.remove();
flvPlayer.pause();
flvPlayer.unload();
flvPlayer.detachMediaElement();
flvPlayer.destroy();
flvPlayer = null;
}
} else {
//人员
that.screenUserItem = item.properties.get("employee");
that.screenUser = true;
window.map.flyToMarker(that.userMarker[that.screenUserItem.mac], {
duration: 1000,
range: 200
})
}
}
} else if (type === 'Symbol(polygonmarker)') {
//危险作业
console.log(item)
let workId = item.properties.get("workId");
if(workId){
that.areaDetailId = item.properties.get("area");
let areaItem = that.areaList.filter(item=>{
return item.id==that.areaDetailId;
});
debugger;
that.areaName = areaItem[0].name;
that.getAreaOperation();
that.getAreaVchannel();
that.workDetail = true;
}else{
that.screenRisk = false;
that.screenWarning = false;
that.areaDetailId = item.properties.get("area");
let areaWork = that.areaList.filter(area=>{
return area.id==that.areaDetailId
});
that.areaRowClick(areaWork[0]);
}
}
} else {
}
});
})
//左侧数据统计
this.getManCount();//人员统计$$
this.getWarnings();//报警统计$$
this.getAreaList();//区域/风险区域$$
this.getGroup();//部门$$
//右上展示数据
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 - 310 - 84;
let areaTableHeight = domHeight - height3 - 50;
this.areaTableHeight = areaTableHeight;
document.getElementsByClassName('cockpit-info')[0].style.height = domHeight + 'px';
},
computed:{
bgmSrc:function(){
return this.audioList[this.audioIndex]
}
},
beforeUnmount(){
window.map.destroy();
window.map = null;
this.timerUser = null;
this.timerTime = null;
this.eventTimer = null;
this.timerEventRoll = null;
this.eventAudioTimer = null;
clearInterval(this.timerUser)//人员
clearInterval(this.timerTime)//时间
clearInterval(this.eventTimer)//时间
clearInterval(this.timerEventRoll)//事件
clearInterval(this.eventAudioTimer)//事件
},
methods: {
loadScript(id, url, callback) {
let that = this;
//如果已经存在这个id则证明已经加载过已经有这个js文件了可以直接执行回调里面的操作
if (document.querySelector(`#${id}`)) {
that.ElLoading = null;
callback && callback()
return;
}else{
that.ElLoading = this.$loading({
lock: true,
text: '地图资源加载中...',
background: 'rgba(0, 0, 0, 0)',
})
}
//第一次加载,先创建 script 标签
const script = document.createElement('script');
script.src = url;
//创建id属性
script.setAttribute('id', id);
//获取第一个script标签
const firstScript = document.getElementsByTagName('script')[0];
//获取第一个script标签的父节点 BODY,在body的第一个script引用之前插入即把这个动态的js文件放在第一个调用
firstScript.parentNode.insertBefore(script, firstScript);
//script 一加载就执行
script.onload = script.onreadystatechange = function() {
that.ElLoading.close();
// that.ElLoading = null;
// 加载完成
if (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') {
callback && callback()
}
};
},
//查询某个人员
searchOne(keyword){
let that = this;
that.markList[5] = true;
that.userMaskerLayer.show = true;
clearInterval(that.timerUser);
that.timerUser = setInterval(function () {
that.refreshUserMarker();
}, 10000)
that.userList.filter(item=>{
if(item.my_info.employee_.name == keyword||item.mac ==keyword){
that.screenUserItem = item.my_info.employee_;
that.screenUserItem.mac = item.mac;
that.screenUser = true;
window.map.flyToMarker(that.userMarker[item.mac], {
duration: 1000,
offset:{
rotate: 45,
tilt: 60,
range: 200
}
})
}
})
},
handleChange(item, check,item2,item3) {
let that = this;
this.deptChecked = check.checkedKeys;
this.userParams.depts = check.checkedKeys;
},
//人员类型选择
userFilter() {
let that = this;
let checkedKeys = that.deptChecked;
window.map.removeLayer(that.userMaskerLayer);
that.userMaskerLayer = new jsmap.JSIconTextMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: true
});
window.map.addLayer(that.userMaskerLayer);
let userListNew = [];
that.userList.filter(item=>{
if(checkedKeys.indexOf(item.my_info.employee_.belong_dept_)>-1){
userListNew.push(item)
}
})
that.userList = userListNew;
console.log(that.userList)
that.showUserMarkers(userListNew);
this.showUserSelect = false;
},
//
audioFinished(){
if(this.audioIndex<this.audioList.length){
this.audioIndex++;
}else{
this.audioIndex = 0;
}
},
//显示右上角的时间
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;
if(index==1){
//区域下的作业
this.getAreaOperation();
}else if(index==2){
//区域下的监控
this.getAreaVchannel();
}else if(index==3){
//区域下的喇叭
this.getAreaSpeaker();
}else if(index==4){
//区域下的人员
this.getAreaBlt();
this.getAreaList();
}
},
//报警统计
getWarningTotal() {
let that = this;
that.getEventTotal();
that.getNewEvent();
clearInterval(that.eventTimer);
that.eventTimer = setInterval(function () {
that.getEventTotal();
}, 60000)
clearInterval(that.eventAudioTimer);
that.eventAudioTimer = setInterval(function () {
that.getNewEvent();
}, 20000)
},
//获取事件总数
getEventTotal(){
let that = this;
that.$API.ecm.event.cateAgg.req(that.cateAggForm).then(res => {
if (res.err_msg) { } else {
if(that.warningData.total != res.count){
that.getWarnings();
}
that.wStatistics = res;
}
})
},
//获取新事件
getNewEvent(){
let that = this;
that.$API.ecm.event.list.req({page_size:1}).then(res => {
if (res.err_msg) {
} else {
let judge = res.results[0].id==that.audioList.id
let item = res.results[0];
if(that.audioSrc!==''){
if(item.id==that.audioList.id){
}else{
that.audioList = item;
that.audioSrc=item.voice;
if(item.location){
window.map.flyToPosition(new jsmap.JSPoint(item.location.longitude, item.location.latitude), { range: 200,duration: 1000 });
}
}
}else{
that.audioList = item;
that.audioSrc = item.voice;
that.music.play();//播放
}
}
})
},
//报警类型
getWarningType() {
let that = this;
that.$API.ecm.event_cate.list.req({page:0}).then(res => {
if (res.err_msg) { } else {
that.warningTypes = res;
}
})
},
warningTypeChange(){
this.warningTypeShow = !this.warningTypeShow
},
handleCurrentChange() {
this.getWarnings();
},
//获取报警列表
getWarnings() {
let that = this;
this.$API.ecm.event.list.req(this.warningData.params).then(res => {
if (res.err_msg) {
} else {
that.warningData.list = res.results;
that.warningData.total = res.count;
that.eventInterval();
}
})
},
//事件轮询
eventInterval(){
let that = this;
if (that.timerEventRoll!==null) {
clearInterval(that.timerEventRoll);
that.timerEventRoll = null;
}
that.timerEventRoll = setInterval(function () {
that.heightNum+=1;
if(that.heightNum>250){
that.heightNum=0;
document.getElementById('eventScrenItem').style.top = 0;
}else{
let top = -that.heightNum;
document.getElementById('eventScrenItem').style.top = top+'px';
}
}, 100)
},
//警报类型查询
warningTypeSelected(id,name) {
let that = this;
this.warningTypeShow = false;
let params = new Object();
params = that.warningData.params;
if (id !== null) {
params.cates = id;
}
this.eventTypeName = name;
that.$API.ecm.event.list.req(params).then(res => {
if (res.err_msg) { } else {
that.warningData.list = res.results;
that.warningData.total = res.count;
}
})
},
//区域点击事件
areaRowClick(data) {
let that = this;
that.areaDetail = true;
that.areaDetailId = data.id;
this.getAreaList();
this.getAreaOperation();
this.getAreaVchannel();
this.getAreaSpeaker();
this.getAreaBlt();
if(data.third_info.xx_rail){
let point = data.third_info.xx_rail.detail.polygon.points[0];
let points = data.third_info.xx_rail.detail.polygon.points;
window.map.flyToPosition(new jsmap.JSPoint(point.longitude, point.latitude, 0),
{ duration:1000,
offset:{
rotate: 60,
tilt: 60,
range: 300
}
});
if(that.singleAreaMaskerLayer!==null){
that.singleAreaMaskerLayer.setMarkerVisibleByFilter(false, (properties)=>{
if(properties && properties.get('id')!==data.id){
return true;
}
return false;
})
}
that.singleAreaMaskerLayer = new jsmap.JSPolygonMarkerLayer({
minimumLevel: 3,
maxmumLevel: 22,
show: true
});
let pointsList = [];
window.map.addLayer(that.singleAreaMaskerLayer);
pointsList = points.map(item => {
let obj = item;
obj.x=item.longitude;
obj.y=item.latitude;
return obj
});
let polygonMarker = new jsmap.JSPolygonMarker({
id: data.id,//id
position: pointsList,//坐标集合
floorId: data.third_info.xx_rail.detail.floorId,//楼层id
color: 'rgba(0,0,255,.44)',//填充颜色
strokeColor: '#2bff1d',//边线颜色
depthTest: false,//是否开启深度检测
allowPicking: false, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000), //可见范围
properties: {
id: data.id
},//属性设置
callback: (marker) => {
// console.log(marker);
}//回调
});
that.singleAreaMaskerLayer.addMarker(polygonMarker);
}else{}
},
areaDetailClose(){
let that = this;
that.areaDetail = false;
if(that.singleAreaMaskerLayer){
that.singleAreaMaskerLayer.show = false;
}
},
//区域下的作业
getAreaOperation(){
let that = this;
this.$API.opm.operation.list.req({area:that.areaDetailId, state__in: '30,40'}).then(res=>{
console.log(res)
that.areaOperation = res.results;
})
},
//区域下的监控
getAreaVchannel(){
let that = this;
that.$API.third.tdevice.list.req({area:that.areaDetailId,type:60,page:0}).then(res=>{
console.log(res)
that.areaVideo = res;
})
},
//区域下的喇叭
getAreaSpeaker(){
let that = this;
that.$API.third.tdevice.list.req({area:that.areaDetailId,type:50,page:0}).then(res=>{
console.log(res)
that.areaSpeaker = res;
})
},
//区域下的人员
getAreaBlt(){
let that = this;
that.$API.third.blt.all.req({area:that.areaDetailId}).then(res=>{
that.areaUser = res.filter(item=>{
return item.my_info.employee;
});
}).catch(res=>{
debugger;
})
},
//点击区域下的人员
areaEmployeeRowClick(row){
let that = this;
that.screenUserItem = row.my_info.employee_;
that.screenUserItem.mac = row.mac;
that.screenUser = true;
window.map.flyToMarker(that.userMarker[row.mac], {
duration: 1000,
offset:{
rotate: 45,
tilt: 60,
range: 300
}
})
that.markList[5] = true;
that.userMaskerLayer.show = true;
clearInterval(that.timerUser);
that.timerUser = setInterval(function () {
that.refreshUserMarker();
}, 10000)
},
//点击区域下的作业
areaOperationRowClick(row){
let that = this;
console.log(row);
that.screenJobItem = row;
that.$API.opm.opl.list.req({ operation: row.id}).then((res) => {
console.log(res)
that.screenJobItem.cates_ = res.results;
that.screenOperation = true;
});
},
closeScreenOperation(){
this.screenOperation = false;
this.screenJobItem = null;
},
//加载部门数据
getGroup() {
let that = this;
that.$API.system.dept.list.req({ page: 0 }).then(res => {
if (res.err_msg) {
} else {
let rpartsList=[];
let arr = [];
let children = genTree(res);
console.log(children)
for (let i = 0; i < 5; i++) {
let obj = new Object();
if (i === 0) {
obj.id = 0;
obj.name = '全部';
obj.label = '全部';
} else if (i === 1) {
obj = children[0];
} else if (i === 2) {
obj.id = 2;
obj.name = '访客';
obj.label = '访客';
}else if (i === 3) {
obj.id = 3;
obj.name = '司机';
obj.label = '司机';
}
arr.push(obj)
}
that.postList = arr;
}
});
},
//岗位
// 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();
},
getAreaList() {
let that = this;
that.$API.am.area.list.req({page:0}).then(res => {
if (res.err_msg) {
} else {
that.areaList = res;
}
})
},
//获取危险作业
getDangers() {
let that = this;
that.$API.opm.operation.list.req({state__in:'30,40'}).then(res => {
if (res.err_msg) {
} else {
that.dangerList = res.results;
that.showPolygonMarkers(that.dangerList);
}
})
},
//区域列表/获取风险区域
getAreas() {
let that = this;
that.$API.am.area.list.req({page:0}).then(res => {
if (res.err_msg) {
} else {
that.areaList = res;
that.showRiskMarkers(that.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.allUserList = that.userList;
that.showUserMarkers(that.userList);
}
})
},
//选择部门
groupClick(data) {
console.log(data);
},
checkChange(data1,data2,data3,data4){
console.log(data1);
console.log(data2);
console.log(data3);
console.log(data4);
},
//获取人员详细信息
showUserDetail() {
this.screenUserDetail = true;
this.$API.hrm.employee.item.req(this.screenUserItem.id).then(res => {
this.screenUserItemDetail = res;
})
},
//风险区域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);
},
//点击区域显示图层
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.getDangers();
},
//风险区域
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;
// debugger;
pointsList = points.map(item => {
let obj = item;
obj.x=item.longitude;
obj.y=item.latitude;
return obj
});
let areaId = item.id;
let maskColor = '',strokeColor='';
if(item.level===10){
maskColor = 'rgba(0,0,255,.3)';//蓝色
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: 35,//拉伸高度
strokeColor: strokeColor,//边线颜色
show: true, //是否显示
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000),//可见范围
properties: {
areaId: areaId
},
});
that.riskMarkerLayer.addMarker(boxMarker);
}
})
}
},
//摄像头Marker
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);
}
})
}
},
//喇叭Marker
showSpeakersMarkers(list) {
let that = this;
list.forEach(item => {
let materialMarker = null;
let pixel = item.my_info.location;
console.log(pixel)
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
});
that.materialsMaskerLayer.addMarker(materialMarker);
})
},
//人员Marker
showUserMarkers(userList) {
// debugger;
let that = this;
//标记图片
let userImage = '';
if (userList.length > 0) {
userList.forEach(item=>{
let employee_ = item.my_info.employee_,online = item.online;;
employee_.mac = item.mac;
let employeeType = item.my_info.employee_.type
if (employeeType === 'employee') {
userImage = "/img/employee.png"
}else if (employeeType === 'driver') {
userImage = "/img/driver.png"
} else if (employeeType === 'remployee') {
userImage = "/img/driver.png"
}else {
userImage = "/img/visitor.png"
}
let floorId = 1;
if(item.floorNo=='Floor1'){
floorId = 1;
}else if(item.floorNo=='Floor2'){
floorId = 2;
}else if(item.floorNo=='Floor3'){
floorId = 3;
}else if(item.floorNo=='Floor4'){
floorId = 4;
}else if(item.floorNo=='Floor5'){
floorId = 5;
}
that.userMarker[item.mac] = new jsmap.JSIconTextMarker({
id: item.my_info.code,
position: { x:item.longitude, y: item.latitude, z: item.z }, //坐标
floorId: floorId, //楼层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_,
online:online
},
callback: (marker) => {
}
});
that.userMaskerLayer.addMarker(that.userMarker[item.mac]);
that.userMaskerLayer.setMarkerVisibleByFilter(false, (properties)=>{
if(properties && properties.get('online')!==true){
return true;
}
return false;
})
})
}
},
//更新人员标记
refreshUserMarker() {
if (document.getElementById("mapContainer") == null || document.getElementById("mapContainer") == undefined){
return
}
let that = this;
that.$API.third.blt.all.req(that.userParams).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];
that.allUserList = that.userList = refreshList.concat(addUser);//更新userList
that.showUserMarkers(addUser);//增加新进在线员工
that.userMaskerLayer.setMarkerVisibleByFilter(false, (properties)=>{
if(properties && properties.get('online')!==true){
return true;
}
return false;
})
refreshList.forEach(item1 => {
let item2 = {};
item2={...item1};
that.userMaskerLayer.updateMarkerPosition(that.userMarker[item2.mac], {
floorId: 1,
position: { x: item2.longitude, y: item2.latitude, z: item2.z },
animate: { duration: 10000, }
});//动画效果,持续时间一秒
})
}
})
},
//比较两次获取的人数的变动 func(a,b)//a与b相比多出来的
func(arr1, arr2) {
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];
return arrList;
},
//危险作业
showPolygonMarkers(data) {
let that = this;
if(data.length>0){
data.forEach(item => {
let polygonMarker = null;
let areaWork = that.areaList.filter(area=>{
return area.id==item.area
});
let points = areaWork[0].third_info.xx_rail.detail.polygon.points;;
let pointsList = points.map(item => {
let obj = item;
obj.x=item.longitude;
obj.y=item.latitude;
return obj
});
polygonMarker = new jsmap.JSPolygonMarker({
id: item.id+'work',//id
position: pointsList,//坐标集合
floorId: 1,//楼层id
color: 'rgba(241,193,105,.44)',//填充颜色
strokeColor: '#2bff1d',//边线颜色
depthTest: false,//是否开启深度检测
allowPicking: true, //是否允许点击
displayCondition: new jsmap.JSDisplayCondition(0.0, 1000), //可见范围
properties: {
workId:item.id,
area: item.area
},//属性设置
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]) {
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.polygonMaskerLayer.show = true;
} else {
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;
clearInterval(that.timerUser);
that.timerUser = setInterval(function () {
that.refreshUserMarker();
}, 10000)
} else {
that.userMaskerLayer.show = false;
clearInterval(that.timerUser);
that.timerUser = null;
}
},
//获取摄像头列表
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 {
let Vchannels = res.pageData.filter(item=>{
return item.my_info.location!==undefined;
})
that.Vchannels = Vchannels;
that.showCameraMarkers(Vchannels);
}
});
},
//获取喇叭列表
getSpeakers() {
let that = this;
that.$API.am.tdevice.speaker.req().then(res => {
if (res.err_msg) {
that.$message.error(res.err_msg);
} else {
let list = res.rows.filter(item=>{
return item.my_info.location!==undefined;
})
that.speakerList = list;
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) {
let that = this;
// debugger;
window.map.flyToMarker(that.userMarker[row.mac], {
duration: 1000,range: 200
})
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: 200
})
},
//取消人员追踪
userUnTrack() {
window.map.cancelTrack();
this.tracking = false;
},
//人员轨迹
userLineTrack(){
debugger;
let that = this;
let obj = {};
obj.id=that.screenUserItem.id;
obj.mac=that.screenUserItem.mac;
obj.name=that.screenUserItem.name;
obj.type=that.screenUserItem.type;
obj.floorNo=that.screenUserItem.location.xx_detail.floorNo;
obj.longitude=that.screenUserItem.location.xx_detail.longitude;
obj.latitude=that.screenUserItem.location.xx_detail.latitude;
localStorage.setItem('trackItem',JSON.stringify(obj))
this.$router.push({
name: "track"
});
// that.lineTracking = true;
// that.userMaskerLayer.show = false;
// let nowTime = new Date().getTime();
// let preTime = nowTime-60*60 * 1000;
// let params = {
// url:"/api/datacenter/user/historypathV2",
// method:"post",
// json:{
// mac: that.screenUserItem.mac,
// startTime: preTime,
// endTime: nowTime,
// locationType: "real"
// }
// };
// let points0 = [];
// that.$API.third.blt.xunxiCommon.req(params).then(res => {
// if (res.err_msg) { } else {
// let points = [];
// res.forEach(item=>{
// item.points.forEach(poi=>{
// points.push(poi)
// })
// })
// points.forEach(item=>{
// let obj=new Object();
// obj.x=item.longitude;
// obj.y=item.latitude;
// obj.z=item.z;
// points0.push(obj);
// });
// if(points0.length>0){
// that.line1 = null;
// if (that.line1==null) {
// that.line1 = new jsmap.JSLineMarker({
// position: points0,
// floorId: 1,
// lineType: jsmap.JSLineType.ARROW,
// color: '#0000ff',
// width: 10,
// depthTest: true
// });
// window.map.addMarker(that.line1);
// }
// that.trackMarker = new jsmap.JSIconTextMarker({
// id: '1',
// position: points0[0],
// image: "/img/visitor.png",
// rotation: {
// rx: 0,
// ry: 0,
// rz: -90
// },
// text: that.screenUserItem.name,
// fontColor: '#0000ff',
// font: '14px 微软雅黑',
// backgroundColor: 'rgba(112,253,147,0.5)',
// backgroundRadius: 5,
// textOffsetInMeter: 1.6,
// backgroundStrokeColor: 'rgb(255,255,255)',
// modelAnimate: {
// multiplier: 2,
// },
// scale: 1,
// properties: {
// name: 'trackMarker'
// },
// callback: (marker) => {
// window.map.trackMarker(marker, {
// range: 100,
// tilt: 60,
// rotate: 310
// });
// for (let i = 1; i < points0.length; i++) {
// setTimeout(() => {
// window.map.updateMarkerPosition(marker, {
// position: points0[i],
// animate: {
// duration: 1000,
// update: (pos) => {
// that.line1.trace(pos)
// }
// }
// });
// }, i * 1000);
// }
// }
// });
// window.map.addMarker(that.trackMarker);
// }else{
// that.$message.error('暂无运动痕迹');
// }
// }
// })
},
userLineTrackCancel(){
window.location.reload();
let that = this;
that.lineTracking = false;
that.userMaskerLayer.show = true;
window.map.cancelTrack();
window.map.removeMarker(that.trackMarker);
window.map.removeAllPointMarker();
window.map.removeMarker(that.line1);
window.map.removeAllLineMarker();
that.trackMarker = null;
that.line1 = null;
},
//区域/部门切换
cockpitChange(index) {
this.LBType = index;
},
//选择人员分类
changeDropIndex(index) {
let that = this;
that.dropIndex = index;
setTimeout(function () {
that.showUserSelect = false;
}, 300)
},
allWarningView(){
this.$router.push('/ecm/event')
},
speakerPasue(){
this.speakerPlayStatus = false;
this.music.pause(); //暂停
},
speakerPlay(){
this.speakerPlayStatus = true;
this.music.play();//播放
},
//关闭作业列表
workDetailClose(){
this.workDetail = false;
},
//查看监控
showVchannel(item){
let that = this;
// debugger;
console.log(item)
that.channelCode = item.code;
that.channelName = item.name;
that.limitedVisible = true;
},
viewClose(){
this.limitedVisible = false;
},
showOpretion(item){
let that = this;
that.ticketId = item.ticket;
// that.projectId = item.operation;
that.cateType = item.cate_.code;
if (that.cateType === "visit") {
that.projectId = item.ticket_.ticket_data.visit;
} else if (that.cateType === "rpj") {
that.projectId = item.ticket_.ticket_data.rpj;
} else {
that.cateType = "opl";
that.projectId = item.ticket_.ticket_data.opl;
}
that.limitedOpreation = true;
},
},
beforeRouteLeave(to, from, next){
next();
if (this.timerUser) {
clearInterval(this.timerUser);
this.timerUser = null;
}
if (this.timerTime) {
clearInterval(this.timerTime);
this.timerTime = null;
}
if (this.eventTimer) {
clearInterval(this.eventTimer);
this.eventTimer = null;
}
if (this.timerEventRoll) {
clearInterval(this.timerEventRoll);
this.timerEventRoll = null;
}
if (this.eventAudioTimer) {
clearInterval(this.eventAudioTimer);
this.eventAudioTimer = null;
}
},
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-loading-spinner .el-loading-text{
color: #Ffa500;
}
.el-loading-spinner .path{
stroke: #Ffa500;
}
.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: 440px;
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 {
line-height: 35px;
}
}
}
.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;
overflow-y: scroll;
max-height: 80vh;
.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: 25%;
height: 50%;
display: flex;
.item-img {
width: 50px;
height: 50px;
position: relative;
margin-right: 5px;
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-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);
.alarm-danger {
width: 50px;
height: 50px;
background: url(/public/img/a_danger.png) no-repeat;
background-size: 100% 100%;
}
.content-left {
width: 160px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.alarm-danger {
width: 50px;
height: 50px;
background: url(/public/img/a_danger.png) no-repeat;
background-size: 100% 100%;
}
}
.content-right {
width: 100%;
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: 420px;
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: 20px;
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%;
}
.sound-quiet {
background: url(/public/img/b_quiet.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: 0;
right: 0;
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%;
background-color: #49a1ff;
}
#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);
}
#audio{
position: fixed;
opacity: 0;
}
#eventScrenWrap{
height:50px;
width: calc(100% - 50px);
overflow:hidden;
padding-left: 20px;
position: relative;
}
#eventScrenItem{
line-height: 50px;
font-size: 20px;
color: cyan;
position: absolute;
}
#bigScreeWrap{
position: fixed;
z-index: 9999;
top: 0;
display: none;
width: 100vw;
height: 100vh;
text-align: center;
background-color: rgba(0,0,0,0.8);
padding: 40px 20px 20px 20px;
}
.bigScreeImg{
width: 20px;
height: 20px;
background-color: red;
}
.bigScreeClose{
width: 20px;
height: 20px;
top: 10px;
right: 10px;
position: absolute;
background: url(/public/img/close.png) no-repeat;
}
#videoElement{
width: auto;
height: 60vh;
}
</style>