2022-06-28 09:09:51 +08:00

1814 lines
54 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="fullHeight dataBoardIndex">
<div class="fullHeight aside">
<div class="blockBox">
<!-- 项目信息 -->
<div class="blockTitle">
{{ $t('message.companyDiagram.projectInfo') }}
</div>
<div class="blockContent">
<marquee
class="text"
id="affiche"
align="left"
direction="up"
height="100%"
width="100%"
hspace="10"
vspace="20"
loop="1"
scrollamount="5"
scrolldelay="100"
onmouseover="this.stop()"
onmouseout="this.start()"
behavior="scroll"
>
<!-- <vue-scroll> -->
<div class="listItem">
<!-- 项目名称 -->
<span class="label"
>{{ $t('message.companyDiagram.entryName1') }}</span
>
<span class="value">{{ projectData.projectName }}</span>
</div>
<div class="listItem">
<!-- 项目地址 -->
<span class="label"
>{{ $t('message.companyDiagram.projectAddress') }}</span
>
<span class="value"
>{{ projectData.provinceName }}{{ projectData.cityName
}}{{ projectData.areaName
}}{{ projectData.projectAddress }}</span
>
</div>
<div class="listItem">
<!-- 项目经理 -->
<span class="label"
>{{ $t('message.companyDiagram.projectManager') }}</span
>
<span class="value">{{ projectData.projectManage }}</span>
</div>
<div class="listItem">
<!-- 联系电话 -->
<span class="label"
>{{ $t('message.companyDiagram.telPhone') }}</span
>
<span class="value">{{ projectData.projectTel }}</span>
</div>
<div class="listItem">
<!-- 建筑面积 -->
<span class="label"
>{{ $t('message.companyDiagram.buildArea') }}</span
>
<span class="value">{{ projectData.projectAcreage }} </span>
</div>
<div class="listItem">
<!-- 开工日期 -->
<span class="label"
>{{ $t('message.companyDiagram.buildStartTime') }}</span
>
<span class="value">{{ projectData.startWorkDate }}</span>
</div>
<div class="listItem">
<!-- 项目编号 -->
<span class="label"
>{{ $t('message.companyDiagram.projectNo') }}</span
>
<span class="value">{{ projectData.projectNumber }}</span>
</div>
<div class="listItem">
<!-- 工程类别 -->
<span class="label"
>{{ $t('message.companyDiagram.projectType') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.PROJECTTYPE'
)"
:key="index"
v-if="projectData.projectType == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 工程用途 -->
<span class="label"
>{{ $t('message.companyDiagram.projectUse') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.ENGINEERINGPRUPOSE'
)"
:key="index"
v-if="projectData.engineeringPurpose == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 结构类型 -->
<span class="label"
>{{ $t('message.companyDiagram.structureType') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.STRUCTURETYPE'
)"
:key="index"
v-if="projectData.structureType == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 工程状态 -->
<span class="label"
>{{ $t('message.companyDiagram.projectStatus') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.BUILDSTATUS'
)"
:key="index"
v-if="projectData.bulidStatus == item.id"
>{{ item.name }}</span
>
</div>
<!-- </vue-scroll> -->
<div class="listItem">
<!-- 项目名称 -->
<span class="label"
>{{ $t('message.companyDiagram.entryName1') }}</span
>
<span class="value">{{ projectData.projectName }}</span>
</div>
<div class="listItem">
<!-- 项目地址 -->
<span class="label"
>{{ $t('message.companyDiagram.projectAddress') }}</span
>
<span class="value"
>{{ projectData.provinceName }}{{ projectData.cityName
}}{{ projectData.areaName
}}{{ projectData.projectAddress }}</span
>
</div>
<div class="listItem">
<!-- 项目经理 -->
<span class="label"
>{{ $t('message.companyDiagram.projectManager') }}</span
>
<span class="value">{{ projectData.projectManage }}</span>
</div>
<div class="listItem">
<!-- 联系电话 -->
<span class="label"
>{{ $t('message.companyDiagram.telPhone') }}</span
>
<span class="value">{{ projectData.projectTel }}</span>
</div>
<div class="listItem">
<!-- 建筑面积 -->
<span class="label"
>{{ $t('message.companyDiagram.buildArea') }}</span
>
<span class="value">{{ projectData.projectAcreage }} m²</span>
</div>
<div class="listItem">
<!-- 开工日期 -->
<span class="label"
>{{ $t('message.companyDiagram.buildStartTime') }}</span
>
<span class="value">{{ projectData.startWorkDate }}</span>
</div>
<div class="listItem">
<!-- 项目编号 -->
<span class="label"
>{{ $t('message.companyDiagram.projectNo') }}</span
>
<span class="value">{{ projectData.projectNumber }}</span>
</div>
<div class="listItem">
<!-- 工程类别 -->
<span class="label"
>{{ $t('message.companyDiagram.projectType') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.PROJECTTYPE'
)"
:key="index"
v-if="projectData.projectType == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 工程用途 -->
<span class="label"
>{{ $t('message.companyDiagram.projectUse') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.ENGINEERINGPRUPOSE'
)"
:key="index"
v-if="projectData.engineeringPurpose == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 结构类型 -->
<span class="label"
>{{ $t('message.companyDiagram.structureType') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.STRUCTURETYPE'
)"
:key="index"
v-if="projectData.structureType == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 工程状态 -->
<span class="label"
>{{ $t('message.companyDiagram.projectStatus') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.BUILDSTATUS'
)"
:key="index"
v-if="projectData.bulidStatus == item.id"
>{{ item.name }}</span
>
</div>
<!-- di san fen -->
<div class="listItem">
<!-- 项目名称 -->
<span class="label"
>{{ $t('message.companyDiagram.entryName1') }}</span
>
<span class="value">{{ projectData.projectName }}</span>
</div>
<div class="listItem">
<!-- 项目地址 -->
<span class="label"
>{{ $t('message.companyDiagram.projectAddress') }}</span
>
<span class="value"
>{{ projectData.provinceName }}{{ projectData.cityName
}}{{ projectData.areaName
}}{{ projectData.projectAddress }}</span
>
</div>
<div class="listItem">
<!-- 项目经理 -->
<span class="label"
>{{ $t('message.companyDiagram.projectManager') }}</span
>
<span class="value">{{ projectData.projectManage }}</span>
</div>
<div class="listItem">
<!-- 联系电话 -->
<span class="label"
>{{ $t('message.companyDiagram.telPhone') }}</span
>
<span class="value">{{ projectData.projectTel }}</span>
</div>
<div class="listItem">
<!-- 建筑面积 -->
<span class="label"
>{{ $t('message.companyDiagram.buildArea') }}</span
>
<span class="value">{{ projectData.projectAcreage }} m²</span>
</div>
<div class="listItem">
<!-- 开工日期 -->
<span class="label"
>{{ $t('message.companyDiagram.buildStartTime') }}</span
>
<span class="value">{{ projectData.startWorkDate }}</span>
</div>
<div class="listItem">
<!-- 项目编号 -->
<span class="label"
>{{ $t('message.companyDiagram.projectNo') }}</span
>
<span class="value">{{ projectData.projectNumber }}</span>
</div>
<div class="listItem">
<!-- 工程类别 -->
<span class="label"
>{{ $t('message.companyDiagram.projectType') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.PROJECTTYPE'
)"
:key="index"
v-if="projectData.projectType == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 工程用途 -->
<span class="label"
>{{ $t('message.companyDiagram.projectUse') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.ENGINEERINGPRUPOSE'
)"
:key="index"
v-if="projectData.engineeringPurpose == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 结构类型 -->
<span class="label"
>{{ $t('message.companyDiagram.structureType') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.STRUCTURETYPE'
)"
:key="index"
v-if="projectData.structureType == item.id"
>{{ item.name }}</span
>
</div>
<div class="listItem">
<!-- 工程状态 -->
<span class="label"
>{{ $t('message.companyDiagram.projectStatus') }}</span
>
<span
class="value"
v-for="(item, index) in $t(
'message.companyDiagram.BUILDSTATUS'
)"
:key="index"
v-if="projectData.bulidStatus == item.id"
>{{ item.name }}</span
>
</div>
</marquee>
</div>
</div>
<div class="blockBox" style="height: calc(33% - 90px); margin-top: 20px">
<!-- 人员概况 -->
<div class="blockTitle">
{{ $t('message.companyDiagram.peopleOverview') }}
</div>
<div class="blockContent dataBoxContent" style="position: relative">
<div v-show="ry_switch == 0">
<img
style="margin-left: 22px"
src="@/assets/images/dataBoard/rygs1.png"
alt=""
/>
<img
style="margin-left: 12px"
src="@/assets/images/dataBoard/rygs1_1.png"
alt=""
/>
</div>
<div v-show="ry_switch == 1">
<img src="@/assets/images/dataBoard/rygs2.png" alt="" />
</div>
<div style="position: absolute; bottom: 10px; left: 26px">
<img
src="@/assets/images/dataBoard/rygs_botom.png"
style="margin-top: 12px"
alt=""
/>
</div>
</div>
</div>
<div @click="toznsb" class="blockBox" style="height: calc(33% - 110px); margin-top: 20px">
<!-- 人员概况 -->">
<div class="blockTitle">智能设备</div>
<div style="">
<img
style="margin-top: 10px; margin-left: 25px"
class=""
src="@/assets/images/dataBoard/znsb.png"
alt=""
/>
</div>
</div>
<div class="blockBox" @click="tohygl" style="height: calc(33% - 130px); margin-top: 20px">
<!-- 人员概况 -->">
<div class="blockTitle">合约管理</div>
<div >
<img
style="margin-top: 10px; margin-left: 25px"
class=""
src="@/assets/images/dataBoard/hygl.png"
alt=""
/>
</div>
</div>
</div>
<div class="center fullHeight">
<div class="top">
<img
style="width: 92%; margin-left: 36px"
src="@/assets/images/dataBoard/bg.jpg"
alt=""
/>
</div>
<div class="bottom">
<!-- 进度情况 -->
<div v-if="enabledProjectV2 == 3" class="blockTitle blockTitle4">
<i></i>{{ $t('message.companyDiagram.planStatus') }}
</div>
<div class="bottomInner">
<div class="timeBox">
<div class="blockTitle blockTitle2" style="margin-right: 40px">
<i></i>{{ $t('message.companyDiagram.countDown') }}
</div>
<div class="timeInner">
<!-- 项目总天数 -->
<p>{{ $t('message.companyDiagram.projectDayNum') }}</p>
<div class="bg1">
<!-- 天 -->
<span class="num">{{ projectData.totalProjectDay }}</span>
{{ $t('message.companyDiagram.day') }}
</div>
</div>
<div class="timeInner">
<!-- 项目剩余天数 -->
<p>{{ $t('message.companyDiagram.projectResidueDay') }}</p>
<div class="bg1">
<!-- 天 -->
<span class="num">{{ projectData.surplusDay }}</span>
{{ $t('message.companyDiagram.day') }}
</div>
</div>
<div></div>
</div>
<div class="splitLine">
<img
src="@/assets/images/carOverview/line4.png"
alt=""
width="100%"
/>
</div>
<div class="stageContent" style="display: flex">
<!-- 里程碑 -->
<div class="blockTitle blockTitle2" style="width: 220px">
<i></i>{{ $t('message.companyDiagram.milestone') }}
</div>
<div class="stageBox">
<vue-scroll :ops="ops" ref="stageScroll">
<div
class="stageItem"
v-for="(item, index) in stageList"
:key="index"
:class="
projectData.constructionStage - 1 > index
? 'finish'
: projectData.constructionStage - 1 == index
? 'ongoing'
: ''
"
>
<div class="statusImg"></div>
<p>{{ item.name }}</p>
<div
class="line"
v-show="stageList.length != index + 1"
></div>
</div>
</vue-scroll>
</div>
</div>
</div>
</div>
</div>
<div class="fullHeight aside">
<div class="blockBox">
<!-- 环境监测 -->
<div
v-if="COMPANY == 'longguang' || enabledProjectV2 == 3"
class="blockTitle"
>
{{ $t('message.companyDiagram.environmentMonitor') }}
</div>
<div
v-if="COMPANY == 'longguang' || enabledProjectV2 == 3"
class="blockContent"
>
<airQulityChart
:show="false"
:size="mini"
class="airQulityChart"
></airQulityChart>
<!-- 天气显示 -->
<div style="overflow: hidden" class="weatherBox">
<div
class="weatherItem"
v-for="(item, index) in weatherList"
:key="index"
v-if="index < 2"
>
<p>
<span>{{ item.day }}</span>
<!-- <span>{{ item.week }}</span> -->
</p>
<div style="height: 7%"></div>
<div class="imgBox">
<img :src="item.url" />
</div>
<div style="height: 10%"></div>
<p class="weather">{{ item.wea }}</p>
<p class="temp">{{ item.tem2 }} ~ {{ item.tem1 }}</p>
<div style="height: 6%"></div>
<p>
{{ $t('message.environmentalOverview.wind_power') }}
{{ item.win_speed }}
</p>
</div>
</div>
<!-- 空气质量 -->
<div class="airQuality">
<div class="airQuality-item">
<img src="@/assets/images/greenOverview/PM2.5@1x.png" alt="" />
<div>
<p>PM2.5</p>
<p>{{ plantCap.pm25 ? plantCap.pm25 : '--' }}μg/m3</p>
</div>
</div>
<div class="airQuality-item">
<img src="@/assets/images/greenOverview/PM10@1x.png" alt="" />
<div>
<p>PM10</p>
<p>{{ plantCap.pm10 ? plantCap.pm10 : '--' }}μg/m3</p>
</div>
</div>
<div class="airQuality-item">
<img src="@/assets/images/greenOverview/噪声@1x.png" alt="" />
<div>
<p>噪声</p>
<p>{{ plantCap.noise ? plantCap.noise : '--' }}db</p>
</div>
</div>
</div>
</div>
<!-- 安全管理 -->
<div @click="toquality"
v-if="COMPANY != 'longguang' && enabledProjectV2 != 3"
class="blockTitle"
>
{{ $t('message.companyDiagram.safeManage') }}
</div>
<div
@click="toquality"
v-if="COMPANY != 'longguang' && enabledProjectV2 != 3"
class="blockContent"
>
<div @click="toquality" class="safeChart" ref="safeChart"></div>
<div @click="toquality" class="descBox fullHeight">
<div>
<div class="descItem descItem1">
<!-- 已整改安全问题 -->
<p class="text">
<i class="dot purple"></i
>{{ $t('message.companyDiagram.rectificationSafeQuestion') }}
</p>
<p class="num">{{ secureData.completeNum }}</p>
</div>
<div class="descItem">
<!-- 未整改安全问题 -->
<p class="text">
<i class="dot red"></i
>{{
$t('message.companyDiagram.noRectificationSafeQuestion')
}}
</p>
<p class="num">{{ secureData.rectificationNum }}</p>
</div>
</div>
</div>
</div>
</div>
<!-- </div>-->
<div class="blockBox">
<!-- 质量管理 -->
<div
@click="toquality"
v-if="COMPANY != 'longguang' && enabledProjectV2 != 3"
class="blockTitle"
>
{{ $t('message.companyDiagram.qualityManage') }}
</div>
<!-- 设备报警 -->
<div @click="toquality" v-else class="blockTitle">
{{ $t('message.companyDiagram.devAlarm') }}
</div>
<div @click="toquality" class="blockContent">
<div
v-if="COMPANY != 'longguang' && enabledProjectV2 != 3"
class="qulityChart"
ref="qulityChart"
></div>
<div
v-if="COMPANY != 'longguang' && enabledProjectV2 != 3"
class="descBox fullHeight"
>
<div>
<div class="descItem descItem1">
<!-- 已整改质量问题 -->
<p class="text">
<i class="dot blue"></i
>{{
$t('message.companyDiagram.rectificationQualityQuestion')
}}
</p>
<p class="num">{{ qualityData.completeNum }}</p>
</div>
<div class="descItem">
<!-- 已完成验收 -->
<p class="text">
<i class="dot green"></i>
已验收
</p>
<p class="num">51</p>
</div>
</div>
<div style="margin-left: 22px">
<div class="descItem descItem1">
<!-- 未整改质量问题 -->
<p class="text">
<i class="dot green"></i
>{{
$t('message.companyDiagram.noRectificationQualityQuestion')
}}
</p>
<p class="num">{{ qualityData.rectificationNum }}</p>
</div>
<div class="descItem" style="margin-top: 12px">
<!-- 待验收 -->
<p class="text">
<i class="dot blue"></i>
待验收
<!-- {{
$t("message.companyDiagram.rectificationQualityQuestion")
}} -->
</p>
<p class="num">52</p>
</div>
</div>
</div>
<!-- 设备报警内容 -->
<div class="attendance-cards2" v-else>
<div class="attendance-cards-item">
<div class="cards-item-left">
<img
src="../../../assets/images/longguang2/tower_crane.png"
alt=""
/>
<p>塔吊</p>
</div>
<div class="cards-item-right">
<p class="p1">设备总数:{{ totalTowerDev }}</p>
<p class="p2">今日报警数</p>
<p class="p3">{{ totalDangerTowerDev }}</p>
</div>
</div>
<div class="attendance-cards-item">
<div class="cards-item-left">
<img
src="../../../assets/images/longguang2/elevator.png"
alt=""
/>
<p>升降机</p>
</div>
<div class="cards-item-right">
<p class="p1">设备总数:{{ totalLifterDev }}</p>
<p class="p2">今日报警数</p>
<p class="p3">{{ totalDangerLifterDev }}</p>
</div>
</div>
<div class="attendance-cards-item">
<div class="cards-item-left">
<img
src="../../../assets/images/longguang2/env_monitoring.png"
alt=""
/>
<p>环境监测</p>
</div>
<div class="cards-item-right">
<p class="p1">设备总数:{{ environmentDevNum }}</p>
<p class="p2">今日报警数</p>
<p class="p3">{{ environmentTotalAlarm }}</p>
</div>
</div>
<div class="attendance-cards-item">
<div class="cards-item-left">
<img
src="../../../assets/images/longguang2/video_monitoring.png"
alt=""
/>
<p>AI视频监测</p>
</div>
<div class="cards-item-right">
<p class="p1">设备总数:{{ totalVideoDev }}</p>
<p class="p2">今日报警数</p>
<p class="p3">{{ videoAlarmNum }}</p>
</div>
</div>
</div>
<!-- <vue-scroll :ops="ops" style="width: 100%">-->
<!-- <div v-else style="overflow:hidden;">
<div
class="weatherItem"
v-for="(item, index) in weatherList"
:key="index"
v-if="index < 3"
>
<p>
<span>{{ item.day }}</span>
</p>
<div style="height: 10%"></div>
<div class="imgBox">
<img :src="item.url" />
</div>
<div style="height: 10%"></div>
<p class="weather">{{ item.wea }}</p>
<p class="temp">{{ item.tem2 }} ~ {{ item.tem1 }}</p>
<div style="height: 6%"></div>
<p>
{{ $t("message.environmentalOverview.wind_power") }}
{{ item.win_speed }}
</p>
</div>
</div> -->
<!-- </vue-scroll>-->
</div>
</div>
<div @click="toenvironment" class="blockBox" style="height: calc(33.33% - 120px)">
<!-- 环境监测 -->
<div
v-if="COMPANY != 'longguang' && enabledProjectV2 != 3"
class="blockTitle"
>
{{ $t('message.companyDiagram.environmentMonitor') }}
</div>
<div>
<img
style="margin-top: 20px; margin-left: 25px"
class=""
src="@/assets/images/dataBoard/hjjcs.png"
alt=""
/>
</div>
</div>
<div class="blockBox" style="height: calc(33.33% - 120px)">
<div class="blockTitle">点亮展示</div>
<div >
<img
style="margin-top: 20px; margin-left: 55px"
class=""
src="@/assets/images/dataBoard/dlzs.png"
alt=""
/>
</div>
</div>
</div>
</div>
</template>
<script>
import echarts from "echarts4";
const echarts5 = require("echarts");
import devNumChart from "@/components/chart/devNumChart";
import airQulityChart from "@/components/chart/airQulityChart";
import { getWorkerStatisticsCountApi } from "@/assets/js/api/company/project";
import { getProjectDetail, editProjectInfo } from "@/assets/js/api/baseInfo.js";
import {
selectSecurityManageStatisticsApi,
selectQualityStatisticsApi,
getAllTowerDangerInfo,
getAllLifterDangerInfo,
getEnvironmentInfo,
getAiVideoInfo,
getAIDangerList,
} from "@/assets/js/api/dataBoard";
import {
getWeatherDataApi,
selectNewEnvironmentAlarmListApi,
getRealTimeDustNoiseDataApi,
environmentDevList,
} from "@/assets/js/api/environmentManage";
import {
getPageDetail,
eidtProjectShowConfig,
queryBySnData,
} from "@/assets/js/api/projectSummary.js";
export default {
components: { devNumChart, airQulityChart },
data() {
return {
ry_switch: 0,
COMPANY: "",
ops: {
vuescroll: {
// wheelScrollDuration: 0,
wheelDirectionReverse: true,
},
},
weatherList: [],
alarmList: [],
fileUrl: "",
imgUrl: "", //图片
showChangeImg: false, //显示隐藏更换图片
optionList: [
{
name: /* '宣传视频', */ this.$t("message.dataBoard.promotionalVideo"),
index: 1,
},
{
name: /* '效果图', */ this.$t("message.dataBoard.effectPicture"),
index: 2,
},
],
optionListIndex: 1,
ops: {
vuescroll: {
// wheelScrollDuration: 0,
wheelDirectionReverse: true,
},
},
stageList: this.$t("message.companyDiagram.CONSTRUCTIONSTAGE"),
projectData: {
constructionStage: 10,
videoUrl: "",
totalProjectDay: 0,
surplusDay: 0,
},
statisticsCount: {
currentMonthEducationPerson: 0,
projectcount: {
constructionStageCount14: 0,
constructionStageCount13: 0,
constructionStageCount15: 0,
constructionStageCount10: 0,
constructionStageCount12: 0,
constructionStageCount11: 0,
constructionStageCount1: 0,
saleAcreageTotal: 0,
constructionStageCount9: 0,
constructionStageCount8: 0,
constructionStageCount7: 0,
constructionStageCount6: 0,
constructionStageCount5: 0,
constructionStageCount4: 0,
constructionStageCount3: 0,
constructionStageCount2: 0,
projectNum: 0,
},
workercount: {
lwPersonYesterdayAdd: 0,
eduPersonTotal: 0,
jfGlPersonTotal: 0,
age18: 0,
age18to25: 0,
womanPersonTotal: 0,
lsPersonTotal: 0,
jlGlPersonTotal: 0,
age45to60: 0,
lwPersonTotal: 0,
manPersonTotal: 0,
totalPerson: 0,
age25to35: 0,
glPersonTotal: 0,
yfGlPersonTotal: 0,
avgage: 0,
age35to45: 0,
glPersonYesterdayAdd: 0,
age60: 0,
},
devcount: { ufaceDevNum: 0, videoNum: 0, environmentDevNum: 0 },
presencecount: {
jfGlPersonTotal: 0,
age18: 0,
age18to25: 0,
womanPersonTotal: 0,
lsPersonTotal: 0,
jlGlPersonTotal: 0,
age45to60: 0,
lwPersonTotal: 0,
manPersonTotal: 0,
totalPerson: 0,
age25to35: 0,
glPersonTotal: 0,
yfGlPersonTotal: 0,
avgage: 0,
age35to45: 0,
age60: 0,
chart2: Object,
option2: {},
},
},
totalDevNum: 0,
fullscreenLoading: null,
secureData: {
rectificationNum: 0,
completeNum: 0,
},
qualityData: {
rectificationNum: 0,
completeNum: 0,
},
enabledProjectV2: 2,
interval1: null,
totalTowerDev: 0, //塔吊数量
totalDangerTowerDev: 0, // 塔吊报警数量
totalLifterDev: 0, //升降机数量
totalDangerLifterDev: 0, //升降机报警数量
environmentDevNum: 0, //环境设备数量
environmentTotalAlarm: 0, // 环境设备报警数量
totalVideoDev: 0, // AI设备数量
videoAlarmNum: 0, // AI设备报警数量
srcList: [],
plantCap: {
// 环境监测空气质量数据
crc: "--",
humidity: "--",
noise: "--",
plateHumidity: "--",
plateTemperature: "--",
pm10: "--",
pm25: "--",
pressure: "--",
temperature: "--",
tsp: "--",
voltage: "--",
winddirectionName: "--",
windspeed: "--",
},
currentDevDetail: {}, // 当前项目设备详情
};
},
created() {
this.fileUrl = this.$store.state.FILEURL;
this.COMPANY = COMPANY;
},
beforeDestroy() {
clearInterval(this.interval1);
},
mounted() {
this.getQueryBySnData();
this.enabledProjectV2 = enabledProjectV2;
this.getDataDateils();
this.getWorkerStatisticsCount(1);
this.getSecureData();
this.getQualityData();
this.loadWeather();
this.getAlarmList();
this.getAlarmInfor();
this.getDevList();
setInterval(() => {
if (this.ry_switch == 0) {
this.ry_switch = 1
} else {
this.ry_switch = 0
}
}, 2000)
},
methods: {
toenvironment(){
console.log('===========')
this.$router.push({path:"/project/dataBoard/environment"})
},
toquality(){
console.log('===========')
this.$router.push({path:"/project/dataBoard/quality"})
},
toznsb(){
console.log('===========')
this.$router.push({path:"/project/dataBoard/digitalSite"})
},
tohygl(){
console.log('===========')
this.$router.push({path:"/project/dataBoard/contractManage"})
},
createdEchart2() {
let chart2 = echarts.init(this.$refs["echart2"]);
this.chart2 = chart2;
chart2.clear();
this.option2 = {
grid: {
top: "30px",
left: "80px",
right: "15px",
bottom: "30px",
},
tooltip: {
trigger: "axis",
// 取消鼠标悬浮时显示的中线
axisPointer: {
type: "none",
},
},
// ['特殊设备','人数设备','特种设备','环境设备']
xAxis: [
{
type: "value",
// '设备数'
name: this.$t("message.companyDiagram.devNum"),
show: false,
splitLine: {
lineStyle: {
color: "#fff",
type: "dashed",
},
},
axisTick: {
show: false,
},
axisLine: {
lineStyle: {
color: "#fff",
type: "solid",
},
},
axisLabel: {
color: "#fff",
},
},
{
type: "value",
},
],
yAxis: {
type: "category",
data: this.$t("message.companyDiagram.echarTitleData"),
axisLine: {
lineStyle: {
color: "#fff",
type: "dashed",
},
show: false,
},
axisTick: {
show: false,
},
axisLabel: {
color: "#fff",
fontSize: 12, //字体大小
},
},
series: [
{
itemStyle: {
normal: {
color: function (params) {
var colorList = ["#4378d8", "#a65d23", "#913211", "#199d83"];
return colorList[params.dataIndex];
},
},
},
name: this.$t("message.companyDiagram.devNum"),
data: [
this.statisticsCount.devcount.videoNum,
this.statisticsCount.devcount.ufaceDevNum,
this.statisticsCount.devcount.lifterDevNum +
this.statisticsCount.devcount.towerDevNum,
this.statisticsCount.devcount.environmentDevNum,
],
type: "bar",
barWidth: 20, //柱图宽度
},
],
};
chart2.setOption(this.option2);
},
getAlarmList() {
let data = {
projectSn: this.$store.state.projectSn,
};
// selectNewEnvironmentAlarmListApi(data).then((res) => {
// if (res.code == 200) {
// this.alarmList = res.result;
// console.log(res.result);
// }
// });
},
loadWeather() {
var _this = this;
getWeatherDataApi({ cityid: "" }).then((res) => {
console.log(res);
var json = JSON.parse(res.result);
var list = json.data;
console.log(json);
//
list.forEach((element, index) => {
// element.week=getWeek(element.date)
// element.date = element.date.substring(5,element.date.length)
element.url = require("@/assets/images/weather/" +
element.wea_img +
".png");
this.weatherList.push(element);
});
});
},
//获取环境设备列表--环境监测实时数据--下拉
getDevList() {
console.log(22222222222222);
environmentDevList({ projectSn: this.$store.state.projectSn }).then(
(result) => {
// console.log('列表', result)
console.log(result);
if (result.result.length > 0) {
this.currentDevDetail = result.result[0];
this.getRealTimeDustNoiseData();
}
}
);
},
// 获取环境监测空气质量
getRealTimeDustNoiseData() {
let data = {
deviceId: this.currentDevDetail.deviceId,
projectSn: this.$store.state.projectSn,
};
console.log(data);
getRealTimeDustNoiseDataApi(data).then((res) => {
console.log(res);
if (res.code == 200) {
console.log(res.result);
if (res.result) {
this.plantCap = res.result;
} else {
this.plantCap = {
crc: "--",
humidity: "--",
noise: "--",
plateHumidity: "--",
plateTemperature: "--",
pm10: "--",
pm25: "--",
pressure: "--",
temperature: "--",
tsp: "--",
voltage: "--",
winddirectionName: "--",
windspeed: "--",
};
}
// this.createCenterChart();
}
});
},
// 获取设备报警数据
getAlarmInfor() {
let data = {
sn: this.$store.state.projectSn,
};
// 获取塔吊报警数据
getAllTowerDangerInfo(data).then((res) => {
if (res.code === 200) {
let { result } = res;
this.totalTowerDev = result.devCount.devNum;
this.totalDangerTowerDev = result.towerAlarmCount;
}
});
// getAiVideoInfo
// 获取升降机报警数据
getAllLifterDangerInfo(data).then((res) => {
if (res.code === 200) {
let { result } = res;
this.totalLifterDev = result.devCount.devNum;
this.totalDangerLiferDev = result.lifterAlarmCount;
}
});
// 获取环境监测报警数据
getEnvironmentInfo(data).then((res) => {
if (res.code === 200) {
let { result } = res;
this.environmentDevNum = result.devTotal.devNum;
this.environmentTotalAlarm = result.alarmTotal.totalAlarm;
}
});
// 获取AI设备报警数据
getAiVideoInfo(data).then((res) => {
console.log(res);
if (res.code === 200) {
let { result } = res;
this.totalVideoDev = result.totalVideoDev;
this.videoAlarmNum = result.alarmNum;
}
});
// 获取报警列表数据
getAIDangerList(data).then((res) => {
if (res.code === 200) {
let { result } = res;
let type = [
"烟感",
"明火",
"人员倒地",
"未戴安全帽",
"区域入侵",
"越界入侵",
"人员聚集衣",
"反光衣",
"裸土覆盖",
];
this.alarmList = result.slice(0, 3).map((x) => {
return {
createTime: x.createTime,
hardwareName: x.hardwareName,
id: x.id,
imageUrl: x.imageUrl,
location: x.location,
projectName: x.projectName,
alarmType: type[x.alarmType - 1],
};
});
result.slice(0, 3).forEach((x) => {
this.srcList.push(`${this.$store.state.FILEURL}${x.imageUrl}`);
});
console.log(this.alarmList);
console.log(this.srcList);
}
});
},
//获取安全管理数据
getSecureData() {
let data = {
projectSn: this.$store.state.projectSn,
};
selectSecurityManageStatisticsApi(data).then((res) => {
let total = res.result.total;
this.secureData.rectificationNum = total.rectificationNum;
this.secureData.completeNum = total.totalNum - total.rectificationNum;
this.createPieChart(
[
{ value: total.totalNum - total.rectificationNum, name: "" },
{ value: total.rectificationNum, name: "" },
],
this.$refs.safeChart,
["rgba(120, 111, 240, 1)", "rgba(254, 108, 127, 1)"],
this.$t("message.companyDiagram.safeQuestion")
// "安全问题数"
);
});
},
//获取质量管理数据
getQualityData() {
let data = {
projectSn: this.$store.state.projectSn,
};
selectQualityStatisticsApi(data).then((res) => {
let total = res.result.total;
this.qualityData.rectificationNum = total.rectificationNum;
this.qualityData.completeNum = total.totalNum - total.rectificationNum;
if (COMPANY != "longguang") {
this.createPieChart(
[
{ value: total.totalNum - total.rectificationNum, name: "" },
{ value: total.rectificationNum, name: "" },
],
this.$refs.qulityChart,
["rgba(81, 129, 246, 1)", "rgba(92, 226, 246, 1)"],
this.$t("message.companyDiagram.qualityQuestion")
// "质量问题数"
);
}
});
},
//获取项目详情
getDataDateils() {
let data = {
projectSn: this.$store.state.projectSn,
};
getProjectDetail(data).then((res) => {
// console.log(res);
if (res.code == 200) {
this.projectData = res.result;
console.log(this.projectData);
// console.log('this.projectData.constructionStage-4*230',this.projectData.constructionStage-4*230)
if (parseInt(this.projectData.constructionStage) > 4) {
this.$refs["stageScroll"].scrollTo(
{
x: (this.projectData.constructionStage - 4) * 230,
// x:'50%'
},
500
);
}
}
});
},
//统计企业下项目各人员统计
getWorkerStatisticsCount(type) {
getWorkerStatisticsCountApi({ sn: this.$store.state.projectSn }).then(
(res) => {
console.log(res);
this.statisticsCount = res.result;
this.totalDevNum =
this.statisticsCount.devcount.ufaceDevNum +
this.statisticsCount.devcount.videoNum +
this.statisticsCount.devcount.environmentDevNum +
this.statisticsCount.devcount.towerDevNum +
this.statisticsCount.devcount.lifterDevNum;
if (type == 1) {
this.createdEchart2();
}
clearInterval(this.interval1);
this.interval1 = setTimeout(() => {
this.getWorkerStatisticsCount();
}, 5000);
}
);
},
createPieChart(data, div, color, title) {
let that = this;
let monitor = echarts.init(div);
// monitor.clear();
var option = {
color: color ? color : ["#5181F6", "#61D2B9", "#F67F51", "#7851F6"],
title: {
show: true,
text: data[0].value + data[1].value,
x: "48%",
y: "36%",
z: 5,
textAlign: "center",
textStyle: {
color: "rgba(255, 255, 255, 1)",
fontSize: 20,
},
subtext: title,
subtextStyle: {
color: "rgba(255, 255, 255, 0.8)",
fontSize: 13,
},
},
grid: {
right: 0,
},
legend: {
show: false,
},
// tooltip: {
// // data: ['在线', '离线'],
// trigger: "item",
// formatter: "{a} <br/>{b}: {c} ({d}%)",
// },
series: [
{
name: "",
type: "pie",
radius: ["50%", "70%"],
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
},
labelLine: {
show: false,
},
data: data,
},
],
};
// if(color){
// option.series[0].radius=["75%", "85%"]
// option.title.x="45%"
// option.legend.show=false
// }
monitor.setOption(option);
},
// 文件上传 之前
handleBeforeUpload(file, type) {
console.log(file);
let fileType = file.type.split("/")[0];
if (fileType == "video" || fileType == "image") {
this.fullscreenLoading = this.$loading({
lock: true,
text: this.$t("message.companyDiagram.uploadHint"), // "上传中,请稍等。。。"
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return true;
} else {
this.$message.error(this.$t("message.companyDiagram.uploadHint2")); //"请选择正确的文件"
return false;
}
},
//上传失败
handleError(file, type) {
this.fullscreenLoading.close();
this.$message.error(this.$t("message.companyDiagram.uploadError")); //"上传失败,请重试"
},
//上传成功
handleSuccess(file, type) {
if (file.code == 200 || file.status == "SUCCESS") {
console.log(file);
var url = file.data[0].imageUrl;
this.saveOrDeleteVideo(url);
}
this.fullscreenLoading.close();
},
handleSuccessTwo(file, type) {
if (file.code == 200 || file.status == "SUCCESS") {
console.log(file);
var url = file.data[0].imageUrl;
this.imgUrl = url;
this.saveEffectData(url);
}
this.fullscreenLoading.close();
},
//效果图 保存
saveEffectData(url) {
// let configValue = JSON.stringify(url);
let data = {
projectSn: this.$store.state.projectSn,
showType: 3,
showTitle: this.$t("message.companyDiagram.resultImg"), //'效果图'
configValue: url,
};
eidtProjectShowConfig(data).then((res) => {
if (res.code == 200) {
this.getQueryBySnData();
}
});
},
getQueryBySnData() {
queryBySnData({
projectSn: this.$store.state.projectSn,
showType: 3,
}).then((res) => {
console.log(this.fileUrl + this.imgUrl);
this.imgUrl = res.result.configValue;
});
},
//保存或删除宣传视频
saveOrDeleteVideo(url) {
editProjectInfo({
projectId: this.projectData.projectId,
videoUrl: url,
}).then((res) => {
this.$message.success(this.$t("message.companyDiagram.uploadSuccess")); //"上传成功"
this.projectData.videoUrl = url;
});
},
},
};
</script>
<style lang="less" scoped>
.weatherItem {
/*float: left;*/
display: inline-block;
width: 101px;
text-align: center;
padding: 13px 5px;
margin-top: -5px;
// height: calc(100% - 13px);
height: 165px;
margin-left: 12px;
background: linear-gradient(rgba(21, 25, 33, 0.06), rgba(6, 248, 179, 0.06));
&:nth-child(2n) {
background: linear-gradient(
rgba(6, 248, 179, 0.06),
rgba(21, 25, 33, 0.06)
);
}
&:first-child {
background: linear-gradient(
rgba(21, 25, 33, 0.12),
rgba(6, 248, 179, 0.12)
);
}
.imgBox {
height: 36px;
display: flex;
align-items: center;
// margin: 15px 0;
justify-content: center;
}
.weather {
font-size: 15px;
color: #ffffff;
margin-bottom: 3px;
}
// .temp{
// margin-bottom: 16px;
// }
}
.weatherItem {
background: linear-gradient(rgba(5, 11, 59, 0.1), rgba(40, 109, 221, 0.1));
&:nth-child(2n) {
background: linear-gradient(rgba(40, 109, 221, 0.1), rgba(5, 11, 59, 0.1));
}
&:first-child {
background: linear-gradient(rgba(5, 11, 59, 0.3), rgba(36, 100, 206, 0.3));
}
}
.optionListBox {
display: flex;
justify-content: center;
.optionList_item {
margin-right: 30px;
box-sizing: border-box;
text-align: center;
padding-bottom: 5px;
cursor: pointer;
}
.selectOptionList_item {
border-bottom: 3px #2566d1 solid;
}
.selectOptionList_item2 {
border-bottom: 3px #27a3e2 solid;
}
}
.imgBox {
}
.listItem {
color: white;
font-size: 18px;
.label {
opacity: 0.8;
}
}
.changeVideoBtn {
border: 1px solid rgba(255, 255, 255, 0.5);
padding: 3px 5px;
font-size: 14px;
cursor: pointer;
position: absolute;
left: 50%;
top: 50%;
display: none;
transform: translate(-50%, -50%);
}
.videos:hover + .changeVideoBox .changeVideoBtn,
.changeVideoBox:hover .changeVideoBtn {
display: block;
}
.blockTitle4 {
position: absolute !important;
top: -10px !important;
left: 50%;
transform: translateX(-50%);
}
// 蓝色
.dataBoardPage_blue {
.dataBoardContent {
.bottom {
.blockTitle {
top: 0px;
}
}
.splitLine {
opacity: 0;
margin: 15px 0 15px;
}
.timeBox {
margin-top: 20px;
}
}
.bottomInner {
padding-left: 20px;
&::before {
content: '';
position: absolute;
top: 38px;
left: 0;
width: 100%;
height: calc(100% - 48px);
background-color: rgba(38, 104, 209, 0.1);
}
}
}
// 湛蓝
.dataBoardPage_blue2 {
.dataBoardContent {
.bottom {
.blockTitle {
top: 0px;
}
}
.splitLine {
opacity: 0;
margin: 15px 0 15px;
}
.timeBox {
margin-top: 20px;
}
}
.bottomInner {
padding-left: 20px;
&::before {
content: '';
position: absolute;
top: 38px;
left: 0;
width: 100%;
height: calc(100% - 48px);
background-color: rgba(2, 99, 152, 0.2);
}
}
}
.managePeople {
float: left;
position: relative;
width: 100%;
height: 60%;
.managePeopleTitle {
&::before {
content: '';
background-color: #6ce9f0;
width: 5px;
height: 5px;
position: absolute;
top: 5px;
border-radius: 50%;
display: block;
}
}
.managePeopleTitle > p {
margin-left: 10px;
}
.management {
display: flex;
justify-content: space-between;
margin-top: 20px;
.management_item {
box-sizing: border-box;
position: relative;
width: 120px;
text-align: center;
.item_content {
position: absolute;
right: -5px;
top: 0px;
}
.itemImgBox {
img {
width: 90px;
height: 90px;
}
}
}
}
}
.airQulityChart {
position: absolute !important;
top: -5%;
left: -28%;
}
.weatherBox {
position: absolute;
left: 167px;
height: 75%;
width: 80%;
top: -5px;
}
.attendance-cards2 {
width: 90%;
height: 80%;
display: flex;
justify-content: space-between;
align-items: center;
// align-content: space-around;
flex-wrap: wrap;
position: absolute;
left: 10%;
top: 8%;
// top: 10%;
.attendance-cards-item {
width: 50%;
height: 40%;
box-sizing: border-box;
display: flex;
// flex-direction: column;
align-items: center;
// text-align: center;
// :nth-child(1) {
// display: block;
// color: white;
// font-size: 14px;
// font-family: PingFangSC-Light;
// }
// :nth-child(2) {
// display: block;
// margin-top: 5px;
// color: rgba(255, 255, 255, 0.8);
// font-size: 11px;
// }
.cards-item-left {
width: 65px;
text-align: center;
p {
text-align: center;
color: rgba(255, 255, 254, 100);
font-size: 13px;
margin-top: 5px;
}
}
.cards-item-right {
margin-left: 5px;
p {
line-height: 22px;
color: rgba(255, 255, 254, 0.8);
font-size: 15px;
margin-left: 10px;
}
.p3 {
color: #d94916;
font-size: 20px;
}
}
}
}
.list_item {
width: 100%;
// height: 14%;
display: flex;
font-size: 12px;
margin-top: 3%;
color: rgba(255, 255, 255, 0.8);
// .img{
// width: 100px;
// height: 100px;
// margin-right: 17px;
// }
.title {
width: 240px;
// height: 18%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 13px;
color: rgba(255, 255, 255, 0.8);
margin: 5px 0;
}
.title,
.type,
.address,
.shebei,
.date {
margin: 4px 0;
}
:hover .title {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.img_box {
width: 96px;
margin-right: 10px;
}
}
.airQuality {
position: absolute;
top: 80%;
left: -1px;
display: flex;
width: 100%;
justify-content: space-around;
.airQuality-item {
display: flex;
font-size: 14px;
img {
width: 30px;
height: 30px;
margin-right: 9px;
margin-top: 2px;
}
}
}
</style>