jhbigscreen/src/pages/safe/excavation.vue

1015 lines
37 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="project-excavation" @click="clickOutside">
<el-row>
<el-col :span="6">
<module-one-2-1 label="监测概况">
<div class="analyse-equipment" style="position: absolute; top: 10px; left: 325px">
深基坑监测
</div>
<div class="czz-max">
<div class="czz-number">
<div class="czz-number-content">
<div class="czz-number-img czz-number-img-blue">
<svg class="my-svg-icon-blue" style="
width: 1em;
height: 1em;
vertical-align: middle;
fill: currentColor;
overflow: hidden;
" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3815">
<path
d="M96 334.4A48 48 0 0 0 144 288V144H288a48 48 0 0 0 0-96H96A48 48 0 0 0 48 96v192A48 48 0 0 0 96 334.4zM288 880H144V768a48 48 0 0 0-96 0v160A48 48 0 0 0 96 976h192a48 48 0 0 0 0-96zM928 687.04A48 48 0 0 0 880 736v144H736a48 48 0 0 0 0 96h192a48 48 0 0 0 48-48v-192a48 48 0 0 0-48-48.96zM928 48h-194.56a48 48 0 0 0 0 96h146.56V288a48 48 0 0 0 96 0V96A48 48 0 0 0 928 48zM522.88 194.88c-155.2 0-281.28 136-281.28 302.72 0 156.16 134.08 282.88 206.08 352 9.28 8.64 17.6 16.32 24.32 23.36a72.64 72.64 0 0 0 50.88 21.12 71.68 71.68 0 0 0 50.56-21.12c6.72-7.04 15.04-14.72 24.32-23.36 72-68.16 206.4-194.88 206.4-352 0-166.72-126.4-302.72-281.28-302.72zM544 790.4c-7.36 7.04-14.08 13.12-19.84 19.2l-20.16-19.2c-67.84-64-181.12-171.2-181.12-292.8s90.24-224 201.28-224 201.28 99.84 201.28 224S610.56 726.4 544 790.4zM529.6 370.88a123.84 123.84 0 1 0 123.84 123.84 123.84 123.84 0 0 0-123.84-123.84z m0 167.68a43.84 43.84 0 1 1 43.84-43.84 43.52 43.52 0 0 1-43.84 43.84z"
p-id="3816"></path>
</svg>
</div>
<div class="survey_content_number">
<p>设备总数</p>
<div class="survey_content_value">
<span v-html="monTotal"></span> 个
</div>
</div>
</div>
<div class="czz-number-content">
<div class="czz-number-img czz-number-img-green">
<svg class="my-svg-icon-green" style="
width: 1em;
height: 1em;
vertical-align: middle;
fill: currentColor;
overflow: hidden;
" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5561">
<path
d="M636.062286 948.357007l-248.319027-0.77782-190.565895-458.913786h629.645272l-190.76035 459.691606z"
fill="#0C42B2" opacity=".8" p-id="5562"></path>
<path
d="M512 661.146981C329.01785 661.146981 191.149259 531.639954 191.149259 359.741739 191.149259 178.509685 341.07406 19.445499 512 19.445499S832.850741 178.509685 832.850741 359.741739C832.850741 531.639954 694.98215 661.146981 512 661.146981z"
fill="#1F3C78" p-id="5563"></path>
<path
d="M512 38.890999C672.619825 38.890999 813.405241 188.815799 813.405241 359.741739 813.405241 520.55602 683.898215 641.701481 512 641.701481S210.594759 520.55602 210.594759 359.741739C210.594759 188.815799 351.380175 38.890999 512 38.890999m0-38.890999C324.156476 0 171.70376 171.898215 171.70376 359.741739S324.156476 680.59248 512 680.59248 852.29624 547.585264 852.29624 359.741739 699.843524 0 512 0z"
fill="#3D79F1" p-id="5564"></path>
<path
d="M396.299278 934.939613a115.700722 79.337638 0 1 0 231.401444 0 115.700722 79.337638 0 1 0-231.401444 0Z"
fill="#0C41AD" p-id="5565"></path>
</svg>
</div>
<div class="survey_content_number">
<p>监测数据条数</p>
<div class="survey_content_value survey_content_value_color_green">
<span v-html="onlineDevTotal"></span> 个
</div>
</div>
</div>
</div>
<classify-bar :data="classifyBarData" :height="200"></classify-bar>
<div class="analyse-title">
<div class="analyse-text">报警数据</div>
</div>
<el-row style="margin-top: 12px">
<el-col :span="24">
<div class="analyse-number-max" id="afootOverflowType" @mouseout="listMinMouseoutType"
@mouseover="listMinMouseoverType">
<div class="warn-item" v-for="(item, idx) in warningType" :key="idx">
<div>
<span class="sp-label">告警源</span>
<span class="sp-data1">{{item.alarmSource}}</span>
<span class="sp-data2">{{ item.variety }}</span>
</div>
<el-row>
<el-col :span="12">
<span class="sp-label">等级</span>
<span class="sp-data" :class="'sp-level-'+item.level">{{getWarnLevel(item.level) }}</span>
</el-col>
<el-col :span="12">
<span class="sp-label">产生次数</span>
<span class="sp-data">{{item.numbers }}</span>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<span class="sp-label">产生时间</span>
<span class="sp-data">{{item.gmtAlarmStart }}</span>
</el-col>
<el-col :span="12">
<span class="sp-label">更新时间</span>
<span class="sp-data">{{item.gmtModified }}</span>
</el-col>
</el-row>
</div>
</div>
</el-col>
</el-row>
</div>
</module-one-2-1>
</el-col>
<el-col :span="12">
<module-one-2-2 label="点位图" style="position: relative">
<div class="sjk-icon-max" style="height: calc(100% - 80px)">
<div class="sjk-img-min" :style="{ background: urlImgBgd }"></div>
<div class="sjk-icon-spot-list">
<span class="icon-img" :style="{ top: item.top + 'px', left: item.left + 'px' }" v-for="(item, idx) in pointElements" :key="idx" >
<el-popover placement="top-start" popper-class="pit-spot-node-pop" trigger="hover">
<div class="spot-info">
<div class="pt-type">位移</div>
<div class="pt-data">
<span class="pt-data-type">X: </span>
<span class="pt-data-val">{{ item.displace?item.displace.toFixed(3):"-" }}</span>
<span class="pt-data-unit">mm</span>
</div>
<div class="pt-data">
<span class="pt-data-type">Y: </span>
<span class="pt-data-val">{{ item.displace2?item.displace2.toFixed(3):"-" }}</span>
<span class="pt-data-unit">mm</span>
</div>
</div>
<span slot="reference" style="cursor: pointer"><img :src="getPtImg(item)" />
<span class="spot-text">{{ item.spName }}</span> </span>
</el-popover>
</span>
</div>
</div>
<div class="sjk-icon-legend" style="left: 11px; bottom: 11px; width: calc(100% - 22px)">
<div class="sjk-icon-legend-color">
<div class="sjk-icon-legend-color-list">
<div class="sjk-icon-legend-color-list-box box-green"></div>
<div class="sjk-icon-legend-color-list-text">在线</div>
</div>
<div class="sjk-icon-legend-color-list">
<div class="sjk-icon-legend-color-list-box box-grey"></div>
<div class="sjk-icon-legend-color-list-text">离线</div>
</div>
</div>
<div class="sjk-icon-legend-right">
<div :class="item.class" v-for="(item, idx) in legendArrData" @click="legendScreen(item.type)" :key="idx">
<img :src="item.url" />
<span v-cloak>{{ item.text }}</span>
</div>
</div>
</div>
</module-one-2-2>
</el-col>
<el-col :span="6">
<module-one-2-1 label="监测时长">
<div style="padding: 4px">
<div class="mon-time-row1">
<img src="images/security1.gif" class="time-img" />
<div class="time-info">
<div style="color: #cbdaff; font-size: 16px">监测时长(天)</div>
<div style="color: #5bf8b5; font-size: 24px; font-weight: bold">
{{ monitDays }}
</div>
</div>
</div>
<div class="analyse_title_blue analyse-title">
<div class="analyse-text">监测点</div>
</div>
</div>
<div class="sjk-chart-line-title scroll mon-points" v-if="pointElements && pointElements.length>0">
<div v-for="(it, idx) in pointElements" :key="idx" :class="(selPoint?.spId || 0) == it.spId ? 'active' : ''"
class="title-item" @click="selPoint = it">
{{ it.spName }}
</div>
</div>
<div style="padding: 10px" class="mon-point-info" v-if="pointElements && pointElements.length>0">
<div class="mon-title">监测点数据</div>
<div v-if="selPoint" class="pt-item-line">
<div class="glr-title mon-point-title" style="margin-top: 10px">
{{ selPoint.spName }}
</div>
<el-row>
<el-col :span="12">
<div class="pt-label">X方向位移</div>
<div>
<span class="pt-val">{{selPoint.displace?selPoint.displace.toFixed(3):"-" }}</span>
<span class="pt-unit">mm</span>
</div>
</el-col>
<el-col :span="12">
<div class="pt-label">Y方向位移</div>
<div>
<span class="pt-val">{{selPoint.displace2?selPoint.displace2.toFixed(3):"-" }}</span>
<span class="pt-unit">mm</span></div>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<div class="pt-label">X方向累计变化量</div>
<div>
<span class="pt-val">{{selPoint.totalize?selPoint.totalize.toFixed(3):"-" }}</span>
<span class="pt-unit">mm</span>
</div>
</el-col>
<el-col :span="12">
<div class="pt-label">Y方向累计变化量</div>
<div>
<span class="pt-val">{{selPoint.totalize2?selPoint.totalize2.toFixed(3):"-" }}</span>
<span class="pt-unit">mm</span>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<div class="pt-label">X方向单次变化量</div>
<div>
<span class="pt-val">{{selPoint.variation?selPoint.variation.toFixed(3):"-" }}</span>
<span class="pt-unit">mm</span>
</div>
</el-col>
<el-col :span="12">
<div class="pt-label">Y方向单次变化量</div>
<div>
<span class="pt-val">{{selPoint.variation2? selPoint.variation.toFixed(3):"-"}}</span>
<span class="pt-unit">mm</span>
</div>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<div class="pt-label">X方向变化速率</div>
<div>
<span class="pt-val">{{selPoint.changeRate?selPoint.changeRate.toFixed(3):"-" }}</span>
<span class="pt-unit">mm/d</span>
</div>
</el-col>
<el-col :span="12">
<div class="pt-label">Y方向变化速率</div>
<div>
<span class="pt-val">{{selPoint.changeRate2?selPoint.changeRate2.toFixed(3):"-" }}</span>
<span class="pt-unit">mm</span>
</div>
</el-col>
</el-row>
</div>
<div v-else class="div-no-data" style="padding-top: 100px">
<img src="images/nodata.png" style="width: 120px" />
<div style="text-align: center; font-size: 12px; color: #888">
暂无数据
</div>
</div>
</div>
</module-one-2-1>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<module-one-1-2 label="基坑变化趋势" style="position: relative">
<div style="position: absolute; right: 0px; top: 4px">
<el-date-picker class="bg-date-picker" v-model="selDate" type="daterange" popper-class="bg-date-picker-pop"
:editable="false" @change="dtChange" :picker-options="pickerOptions" range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
<div class="sjk-chart-line" v-loading="loading" element-loading-text="数据加载中"
element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0)">
<div class="sjk-chart-line-title chart-nav">
<div :class="btnNav == 0 ? 'active' : ''" @click="onClickPoint(0)">
X位移
</div>
<div :class="btnNav == 1 ? 'active' : ''" @click="onClickPoint(1)">
X累计变化量
</div>
<div :class="btnNav == 2 ? 'active' : ''" @click="onClickPoint(2)">
X单次变化量
</div>
<div :class="btnNav == 3 ? 'active' : ''" @click="onClickPoint(3)">
X变化速率
</div>
<div :class="btnNav == 4 ? 'active' : ''" @click="onClickPoint(4)">
Y位移
</div>
<div :class="btnNav == 5 ? 'active' : ''" @click="onClickPoint(5)">
Y累计变化量
</div>
<div :class="btnNav == 6 ? 'active' : ''" @click="onClickPoint(6)">
Y单次变化量
</div>
<div :class="btnNav == 7 ? 'active' : ''" @click="onClickPoint(7)">
Y变化速率
</div>
</div>
<div class="trend-chart-max" :key="charElIdx">
<trend-line-chart :height="220" :chartdata="CollWeiyiPointData" :data="CollWeiyiPointData.data"
:fn="setChartOpt"></trend-line-chart>
</div>
</div>
</module-one-1-2>
</el-col>
<el-col :span="12">
<module-one-1-2 label="测点统计">
<div class="pt-list scroll">
<div v-for="(it,idx) in pointElements" :key="idx" class="pt-item">
<div class="pt-icon"><i class="el-icon-tickets"></i></div>
<div class="pt-name">{{ it.spName }}</div>
<div class="pt-deptname">{{ it. deptName}}</div>
<div class="pt-type">位移</div>
<div class="pt-data">
<span class="pt-data-type">X: </span>
<span class="pt-data-val">{{ it.displace?it.displace.toFixed(3):"-" }}</span>
<span class="pt-data-unit">mm</span>
</div>
<div class="pt-data">
<span class="pt-data-type">Y: </span>
<span class="pt-data-val">{{ it.displace2?it.displace2.toFixed(3):"-" }}</span>
<span class="pt-data-unit">mm</span>
</div>
</div>
</div>
</module-one-1-2>
</el-col>
</el-row>
</div>
</template>
<script>
import "@/components/module/module-one-2-2";
import "@/components/module/module-one-1-2";
import "@/components/module/module-one-2-1";
import "@/components/classify-bar";
import "@/components/trend-line-chart";
import debounce from "lodash.debounce";
import enginChart from "../engin/enginChart.vue";
export default {
//基坑
name: "JhbigscreenExcavation",
components: { enginChart },
data() {
return {
projectInfo: {},
dept: {},
prjs: [],
monitDays:0,
selPoint: null,
monTotal: 0,
onlineDevTotal: 0,
classifyBarData: [],
todayTotal: 10,
weekTotal: 99,
warningType: [],
warningTypeInterval: undefined,
warningTypeIndex: 0,
urlImgBgd: "",
forBitMappedImageData: [],
forBitMappedImageDataPJ: [],
legendArrData: [],
popupShow: false,
popupPosition: {},
pointPositionName: "",
popupArrData: [],
offLine: true,
loading: false,
btnNav: 0,
CollWeiyiPointData: {
dataX: [],
legend: [],
data: [],
},
charElIdx: 0,
pointElements:[],
pointData: [],
selDate: [],
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
mounted() {
let dt1 = this.$dt(+new Date() - 7 * 24 * 3600 * 1000);
let dt2 = this.$dt(new Date());
this.selDate = [dt1, dt2];
this.urlImgBgd = "url(images/data/excavation-01.jpg) 100% 100%";
this.forBitMappedImageData = JSON.parse(
'[{"sensorTypeName":"位移(WY)","pointName":"位移26","drawId":"7039969819126403072","sensorInfoId":"7042034685840703494","url":"","xpixels":1492.266916,"sortValue":1,"createData":"2023-03-20 20:06:19","top":86.56728596535274,"fileSize":"2276*1280","left":607.8571428571429,"ypixels":117.403425,"sensorType":"CollWeiyiPoint","statusTime":"2024-03-09 22:40:04","otherProjectId":"1634117283072266241","isBase":"0","sensorSmallType":"24","drawName":"御井路公租房.jpg","status":"0","state":true,"imgUrl":"images/place_chenjiang_green.png"},{"sensorTypeName":"沉降(CJ)","pointName":"沉降53","drawId":"7039969819126403072","sensorInfoId":"7039970088807718912","url":"","xpixels":423.054061,"sortValue":1,"createData":"2023-03-20 20:06:19","top":152.63871453678132,"fileSize":"2276*1280","left":211.42857142857142,"ypixels":336.059302,"sensorType":"CollWeiyiPoint","statusTime":"2024-03-09 22:40:04","otherProjectId":"1634117283072266241","isBase":"1","sensorSmallType":"80","drawName":"御井路公租房.jpg","status":"0","state":true,"imgUrl":"images/place_chenjiang_blue.png"},{"sensorTypeName":"倾斜(QX)","pointName":"倾斜44","drawId":"7039969819126403072","sensorInfoId":"7039970088841273344","url":"","xpixels":387.71104,"sortValue":1,"createData":"2023-03-13 11:22:53","top":112.99585739392417,"fileSize":"2276*1280","left":317.1428571428571,"ypixels":766.483595,"sensorType":"CollQingxiePoint","statusTime":"2024-03-09 22:40:04","otherProjectId":"1634117283072266241","isBase":"0","sensorSmallType":"33","drawName":"御井路公租房.jpg","status":"0","state":true,"imgUrl":"images/place_qingxie_green.png"}]'
);
this.forBitMappedImageDataPJ = JSON.parse(
'[{"top":205.49585739392415,"left":224.64285714285714,"fileSize":"2276*1280","pointName":"倾斜45","sensorType":"CollQingxiePoint","id":1831,"otherProjectId":"1634117283072266241","project_name":"XXXXX项目EPC总承包项目","sensorInfoId":"7052577632253038592","url":"","status":"2","state":true,"imgUrl":"images/pj_grey.png"},{"top":271.56728596535277,"left":179.71428571428572,"fileSize":"2276*1280","pointName":"倾斜46","sensorType":"CollQingxiePoint","id":1831,"otherProjectId":"1634117283072266241","project_name":"XXXXX项目EPC总承包项目","sensorInfoId":"7052577632253038596","url":"","status":"2","state":true,"imgUrl":"images/pj_grey.png"},{"top":337.6387145367813,"left":171.78571428571428,"fileSize":"2276*1280","pointName":"倾斜47","sensorType":"CollQingxiePoint","id":1831,"otherProjectId":"1634117283072266241","project_name":"XXXXX项目EPC总承包项目","sensorInfoId":"7052577632253038600","url":"","status":"2","state":true,"imgUrl":"images/pj_grey.png"},{"top":245.13871453678132,"left":211.42857142857142,"fileSize":"2276*1280","pointName":"倾斜48","sensorType":"CollQingxiePoint","id":1831,"otherProjectId":"1634117283072266241","project_name":"XXXXX项目EPC总承包项目","sensorInfoId":"7052896778106015744","url":"","status":"2","state":true,"imgUrl":"images/pj_grey.png"},{"top":311.2101431082099,"left":211.42857142857142,"fileSize":"2276*1280","pointName":"倾斜49","sensorType":"CollQingxiePoint","id":1831,"otherProjectId":"1634117283072266241","project_name":"XXXXX项目EPC总承包项目","sensorInfoId":"7052896778106015748","url":"","status":"2","state":true,"imgUrl":"images/pj_grey.png"},{"top":350.85300025106704,"left":185,"fileSize":"2276*1280","pointName":"倾斜50","sensorType":"CollQingxiePoint","id":1831,"otherProjectId":"1634117283072266241","project_name":"XXXXX项目EPC总承包项目","sensorInfoId":"7052896778106015752","url":"","status":"2","state":true,"imgUrl":"images/pj_grey.png"}]'
);
this.legendArrData = JSON.parse(
'[{"type":"CollWeiyiPoint","class":"sjk-icon-legend-right-icon","url":"images/legend_weiyi.png","text":"位移"}]'
);
this.pointData = "1,2,3,4,5,6,7,8".split(",").map((d) => {
//,9,10,11,12,13,14,15,16,17
return {
id: d,
name: "监测点0" + (d < 10 ? "0" + d : "" + d),
pN: "-14",
pE: "-0.4",
pZ: "-0.2",
sedD: "-0.2",
sedM: "12",
sedS: "A",
disD: "1.5",
disM: "12",
disS: "A",
ratD: "0.23",
ratM: 12,
ratS: "D",
};
});
this.selPoint = this.pointData[0];
this.init();
this.$bus.$on(
"projectChange",
debounce((res) => {
this.projectInfo = res;
this.dept = this.$root.dept || this.dep || {};
this.prjs = this.$root.projects || this.prjs || [];
this.loadData();
})
);
if (this.$root.hasInitHeader) {
this.initMe();
}
},
methods: {
getPtImg(it){
return it.isOnline? "images/place_weiyi_green.png": "images/place_weiyi_grey.png";
},
getWarnLevel(lvl){
return ["正常","超预警值","超报警值","超控制值"][lvl];
},
setChartOpt(opt) {//重写图表
if (!this.CollWeiyiPointData.ok) {
return opt;
}
let objs = this.CollWeiyiPointData.obj;
let titles = ['X方向位移(mm)', 'X方向累计变化量mm', 'X方向单次变化量mm', 'X方向变化速率mm/d', 'Y方向位移mm', 'Y方向累计变化量mm', 'Y方向单次变化量mm', 'Y方向变化速率mm/d'];
let field = ['displace', 'totalize', 'variation', 'changeRate', 'displace2', 'totalize2', 'variation2', 'changeRate2'];
let o = {
tooltip: {
trigger: "axis",
axisPointer: {
lineStyle: {
color: "#57617B",
},
},
},
legend: {
textStyle: {
color: "#c3dbfd",
},
data: objs.map(it => it[0].spName),
type: "scroll",
animation: false,
left: "30",
right: "20",
selected: [],
},
grid: { left: "3%", right: "4%", bottom: "3%", containLabel: true },
toolbox: { top: "6%", feature: { saveAsImage: {} } },
dataZoom: [{ type: "slider", show: true }, { type: "inside" }],
xAxis: {
type: "time",
axisLabel: {
textStyle: {
color: "#c5d9fc",
},
},
axisLine: {
show: true,
lineStyle: {
color: "#25597e",
type: "dashed",
},
},
},
yAxis: {
name: titles[this.btnNav],
nameTextStyle: {
color: "#fff",
fontSize: 14,
},
axisLabel: {
show: true,
textStyle: {
color: "#c5d9fc",
},
},
},
series: objs.map(it => {
return {
name: it[0].spName,
type: "line",
sampling: "max",
showSymbol: false,
animation: false,
data: it.map(item => {
let tmps = [];
tmps.push(item.collectTime)
tmps.push("" + item[field[this.btnNav]])
return tmps;
})
}
})
};
return o;
},
initMe() {
this.projectInfo = this.$root.project || {};
this.dept = this.$root.dept || {};
this.prjs = this.$root.projects || [];
this.loadData();
},
dtChange() {//加载图表数据
let postData = {
projectId: this.projectInfo.id,
createTime: this.$dt(this.selDate[0]).format("YYYY-MM-DD HH:mm:ss"),
updateTime: this.$dt(this.selDate[1]).format("YYYY-MM-DD HH:mm:ss"),
dataType: "horizontal",
};
this.$api.pitmonit.selectByDate(postData).then((d) => {
let obj = {};
(d.data || []).forEach(it => {
let name = it.spName;
if (obj[name]) {
obj[name].push(it);
} else {
obj[name] = [it];
}
});
let tmps = [];
for (let k in obj) {
tmps.push(obj[k]);
}
this.CollWeiyiPointData = {
dataX: [],
legend: [],
data: [],
obj: tmps,
ok: true
};
this.charElIdx++;
});
},
loadData() {
this.dtChange();
let ajaxs = [
this.$api.pitmonit.totalCount(this.projectInfo.id),
this.$api.pitmonit.getLastDataForElement(this.projectInfo.id),
this.$api.pitmonit.monitDays(this.projectInfo.id),
this.$api.pitmonit.alarmList(this.projectInfo.id),
];
this.$api.http.all(ajaxs).then((res) => {
this.monTotal = res[0].data.dev || 0;
this.onlineDevTotal = res[0].data.data || 0;
const spDate = (dt) => {
let dt1 = this.$dt(this.$dt(new Date()).format("YYYY-MM-DD")).$d;
let dt2 = this.$dt(dt).$d;
return ((dt1 - dt2) * 1.0) / 1000 / 3600 / 24;
};
let pts = res[1].data.filter((d) => d.dataType == "horizontal").map(d=>{
d.isOnline=d.collectTime && spDate(d.collectTime) < 3;
d.pt=JSON.parse(d.remark||"{}");
d.top=d.pt.x||0;
d.left=d.pt.y||0;
return d;
});
this.pointElements=pts;
if(pts.length>0){
this.selPoint=pts[0];
}
let total = pts.length;
let onLine = pts.filter(d=>d.isOnline).length;
this.classifyBarData = [
{
name: "水平位移",
total: total,
yesMonitor: onLine,
notMonitor: total - onLine,
unit: "个",
},
];
this.monitDays=res[2].data||0;
this.showAlarmList(res[3].data||[]);
});
},
showAlarmList(datas){
this.warningType=datas;
},
init() {
this.warningTypeInterval = setInterval(this.automaticRollType, 5000);
},
listMinMouseoverType() {
clearInterval(this.warningTypeInterval);
},
listMinMouseoutType() {
this.warningTypeInterval = setInterval(this.automaticRollType, 5000);
},
automaticRollType() {
var height = $(".glr-login-number-max").innerHeight();
if (
$("#afootOverflowType").scrollTop() ==
height * this.warningType.length - $("#afootOverflowType").innerHeight()
) {
this.warningTypeIndex = 0;
} else {
this.warningTypeIndex = this.warningTypeIndex + 1;
}
$("#afootOverflowType").animate({
scrollTop: height * this.warningTypeIndex + "px",
});
if (
$("#afootOverflowTypePJ").scrollTop() ==
height * this.warningType.length -
$("#afootOverflowTypePJ").innerHeight()
) {
this.warningTypeIndex = 0;
} else {
this.warningTypeIndex = this.warningTypeIndex + 1;
}
$("#afootOverflowTypePJ").animate({
scrollTop: height * this.warningTypeIndex + "px",
});
},
legendScreen(type) {
var data = this.forBitMappedImageData;
data.map((x) => {
if (x.sensorType == type) {
if (x.state == true) {
x.state = false;
} else {
x.state = true;
}
}
return x;
});
var legendData = this.legendArrData;
legendData.map((y) => {
if (y.type == type) {
if (y.class == "sjk-icon-legend-right-icon") {
y.class = "sjk-icon-legend-right-icon sjk-legend-filter";
} else {
y.class = "sjk-icon-legend-right-icon";
}
}
return y;
});
this.forBitMappedImageData = data;
this.legendArrData = legendData;
},
//点击点位事件
onClickSpot(type, id, isBase, status, it) {
this.deviceId = id;
var posX = 0,
posY = 0;
var event = event || window.event;
if (event.pageX || event.pageY) {
posX = event.pageX;
posY = event.pageY;
} else if (event.clientX || event.clientY) {
posX =
event.clientX +
document.documentElement.scrollLeft +
document.body.scrollLeft;
posY =
event.clientY +
document.documentElement.scrollTop +
document.body.scrollTop;
}
var position = {};
if (type == "CollWeiyiPoint") {
position = {
top: posY - 110,
left: posX + 30,
};
} else if (type == "CollQingxiePoint") {
position = {
top: posY - 110,
left: posX + 30,
};
}
this.popupPosition = position;
if (isBase) {
this.popupShow = true;
if (type == "CollWeiyiPoint") {
this.pointPositionName = `沉降监测-${it.pointName}`;
}
if (type == "CollQingxiePoint") {
this.pointPositionName = `倾斜监测-${it.pointName}`;
}
this.popupArrData = [];
}
},
onClickSpotPJ(type, projectId, id, it) {
this.deviceId = id;
var posX = 0,
posY = 0;
var event = event || window.event;
if (event.pageX || event.pageY) {
posX = event.pageX;
posY = event.pageY;
} else if (event.clientX || event.clientY) {
posX =
event.clientX +
document.documentElement.scrollLeft +
document.body.scrollLeft;
posY =
event.clientY +
document.documentElement.scrollTop +
document.body.scrollTop;
}
var position = {};
if (type == "CollWeiyiPoint") {
position = {
top: posY - 110,
left: posX + 30,
};
} else if (type == "CollQingxiePoint") {
position = {
top: posY - 110,
left: posX + 30,
};
}
this.pointPositionName = `爬架-倾斜监测-${it.pointName}`;
this.popupPosition = position;
this.popupShow = true;
this.popupArrData = [];
},
// 监听点击弹窗以外的区域
clickOutside(event) {
const current = document.getElementById("clickPopup");
if (current) {
if (!current.contains(event.target)) {
if (event.target._prevClass != "icon-img") {
this.popupShow = false;
}
}
}
},
//点击点位类型
onClickPoint(n) {
this.btnNav = n;
this.dtChange();
},
},
};
</script>
<style lang="less">
.project-excavation {
.my-svg-icon-blue,
.my-svg-icon-green {
width: 28px !important;
height: 28px !important;
position: relative;
top: -10px;
}
.my-svg-icon-green * {
fill: #63f8bc !important;
}
.my-svg-icon-blue * {
fill: #7c9ce1 !important;
}
.sjk-img-min {
height: 100%;
}
.mon-time-row1 {
display: flex;
justify-content: center;
align-items: center;
padding: 10px;
.time-img {
height: 120px;
}
.time-info {
text-align: center;
line-height: 40px;
}
}
.sjk-chart-line-title.mon-points {
display: block;
max-height: 60px;
overflow-y: auto;
.title-item {
display: inline-block;
cursor: pointer;
font-size: 9px;
}
}
.sjk-chart-line-title.chart-nav {
div {
font-size: 12px;
padding: 5px 16px;
font-weight: bold;
}
}
.mon-point-info {
.mon-title {
border-bottom: dotted 1px #918c8c;
line-height: 24px;
font-size: 14px;
font-weight: bold
}
.mon-point-title {
color: #51b5ff;
}
.pt-item-line{
.el-row{
margin-top:8px;
.el-col{
div{
text-align: center;
line-height: 30px;
}
.pt-label{
font-size:16px;
font-weight: bold;
color:#B3E5FC;
}
.pt-val{
font-size:20px;
font-weight: bold;
color:#03CCE0;
}
}
}
}
}
.pt-list{
width:100%;
overflow-x: auto;
display: block;
white-space: nowrap;
padding:20px;
.pt-item{
width:140px;
display: inline-block;
background-color: #042457;
background: linear-gradient(0deg, rgba(2, 0, 36, 1) 0%, rgba(9, 9, 121, 1) 98%, rgba(0, 219, 255, 1) 70%);
border: #042457 solid 1px;
border-radius: 5px;
margin-left:20px;
height: 220px;
vertical-align: middle;
padding: 10px;
text-align: center;
&:first-child{
margin-left: 0px;
}
line-height: 24px;
font-size: 12px;
.pt-icon{
font-size:30px;
color:#5bf8b5;
margin-top:10px;
}
.pt-name{
margin-top:8px;
font-size:14px;
font-weight:bold;
}
.pt-deptname{
font-size: 12px;
white-space: break-spaces;
padding: 0px 0px;
line-height: 20px;
color:#e2e2e369;
height: 40px;
}
.pt-data{
margin-top:8px;
.pt-data-type{
font-size:18px;
color:#03CCE0;
}
.pt-data-val{
font-size:18px;
color:#03CCE0;
}
}
}
}
.analyse-number-max{
height:200px;
.warn-item{
font-size:12px;
color: #51b5ff;
padding:10px;
border-bottom: dotted 1px #042457;
line-height: 22px;
.sp-label{
color: #5bf8b5;
display: inline-block;
width: 80px;
text-align: right;
&::after{
content: ":";
display: inline-block;
padding:0px 2px;
}
}
.sp-data{
&.sp-level-0{
color: #FFEBEE;
}
&.sp-level-1{
color: #EF9A9A;
}
&.sp-level-2{
color: #EF5350;
}
&.sp-level-3{
color: #D32F2F;
}
}
}
}
.sjk-icon-max{
.icon-img{
position:absolute;
cursor: pointer;
&:hover{
img{
width:40px;
}
.spot-text{
left:8px;
color:#51b5ff;
}
}
img{
width:30px;
}
.spot-text{
position: absolute;
font-size:10px;
font-weight: bold;
color:#fff;
text-shadow: 1px 1px 2px #010b2d;
left:4px;
top:40px;
}
}
}
}
.pit-spot-node-pop{
.spot-info{
.pt-data{
margin-top:8px;
.pt-data-type{
font-size:16px;
color:#03CCE0;
}
.pt-data-val{
font-size:16px;
color:#03CCE0;
margin-right:4px;
}
}
}
}
</style>