579 lines
22 KiB
Vue
Raw Normal View History

2022-06-08 14:51:11 +08:00
<!--总览-->
<template>
<div class="lgBigScreen-wrap flex">
<div class="left" v-show="checkedTab == 0">
<img src="@/assets/images/longguang/demo/zl_l.png" class="demo"/>
</div>
<div class="center" v-show="checkedTab == 0">
<div class="mapChart" ref="mapChart"></div>
<div class="mapDialog" v-show="showMapDialog">
<div class="flex2">
<div class="dialog_title">项目详细</div>
<i class="el-icon-error" @click="showMapDialog = false"></i>
</div>
<div class="dialog_project_info">
<div class="flex3">
<img :src="projectDetails.layoutImage" class="info_img" />
<div style="width: 70%">
<el-tooltip
class="item"
effect="dark"
:content="projectDetails.projectName"
placement="top-start"
>
<div class="project_name hide">
{{ projectDetails.projectName }}
</div>
</el-tooltip>
<el-tooltip
class="item"
effect="dark"
:content="projectDetails.constructionUnit"
placement="top-start"
>
<div class="subhead hide">
总承包{{projectDetails.constructionUnit}}
</div>
</el-tooltip>
<el-tooltip
class="item"
effect="dark"
:content="projectDetails.constructionUnit"
placement="top-start"
>
<div class="subhead hide">建筑方{{projectDetails.constructionUnit}}</div>
</el-tooltip>
</div>
</div>
<div class="flex2 margin_20">
<div class="subhead">
建筑体量 ()<span class="value">{{
projectDetails.projectAcreage
}}</span>
</div>
<div class="subhead">
合同额(万元)<span class="value">{{
projectDetails.contractPrice ? projectDetails.contractPrice : 0
}}</span>
</div>
</div>
<div class="flex2">
<div>
<div>环境</div>
<div class="subhead">
PM2.5<span class="value2">{{
projectEnvironmentData.pm25
}}</span>
</div>
<div class="subhead">
PM10<span class="value2">{{
projectEnvironmentData.pm10
}}</span>
</div>
</div>
<div>
<div>人员</div>
<div class="subhead">
实时人数<span class="value2">{{
attendancePerson.totalWorker
}}</span>
</div>
<div class="subhead">
今日出勤<span class="value2">{{
attendancePerson.totalPerson
}}</span>
</div>
</div>
<div>
<div>质量</div>
<div class="subhead">
待整改<span class="value2">{{
qualityCount.rectificationNum
}}</span>
</div>
<div class="subhead">
整改率<span class="value2">{{
qualityCount.completeRatio
}}</span>
</div>
</div>
<div>
<div>安全</div>
<div class="subhead">
待整改<span class="value2">{{
securityCount.rectificationNum
}}</span>
</div>
<div class="subhead">
整改率<span class="value2">{{
securityCount.completeRatio
}}</span>
</div>
</div>
</div>
<div class="bottom_info">
<div class="flex2">
<div>项目进度</div>
<div>装饰装修阶段</div>
</div>
<el-progress :percentage="20"></el-progress>
<div class="flex2 time">
<div>2020-12-12</div>
<div>2021-08-31</div>
</div>
</div>
</div>
</div>
</div>
<div class="right" v-show="checkedTab == 0">
<img src="@/assets/images/longguang/demo/zl_r.png" class="demo"/>
</div>
<div v-show="checkedTab!=0">
<img :src="showDemo" class="demo"/>
</div>
<div class="btn_wrap flex2">
<div v-for="(tab, index) in tabsList" :key="index" class="tab">
<div
:class="checkedTab == index ? 'checked' : 'noChecked'"
@click="changeTab(index)"
>
<img :src="tab.icon" />
<div>{{ tab.name }}</div>
</div>
</div>
</div>
</div>
</template>
<script>
import echarts from 'echarts4';;
import {
selectAllProjectInfoList,
getRealTimeDustNoiseData,
selectEnterpriseAttendanceCount,
selectProjectWorkAndInspectCount,
getComapnyStatisticsList,
} from "./../../../assets/js/api/companyBigScreen.js";
import {} from "./components"
export default {
data() {
return {
sn: "",
projectSn: "",
tabsList: [
{
name: "总览",
id: 1,
icon: require("../../../assets/images/longguang/icon_zonglan.png"),
},
{
name: "劳务管理",
id: 2,
icon: require("../../../assets/images/longguang/icon_lw.png"),
url: require("../../../assets/images/longguang/demo/lw.png"),
},
{
name: "安全管理",
id: 3,
icon: require("../../../assets/images/longguang/icon_aq.png"),
url: require("../../../assets/images/longguang/demo/aq.png"),
},
{
name: "质量管理",
id: 4,
icon: require("../../../assets/images/longguang/icon_zl.png"),
url: require("../../../assets/images/longguang/demo/zl.png"),
},
{
name: "机械管理",
id: 5,
icon: require("../../../assets/images/longguang/icon_jx.png"),
url: require("../../../assets/images/longguang/demo/jx.png"),
},
{
name: "进度管理",
id: 6,
icon: require("../../../assets/images/longguang/icon_jd.png"),
url: require("../../../assets/images/longguang/demo/jd.png"),
},
{
name: "监控管理",
id: 7,
icon: require("../../../assets/images/longguang/icon_jk.png"),
url: require("../../../assets/images/longguang/demo/jk.png"),
},
{
name: "AI视频管理",
id: 8,
icon: require("../../../assets/images/longguang/icon_ai.png"),
url: require("../../../assets/images/longguang/demo/ai.png"),
},
],
checkedTab: 0,
showMapDialog: false,
allProjectData: [], //数据源
projectEnvironmentData: {}, //环境信息
projectDetails: {}, //项目详细信息
qualityCount: {}, //详情质量
securityCount: {}, //详情安全
attendancePerson: {}, //详情人员
showDemo:'',
};
},
created() {
this.sn = this.$store.state.userInfo.sn;
this.getAllProjectInfoList();
},
mounted() {},
methods: {
//切换tab
changeTab(index) {
if (index != 0) {
this.showDemo = this.tabsList[index].url;
}
this.checkedTab = index;
},
//获取所有项目
getAllProjectInfoList() {
let data = {
sn: this.sn,
};
selectAllProjectInfoList(data).then((res) => {
console.log(res);
if (res.code == 200) {
this.allProjectData = res.result;
this.createdChart();
}
});
},
//获取环境数据
selectRealTimeDustNoiseData(projectSn) {
getRealTimeDustNoiseData({ projectSn: projectSn }).then((res) => {
if (res.code == 200) {
if (res.result) {
this.projectEnvironmentData = res.result;
} else {
this.projectEnvironmentData = {
pm25: 0,
pm10: 0,
noise: 0,
winddirection: 0,
};
}
}
});
},
//获取人员。质量。安全。数据
getProjectWorkAndInspectCount(projectSn) {
selectProjectWorkAndInspectCount({
projectSn: projectSn,
}).then((res) => {
if (res.code == 200) {
this.attendancePerson = res.result.personCount.attendancePerson;
this.attendancePerson.totalWorker = res.result.personCount.totalWorker;
this.qualityCount = res.result.qualityCount;
this.securityCount = res.result.securityCount;
}
});
},
//创建地图
createdChart() {
var uploadedDataURL = "/js/data-1528971808162-BkOXf61WX.json";
var that = this;
let myChart = echarts.init(this.$refs.mapChart);
var data = [];
//获取回显项目位置
if (this.allProjectData.length > 0) {
this.allProjectData.forEach((element, index) => {
let obj = {
name: element.projectName,
value: [element.longitude, element.latitude, 300], //300 回显图标的大小
projectSn: element.projectSn,
detail: element,
};
data.push(obj);
});
}
$.getJSON(uploadedDataURL, function (geoJson) {
echarts.registerMap("china", geoJson);
// tooltip: {}, // hover 回显数据
var option = {
// backgroundColor: "#030609",
grid: {
top: 0,
bottom: 0,
left: 0,
right: 0,
},
//地图显示
geo: {
map: "china",
aspectScale: 0.75, //长宽比
zoom: 1.2,
scaleLimit: {
min: 1.2,
},
roam: true,
label: {
normal: {
formatter: function (params) {
if (params.name.indexOf("_")) {
return params.name.split("_")[0];
}
},
show: false,
textStyle: {
color: "#F4E924",
fontSize: 16,
fontWeight: "bold",
},
},
emphasis: {
show: false,
textStyle: {
color: "white",
},
},
},
itemStyle: {
normal: {
areaColor: "#031525",
borderColor: "#3B5077",
borderWidth: 1,
},
emphasis: {
areaColor: "#0f2c70",
},
},
regions: [
{
name: "南海诸岛",
itemStyle: {
areaColor: "rgba(0, 10, 52, 1)",
borderColor: "rgba(0, 10, 52, 1)",
normal: {
// opacity: 0,
label: {
show: false,
color: "#009cc9",
},
},
},
},
],
},
series: [
{
name: "",
type: "effectScatter",
coordinateSystem: "geo",
data: data,
symbolSize: function (val) {
return val[2] / 20;
},
showEffectOn: "render",
rippleEffect: {
brushType: "stroke",
},
hoverAnimation: true,
label: {
normal: {
formatter: "{b}",
position: "right",
show: true, //回显项目名称
},
},
itemStyle: {
normal: {
color: "#F4E924",
shadowBlur: 10,
shadowColor: "#333",
},
},
zlevel: 1,
},
],
};
myChart.on("click", function (params) {
//点击的是图标
if (params.seriesType) {
that.showMapDialog = true;
that.projectSn = params.data.projectSn;
that.projectDetails = params.data.detail;
console.log(params.data.detail);
//获取环境信息
that.selectRealTimeDustNoiseData(params.data.projectSn);
//获取人员.安全.质量 信息
that.getProjectWorkAndInspectCount(params.data.projectSn);
}
});
myChart.setOption(option, true);
});
},
},
};
</script>
<style lang="less" scoped>
.flex {
display: flex;
}
.flex2 {
display: flex;
justify-content: space-between;
align-items: center;
}
.flex3 {
display: flex;
align-items: center;
}
.lgBigScreen-wrap {
width: 100%;
height: 100%;
background: #030609;
color: #fff;
position: relative;
box-sizing: border-box;
padding: 15px;
.left {
width: 20%;
}
.center {
width: 60%;
height: calc(100% - 2px);
}
.right {
width: 20%;
}
.btn_wrap {
position: absolute;
width: 60%;
height: 100px;
bottom: -2px;
left: 0;
right: 0;
margin: 0 auto;
text-align: center;
padding: 0 50px;
box-sizing: border-box;
.tab {
width: 90px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
color: #fff;
.noChecked{
opacity: 0.6;
}
}
}
.checked {
transform: scale(1.1);
color: #ffffff;
opacity: 1;
}
.mapChart {
width: 100%;
height: 100%;
background-image: url("../../../assets/images/longguang/bigScreen_bg.png");
background-repeat: no-repeat;
background-size: auto;
background-position: center;
}
.mapDialog {
position: absolute;
z-index: 100;
left: calc(50% - 242px);
top: calc(50% - 191px);
width: 484px;
// height: 292px;
background-color: rgba(11, 33, 53, 1);
box-shadow: 0px 6px 15px 0px rgba(0, 0, 0, 1);
}
.dialog_title {
width: 120px;
height: 30px;
line-height: 30px;
color: #fff;
box-sizing: border-box;
padding: 0 14px;
font-size: 15px;
background-image: linear-gradient(
to right,
rgba(67, 120, 216, 0.5),
rgba(67, 120, 216, 0)
);
}
.el-icon-error {
color: rgba(67, 120, 216, 1);
font-size: 20px;
margin: 0 10px;
cursor: pointer;
}
.dialog_project_info {
width: 100%;
padding: 20px 26px;
box-sizing: border-box;
.info_img {
width: 103px;
height: 78px;
margin-right: 26px;
}
.project_name {
color: rgba(255, 255, 255, 1);
font-size: 16px;
text-decoration: underline;
margin-bottom: 6px;
}
.subhead {
color: rgba(255, 255, 255, 0.8);
font-size: 13px;
line-height: 26px;
}
.value {
font-size: 16px;
font-weight: 600;
color: rgba(255, 255, 255, 1);
}
.value2 {
font-size: 15px;
color: rgba(255, 255, 255, 0.8);
}
.margin_20 {
margin: 20px 0;
}
.bottom_info {
margin-top: 20px;
.el-progress {
margin: 4px 0;
}
/deep/.el-progress__text {
color: #fff !important;
margin-left: 24px;
}
.time {
opacity: 0.8;
}
}
.hide {
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.demo{
height: 100%;
}
}
</style>