zhgdyun/src/views/projectFront/towerCrane/bigSiteVisualization.vue
2022-06-08 14:51:11 +08:00

2158 lines
107 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 id="app" class="bigScreen" v-if="showS3DModel">
<div class="headerBox">
<div class="header_title">
塔吊可视化
</div>
<div class="close-btn" @click="closePage">
<img src="./../../../assets/images/bigSiteVisualization/close-icon.png">
</div>
</div>
<remote-css href="./css/BOS3DUI.min.css"></remote-css>
<!-- <remote-css href="http://bos3d.bimwinner.com/static/UI/latest/BOS3DUI.min.css"></remote-css> -->
<div class="left-box">
<div class="box-item h-30">
<div class="box-title">
<span>基本信息</span>
<i>ESSETIAL INFORMATION</i>
</div>
<div class="box-content flex">
<div class="info-label">
<div>项目名称:</div>
<div>项目地址:</div>
<div>项目经理:</div>
<div>联系电话:</div>
<div>项目编号:</div>
<div>建筑面积:</div>
<div>工程状态:</div>
</div>
<div class="info-content">
<div>{{projectInfo.name ? projectInfo.name: '- -'}}</div>
<div>{{projectInfo.projectAddress ? projectInfo.projectAddress: '- -'}}</div>
<div>{{projectInfo.projectManage ? projectInfo.projectManage: '- -'}}</div>
<div>{{projectInfo.projectTel ? projectInfo.projectTel: '- -'}}</div>
<div>{{projectInfo.projectNumber ? projectInfo.projectNumber: '- -'}}</div>
<div>{{projectInfo.projectAcreage ? projectInfo.projectAcreage: '- -'}}㎡</div>
<div>{{getProjectState(projectInfo.bulidStatus)}}</div>
</div>
</div>
</div>
<div class="box-item h-30">
<div class="box-title">
<span>设备信息</span>
<i>EQUIPMENT INFORMATION</i>
</div>
<div class="box-content">
<div class="flex">
<div class="card-box m-50">
<div class="count">{{devCount.devNum}}</div>
<span>塔吊总数</span>
<img src="./../../../assets/images/bigSiteVisualization/tower-icon.png"/>
</div>
<div class="card-box">
<div class="count">{{devCount.devOnline}}</div>
<span>在线总数</span>
<img src="./../../../assets/images/bigSiteVisualization/online-icon.png"/>
</div>
</div>
<div class="flex">
<div class="card-box m-50">
<div class="count">{{devCount.collideDevNum}}</div>
<span>防碰撞设备</span>
<img src="./../../../assets/images/bigSiteVisualization/crash-icon.png"/>
</div>
<div class="card-box">
<div class="count">{{devCount.faultNum}}</div>
<span>故障总数</span>
<img src="./../../../assets/images/bigSiteVisualization/hook-icon.png"/>
</div>
</div>
</div>
</div>
<div class="box-item h-30">
<div class="box-title">
<span>报警信息</span>
<i>ALARM INFORMATION</i>
</div>
<div class="box-content" style="padding-left: 0">
<div class="box-table">
<div class="table-header flex">
<div style="width: 28%;padding-left: 10px">报警设备</div>
<div style="width: 42%;padding-left: 10px">报警时间</div>
<div style="width: 30%;padding-left: 10px">报警类型</div>
</div>
<vue-scroll style="height: calc(100% - 31px)">
<div class="table-content">
<div class="table-item flex" v-for="(item,index) in alarmData" :key="index">
<div style="width: 24%;padding-left: 10px">{{item.devName}}</div>
<div style="width: 42%;">{{item.alarmTime}}</div>
<div style="width: 36%;">{{item.alarmName}}</div>
</div>
</div>
</vue-scroll>
</div>
</div>
</div>
</div>
<div class="viewportBox">
<div id="viewportTwo" style="width: 100%;height: 100%;" class="viewportTwo"/>
</div>
<div class="right-box">
<div class="box-item" style="height: 66.6%">
<div class="box-title">
<span>今日数据</span>
<i>TODAYS DATA</i>
</div>
<div class="box-content" style="padding-left: 0">
<div class="data-item">
<div>当前在线率:<span class="count">{{todayData.devOnlineRatio}}%</span></div>
<!-- <p>
同环比:
<i>0%</i>
<img src="./../../../assets/images/bigSiteVisualization/up-icon.png"/>
</p> -->
</div>
<div class="data-item">
<div>今日报警:<span class="count">{{todayData.alarmNum}}次</span></div>
<p>
同环比:
<i>{{todayData.alarmRatio}}%</i>
<img v-if="todayData.alarmRatio >= 0" src="./../../../assets/images/bigSiteVisualization/up-icon.png"/>
<img v-else src="./../../../assets/images/bigSiteVisualization/down-icon.png"/>
</p>
</div>
<div class="data-item">
<div>今日预警:<span class="count">{{todayData.warningNum}}次</span></div>
<p>
同环比:
<i>{{todayData.warningRatio}}%</i>
<img v-if="todayData.warningRatio >= 0" src="./../../../assets/images/bigSiteVisualization/up-icon.png"/>
<img v-else src="./../../../assets/images/bigSiteVisualization/down-icon.png"/>
</p>
</div>
<div class="data-item">
<div>今日吊次:<span class="count">{{todayData.cycleNum}}次</span></div>
<p>
同环比:
<i>{{todayData.cycleRatio}}%</i>
<img v-if="todayData.cycleRatio >= 0" src="./../../../assets/images/bigSiteVisualization/up-icon.png"/>
<img v-else src="./../../../assets/images/bigSiteVisualization/down-icon.png"/>
</p>
</div>
<div class="data-item">
<div>今日工时:<span class="count">{{todayData.timeNum}}h</span></div>
<p>
同环比:
<i>{{todayData.timeRatio}}%</i>
<img v-if="todayData.timeRatio >= 0" src="./../../../assets/images/bigSiteVisualization/up-icon.png"/>
<img v-else src="./../../../assets/images/bigSiteVisualization/down-icon.png"/>
</p>
</div>
</div>
</div>
<div class="box-item h-30">
<div class="box-title">
<span>今日塔吊报警排名</span>
<i>TODAYS ALARM TOWER CRANE RANKING</i>
</div>
<div class="box-content" style="padding-left: 0">
<vue-scroll>
<div class="tower-box">
<div class="tower-item" v-for="(item,index) in towerRanking" :key="index">
<span style="width: 80px">{{item.devName}}</span>
<div class="progress"><div class="content" :style="{'width': (item.alarmNum/towerRanking[0].alarmNum)*100+'%'}"></div></div>
<span style="width: 40px">{{item.alarmNum}}</span>
</div>
</div>
</vue-scroll>
</div>
</div>
</div>
<!-- <div class="footerBox">
</div> -->
<div class="info_wrap">
<div :id="'dialogBox'+item.towerSn" :ref="'dialogBox'+item.towerSn" v-for="(item,index) in resData" class="info_box" :key="index">
<!-- <img style="width: 1022px;height: 320px" src="./../../../assets/images/bigSiteVisualization/page-bg.png"/> -->
<div class="info-title">
<span>{{item.towerName}}</span>
</div>
<div class="dialog_info">
<div class="info_bx">
<div class="info-item">
<span>{{item.activeRanger?item.activeRanger:'0'}}</span>
<div>幅度(m)</div>
<img class="info-icon" src="./../../../assets/images/bigSiteVisualization/icon-01.png"/>
</div>
<div class="info-item">
<span>{{item.activeLoading ? item.activeLoading:'0'}}</span>
<div>吊重(kg)</div>
<img class="info-icon" src="./../../../assets/images/bigSiteVisualization/icon-02.png"/>
</div>
<div class="info-item">
<span>{{item.activeWindspeed?item.activeWindspeed:'0'}}</span>
<div>风速(m/s)</div>
<img class="info-icon" src="./../../../assets/images/bigSiteVisualization/icon-03.png"/>
</div>
</div>
<div class="info_bx">
<div class="info-item">
<span>{{item.activeAngle?item.activeAngle:'0'}}</span>
<div>回转角度(°)</div>
<img class="info-icon" src="./../../../assets/images/bigSiteVisualization/icon-04.png"/>
</div>
<div class="info-item">
<span>{{item.activeObliguity?item.activeObliguity:'0'}}</span>
<div>倾角(°)</div>
<img class="info-icon" src="./../../../assets/images/bigSiteVisualization/icon-05.png"/>
</div>
<div class="info-item">
<span>{{item.activeHeight?item.activeHeight:'0'}}</span>
<div>吊钩高度(m)</div>
<img class="info-icon" src="./../../../assets/images/bigSiteVisualization/icon-06.png"/>
</div>
</div>
</div>
<div class="info-alarms" v-if="item.alarmText">
<img class="info-icon" src="./../../../assets/images/alarm-point.png">
<span>{{item.alarmText}}</span>
</div>
<div class="info-footer">
运行时间:{{item.activeTime}}
</div>
<div :class="'corner_'+i" v-for="i in 4" :key="i">
</div>
</div>
</div>
</div>
</template>
<script>
var loadNumber = 0;
let sb = 90
var pageTimer = {}
var dirAxesTowerSn ={}
import axios from 'axios'
import domtoimage from 'dom-to-image';
import {
selectTowerAlarmRankingListApi,
selectTowerTodayStatisticsApi,
selectTowerNumAndAlarmCountApi,
towerVisualizeListApi,
towerVisualizeAddApi,
getTowerAlarmListApi,
towerVisualizeEditApi,
towerVisualizeDeleteApi,
towerVisualizeQueryByIdApi,
towerFactoryListApi,//厂家
towerBrandListApi,//品牌
getTowerListApi,//设备列表
getNewestTowerAlarmApi,
towerVisualizeBatchUpdateApi,//保存点位
selectNewestTowerTwoCurrentDataApi,
getTowerImageApi,
getBuildVisualizeApi
} from "@/assets/js/api/towerCrane.js"
import {getProjectBimConfigInfoApi} from "@/assets/js/api/project"
import { projectBimListApi } from "@/assets/js/api/project"
import { getProjectDetail } from "@/assets/js/api/baseInfo.js"
export default {
name: "siteVisualization",
components:{
'remote-css': {
render(createElement) {
return createElement('link', { attrs: { rel: 'stylesheet', href: this.href }});
},
props: {
href: { type: String, required: true },
},
},
'remote-js': {
render(createElement) {
return createElement('script', { attrs: { type: 'text/javascript',src: this.src }});
},
props: {
src: { type: String, required: true },
},
},
},
data(){
return{
relationList:[],
token:'',//bim的token
// modelKey:["M1634178351606","M1634178351592","M1634178351261","M1634178351697","M1634178351480","M1634178353096",],
modelKey:['C1637925105907'],
modelKey2:'C1634200697269',
dataBaseKey:"e0f9c074fb064789bcd805ee4aaf33b5",
dataBaseKey2:"ab3ae5b9283a4a5a9f47350226b9c409",
groupArr:[],
cloneTowerGroup:[],
selectListID:'',
resData:'',
selectCloneTowerGroupIndex:"",
flagDel:"",
timer:null,
loginAccount: 'Bb1946',
loginPassword: '12075572',
useKey: 'laa0486c14214f1ebd421558094b6f22',
showS3DModel: true,
projectSn: "",
projectInfo:"",
alarmCount: "",
devCount: "",
alarmData: [],
todayData: "",
towerRanking: '',
buildList: [],
buildList2: []
}
},
created(){
this.projectSn = this.$store.state.projectSn
this.getProjectInfo()
this.getBuildVisualize()
this.loadData()
this.selectTowerNumAndAlarmCount()
this.selectTowerTodayStatistics()
this.selectTowerAlarmRankingList()
this.getTowerAlarmList()
this.getTowerList()
this.towerBrandList()
},
mounted(){
// this.bimLogin()
this.getConfigFn()
},
methods:{
getBuildVisualize(){
getBuildVisualizeApi({projectSn: this.projectSn}).then(res=>{
console.log(res)
if(res.result && res.code == 200){
res.result.forEach(item=>{
if(item.list && item.list.length>0){
if(item.list[0].floorLength && item.list[0].floorHeight && item.list[0].floorWidth){
this.buildList2.push({
buildLength: item.list[0].floorLength,
height: item.list[0].floorHeight,
name: item.buildName,
quantity: item.list.length,
width: item.list[0].floorWidth,
bimData: item.visualizeData,
buildId: item.buildId,
color: item.buildColour ? item.buildColour:'blue',
buildVisualizeId: item.buildVisualizeId
})
}
}
})
}
// console.log(this.buildList2)
})
},
getConfigFn(){
getProjectBimConfigInfoApi({projectSn:this.$store.state.projectSn,type: 2}).then(res=>{
if(res.result){
this.loginAccount = res.result.account
this.loginPassword = res.result.password
this.useKey = res.result.clientId
this.bimLogin()
}
})
},
//获取模型列表
loadData(){
projectBimListApi({projectSn:this.$store.state.projectSn,bimType: 2}).then(res=>{
this.buildList=res.result
})
},
async getSvgImage(val){
// let url = await domtoimage.toSvg(document.getElementById(val))
// console.log(this.$refs[val])
let url = ''
if(this.$refs[val]){
url = await domtoimage.toSvg(this.$refs[val][0])
}
// .then(function (dataUrl) {
// console.log(dataUrl, 'svgUrl')
// url = dataUrl
// return url
// });
return url
},
selectTowerTodayStatistics(){
selectTowerTodayStatisticsApi({projectSn: this.projectSn}).then(res=>{
console.log(res, '今日数据')
// ;
if(res.code == 200){
this.todayData = {
devOnlineRatio: res.result.devCount.devOnlineRatio,
alarmNum: res.result.alarm.alarmNum,
warningNum: res.result.alarm.warningNum,
cycleNum: res.result.runData.cycleNum,
timeNum: res.result.runData.timeNum
}
if(res.result.yesterdayAlarmCount.alarmNum - res.result.alarm.alarmNum && res.result.yesterdayRunDataCount.alarmNum){
if(res.result.alarm.alarmNum > res.result.yesterdayAlarmCount.alarmNum){
this.todayData.alarmRatio = -(((res.result.yesterdayAlarmCount.alarmNum - res.result.alarm.alarmNum)/res.result.yesterdayAlarmCount.alarmNum).toFixed(4))*100
} else{
this.todayData.alarmRatio = -(((res.result.yesterdayAlarmCount.alarmNum - res.result.alarm.alarmNum)/res.result.yesterdayAlarmCount.alarmNum).toFixed(4))*100
}
if( this.todayData.alarmRatio){
this.todayData.alarmRatio = this.todayData.alarmRatio.toFixed(2)
}
} else {
this.todayData.alarmRatio = 0
}
if(res.result.yesterdayAlarmCount.warningNum - res.result.alarm.warningNum && res.result.yesterdayRunDataCount.warningNum){
if(res.result.alarm.warningNum > res.result.yesterdayAlarmCount.warningNum){
this.todayData.warningRatio = -(((res.result.yesterdayAlarmCount.warningNum - res.result.alarm.warningNum)/res.result.yesterdayAlarmCount.warningNum).toFixed(4))*100
} else{
this.todayData.warningRatio = -(((res.result.yesterdayAlarmCount.warningNum - res.result.alarm.warningNum)/res.result.yesterdayAlarmCount.warningNum).toFixed(4))*100
}
if(this.todayData.warningRatio){
this.todayData.warningRatio = this.todayData.warningRatio.toFixed(2)
}
} else {
this.todayData.warningRatio = 0
}
if(res.result.yesterdayRunDataCount.cycleNum - res.result.runData.cycleNum && res.result.yesterdayRunDataCount.cycleNum){
if(res.result.runData.cycleNum > res.result.yesterdayRunDataCount.cycleNum){
this.todayData.cycleRatio = -(((res.result.yesterdayRunDataCount.cycleNum - res.result.runData.cycleNum)/res.result.yesterdayRunDataCount.cycleNum).toFixed(4))*100
} else{
this.todayData.cycleRatio = -(((res.result.yesterdayRunDataCount.cycleNum - res.result.runData.cycleNum)/res.result.yesterdayRunDataCount.cycleNum).toFixed(4))*100
}
if(this.todayData.cycleRatio){
this.todayData.cycleRatio = this.todayData.cycleRatio.toFixed(2)
}
} else {
this.todayData.cycleRatio = 0
}
if(res.result.yesterdayRunDataCount.timeNum - res.result.runData.timeNum && res.result.yesterdayRunDataCount.timeNum){
if(res.result.runData.timeNum > res.result.yesterdayRunDataCount.timeNum){
this.todayData.timeRatio = -(((res.result.yesterdayRunDataCount.timeNum - res.result.runData.timeNum)/res.result.yesterdayRunDataCount.timeNum).toFixed(4))*100
} else{
this.todayData.timeRatio = -(((res.result.yesterdayRunDataCount.timeNum - res.result.runData.timeNum)/res.result.yesterdayRunDataCount.timeNum).toFixed(4))*100
}
if(this.todayData.timeRatio){
this.todayData.timeRatio = this.todayData.timeRatio.toFixed(2)
}
} else {
this.todayData.timeRatio = 0
}
}
console.log('156312651', this.todayData)
})
},
selectTowerAlarmRankingList(){
selectTowerAlarmRankingListApi({projectSn: this.projectSn}).then(res=>{
console.log(res, '今日报警排名')
if(res.code == 200){
this.towerRanking = res.result
}
})
},
getTowerAlarmList(){
let data = {
alarmType: 1,
pageNo: 1,
pageSize: 10,
projectSn: this.projectSn
}
getTowerAlarmListApi(data).then(res=>{
console.log(res.result,'报警数据')
res.result.records.forEach(item=>{
let text = this.getAlarmText(item)
item.alarmName = text
})
this.alarmData = res.result.records
})
},
getAlarmText(val){
if(val.environmentAlarm == 1){
return '环境防撞报警'
} else if(val.heightAlarm == 1){
return '高度上限位报警'
} else if(val.heightLowerAlarm == 1){
return '高度下限位报警'
} else if(val.maxRangeAlarm == 1){
return '幅度外限位报警'
} else if(val.minRangeAlarm == 1){
return '幅度内限位报警'
} else if(val.momentAlarm == 1){
return '力矩报警'
} else if(val.multiAlarm == 1){
return '多机防撞报警'
} else if(val.negAngleAlarm == 1){
return '逆时针回转限位报警'
} else if(val.obliguityAlarm == 1){
return '倾角报警'
} else if(val.posAngleAlarm == 1){
return '顺时针回转限位报警 '
} else if(val.windSpeedAlarm == 1){
return '风速报警'
}
},
selectTowerNumAndAlarmCount(){
selectTowerNumAndAlarmCountApi({projectSn: this.projectSn}).then(res=>{
console.log(res.result, '设备信息')
if(res.code == 200){
this.alarmCount = res.result.alarmCount
this.devCount = res.result.devCount
this.devCount.faultNum = res.result.faultNum
}
})
},
getProjectState(val){
let text = ''
switch(val){
case 0:
text = '未开工'
break;
case 1:
text = '在建'
break;
case 2:
text = '停工'
break;
case 3:
text = '验收'
break;
case 4:
text = '完工'
break;
default:
text = '- -'
break
}
return text
},
getProjectInfo(){
getProjectDetail({projectSn: this.projectSn}).then(res=>{
console.log(res.result, '项目基本信息')
if(res.code == 200){
this.projectInfo = res.result
}
})
},
closePage(){
// window.location.href = window.location.href.split('#/')[0] + '#/project/towerCrane/siteVisualization'
// window.location.href = window.location.href.split('#/')[0] + '#/projectIndex'
window.history.back();
},
//所有类型
towerBrandList(selectListID){
let factoryId = ""
if(selectListID){
factoryId = selectListID
}
towerBrandListApi({
"projectSn": this.$store.state.projectSn,
"factoryId":factoryId
}).then(res => {
this.windLevelList = res.result
this.brandTypeList = res.result
if(!selectListID){
let arr = []
res.result.forEach(item=>{
if(item.dataKey){
for(let k in JSON.parse(item.dataKey)){
if(k == 'modelKey'){
arr.push(JSON.parse(item.dataKey)[k])
}
}
}
// arr.push(item.dataKey)
})
this.modelKey = arr
console.log(this.modelKey)
}
console.log(res.result);
})
},
//所有设备
getTowerList(){
getTowerListApi({"projectSn": this.$store.state.projectSn,}).then(res => {
this.relationList = res.result
console.log(res);
})
},
//生成
generate(){
for(let each in pageTimer){
clearInterval(pageTimer[each]);
}
pageTimer = {}
towerVisualizeListApi({"projectSn": this.$store.state.projectSn}).then(res => {
console.log(res.result,333333333333);
this.resData = res.result
this.resData.forEach(item=>{
getNewestTowerAlarmApi({devSn: item.towerSn,alarmType: 1}).then(res=>{
if(res.result){
console.log(res.result)
let text = ''
if(res.result.environmentAlarm == 1){
text = '环境防撞报警'
} else if(res.result.heightAlarm == 1){
text = '高度上限位报警'
} else if(res.result.heightLowerAlarm == 1){
text = '高度下限位报警'
} else if(res.result.maxRangeAlarm == 1){
text = '幅度外限位报警'
} else if(res.result.minRangeAlarm == 1){
text = '幅度内限位报警'
} else if(res.result.momentAlarm == 1){
text = '力矩报警'
} else if(res.result.multiAlarm == 1){
text = '多机防撞报警'
} else if(res.result.negAngleAlarm == 1){
text = '逆时针回转限位报警'
} else if(res.result.obliguityAlarm == 1){
text = '倾角报警'
} else if(res.result.posAngleAlarm == 1){
text = '顺时针回转限位报警'
} else if(res.result.standardHighAlarm == 1){
text = '塔机间竖向高度报警 '
} else if(res.result.windSpeedAlarm == 1){
text = '风速报警'
}
item.alarmText = text + ' ' + res.result.alarmTime
} else {
item.alarmText = ''
}
})
})
//执行获取全部实时数据的接口 完成之后在执行创建塔吊和清空所有塔吊
this.resData.map(item => {
let key = JSON.parse(item.dataKey).modelKey
let componentKeysArr = viewer3D.viewerImpl.modelManager.models[key].getAllComponents()
// console.log(componentKeysArr)
this.componentList(componentKeysArr,item.mastSection,'',item.towerSn,item.brandId,'',item)
// let visualizeData = JSON.parse(item.visualizeData)
// console.log(JSON.parse(item.visualizeData),'11111111111115')
// this.componentList(visualizeData[0],visualizeData.holderNum,visualizeData.name,item.towerSn,item.brandId,visualizeData,item)
})
})
// if(localStorage.getItem("towerMatrix")){
// let towerMatrix = JSON.parse(localStorage.getItem("towerMatrix"));
// console.log(towerMatrix);
// towerMatrix.map(item => {
// console.log(item[0],item.holderNum);
// this.componentList(item[0],item.holderNum,item.name)
// })
// //
// }
},
generateBuild(){
// if(localStorage.getItem('buildData')){
// this.buildList2 = JSON.parse(localStorage.getItem('buildData'))
// }
this.buildList2.forEach(item=>{
// console.log(item.bimData.object.matrix)
let group = new BOS3D.THREE.Group()
if(item.quantity == 1){
let geometry = new BOS3D.THREE.BoxGeometry(item.width*1000, item.buildLength*1000, item.height*1000); //创建一个立方体几何对象Geometry
let material = new BOS3D.THREE.MeshLambertMaterial({
// color: this.getRandomColor()
color: item.color
});
material.transparent = true;//是否透明
material.opacity = 0.5
console.log(geometry)
let mesh = new BOS3D.THREE.Mesh(geometry, material);
mesh.position.set(0, 0, (item.height*500))
window.customName = viewer3D.addExternalObjects([mesh], false, [material]);
group.add(mesh)
// this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray(item.bimData.object.matrix));
if(!item.bimData){
this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]));
} else {
this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray(JSON.parse(item.bimData).object.matrix));
}
viewer3D.getRootScene().add(group);
} else {
for(let i = 0;i<item.quantity;i++){
let geometry = new BOS3D.THREE.BoxGeometry(item.width*1000, item.buildLength*1000, item.height*1000); //创建一个立方体几何对象Geometry
let material = new BOS3D.THREE.MeshLambertMaterial({
color: item.color
});
material.transparent = true;//是否透明
material.opacity = 0.5
// console.log(geometry)
let mesh = new BOS3D.THREE.Mesh(geometry, material);
mesh.position.set(0, 0, item.height*500+(i*item.height*1000))
window.customName = viewer3D.addExternalObjects([mesh], false, [material]);
// this.updateMeshByMatrix(group, item.bimData.object.matrix);
group.add(mesh)
// this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray(item.bimData.object.matrix));
if(!item.bimData){
this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]));
} else {
this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray(JSON.parse(item.bimData).object.matrix));
}
}
console.log(group)
viewer3D.getRootScene().add(group);
}
item.bimData = group
// viewer3D.getRootScene().add(group);
// this.updateMeshByMatrix(group, item.bimData.object.matrix);
})
},
bimLogin(){
// q49f3c56cbf94d93a1babc7d8f2f10a2 应用key
axios({
method: 'post',
// url: 'http://bosgw.bimwinner.com/bospersonnelservice/q49f3c56cbf94d93a1babc7d8f2f10a2/users/login',
url: 'http://bosgw.bimwinner.com/bospersonnelservice/'+this.useKey+'/users/login',
// params: {
// name: 'qq1178461250',
// password: 'qwer123456'
// },
params: {
name: this.loginAccount,
password: this.loginPassword
},
headers: {'Content-Type': 'application/json'},
}).then(res => {
this.token = res.data.data.access_token
this.dataBaseKey = res.data.data.modelDb[0]
console.log(this.dataBaseKey)
this.$nextTick(()=>{
this.createdBim3d()
})
});
},
createdBim3d(){
const parent = document.querySelector("#app");
// const child = document.querySelector(".app");
// console.log(parent.style.transform);
const host = "http://bos3d.bimwinner.com";
const option = {host: host, viewport: "viewportTwo"};
window.viewer3D = new BOS3D.Viewer(option);
//工具栏 菜单
// const bos3dui = new BOS3DUI({
// viewer3D: viewer3D,
// BOS3D: BOS3D,
// funcOption: {
// init: false, // 初始化
// fit: false, // 聚焦
// undo: false, // 撤销
// roam: false, // 漫游
// pickByRect: false, // 框选
// hide: false, // 隐藏
// isolate: false, // 构件隔离
// section: false, // 剖切
// wireFrame: false, // 线框化
// scatter: false, // 模型分解
// changeCptColor: false, // 构件变色
// setting: false, // 设置
// fullScreen: false, // 全屏
// changeBgColor: false, // 改变背景色
// cptInfo: false, // 构件信息
// infoTree: false, // 结构树
// measure: false, // 测量
// mark: false, // 标签
// snapshot: false, // 快照
// annotation: false, // 批注
// reset:false, //复位
// moreMenu:false //更多
// }
// });
// viewer3D.autoResize();
// window.addEventListener("resize", function () {
// viewer3D.autoResize();
// });
this.created3D()
const html = document.querySelector(".viewportBox");
console.log(parent.style.transform);
// let scale = 1/parent.style.transform.slice(28,36)
// if (parent.style.transform){
// document.querySelector(".viewportTwo").style.width = (html.clientWidth )/scale + 'px';
// document.querySelector(".viewportTwo").style.height = (html.clientHeight )/scale + 'px';
// document.querySelector(".viewportTwo").style.transform = `translate(-50%,-50%) scale(${scale})`
// document.querySelector(".main-canvas").style.width = (html.clientWidth )/scale + 'px';
// document.querySelector(".main-canvas").style.height = (html.clientHeight )/scale + 'px';
// // document.querySelector(".viewportTwo").style.left = ((html.clientWidth - 40)/scale)/4 + 'px';
// // document.querySelector(".viewportTwo").style.top = ((html.clientHeight - 40)/scale)/4 + 'px';
// document.querySelector(".viewportTwo").style.left = '50%';
// document.querySelector(".viewportTwo").style.top = '50%';
// } else {
// document.querySelector(".viewportTwo").style.width = (html.clientWidth - 40) + 'px';
// document.querySelector(".viewportTwo").style.height = (html.clientHeight - 40) + 'px';
// }
document.querySelector(".viewportTwo").style.width = (html.clientWidth - 40) + 'px';
document.querySelector(".viewportTwo").style.height = (html.clientHeight - 40) + 'px';
// console.log(1/parent.style.transform.slice(28,36));
// document.querySelector(".viewportTwo").style.transform = `scale(1)`
// 单击构件的事件
viewer3D.registerModelEventListener(window.BOS3D.EVENTS.ON_CLICK_PICK, (e) => {
// console.log(e);
// viewer3D.hideComponentsByKey(e.intersectInfo.selectedObjectId)
})
},
//渲染
created3D(){
// 渲染 this.modelKey 应该是所有模型库的modelKey
for (let i = 0; i < this.modelKey.length; i++) {
viewer3D.addView(this.modelKey[i], this.dataBaseKey,this.token);
}
viewer3D.setSceneBackGroundColor('#0c0f20', 0);
viewer3D.disableViewController();
let buildKey = ''
this.buildList.forEach(item=>{
if(item.mainModel == 1){
buildKey = item.bimUrn
}
})
// if(buildKey){
// viewer3D.addView(buildKey, this.dataBaseKey,this.token)
// viewer3D.setModelMatrix(buildKey,new THREE.Matrix4());
// } else {
// viewer3D.addView('M1598257565598', 'he3285593fdc4ea3b91784c5741ff8aa');
// viewer3D.setModelMatrix("M1598257565598",new THREE.Matrix4());
// }
if(buildKey){
viewer3D.addView(buildKey, this.dataBaseKey,this.token)
viewer3D.setModelMatrix(buildKey,new THREE.Matrix4());
} else {
// viewer3D.addView('M1598257565598', 'he3285593fdc4ea3b91784c5741ff8aa');
// viewer3D.setModelMatrix("M1598257565598",new THREE.Matrix4());
var geometry = new BOS3D.THREE.BoxGeometry(300000, 300000, 500); //创建一个立方体几何对象Geometry
var material = new BOS3D.THREE.MeshLambertMaterial({
color: '#888'
}); //材质对象Material
// var material1 = new BOS3D.THREE.MeshLambertMaterial({
// color: "red"
// }); //材质对象Material
var mesh = new BOS3D.THREE.Mesh(geometry, material); //网格模型对象Mesh
// var mesh1 = new BOS3D.THREE.Mesh(geometry1, material1); //网格模型对象Mesh
mesh.position.set(0, 0, 0)
// mesh1.position.set(70000, 35000, 500)
window.customName = viewer3D.addExternalObjects([mesh], false, [material]);
}
for (let i = 0; i < this.modelKey.length; i++) {
viewer3D.registerModelEventListener(window.BOS3D.EVENTS.ON_LOAD_COMPLETE, (e) => {
viewer3D.setModelMatrix(
this.modelKey[i],
new BOS3D.THREE.Matrix4().fromArray(
//对场地模型整体放大10倍 不放大会出现塔吊显示不全的问题
// [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 60000*10, 30000*10, 0, 1]
[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 60000, 30000, 0, 1]
)
);
viewer3D.hideModelsByKey(this.modelKey[i]);
});
}
//监听模型加载完毕
viewer3D.registerModelEventListener(window.BOS3D.EVENTS.ON_LOAD_COMPLETE, (e) => {
loadNumber++
console.log(loadNumber,this.modelKey.length);
// if(loadNumber == this.modelKey.length + 1){
// console.log('执行');
// this.generate()
// }
if(loadNumber == this.modelKey.length + (buildKey ? 1:0)){
this.generate()
}
this.generateBuild()
// this.generate()
})
},
createTag(){
console.log(this.resData)
// 'tag_'+item.towerSn
let that = this
// console.log(BOS3D.EVENTS)
// viewer3D.registerCameraEventListener(BOS3D.EVENTS.ON_CAMERA_CHANGE, (e)=>{
// console.log(that.resData[0].holderGroup)
// console.log(new BOS3D.THREE.Box3().expandByObject(that.resData[0].bigArmObj.mesh))
// that.resData.forEach(item=>{
// let armsCoordinates = {}
// let dom = that.$refs['tag_'+item.towerSn][0]
// let bracketsCenter = new BOS3D.THREE.Box3().expandByObject(item.bigArmObj.mesh);
// let titleCenter = new BOS3D.THREE.Box3().expandByObject(item.holderGroup);
// armsCoordinates = titleCenter.getCenter(new BOS3D.THREE.Vector3());
// // console.log("包围盒中心:", armsCoordinates);
// that.tag(armsCoordinates.x, armsCoordinates.y, bracketsCenter.max.z, dom);
// })
// let dom = document.querySelector('#tag1');
// let dom = that.$refs['tag_'+item.towerSn][0]
// // tag(armsCoordinates.x, armsCoordinates.y, bracketsCenter.max.z, dom);
// tag(armsCoordinates.x, bracketsCenter.y, bracketsCenter.max.z, dom);
// })
//在模型加载完成的时候执行
// viewer3D.viewerImpl.modelManager.addEventListener(BOS3D.EVENTS.ON_LOAD_COMPLETE, (e) => {
console.log('1111')
that.resData.forEach(item=>{
// let dom = document.querySelector('#tag1')
let armsCoordinates = {}
// let dom = that.$refs['tag_'+item.towerSn][0]
// 获取塔臂的包围盒中心点
let bracketsCenter = new BOS3D.THREE.Box3().expandByObject(item.bigArmObj.mesh);
console.log("最高点:", bracketsCenter);
// 获取支架的包围盒高度
// let titleCenter = new BOS3D.THREE.Box3().expandByObject(groupArr[0].children[1]);
// armsCoordinates = titleCenter.getCenter(new BOS3D.THREE.Vector3());
// console.log("包围盒中心:", armsCoordinates);
let titleCenter = new BOS3D.THREE.Box3().expandByObject(item.holderGroup);
armsCoordinates = titleCenter.getCenter(new BOS3D.THREE.Vector3());
console.log("包围盒中心:", armsCoordinates);
console.log(armsCoordinates.x,armsCoordinates.y,bracketsCenter.max.z)
// that.tag(armsCoordinates.x, armsCoordinates.y, bracketsCenter.max.z, dom);
//相机视角变换执行
// viewer3D.registerCameraEventListener(BOS3D.EVENTS.ON_CAMERA_CHANGE, function () {
// console.log(armsCoordinates.x,armsCoordinates.y,bracketsCenter.max.z)
// // let dom = document.querySelector('#tag1');
// let dom = that.$refs['tag_'+item.towerSn][0]
// // tag(armsCoordinates.x, armsCoordinates.y, bracketsCenter.max.z, dom);
// that.tag(armsCoordinates.x, bracketsCenter.y, bracketsCenter.max.z, dom);
// })
})
// });
},
componentList(listKey,holderNum,name,towerSn,brandId,visualizeData, itemData){
console.log(this.cloneTowerGroup);
//e0f9c074fb064789bcd805ee4aaf33b5 通用key
axios({
method: 'post',
url: 'http://bosgw.bimwinner.com/bos3dengine/api/'+this.dataBaseKey+'/components/batch',
data: {
"components": listKey,
},
headers: {
'Content-Type': 'application/json',
'Authorization':this.token
},
}).then(res => {
let group = new BOS3D.THREE.Group();
console.log(res.data.data);
let resData = res.data.data
let holderHeight = 0; //塔吊支架单个的高度
let holderBox; //塔支架的包围盒
let sliderKey //小车key
console.log(resData, 666666666);
let indexArr = []
let maxX
let ropeHeight
let smallCar
// console.log(itemData.dataKey)
// let modeKeyObj = JSON.parse(itemData.dataKey)
resData.forEach((item,index) => {
// for(let k in modeKeyObj){
// if( k == 'footKey' && item.model == modeKeyObj[k]){
// item.name = '拉伸',
// item.y = modeKeyObj[k]
// } else if(k == 'holderKey' && item.model == modeKeyObj[k]){
// item.name = '标准节'
// item.y = modeKeyObj[k]
// } else if(k == 'headKey' && item.model == modeKeyObj[k]){
// item.name = '塔吊臂总体'
// item.y = modeKeyObj[k]
// } else if(k == 'sliderKey' && item.model == modeKeyObj[k]){
// item.name = '小车'
// item.y = modeKeyObj[k]
// } else if(k == 'ropeKey' && item.model == modeKeyObj[k]){
// item.name = '绳索'
// item.y = modeKeyObj[k]
// } else if(k == 'hookKey' && item.model == modeKeyObj[k]){
// item.name = '吊钩'
// item.y = modeKeyObj[k]
// }
// // else if(k == 'cockpitKey' && item.model == modeKeyObj[k]){
// // item.name = '驾驶舱'
// // item.y = modeKeyObj[k]
// // }
// }
if(item.name == '小车'){
sliderKey = item.key
}
if (item.name == '标准节') {
holderBox = viewer3D.getBoxByComponentsKey(item.key);
holderHeight = holderBox.max.z - holderBox.min.z;
}
if (item.name == '绳索'){
let a = {
name:item.name,
index:index,
key:item.key
}
let sliderBox = viewer3D.getBoxByComponentsKey(item.key);
ropeHeight = sliderBox.max.z - sliderBox.min.z
indexArr.push(a)
} else if(item.name == '标准节'){
let a = {
name:item.name,
index:index,
key:item.key
}
indexArr.push(a)
}else if(item.name == '拉伸'){ //底座
let a = {
name:item.name,
index:index,
key:item.key
}
let sliderBox = viewer3D.getBoxByComponentsKey(item.key);
maxX = sliderBox.max.x
indexArr.push(a)
}else if(item.name == '吊钩'){
let a = {
name:item.name,
index:index,
key:item.key
}
indexArr.push(a)
}else if(item.name == '塔吊臂总体'){
let a = {
name:item.name,
index:index,
key:item.key
}
indexArr.push(a)
}else if(item.name == "驾驶室"){
let a = {
name:item.name,
index:index,
key:item.key
}
indexArr.push(a)
}else if(item.name == "小车"){
let a = {
name:item.name,
index:index,
key:item.key
}
let sliderBox = viewer3D.getBoxByComponentsKey(item.key);
smallCar = sliderBox
indexArr.push(a)
}
})
// if(itemData){
// let modelKeyObj = itemData.dataKey ? JSON.parse(itemData.dataKey):{}
// for( let k in modelKeyObj){
// if(k == 'footKey'){
// let sliderBox = viewer3D.getBoxByComponentsKey(modelKeyObj[k]);
// maxX = sliderBox.max.x
// } else if(k == 'holderKey'){
// holderBox = viewer3D.getBoxByComponentsKey(modelKeyObj[k]);
// holderHeight = holderBox.max.z - holderBox.min.z;
// }else if(k == 'headKey'){
// }else if(k == 'cockpitKey'){
// }else if(k == 'sliderKey'){
// sliderKey = modelKeyObj[k]
// let sliderBox = viewer3D.getBoxByComponentsKey(modelKeyObj[k]);
// smallCar = sliderBox
// // indexArr.push(a)
// }else if(k == 'ropeKey'){
// let sliderBox = viewer3D.getBoxByComponentsKey(modelKeyObj[k]);
// ropeHeight = sliderBox.max.z - sliderBox.min.z
// // indexArr.push(a)
// }else if(k == 'hookKey'){
// }
// // else if(k == 'cockpitKey'){
// // }
// }
// }
let offz1,offz2; //offz1吊钩上方的z轴位置 offz2小车下方Z轴位置
let ropeWidth //滑块移动区域宽度
window.spriteMark = new BOS3D.SpriteMark(viewer3D);
console.log(resData)
let standardHigh = 0
if(itemData){
console.log(itemData)
this.relationList.forEach(item => {
if(item.devSn == itemData.towerSn){
standardHigh = (item.standardHigh?item.standardHigh:0)*1000
}
})
}
resData.map(item => {
//计算出塔支架的高度
if (item.name == '标准节') { //塔吊支架的标准节的构件
let holderGroup = new BOS3D.THREE.Group(); //创建一个塔吊支架的组,把动态生成塔吊的多个支架放到一个组里,以方便整体操作
for (let i = 0; i < holderNum; i++) {
if (i == 0) { //第一节塔支架,不用进行位置处理
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
holderGroup.add(cloneObj.mesh);
} else { //其他生成的动态的塔吊支架要计算其高度
let cloneObj = viewer3D.cloneComponentByKey(item.key); //克隆塔吊支架
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += (holderHeight * i) + standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
holderGroup.add(cloneObj.mesh);
}
}
holderGroup.name = '标准节'
holderGroup.originComponentKey = item; //赋值key
group.add(holderGroup); //把多个塔吊支架合成一个整体
this.resData.forEach(item=>{
if(item.towerSn == towerSn){
item.holderGroup = holderGroup
}
})
} else if (item.name == '拉伸') { //塔吊的塔座
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
cloneObj.mesh.name = '塔座'
group.add(cloneObj.mesh);
} else if(item.name == '绳索') { // 蝇索
// console.log(viewer3D.cloneComponentByKey(item.key));
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
let ropeBox = viewer3D.getBoxByComponentsKey(item.key); //蝇索的包围盒
// holderBox 塔身
//滑块
let sliderBox = viewer3D.getBoxByComponentsKey(sliderKey); //滑块
let offsetZ = sliderBox.min.z - holderBox.max.z - (holderNum-1) * holderHeight; //绳索应该需要偏移的高度
let midX1 = sliderBox.max.x - sliderBox.min.x //滑块宽度
let midX2 = ropeBox.max.x - ropeBox.min.x //蝇索宽度
let offsetxX = ropeBox.min.x - maxX
console.log(ropeBox)
let mat = new BOS3D.THREE.Matrix4().setPosition(-offsetxX + (midX1/2) - (midX2/2), 0, -offsetZ); //构建偏移距离
// let mat = new BOS3D.THREE.Matrix4().setPosition(0, 0, -offsetZ);
cloneObj.mesh.applyMatrix4(mat);
cloneObj.mesh.updateMatrixWorld(true);
cloneObj.mesh.name = '绳索'
group.add(cloneObj.mesh);
} else if(item.name == '吊钩') { // 勾
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
let hookBox = viewer3D.getBoxByComponentsKey(item.key); //勾的包围盒
// 滑块
let sliderBox = viewer3D.getBoxByComponentsKey(sliderKey); //滑块
let offsetZ = sliderBox.min.z - holderBox.max.z - (holderNum-1) * holderHeight;
let offsetxX = hookBox.min.x - maxX
let midX1 = sliderBox.max.x - sliderBox.min.x
let midX2 = hookBox.max.x - hookBox.min.x
//ropeHeight 绳索高度
let mat = new BOS3D.THREE.Matrix4().setPosition(-offsetxX + (midX1/2) - (midX2/2), 0, -offsetZ+ropeHeight - (sliderBox.max.z - sliderBox.min.z));
// let mat = new BOS3D.THREE.Matrix4().setPosition(-offsetxX + (midX1/2) - (midX2/2), 0, -offsetZ);
offz1 = -offsetZ+ropeHeight - (sliderBox.max.z - sliderBox.min.z); //吊钩上方的z轴位置
cloneObj.mesh.applyMatrix4(mat);
cloneObj.mesh.updateMatrixWorld(true);
cloneObj.mesh.name = '吊钩'
group.add(cloneObj.mesh);
} else if(item.name == '小车'){
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
let topBox = viewer3D.getBoxByComponentsKey(item.key); //小车包围盒
let offsetZ = topBox.min.z - holderBox.max.z - (holderNum - 1) * holderHeight;
let offsetxX = topBox.min.x - maxX
offz2 = -offsetZ //小车下方Z轴位置
let mat = new BOS3D.THREE.Matrix4().setPosition(-offsetxX, 0, -offsetZ);
cloneObj.mesh.applyMatrix4(mat);
cloneObj.mesh.updateMatrixWorld(true);
cloneObj.mesh.name = '小车'
group.add(cloneObj.mesh);
}else if(item.name == '塔吊臂总体'){
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
let topBox = viewer3D.getBoxByComponentsKey(item.key); //塔顶部分的任一构件
console.log(cloneObj,this.resData)
let offsetZ = topBox.min.z - holderBox.max.z - (holderNum - 1) * holderHeight;
let offsetxX = topBox.max.x - maxX
ropeWidth = offsetxX*0.95 - 1210; //滑块移动区域宽度
let mat = new BOS3D.THREE.Matrix4().setPosition(0, 0, -offsetZ);
cloneObj.mesh.applyMatrix4(mat);
this.resData.forEach(item=>{
if(item.towerSn == towerSn){
item.bigArmObj = cloneObj
}
})
// let dom = document.getElementById(towerSn);
// console.log(visualizeData.matrixWorld.elements);
// this.tag(topBox.max.x,topBox.max.y,topBox.max.z,dom)
cloneObj.mesh.updateMatrixWorld(true);
cloneObj.mesh.name = '塔吊臂总体'
group.add(cloneObj.mesh);
} else {
//塔吊的塔座、塔支架外的其他构件
let cloneObj = viewer3D.cloneComponentByKey(item.key);
let matrix = new BOS3D.THREE.Matrix4().copy(cloneObj.mesh.matrixWorld); //场布世界坐标
matrix.elements[14] += standardHigh;
this.updateMeshByMatrix(cloneObj.mesh, matrix);
let topBox = viewer3D.getBoxByComponentsKey(item.key); //塔顶部分的任一构件
let offsetZ = topBox.min.z - holderBox.max.z - (holderNum - 1) * holderHeight;
let mat = new BOS3D.THREE.Matrix4().setPosition(0, 0, -offsetZ);
cloneObj.mesh.applyMatrix4(mat);
cloneObj.mesh.updateMatrixWorld(true);
group.add(cloneObj.mesh);
}
})
console.log(group.children)
// console.log(this.relationList[this.ruleForm.relation - 1]);
// if(this.relationList[this.ruleForm.relation - 1]){
// group.name = this.relationList[this.ruleForm.relation - 1].name;
// }else {
// group.name = name
// }
group.holderNum = holderNum; //标准节数
group.towerSn = towerSn //设备sn
group.brandId = brandId //品牌类型id
console.log(group)
let obj = Object.assign({}, [listKey]);
obj.name = group.name;
obj.holderNum = group.holderNum;
obj.matrixWorld = group.matrixWorld;
this.cloneTowerGroup.push(group) //保存数据
// console.log(group)
// this.resData.forEach(item=>{
// if(item.towerSn == towerSn){
// item.towerGroupObj = group
// }
// })
this.resData = this.resData
// this.cloneTowerGroup = Object.assign({}, [listKey]);
// this.cloneTowerGroup.name = group.name;
// this.cloneTowerGroup.holderNum = group.holderNum;
// this.cloneTowerGroup.matrixWorld = group.matrixWorld;
// this.createTag()
//区分是不是第一次加载
let box3,size,centers,center2
group.children.forEach(item=>{
if(item.name=='绳索'){
box3 = new BOS3D.THREE.Box3().expandByObject(item);
console.log(box3);
size = box3.getSize(new BOS3D.THREE.Vector3());
console.log(size);
centers = box3.getCenter(new BOS3D.THREE.Vector3());
console.log(centers);
center2 = new BOS3D.THREE.Vector3(centers.x, centers.y, centers.z + size.z / 2)
console.log(center2);
}
})
if(!this.flag || this.flag == '修改' || this.flagDel == '删除'){
this.resData.forEach(item => {
if(towerSn == item.towerSn && brandId == item.brandId){
let visualizeData2 = []
if(item.visualizeData) {
visualizeData2 = JSON.parse(item.visualizeData)
} else {
visualizeData2 = [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]
}
this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray(visualizeData2));
}
})
// this.resData.map(item => {
// if(towerSn == item.towerSn && brandId == item.brandId){
// let visualizeData2 = JSON.parse(item.visualizeData)
// this.updateMeshByMatrix(group, new BOS3D.THREE.Matrix4().fromArray(visualizeData2.matrixWorld.elements));
// }
// })
viewer3D.getRootScene().add(group);
//
}
this.groupArr.push(obj)
//区分新增和回显
if (this.flag == '新增'){
let data = {
"brandId": this.ruleForm.towerCraneBrand, //品牌类型
"factoryId": this.ruleForm.manufacturer, //厂家id
"mastSection": holderNum, //标准节数
"projectSn": this.$store.state.projectSn,
"towerSn": this.ruleForm.relation,
"visualizeData": JSON.stringify(obj)
}
console.log(data,this.ruleForm.relation);
towerVisualizeAddApi(data).then(res => {
console.log(res);
viewer3D.getRootScene().add(group);
this.ruleForm = {
towerCraneBrand:'',//塔吊品牌
// boomType:'',//大臂类型
manufacturer:'',//厂商
brandType:'',//品牌类型
quantity:'',//标准节数量
relation:''//关联的塔吊设备
}
this.flag = ''
this.generate()
this.cloneTowerGroup.map(item => {
viewer3D.getRootScene().remove(item);
console.log(item.id);
})
})
console.log('新增');
}
let offz = (ropeHeight - (offz1 - offz2))/ropeHeight;//比例
let offzS = ropeHeight - (offz1-offz2)//绳索初始长度
console.log((ropeHeight - (offz1 - offz2))/ropeHeight);
let high = holderNum * holderHeight //标准节高度
sessionStorage.removeItem(towerSn);
console.log(ropeHeight);
// let box3 = new BOS3D.THREE.Box3().expandByObject(group.children[0]);
// console.log(box3);
// let size = box3.getSize(new BOS3D.THREE.Vector3());
// console.log(size);
// let centers = box3.getCenter(new BOS3D.THREE.Vector3());
// console.log(centers);
// let center2 = new BOS3D.THREE.Vector3(centers.x, centers.y, centers.z + size.z / 2)
// console.log(center2);
this.makeTranslation(holderBox,group,0,indexArr,offz,towerSn,high,ropeWidth,offzS,center2)
});
},
updateMeshByMatrix(mesh, matrix) {
mesh.matrixAutoUpdate = false;
mesh.matrix = new BOS3D.THREE.Matrix4();
mesh.applyMatrix4(new BOS3D.THREE.Matrix4().copy(matrix));
mesh.updateMatrixWorld(true);
//下方两行是对mesh移动后要先进行平移后再取消平移以更新平移的ui的坐标的位置。
viewer3D.translateComponentByKey(mesh);
viewer3D.cancelTransformComponent();
mesh.updateMatrixWorld(true);
},
//增加一个塔吊或多个塔吊
cloneModelByKey(towerObj, holderNum,data) {
console.log(holderNum);
for (let i = 0; i < this.modelKey.length; i++) {
let componentKeysArr = viewer3D.viewerImpl.modelManager.models[this.modelKey[i]].getAllComponents(); //获取一个塔吊的所有构件
console.log(componentKeysArr);
//this.modelKey//区分新增和回显 回显的时候是数组长度大于1 新增数组长度等于1
this.componentList(componentKeysArr,holderNum)
}
},
// 平移旋转
makeTranslation(holderBox,item,degrees,indexArr,offz,towerSn,high,ropeWidth,offzS,center2){
clearInterval(pageTimer[towerSn]);
//初始化绳索长度
dirAxesTowerSn[towerSn] = new BOS3D.THREE.Vector3(1, 0, 0);
console.log(indexArr)
indexArr.map((itemArr,index) => {
if (itemArr.name == '绳索'){
console.log(item.children)
// console.log(offz);
// let box3 = new BOS3D.THREE.Box3().expandByObject(item.children[itemArr.index]);
// console.log(box3);
// let size = box3.getSize(new BOS3D.THREE.Vector3());
// console.log(size);
// let centers = box3.getCenter(new BOS3D.THREE.Vector3());
// console.log(centers);
// let center2 = new BOS3D.THREE.Vector3(centers.x, centers.y, centers.z + size.z / 2)
// console.log(center2);
item.children.forEach(itm=>{
if(itm.name == '绳索'){
itm.applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(-center2.x, -center2.y, -center2.z));
itm.updateMatrixWorld(true);
itm.applyMatrix4(new BOS3D.THREE.Matrix4().makeScale(1, 1, offz));
itm.updateMatrixWorld(true);
itm.applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(center2.x, center2.y, center2.z));
itm.updateMatrixWorld(true);
}
})
}
})
this.selectNewestTowerTwoCurrentData(holderBox,item,degrees,indexArr,offz,towerSn,high,ropeWidth,dirAxesTowerSn[towerSn],offzS,center2)
pageTimer[towerSn] = setInterval(() => {
console.log(center2)
// let box3 = new BOS3D.THREE.Box3().expandByObject(groupArr[0].children[6]);
// let size = box3.getSize(new BOS3D.THREE.Vector3());
// let center = box3.getCenter(new BOS3D.THREE.Vector3());
// let center2 = new BOS3D.THREE.Vector3(center.x, center.y, center.z + size.z / 2)
// groupArr[0].children[6].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(-center2.x, -center2.y, -center2.z));
// groupArr[0].children[6].updateMatrixWorld(true);
// groupArr[0].children[6].applyMatrix4(new BOS3D.THREE.Matrix4().makeScale(1, 1, 1.1));
// groupArr[0].children[6].updateMatrixWorld(true);
// groupArr[0].children[6].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(center2.x, center2.y, center2.z));
// groupArr[0].children[6].updateMatrixWorld(true);
this.selectNewestTowerTwoCurrentData(holderBox,item,degrees,indexArr,offz,towerSn,high,ropeWidth,dirAxesTowerSn[towerSn],offzS,center2)
},7000)
},
getTowerImage(val,group){
spriteMark.remove([val[0].devSn])
// let data = {
// angle: val[0].angle,
// height: val[0].height,
// loading: val[0].loading,
// obliguity: val[0].obliguity,
// ranger: val[0].ranger,
// time: val[0].reciveTime,
// towerName: val[0].devName,
// windspeed: val[0].windspeed
// }
this.resData.forEach(item=>{
if(item.towerSn == val[0].devSn){
item.activeAngle = val[0].angle
item.activeHeight = val[0].height,
item.activeLoading = val[0].loading,
item.activeObliguity = val[0].obliguity,
item.activeRanger = val[0].ranger,
item.activeTime = val[0].reciveTime,
item.activeTowerName = val[0].devName,
item.activeWindspeed = val[0].windspeed
}
})
this.$forceUpdate()
let bracketsCenter, titleCenter, armsCoordinates
this.getSvgImage("dialogBox"+val[0].devSn).then(res=>{
// console.log(res, 'sv')
group.forEach(item=>{
if(item.name == "塔吊臂总体"){
bracketsCenter = new BOS3D.THREE.Box3().expandByObject(item);
console.log(bracketsCenter)
}
if(item.name == "标准节"){
titleCenter = new BOS3D.THREE.Box3().expandByObject(item);
}
})
armsCoordinates = titleCenter.getCenter(new BOS3D.THREE.Vector3());
let options={
id:val[0].devSn,
url: res,
scale: 10,
useImageSize:true,
alwaysVisible:true,
position:[armsCoordinates.x, armsCoordinates.y, bracketsCenter.max.z+(bracketsCenter.max.z-bracketsCenter.min.z) + 800],
// position:[0,0,0]
};
spriteMark.add(options,function(a){
// alert("id"+a+" 精灵标签添加成功")
});
viewer3D.render();
})
// console.log(val,'实时数据',data)
// getTowerImageApi(data).then(res=>{
// // console.log(res.result.base64Str)
// let url = 'data:image/png;base64,'+res.result.base64Str
// // 画精灵图
// let bracketsCenter, titleCenter, armsCoordinates
// group.forEach(item=>{
// if(item.name == "塔吊臂总体"){
// bracketsCenter = new BOS3D.THREE.Box3().expandByObject(item);
// console.log(bracketsCenter)
// }
// if(item.name == "标准节"){
// titleCenter = new BOS3D.THREE.Box3().expandByObject(item);
// }
// })
// armsCoordinates = titleCenter.getCenter(new BOS3D.THREE.Vector3());
// let options={
// id:val[0].devSn,
// url:url,
// scale: 60,
// width: 3060,
// height: 1950,
// useImageSize:true,
// alwaysVisible:true,
// position:[armsCoordinates.x, armsCoordinates.y, bracketsCenter.max.z+(bracketsCenter.max.z-bracketsCenter.min.z)/2],
// // position:[0,0,0]
// };
// spriteMark.add(options,function(a){
// // alert("id"+a+" 精灵标签添加成功")
// });
// viewer3D.render();
// })
},
selectNewestTowerTwoCurrentData(holderBox,item,degrees,indexArr,offz,towerSn,high,ropeWidth,dirAxes,offzS,center2){
// console.log(towerSn);
// console.log(center2)
selectNewestTowerTwoCurrentDataApi({devSn:towerSn}).then( res =>{
console.log(res);
if (res.result.list.length != 0){
BOS3D.GlobalData.ContinueRender = true;
var scene = viewer3D.viewerImpl.getScene();
// this.cloneTowerGroup.map(item => {
//判断所选塔吊
// if (item.name === name) {
let groupArrChildren = item.children;
let arr = []
let arr2 =[]
indexArr.map((item,index) => {
if (item.name == '绳索'){
console.log(item);
arr.push(item)
arr2.push(item)
// groupArrChildren[item.index].applyMatrix4(new BOS3D.THREE.Matrix4().makeScale(1,1,0.5));
}else if(item.name == '吊钩'){
arr.push(item)
arr2.push(item)
}else if(item.name == '塔吊臂总体'){
arr.push(item)
}else if(item.name == "驾驶室"){
arr.push(item)
}else if(item.name == "小车"){
arr.push(item)
arr2.push(item)
}
})
// let com = [groupArrChildren[arr[0].index], groupArrChildren[arr[1].index], groupArrChildren[arr[2].index], groupArrChildren[arr[3].index], groupArrChildren[arr[4].index]];
let com = []
console.log(groupArrChildren)
groupArrChildren.forEach(item=>{
if(item.name == '小车'){
com.push(item)
}
if(item.name == '绳索'){
com.push(item)
}
if(item.name == '塔吊臂总体'){
com.push(item)
}
if(item.name == '吊钩'){
com.push(item)
}
if(item.name == ''){
com.push(item)
}
})
let box = holderBox //塔支架的包围盒
box.center();
// console.log(box.center())
console.log(box.x)
let center = new BOS3D.THREE.Vector3(box.x, box.y, box.z);
// console.log(center)
let axes = new BOS3D.THREE.Vector3(0, 0, 1);
axes.normalize();
let object = {
angle:'',
height:'',
width:''
}
this.getTowerImage(res.result.list,item.children)
let oldangle,oldheight,oldranger,oldPrescription;
if (sessionStorage.getItem(towerSn)){
let oldObject = JSON.parse(sessionStorage.getItem(towerSn))
console.log(oldObject,res.result.list[0].angle,res.result.list[0].height,res.result.list[0].ranger);
oldangle = res.result.list[0].angle - oldObject.angle
oldheight = res.result.list[0].height - oldObject.height
oldranger = res.result.list[0].ranger - oldObject.width
console.log(res.result.list[0].height * high/res.result.tower.towerHeight,oldObject.height*high/res.result.tower.towerHeight);
oldPrescription = ((res.result.list[0].height * (high)/res.result.tower.towerHeight) + offzS) /((oldObject.height*high/res.result.tower.towerHeight) + offzS)
object = {
angle:res.result.list[0].angle,
height:res.result.list[0].height,
width:res.result.list[0].ranger
}
}else {
console.log(res.result.list[0].height,high,res.result.tower.towerHeight,offzS, ((res.result.list[0].height*high/res.result.tower.towerHeight) + offzS)/offzS);
oldangle = res.result.list[0].angle
oldheight = res.result.list[0].height
oldranger = res.result.list[0].ranger
console.log(res.result.list[0].ranger);
oldPrescription = ((res.result.list[0].height*high/res.result.tower.towerHeight) + offzS)/offzS
object = {
angle:res.result.list[0].angle,
height:res.result.list[0].height,
width:res.result.list[0].ranger
}
}
// dirAxes.normalize();
// dirAxes.multiplyScalar((oldranger*ropeWidth/res.result.tower.forearmLength)/20);
// dirAxes.multiplyScalar(200)
// dirAxes.multiplyScalar((oldranger*ropeWidth/res.result.tower.forearmLength)/32);
console.log(oldranger,ropeWidth ,res.result.tower.forearmLength,32);
let dir2
// item.children.forEach( res=>{
// console.log(res.name)
// })
console.log(dirAxes);
// let box3 = new BOS3D.THREE.Box3().expandByObject(item.children[arr2[0].index]);
// console.log(box3);
// let size = box3.getSize(new BOS3D.THREE.Vector3());
// console.log(size);
// let centers = box3.getCenter(new BOS3D.THREE.Vector3());
console.log(center2);
// let center2 = new BOS3D.THREE.Vector3(centers.x, centers.y, centers.z + size.z / 2)
let Prescription = Math.sqrt(Math.sqrt(Math.sqrt(Math.sqrt(Math.sqrt(oldPrescription)))));
// let Prescription = Math.sqrt(Math.sqrt(Math.sqrt(Math.sqrt(Math.sqrt(20)))));
let a = 0;let b = 0;
let setin = setInterval(() => {
a++
if (a >= 33) {
let setin2 = setInterval(() => {
b++
if (b >= 32) {
clearInterval(setin2);
}
if(oldranger*ropeWidth/res.result.tower.forearmLength > 0){
dirAxes.normalize();
dirAxes.multiplyScalar((oldranger*ropeWidth/res.result.tower.forearmLength)/32);
dir2 = dirAxes
}else if(oldranger*ropeWidth/res.result.tower.forearmLength < 0){
console.log(1,456)
dirAxes.normalize();
dir2 = new BOS3D.THREE.Vector3();
dir2.copy(dirAxes);
dir2.multiplyScalar((oldranger*ropeWidth/res.result.tower.forearmLength)/32);
}
// dirAxes.multiplyScalar(200)
// high, ropeWidth,res.result.tower.towerHeight,res.result.tower.forearmLength
// console.log(oldranger * ropeWidth / res.result.tower.forearmLength);
if (oldranger*ropeWidth/res.result.tower.forearmLength != 0){
// dirAxes.normalize()
console.log(dir2)
let index1,index2,index3
item.children.forEach((item,index)=>{
if(item.name == '小车'){
index3 = index
}
if(item.name == '吊钩'){
index2 = index
}
if(item.name == '绳索'){
index1 = index
}
})
item.children[index1].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(dir2.x, dir2.y,dir2.z));//绳索
item.children[index1].updateMatrixWorld(true);
item.children[index2].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(dir2.x, dir2.y, dir2.z)); //吊钩
item.children[index2].updateMatrixWorld(true);
item.children[index3].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(dir2.x, dir2.y, dir2.z));//小车
item.children[index3].updateMatrixWorld(true);
}
//绳索缩放
// console.log(oldPrescription);
if(oldPrescription != 1){
let index1,index2
item.children.forEach((item,index)=>{
if(item.name == '吊钩'){
index2 = index
}
if(item.name == '绳索'){
index1 = index
}
})
item.children[index1].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(-center2.x, -center2.y, -center2.z));
item.children[index1].updateMatrixWorld(true);
item.children[index1].applyMatrix4(new BOS3D.THREE.Matrix4().makeScale(1, 1, Prescription));
item.children[index1].updateMatrixWorld(true);
item.children[index1].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(center2.x, center2.y, center2.z));
item.children[index1].updateMatrixWorld(true);
// console.log(item.children)
let box3 = new BOS3D.THREE.Box3().expandByObject(item.children[index1]);
// console.log(box3);
let box4 = new BOS3D.THREE.Box3().expandByObject(item.children[index2]);
// console.log(box4);
item.children[index2].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(0, 0, box3.min.z-box4.max.z)); //吊钩
item.children[index2].updateMatrixWorld(true);
// item.children[arr2[0].index].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(-center2.x, -center2.y, -center2.z));
// item.children[arr2[0].index].updateMatrixWorld(true);
// item.children[arr2[0].index].applyMatrix4(new BOS3D.THREE.Matrix4().makeScale(1, 1, Prescription));
// item.children[arr2[0].index].updateMatrixWorld(true);
// item.children[arr2[0].index].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(center2.x, center2.y, center2.z));
// item.children[arr2[0].index].updateMatrixWorld(true);
// // console.log(item.children)
// let box3 = new BOS3D.THREE.Box3().expandByObject(item.children[arr2[0].index]);
// // console.log(box3);
// let box4 = new BOS3D.THREE.Box3().expandByObject(item.children[arr2[1].index]);
// // console.log(box4);
// item.children[arr2[1].index].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(0, 0, box3.min.z-box4.max.z)); //吊钩
// item.children[arr2[1].index].updateMatrixWorld(true);
}
},31.25)
clearInterval(setin);
}
for (let i = 0; i < com.length; i++) {
com[i].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(-center.x, -center.y, -center.z));
com[i].updateMatrixWorld(true);
// makeRotationAxis(axes 绕那个轴旋转, 0.1 弧度))
// 度数/2*0.0174533
com[i].applyMatrix4(new BOS3D.THREE.Matrix4().makeRotationAxis(axes, Math.PI/180*(-oldangle)/32));
com[i].updateMatrixWorld(true);
com[i].applyMatrix4(new BOS3D.THREE.Matrix4().makeTranslation(center.x, center.y, center.z));
com[i].updateMatrixWorld(true);
}
//重定向 小车绳索 吊钩的x轴
dirAxes.applyAxisAngle(axes, Math.PI/180*(-oldangle)/32)
},31.25)
sessionStorage.setItem(towerSn, JSON.stringify(object));
}
})
},
//固定标签方法
tag(x, y, z, dom) {
var worldVector = new BOS3D.THREE.Vector3(x, y, z);
console.log(worldVector)
/**
* 立方体世界坐标转屏幕坐标
*/
//获取网格模型boxMesh的世界坐标
// var worldVector = new BOS3D.THREE.Vector3(x, y, z);
// //世界坐标转标准设备坐标
// var standardVector = worldVector.project(viewer3D.viewerImpl.camera);
// var a = 1880 / 2;
// var b = 748 / 2;
// var x = Math.round(standardVector.x * a + a);//标准设备坐标转屏幕坐标
// var y = Math.round(-standardVector.y * b + b);//标准设备坐标转屏幕坐标
// /**
// * 更新立方体元素位置
// */
// console.log(a,b,standardVector,x, y);
// dom.style.left = (x) + 'px';
// dom.style.top = (y-800) + 'px';
}
},
beforeDestroy() {
for(let each in pageTimer){
clearInterval(pageTimer[each]);
}
loadNumber = 0
pageTimer = {}
dirAxesTowerSn ={}
// clearInterval(this.timer);
},
}
</script>
<style lang="less" scoped>
@import "./animate/animate.min.css";
// @import "./css/BOS3DUI.min.css";
.bigScreen{
width: 100%;
height: 100%;
background: #0c0f20;
background: url('./../../../assets/images/bigSiteVisualization/page-bg.gif') no-repeat center;
}
.headerBox{
height: 74px;
position: relative;
// background: url('./../../../assets/images/bigSiteVisualization/header-bg.png') no-repeat center;
.header_title{
color: #fff;
text-align: center;
line-height: 56px;
font-size: 30px;
font-weight: bold;
font-family: '思源黑体';
}
.close-btn{
position: absolute;
right: 24px;
top: 20px;
cursor: pointer;
}
}
.footerBox{
// height: 65px;
// background: url('./../../../assets/images/bigSiteVisualization/footer-bg.png') no-repeat center;
// background-size: 100% 100%;
}
.FixedLabel{
position: absolute;
z-index: 5;
box-sizing: border-box;
.FixedLabel_item{
position: relative;
padding: 10px;
border: 1px solid red;
}
}
body {
margin: 0;
overflow: hidden;
position: fixed;
}
.selectBox{
position: absolute;
z-index: 100;
left: 60px;
top: 30px;
}
.select{
display: inline-block;
margin-right: 20px;
}
.buttonBox2{
display: inline-block;
}
/deep/.el-dialog__wrapper .el-dialog {
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
margin: 0px;
}
.buttonBox{
position: absolute;
top:90%;
left:50%;
border-radius: 10px;
background: #1e1e1e;
/*width:100%;*/
transform:translate(-50%,-50%);
/*text-align: center;*/
.buttonItem{
cursor:pointer;
display: inline-block;
padding: 17px 30px;
color: #FFFFFF;
position: relative;
.tower-list{
overflow: hidden;
position: absolute;
left: 0;
top: 0;
width: 100%;
background: rgba(0,0,0,0.5);
color: #fff;
li{
height: 46px;
width: 100%;
text-align: center;
line-height: 46px;
border-bottom: 1px solid #fff;
}
li:last-child{
border: 0;
}
}
.show-btn{
transition: all 0.3s linear;
transform: rotate(180deg);
}
.hidden-btn{
transition: all 0.3s linear;
transform: rotate(0deg);
}
}
}
.wrap{
width: 100%;
height: 100%;
}
.left-box{
position: absolute;
left: 20px;
top: 90px;
width: 378px;
height: calc(100% - 140px);
// background: yellow;
z-index: 10;
}
.animate__animated.animate__fadeIn {
--animate-duration: 0.6s;
}
.animate__animated.animate__fadeOut {
--animate-duration: 0.6s;
}
.viewportBox{
width: 100%;
height: calc(100% - 140px);
margin: 0 auto;
// margin-top: 100px;
}
.box-title{
width: 100%;
height: 62px;
color: #fff;
background: url('./../../../assets/images/bigSiteVisualization/title-bg.png') no-repeat left;
background-size: 100%;
padding-left: 24px;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: center;
margin-bottom: 21px;
span{
font-size: 18px;
}
i{
font-size: 12px;
font-style: normal;
color: rgba(255, 255, 255, 0.3);
letter-spacing: 4px;
}
}
.flex{
display: flex;
}
.box-content{
color: #FFFFFF;
padding-left: 24px;
font-size: 14px;
height: calc(100% - 83px);
}
.info-label{
width: 90px;
color: rgba(255, 255, 255, 0.6);
div{
margin-bottom: 6px;
}
}
.info-content{
div{
margin-bottom: 6px;
white-space: nowrap;
}
}
.h-30{
height: 33.3%;
}
.right-box{
position: absolute;
right: 20px;
top: 90px;
width: 358px;
height: calc(100% - 140px);
z-index: 10;
}
.card-box{
width: 102px;
height: 116px;
text-align: center;
background: url('./../../../assets/images/bigSiteVisualization/card-bg.png') no-repeat center;
background-size: 100%;
.count{
font-size: 25px;
color: #5181F6;
font-weight: bold;
line-height: 32px;
}
span{
display: block;
font-size: 14px;
line-height: 14px;
}
}
.m-50{
margin-right: 50px;
}
.box-table{
width: 100%;
height: 100%;
font-size: 14px;
.table-header{
height: 30px;
border-bottom: 1px solid rgba(81, 129, 246, 0.17);;
}
.table-content{
.table-item{
height: 30px;
div{
line-height: 30px;
}
}
.table-item:nth-child(2n){
background: rgba(81, 129, 246, 0.2);;
}
}
}
.data-item{
width: 100%;
height: 81px;
background: #111A33;
margin-bottom: 14px;
display: flex;
flex-direction: column;
justify-content: center;
padding-left: 19px;
font-size: 14px;
div{
font-size: 18px;
.count{
font-size: 20px;
color: #5181F6;
font-weight: 600;
}
}
p{
margin-bottom: 0;
i{
color: #5181F6;
font-style: normal;
margin-right: 6px;
}
}
}
.tower-box{
// height: 100%;
padding-right: 10px;
.tower-item{
display: flex;
align-items: center;
margin-bottom: 20px;
.progress{
flex: 1;
height: 7px;
background: rgba(81, 129, 246, 0.1);
margin: 0 20px 0 0px;
position: relative;
.content{
position: absolute;
left: 0;
top: 0;
height: 7px;
background: rgba(81, 129, 246, 1);
}
}
}
}
.info_wrap{
position: absolute;
top: 0;
left: 0;
z-index: -1;
width: 100%;
height: 100%;
overflow: hidden;
}
.info_box{
width: 2980px;
// height: 1910px;
background: #111A33;
color: #fff;
font-size: 120px;
padding: 0 150px;
padding-bottom: 260px;
box-sizing: content-box;
position: relative;
.info-title{
text-align: center;
margin-bottom: 60px;
height: 260px;
span{
height: 260px;
display: inline-block;
padding: 0 200px;
background: url('./../../../assets/images/bigSiteVisualization/title-bg2.png') no-repeat center;
background-size: 100% 100%;
}
}
.dialog_info{
margin-bottom: 100px;
.info_bx{
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
margin-bottom: 70px;
.info-item{
width: 840px;
height: 630px;
margin: 0 50px;
background: #0B0F1F;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
span{
color: #5181F6;
line-height: 180px;
font-weight: 600;
}
}
}
}
.info-icon{
width: 160px;
height: 160px;
margin-top: 20px;
}
.info-footer{
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 280px;
line-height: 320px;
padding-left: 180px;
background: url('./../../../assets/images/bigSiteVisualization/box-fotter.png') no-repeat center;
background-size: 100% 100%;
}
.corner_1{
position: absolute;
top: 0;
left: 0;
width: 90px;
height: 90px;
background: url('./../../../assets/images/bigSiteVisualization/box-icon.png') no-repeat center;
background-size: 100% 100%;
transform: rotate(-90deg)
}
.corner_2{
position: absolute;
top: 0;
right: 0;
width: 90px;
height: 90px;
background: url('./../../../assets/images/bigSiteVisualization/box-icon.png') no-repeat center;
background-size: 100% 100%;
}
.corner_3{
position: absolute;
bottom: 0;
left: 0;
width: 90px;
height: 90px;
background: url('./../../../assets/images/bigSiteVisualization/box-icon.png') no-repeat center;
background-size: 100% 100%;
transform: rotate(180deg)
}
.corner_4{
position: absolute;
bottom: 0;
right: 0;
width: 90px;
height: 90px;
background: url('./../../../assets/images/bigSiteVisualization/box-icon.png') no-repeat center;
background-size: 100% 100%;
transform: rotate(90deg)
}
}
.info-alarms{
display: flex;
align-items: center;
margin-bottom: 50px;
color: #F56C6C;
.info-icon{
margin-top: 0;
margin-right: 50px;
}
}
</style>