2024-02-29 09:47:41 +08:00

1052 lines
44 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>
<!-- 预警分析-->
<vue-scroll style="height: 100%">
<div class="alarmAnalysis" :class="{'white_bg': styleType != 2 && styleType != 3}" v-if="!showMore">
<div class="alarmAnalysis_top flex">
<div class="towercrane_status">
<div class="alarmAnalysis_title">
塔吊工作情况
</div>
<div class="status_list flex">
<div class="status_item">
<div class="status_content">
<span>{{devData.totalAlarmNum}}</span>
违章总数
</div>
</div>
<div class="status_item">
<div class="status_content">
<span>{{devData.alarmNum}}</span>
报警总数
</div>
</div>
<div class="status_item">
<div class="status_content">
<span>{{devData.warningNum}}</span>
预警总数
</div>
</div>
<div class="status_item">
<div class="status_content">
<span>{{devData.devNum}}/<b>{{devData.devOnline}}</b></span>
设备总数
</div>
</div>
</div>
</div>
<div class="towerheight_message">
<div class="alarmAnalysis_title">
群塔高度信息
</div>
<div class="tower_height">
<ul>
<li v-for="(item,index) in heightList" :key="index"><span></span></li>
<div class="tower_list" ref="moveBox">
<div v-for="(item, index) in towerHeightList"
:key="index"
class="tower_item"
@mousedown="move($event,item)"
@mouseup="up"
:style="{'left': item.coordinateX + 'px','bottom': '0', 'height':item.heightRatio*100 > 100 ?100 + '%':item.heightRatio*100 + '%', 'width':item.heightRatio*179 > 300 ? 300 + 'px':item.heightRatio*179 + 'px'}">
<!-- 塔尖高 -->
<!-- <span class="span1" v-if="item.referenceHeight" style="white-space:nowrap">{{ $t('message.towerCrane.spireHeight') }}:{{item.referenceHeight}}</span> -->
<!-- 大臂高 -->
<span class="span2" v-if="item.towerHeight" style="white-space:nowrap">塔身高度:{{item.towerHeight}}</span>
<img v-if="styleType == 2" src="./../../../assets/images/operationInfo/tower-crane3.png">
<img v-else src="./../../../assets/images/operationInfo/tower-crane3_w.png"/>
<!-- 标准节数量 -->
<span v-if="item.nodeCount" style="position: absolute;top: 50%;left: -50px;transform: translateY(-50%);">{{ $t('message.towerCrane.standardSectionNumber') }}:{{item.nodeCount?item.nodeCount:'0'}}</span>
<!-- 前臂长度 -->
<span v-if="item.forearmLength" style="position: absolute;top: 30%;left: 50px;white-space:nowrap">{{ $t('message.towerCrane.forearmLength') }}:{{item.forearmLength?item.forearmLength:'0'}}</span>
<!-- <i style="height: 30%"></i> -->
<div style="width: 100%;height:100%; z-index: 2; position: absolute; top: 0; left: 0;"></div>
<span v-if="item.devName" style="position: absolute;top:100%;left: 20px;white-space:nowrap;line-height:30px;color:#2A2E3F">{{item.devName?item.devName:''}}</span>
</div>
</div>
<div class="icon_land" :style="{'height': (1/heightList.length)*100 + '%'}">
<img src="./../../../assets/images/operationInfo/land.png">
</div>
</ul>
<div class="tower_lable"></div>
</div>
</div>
</div>
<div class="flex">
<div class="prevent_crash">
<div class="alarmAnalysis_title">
群塔防碰撞
<div class="alarmAnalysis_more" @click="showMoreAlarmAnalysis">
塔吊场布情况
<i class="el-icon-arrow-right"></i>
</div>
</div>
<div
class="svg_box"
id="svg_box"
>
<svg id="svg" ref="svg" class="svg-pan-zoom_viewport" style="width: 100%; height: 100%;">
<!-- <g v-for="(item, index) in towerList" :key="index" @click="checkItem(index)">
<circle :cx="item.cx" :cy="item.cy" :r="item.r" stroke="#FE6565" stroke-width="1" fill="rgba(255, 87, 94, 0.12)" />
<path stroke="#FE6565" :d="item.d">
<animateTransform attributeType="XML" attributeName="transform" begin="0s" dur="2s" type="rotate" :from="item.from" :to="item.to" fill="freeze"/>
</path>
</g> -->
</svg>
</div>
</div>
<div class="crash_message">
<div class="alarmAnalysis_title">
防碰撞报警信息
</div>
<div class="flex" style="align-items: flex-start">
<div class="crash_list">
<h3>报警列表</h3>
<vue-scroll style="height: 280px">
<ul class="crash_item_box" v-if="collideAlarmList.length>0">
<li v-for="(item, index) in collideAlarmList"
:key="index"
class="crash_item"
:class="{'active_crash': selectIndex == 0}"
@click="checkCrashItem(item, index)">
<h4>{{item.alarmType}}</h4>
<p>{{item.alarmTime}}</p>
<ul>
<li>载重<span>{{item.loading ? item.loading : 0}}kg</span></li>
<li>幅度<span>{{item.ranger ? item.ranger : 0}}m</span></li>
<!-- <li>吊重<span>{{item.loading}}kg</span></li> -->
<li>角度<span>{{item.angle ? item.angle : 0}}°</span></li>
<li>风速<span>{{item.windspeed ? item.windspeed : 0}}m/s</span></li>
<li>力矩比<span>{{item.torqueRatio ? item.torqueRatio : 0}}%</span></li>
<li>吊钩高度<span>{{item.height ? item.height : 0}}m</span></li>
</ul>
</li>
</ul>
<div v-else style="padding-top: 20px;">
<img style="display:block;margin: 0px auto;" src="./../../../assets/images/noData2.png"/>
</div>
</vue-scroll>
</div>
<div class="crash_info">
<h3>报警详细</h3>
<div class="crash_info_box flex" v-if="towerDetail1.forearmLength">
<div class="crash_info_item">
<h4>{{towerDetail1.devName}}</h4>
<div class="crash_info_card flex">
<div class="info_item b-right">
<p>{{towerDetail1.forearmLength ? towerDetail1.forearmLength : 0}}m</p>
<span>前臂长</span>
<img v-if="styleType == 2" src="@/assets/images/operationInfo/towercrane-icon3.png" />
<img v-else src="@/assets/images/operationInfo/towercrane-icon3_w.png" />
</div>
<div class="info_item b-right">
<p>{{towerDetail1.towerHeight ? towerDetail1.towerHeight : 0}}m</p>
<span>塔壁高</span>
<img v-if="styleType == 2" src="@/assets/images/operationInfo/towercrane-icon4.png" />
<img v-else src="@/assets/images/operationInfo/towercrane-icon4_w.png" />
</div>
<div class="info_item">
<p>{{towerDetail1.posteriorArmLength ? towerDetail1.posteriorArmLength : 0}}m</p>
<span>后壁长</span>
<img v-if="styleType == 2" src="@/assets/images/operationInfo/towercrane-icon5.png" />
<img v-else src="@/assets/images/operationInfo/towercrane-icon5_w.png" />
</div>
</div>
</div>
<div class="crash_info_item">
<h4>{{towerDetail2.devName}}</h4>
<div class="crash_info_card flex">
<div class="info_item b-right">
<p>{{towerDetail2.forearmLength ? towerDetail2.forearmLength : 0}}m</p>
<span>前臂长</span>
<img v-if="styleType == 2" src="@/assets/images/operationInfo/towercrane-icon3.png" />
<img v-else src="@/assets/images/operationInfo/towercrane-icon3_w.png" />
</div>
<div class="info_item b-right">
<p>{{towerDetail2.towerHeight ? towerDetail2.towerHeight : 0}}m</p>
<span>塔壁高</span>
<img v-if="styleType == 2" src="@/assets/images/operationInfo/towercrane-icon4.png" />
<img v-else src="@/assets/images/operationInfo/towercrane-icon4_w.png" />
</div>
<div class="info_item">
<p>{{towerDetail2.posteriorArmLength ? towerDetail2.posteriorArmLength : 0}}m</p>
<span>后壁长</span>
<img v-if="styleType == 2" src="@/assets/images/operationInfo/towercrane-icon5.png" />
<img v-else src="@/assets/images/operationInfo/towercrane-icon5_w.png" />
</div>
</div>
</div>
</div>
<div class="tower_box flex" v-if="towerDetail2.forearmLength">
<div class="left_tower tower_item">
<img src="@/assets/images/operationInfo/tower-crane.png" />
<div class="left_card">
<ul>
<li class="b-bottom"><span>{{towerDetail1.maxLiftingCapacity ? towerDetail1.maxLiftingCapacity : 0}}kg</span>吊重</li>
<li class="b-bottom"><span>{{towerDetail1.ranger ? towerDetail1.ranger : 0}}m</span>幅度</li>
<li><span>{{towerDetail1.referenceHeight ? towerDetail1.referenceHeight : 0}}m</span>高度</li>
</ul>
</div>
</div>
<div class="right_tower tower_item">
<img src="@/assets/images/operationInfo/tower-crane2.png" />
<div class="right_card">
<ul>
<li class="b-bottom"><span>{{towerDetail2.maxLiftingCapacity ? towerDetail2.maxLiftingCapacity : 0}}kg</span>吊重</li>
<li class="b-bottom"><span>{{towerDetail2.maxScope ? towerDetail2.maxScope : 0}}m</span>幅度</li>
<li><span>{{towerDetail2.referenceHeight ? towerDetail2.referenceHeight : 0}}m</span>高度</li>
</ul>
</div>
</div>
</div>
<div v-else style="padding-top: 20px;">
<img style="display:block;margin: 0px auto;" src="./../../../assets/images/noData2.png"/>
</div>
</div>
</div>
</div>
</div>
</div>
<div style="height: 100%" v-else>
<el-page-header
@back="goBack"
content="塔吊场布情况"
class="backText"
></el-page-header>
<distributeDatail></distributeDatail>
</div>
</vue-scroll>
</template>
<script>
import moment from "moment";
import distributeDatail from "./distributeDetail.vue"
import {
selectTowerAlarmAndDevCountApi,
selectCollideAlarmListApi,
selectCollideDevRunDateApi,
selectTowerListApi,
selectProjectTowerNewestCurrentDataListApi,
editTowerInfoApi
} from "@/assets/js/api/towerCrane"
export default {
components:{
distributeDatail
},
data(){
return{
deg: '60 100 50',
upDate: true,
selectIndex: 0,
svgDom: Object,
svgpanzoom: null,
towerList: [{
cx: "100",
cy: "50",
r: "60",
d: "M100 50 l0 -60",
from: "0 100 50",
deg: "90 100 50"
}],
projectSn: "",
devData:{
devNum: "",
devOnline: "",
warningNum: "",
totalAlarmNum: "",
alarmNum: ""
},
collideAlarmList:[],
towerDetail1: {},
towerDetail2: {},
heightList:["-30", "0", "30", "60", "90"],
towerHeightList:[],
timer: null,
showMore: false,
styleType: 1,
moveData: {}
}
},
created(){
this.projectSn = this.$store.state.projectSn;
this.styleType = this.$store.state.userInfo.styleType;
this.selectTowerAlarmAndDevCount();
this.selectCollideAlarmList();
this.selectTowerHeight();
},
mounted(){
},
beforeDestroy(){
clearTimeout(this.timer)
},
methods:{
showMoreAlarmAnalysis(){
console.log(1);
clearTimeout(this.timer)
this.showMore = true
},
goBack(){
this.showMore = false;
this.selectTowerAlarmAndDevCount();
this.selectCollideAlarmList();
this.selectTowerHeight();
},
// 获取塔群高度
selectTowerHeight(){
this.heightList = this.heightList.reverse()
selectTowerListApi({projectSn: this.projectSn}).then(res=>{
console.log(res.result)
if(res.code == 200){
let maxHeight = 0
res.result.forEach(item=>{
if(item.referenceHeight > maxHeight){
maxHeight = item.referenceHeight
}
})
// if(maxHeight > 90){
// let a = Math.ceil((maxHeight - 30) / 30)
// for(let i = 0; i<a; i++){
// this.heightList.push((this.heightList.length-1)*30)
// }
// }
res.result.forEach(item=>{
item.heightRatio = item.referenceHeight / maxHeight
item.coordinateX = item.coordinateX ? item.coordinateX : "0"
})
this.towerHeightList = res.result
this.$nextTick(()=>{
this.createSvg()
var panZoomTiger = svgPanZoom('#svg');
})
}
})
// let data = this.towerHeightList,
// maxHeight = 0
// data.forEach( item => {
// if (item.height > maxHeight){
// maxHeight = item.height
// }
// })
},
// 切换防碰撞报警信息
checkCrashItem(item, index){
this.selectIndex = index
let data = {
collideDevSn: item.collideDevSn,
devSn: item.devSn,
endTime: moment(item.alarmTime).format('YYYY-MM-DD HH:mm:ss'),
projectSn: this.projectSn,
}
let time = new Date(moment(item.alarmTime).format('YYYY-MM-DD HH:mm:ss')).getTime() - 1000*60
data.startTime = moment(time).format('YYYY-MM-DD HH:mm:ss')
// console.log( data.startTime)
selectCollideDevRunDateApi(data).then(res=>{
console.log(res)
if(res.code==200 && res.result.length > 0){
this.towerDetail1 = res.result[0]
this.towerDetail2 = res.result[1]
}
})
},
// 获取塔吊工作情况
selectTowerAlarmAndDevCount(){
selectTowerAlarmAndDevCountApi({projectSn: this.projectSn}).then(res=>{
// console.log(res)
if(res.code == 200 && res.result){
this.devData.devNum = res.result.devCount.devNum
this.devData.devOnline = res.result.devCount.devOnline
this.devData.alarmNum = res.result.alarmCount.alarmNum
this.devData.totalAlarmNum = res.result.alarmCount.totalAlarmNum
this.devData.warningNum = res.result.alarmCount.warningNum
}
})
},
// 获取防碰撞报警信息
selectCollideAlarmList(){
selectCollideAlarmListApi({projectSn: this.projectSn, opType: "1"}).then(res=>{
console.log(res)
if(res.code == 200){
console.log('-----防碰撞报警信息', res)
res.result.forEach(item=>{
item.alarmTime = moment(item.alarmTime).format('YYYY.MM.DD HH:mm:ss');
})
this.collideAlarmList = res.result
if(res.result.length>0){
this.checkCrashItem(res.result[0], 0)
}
}
})
},
// 实时获取塔吊回转角度
selectTowerCurrentData(){
selectProjectTowerNewestCurrentDataListApi({projectSn:this.projectSn}).then(res=>{
if(res.code == 200){
if(this.timer){
clearTimeout(this.timer)
}
// console.log(res.result)
for(let i = 0; i<this.towerHeightList.length; i++){
// let flag = false
let id = this.towerHeightList[i].devSn
for(let j = 0; j<res.result.length; j++){
if(id == res.result[j].devSn){
this.towerHeightList[i].t2.attr({
text: res.result[j].forearmLength + "m"
})
// res.result[j].currentdata.angle = Math.round(Math.random()*300)
// this.towerHeightList[i].t3.attr({
// text: "回转" + res.result[j].currentdata.angle + "°"
// })
// flag = true
// console.log(this.towerHeightList[i].oldAngle)
if(!this.towerHeightList[i].oldAngle){
this.towerHeightList[i].oldAngle = 0
}
let oldrot = Number(this.towerHeightList[i].oldAngle),
newrot = Number(res.result[j].currentdata.angle),
_this = this
Snap.animate(oldrot, newrot, function(value) {
// console.log(value)
oldrot = value;
// 旋转
_this.towerHeightList[i].t2.transform(new Snap.Matrix().rotate(value, _this.towerHeightList[i].relatedX, _this.towerHeightList[i].relatedY));
_this.towerHeightList[i].b.transform(new Snap.Matrix().rotate(value, _this.towerHeightList[i].relatedX, _this.towerHeightList[i].relatedY));
}, 500);
this.towerHeightList[i].oldAngle = newrot
// console.log(this.towerHeightList[i].t2)
}
}
}
this.timer = setTimeout(()=>{
this.selectTowerCurrentData();
},5000)
}
console.log(res, '-----实时回转角度')
})
},
// 绘制塔群
createSvg(){
console.log(this.towerHeightList)
this.svgDom = Snap("#svg");
this.towerHeightList.forEach(item=>{
item.a = this.svgDom.paper.circle(item.relatedX, item.relatedY, item.forearmLength).attr({
fill: "rgba(255, 87, 94, 0.12)",
stroke: "#FE6565",
strokeWidth: 1,
})
item.b = this.svgDom.paper.line(item.relatedX, item.relatedY, item.relatedX, item.relatedY-item.forearmLength).attr({
// fill: "rgba(255, 87, 94, 0.12)",
stroke: "#FE6565",
strokeWidth: 1,
})
item.c = this.svgDom.paper.circle(item.relatedX, item.relatedY,1).attr({
fill: "rgba(255, 87, 94, 0.12)",
stroke: "#FE6565",
strokeWidth: 1,
});
item.t1 = this.svgDom.paper.text(Number(item.relatedX) - 6, Number(item.relatedY) + 6,["#", item.devName?item.devName: ""]).attr({
fill: "rgba(255, 255, 255, 0.6)",
fontSize: 4
})
if(this.styleType != 2 && this.styleType != 3){
item.t1.attr({
fill: "#2A2E3F"
})
}
item.t2 = this.svgDom.paper.text(Number(item.relatedX)-6, Number(item.relatedY) - item.forearmLength/2,[item.forearmLength?item.forearmLength: "0", "m"]).attr({
fill: "rgba(255, 255, 255, 0.6)",
fontSize: 4
})
if(this.styleType != 2 && this.styleType != 3){
item.t2.attr({
fill: "#2A2E3F"
})
}
// item.t3 = this.svgDom.paper.text(item.relatedX, item.relatedY,["回转:", item.angle?item.angle: "0°"]).attr({
// fill: "rgba(255, 255, 255, 0.6)",
// fontSize: 4
// })
// let rot = 0
// Snap.animate(rot, rot + 45, function(value) {
// rot = value;
// // 旋转
// item.b.transform(new Snap.Matrix().rotate(value, item.relatedX, item.relatedY));
// }, 500);
})
// let a = this.svgDom.paper.circle(100,100,60),
// b =this.svgDom.paper.line(100, 100, 100, 40),
// c = this.svgDom.paper.circle(100, 100,4);
// this.svgDom.attr({
// fill: "rgba(255, 87, 94, 0.12)",
// stroke: "#FE6565",
// strokeWidth: 1,
// })
this.selectTowerCurrentData();
// c.attr({
// fill: "rgba(255, 87, 94, 0.12)",
// stroke: "#FE6565",
// strokeWidth: 3,
// })
// let rot = 0
// Snap.animate(rot, rot + 45, function(value) {
// rot = value;
// // 旋转
// b.transform(new Snap.Matrix().rotate(value, 100, 100));
// }, 500);
// console.log(svgPanZoom,panZoomTiger)
},
move(e, val){
this.moveData = val
let odiv = e.target,
targetWidth = e.target.offsetWidth,
width = this.$refs["moveBox"].offsetWidth
let disX = e.clientX - odiv.offsetLeft;
let x = Number(val.coordinateX)
// e.target.addEventListener('mousemove', this.moveDom(e,val,disX, x))
document.onmousemove = (e)=>{
let left = (e.clientX - disX) + x;
if(left < 0){
return;
} else if(left > (width-targetWidth)){
return;
}
//移动当前元素
val.coordinateX = left
};
document.onmouseup = (e) => {
this.changeX()
console.log('--------鼠标抬起')
document.onmousemove = null;
document.onmouseup = null;
};
},
up(e){
this.changeX()
console.log('--------鼠标抬起')
document.onmousemove = null;
document.onmouseup = null;
},
changeX(){
console.log(this.moveData)
let data = {
id: this.moveData.id,
coordinateX: this.moveData.coordinateX
}
editTowerInfoApi(data).then((res)=>{
if(res.code == 200){
this.$message.success("修改成功!")
}
console.log(res)
})
}
}
}
</script>
<style lang="less" scoped>
.alarmAnalysis{
background: #091225;
height: 100%;
padding: 25px;
color: #fff;
box-sizing: border-box;
.alarmAnalysis_top{
margin-bottom: 25px;
}
.flex{
display: flex;
align-items: center;
}
.towercrane_status{
width: 400px;
height: 360px;
margin-right: 20px;
background: #0D1A34;
border: 1px solid rgba(18, 41, 79, 1);
}
.towerheight_message{
flex: 1;
height: 360px;
background: #0D1A34;
border: 1px solid rgba(18, 41, 79, 1);
}
.tower_height{
height: calc(100% - 56px);
ul{
position: relative;
width: calc(100% - 60px);
height: calc(100% - 50px);
margin-left: 60px;
display: flex;
flex-direction: column;
li{
flex: 1;
// border-bottom: 1px dashed #212C45;
position: relative;
span{
display: block;
width: 36px;
position: absolute;
left: -48px;
text-align: right;
bottom: -6px;
font-size: 12px;
color: #79808E;
}
}
.tower_list{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
.tower_item{
width: 179px;
position: absolute;
z-index: 3;
display: flex;
flex-direction: column;
span{
display: block;
position: absolute;
left: 17%;
top: -16px;
font-size: 14px;
}
img{
height: calc(100% - 18px);
width: 100%;
}
i{
display: block;
position: absolute;
width: 80px;
background: #0D1A34;
left: 0;
z-index: -1;
bottom: 0;
}
}
}
.icon_land{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
img{
width: 100%;
height: 100%;
}
}
}
}
.alarmAnalysis_title{
position: relative;
padding-left: 18px;
line-height: 31px;
margin-bottom: 16px;
font-size: 18px;
padding-top: 10px;
color: #7CD3DE;
display: flex;
justify-content: space-between;
.alarmAnalysis_more{
font-size: 14px;
color: #EEEFF0;
margin-right: 20px;
cursor: pointer;
i{
color: #7CD3DE;
}
}
}
.alarmAnalysis_title::before{
content: "";
width: 2px;
height: 31px;
background: linear-gradient(to bottom, #88E7F0, #15315F);
position: absolute;
left: 0;
top: 10px;
}
.status_list{
flex-wrap: wrap;
.status_item{
flex: 50%;
text-align: center;
height: 150px;
.status_content{
width: 100px;
height: 90px;
background: url("./../../projectLevel/assets/images/menuBG_active.gif") no-repeat center;
background-size: 100%;
margin: 0 auto;
position: relative;
top: 50%;
transform: translateY(-50%);
display: flex;
flex-direction: column;
align-items: center;
// justify-content: center;
font-size: 14px;
color: #9EA6B0;
span{
margin-bottom: 3px;
font-size: 30px;
font-weight: bold;
color: #fff;
b{
color: #88E7F0;
}
}
}
}
}
.prevent_crash{
width: 578px;
height: 370px;
background: #0D1A34;
border: 1px solid rgba(18, 41, 79, 1);
margin-right: 20px;
}
.crash_message{
flex: 1;
height: 370px;
background: #0D1A34;
border: 1px solid rgba(18, 41, 79, 1);
}
.crash_list{
color: #99A2B2;
width: 356px;
margin: 0 24px;
h3{
font-size: 12px;
margin: 0;
// color: #99A2B2;
margin-bottom: 10px;
}
}
.crash_item_box{
// background: #17274A;
padding-right: 20px;
border-right: 1px solid #12294F;
.crash_item{
background: #17274A;
border-radius: 8px;
margin-bottom: 14px;
padding: 20px 20px;
box-sizing: border-box;
font-size: 12px;
cursor: pointer;
}
.active_crash{
border: 1px solid #75C7D3;
}
h4{
color: #FE6565;
margin: 0;
margin-bottom: 3px;
font-size: 16px;
}
p{
margin-bottom: 14px;
}
ul{
display: flex;
flex-wrap: wrap;
li{
width: 33%;
margin-bottom: 6px;
cursor: pointer;
span{
color: #fff;
}
}
}
}
.crash_info{
flex: 1;
padding-right: 24px;
box-sizing: border-box;
h3{
font-size: 12px;
margin: 0;
color: #99A2B2;
margin-bottom: 6px;
}
}
.crash_info_box{
justify-content: space-between;
// padding-right: 24px;
width: 100%;
margin-bottom: 20px;
box-sizing: border-box;
.crash_info_item{
font-size: 14px;
// margin-right: 30px;
h4{
color: #7CD3DE;
margin: 0;
margin-bottom: 6px;
}
}
.crash_info_card{
border: 1px solid;
border-image: linear-gradient(to bottom, #70C1D2, #0D1A34) 10 10;
.info_item{
display: flex;
align-items: center;
flex-direction: column;
justify-content: center;
padding: 9px 13px;
font-size: 14px;
p{
font-size: 16px;
margin-bottom: 6px;
}
span{
margin-bottom: 6px;
white-space: nowrap;
}
img{
width: 16px;
height: 16px;
}
}
}
}
.b-right{
border-right: 1px dashed #163260;
}
.b-bottom{
border-bottom: 1px dashed #163260;
}
.tower_box{
justify-content: space-between;
align-items: flex-end;
.tower_item{
position: relative;
}
.left_card{
position: absolute;
bottom: -18px;
left: -71px;
ul{
display: flex;
flex-direction: column;
align-items: center;
justify-items: center;
li{
text-align: center;
font-size: 14px;
color: #A0A6AF;
width: 60px;
padding: 3px 0;
span{
display: block;
font-size: 16px;
color: #fff;
}
}
}
}
.right_card{
position: absolute;
bottom: -18px;
right: -71px;
ul{
display: flex;
flex-direction: column;
align-items: center;
justify-items: center;
li{
text-align: center;
font-size: 14px;
color: #A0A6AF;
width: 60px;
padding: 3px 0;
span{
display: block;
font-size: 16px;
color: #fff;
}
}
}
}
.left_tower{
margin-left: 73px;
img{
width: 144px;
height: 139px;
}
}
.right_tower{
margin-right: 73px;
}
}
.svg_box{
width: calc(100% - 20px);
height: calc(100% - 66px);
margin: 0 auto;
// border:1px solid red;
}
}
.backText {
font-size: 16px;
}
.jyjzPage .backText{
margin: -10px 0 14px 0;
padding: 15px 15px 0;
/deep/.el-page-header__content{
color: white;
font-size: 16px;
}
/deep/.el-page-header__title{
font-size: 16px;
}
/deep/.el-page-header__left::after{
background-color:#7CD3DE
}
}
.white_bg{
background: #F3F5FD;
.towercrane_status{
height: 392px;
background: #fff;
border: 0;
border-radius: 3px;
}
.status_list{
.status_item {
.status_content{
height: 100px;
color: #2A2E3F;
background: url('./../../../assets/images/operationInfo/white_bg.png') no-repeat center;
span{
color: #2A2E3F;
b{
color: #2A2E3F;
}
}
}
}
}
.alarmAnalysis_title{
margin-bottom: 20px;
color: #2A2E3F;
.alarmAnalysis_more{
color: #2A2E3F;
i{
color: #2A2E3F;
}
}
}
.alarmAnalysis_title::before{
display: none;
}
.towerheight_message{
background: #fff;
height: 392px;
border: 0;
border-radius: 3px;
}
.tower_height ul .tower_list .tower_item span{
color: #2A2E3F;
}
.prevent_crash{
background: #fff;
height: 440px;
border: 0;
border-radius: 3px;
}
.crash_message{
background: #fff;
height: 440px;
border: 0;
border-radius: 3px;
}
.crash_item_box{
border-right: 0;
ul{
li{
span{
color: #2A2E3F;
}
}
}
.crash_item{
background: #F2F2F2;
border: 0;
}
}
.crash_info_box {
margin-bottom: 40px;
.crash_info_item{
h4{
color: #2A2E3F;
}
}
.crash_info_card {
padding: 9px 0;
border: 0;
background: #F3F2F4;
.info_item{
padding-top: 0;
border-color: #163260;
p{
color: #2A2E3F;
}
span{
color: #93959E;
}
}
}
}
.tower_box{
.left_tower{
margin-left: 110px;
}
.left_card{
left: -110px;
ul{
padding: 0 14px;
background: #F3F2F4;
li{
padding: 6px 0;
span{
color: #2A2E3F;
}
}
}
}
.right_tower{
margin-right: 110px;
}
.right_card{
right: -110px;
ul{
padding: 0 14px;
background: #F3F2F4;
li{
padding: 6px 0;
span{
color: #2A2E3F;
}
}
}
}
}
.tower_height {
ul{
width: calc(100% - 120px);
}
}
}
</style>