胶州空管前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

587 lines
16 KiB

<template>
<div class="build-electric">
<p class="yq-title">楼宇耗电分析</p>
<div class="change-tab" style="position: absolute; top: 1rem; right: 1.25rem">
<div @click="selectBuildType('')" :style="{
backgroundColor: chooseBuildType == '' ? 'rgb(8,166,255)' : '',
}">
全部
</div>
<div @click="selectBuildType('1')" :style="{
backgroundColor: chooseBuildType == '1' ? 'rgb(8,166,255)' : '',
}">
照明
</div>
<div @click="selectBuildType('2')" :style="{
backgroundColor: chooseBuildType == '2' ? 'rgb(8,166,255)' : '',
}">
空调
</div>
</div>
<div class="search-box">
<div class="choose-time" style="float: left">
<span>选择楼宇</span>
<el-select placeholder="请选择楼宇" size="mini" style="margin-left: 10px; width: 7.5rem" v-model="choseBuild"
@change="searchBuild">
<el-option v-for="(item, index) in buildings" :label="item.name" :value="item.id" :key="index">
</el-option>
</el-select>
<span>&nbsp;选择楼层</span>
<el-select :disabled="
this.choseBuild == '' || choseBuild == '08' || choseBuild == '09'
? true
: false
" placeholder="请选择楼层" size="mini" style="margin-left: 10px; width: 7.5rem" v-model="choseFloor"
@change="changeFloor">
<el-option v-for="(item, index) in floors" :label="item.name" :value="item.id" :key="index" v-if="
(choseBuild == '03' || choseBuild == '05') && item.id == '03'
? false
: (choseBuild == '08' || choseBuild == '09') && item.id != ''
? false
: true
"></el-option>
</el-select>
</div>
<div style="float: right">
<el-date-picker size="mini" ref="buildDate" style="
width: 9.375rem;
margin-right: 10px;
border-radius: 5px;
background-color: rgb(152, 160, 173);
border: 0;
" v-model="chooseDateValue" :type="
choseDate == 1
? 'year'
: choseDate == 2
? 'month'
: choseDate == 3
? 'date'
: 'date'
" :value-format="
choseDate == 1
? 'yyyy'
: choseDate == 2
? 'yyyy-MM'
: choseDate == 3
? 'yyyy-MM-dd'
: 'yyyy-MM-dd'
" :placeholder="
choseDate == 1
? '选择年份'
: choseDate == 2
? '选择月份'
: choseDate == 3
? '选择日期'
: '选择日期'
" clearable="false" @change="searchBuild">
</el-date-picker>
<div class="change-tab">
<div @click="selectDate(1)" :style="{ backgroundColor: choseDate == 1 ? 'rgb(8,166,255)' : '' }">
</div>
<div @click="selectDate(2)" :style="{ backgroundColor: choseDate == 2 ? 'rgb(8,166,255)' : '' }">
</div>
<div @click="selectDate(3)" :style="{ backgroundColor: choseDate == 3 ? 'rgb(8,166,255)' : '' }">
</div>
</div>
</div>
</div>
<div class="electric-chart">
<div class="leida">
<p style="margin-left: 1.25rem">耗电分析图</p>
<div id="pie" style="width: 15.625rem; height: 14.375rem"></div>
<!-- <radarChart id="leida" ref="radar"></radarChart> -->
</div>
<lineCharts id="line-chart" ref="line" width="33rem" height="18.375rem"></lineCharts>
</div>
</div>
</template>
<script>
import radarChart from "./radarChart";
import lineCharts from "./lineCharts";
import { getBuildElectLine, getBuildElectPie, getFourPie } from "@/api/source/total";
import { dateFormat } from "@/util/date";
export default {
props: {
area: {
type: Number,
default: 1,
},
},
components: {
radarChart,
lineCharts,
},
data() {
return {
choseDate: "3", //日期选择模式
chooseDateValue: dateFormat(new Date(), "yyyy-MM-dd"), //日期选中值
chooseBuildType: "", //查询类型 全部 照明 空调
build: ["#1", "#2", "#3", "#4", "#5", "#6", "塔楼", "塔台辅楼"],
buildColor: [
"rgb(56,169,255)",
"rgb(44,246,172)",
"rgb(255,243,91)",
"rgb(236,105,67)",
"rgb(126,207,142)",
"rgb(242,155,119)",
"#c400fc",
"#a3ff20",
],
buildValue: "",
choseBuild: "",
buildings: [
{
id: "",
name: "全部",
},
{
id: "01",
name: "1号楼",
},
{
id: "02",
name: "2号楼",
},
{
id: "03",
name: "3号楼",
},
{
id: "04",
name: "4号楼",
},
{
id: "05",
name: "5号楼",
},
{
id: "06",
name: "6号楼",
},
{
id: "08",
name: "塔楼",
},
{
id: "09",
name: "塔台辅楼",
},
],
choseFloor: "", //选择楼层 - 业务区,3号楼只有两层
floors: [
{
id: "",
name: "全部",
},
{
id: "01",
name: "1层",
},
{
id: "02",
name: "2层",
},
{
id: "03",
name: "3层",
},
], //楼层 - 只针对耗电分析饼图
intervalTime33: null,
};
},
beforeDestroy() {
if (this.intervalTime33) {
console.log('clearInterval33')
clearInterval(this.intervalTime33);
this.intervalTime33 = null;
}
},
mounted() {
this.getData();
this.intervalTime33 = setInterval(() => {
this.getData();
},30*60*1000)
},
methods: {
//日期类型
selectDate(index) {
this.choseDate = index;
if (this.chooseDateValue) {
if (index == 1) {
this.chooseDateValue =
this.chooseDateValue.length > 4
? this.chooseDateValue.substring(0, 4)
: this.chooseDateValue;
} else if (index == 2) {
this.chooseDateValue =
this.chooseDateValue.length < 5
? dateFormat(new Date(), "yyyy-MM")
: this.chooseDateValue.length > 7
? this.chooseDateValue.substring(0, 7)
: this.chooseDateValue;
} else if (index == 3) {
this.chooseDateValue =
this.chooseDateValue.length < 5
? dateFormat(new Date(), "yyyy-MM-dd")
: this.chooseDateValue.length < 10
? dateFormat(new Date(), "yyyy-MM-dd")
: this.chooseDateValue;
}
}
this.$nextTick(() => {
this.getData();
});
},
// 耗电类型
selectBuildType(index) {
this.chooseBuildType = index;
this.getData();
},
getData() {
//折线图
getBuildElectLine(
"",
this.buildValue,
this.choseDate,
this.chooseDateValue ? this.chooseDateValue : "",
this.chooseBuildType
).then((res) => {
let leidaData = [];
let lineData = [];
let floorData = [];
const data = res.data.data;
for (let i = 0; i < data.dataList.length; i++) {
// leidaData.push(data.dataList[i].consume);
lineData.push(data.dataList[i].consumeList);
let floor =
parseInt(data.dataList[i].locationNumber) === 0
? "-1"
: parseInt(data.dataList[i].locationNumber);
floorData.push(this.buildValue == '08' ? '塔楼' : this.buildValue == '09' ? '塔台辅楼' : floor + "F");
}
if (this.buildValue == "") {
// this.getLeida(leidaData);
this.getLineChart(lineData, data.dateList);
} else {
// this.floorLeida(leidaData, floorData);
this.floorLineChart(lineData, floorData, data.dateList);
}
});
if(this.buildValue != '04'){
this.getPieData();
}else{
this.getFourPieData()
}
},
getFourPieData(){
getFourPie({
dateType:this.choseDate,
queryDate:this.chooseDateValue ? this.chooseDateValue : "",
floorNumber:this.choseFloor ? this.choseFloor : ""
}).then(res =>{
const data = res.data.data
this.getPie(data)
})
},
getPieData() {
//饼状图
getBuildElectPie(
"",
this.buildValue,
this.choseDate,
this.chooseDateValue ? this.chooseDateValue : "",
this.choseFloor ? this.choseFloor : ""
).then((res) => {
const data = res.data.data;
this.getPie(data);
});
},
//耗电类型分析-饼状图
getPie(data) {
let chart_data = [];
var myChart = this.$echarts.init(document.getElementById("pie"));
data.map((item, index) => {
if (item.percent != "0.00") {
chart_data.push(item);
}
});
let option = {
// color: ["#07a6ff", "#f2b448", "#01feae", "#ff8b2e"], //["#f2b448", "#07a6ff"],//
tooltip: {
show: "item",
},
series: [
{
name: "耗电分析",
type: "pie",
radius: "45%",
center: ["50%", "40%"],
data: chart_data,
label: {
formatter: "{b}\n{d}%",
color: "rgba(255,255,255,0.5)",
textBorderWidth: 0,
},
labelLine: {
length: 10,
length2: 6,
lineStyle: {
color: "rgba(255,255,255,0.5)",
showAbove: true,
},
},
emphasis: {
disabled: false,
scale: false,
},
},
{
name: "耗电分析",
type: "pie",
radius: "45%",
center: ["50%", "40%"],
data: chart_data,
label: {
position: "inner",
formatter: "{c}",
},
z: 4,
},
],
};
myChart.setOption(option);
},
getLeida(value) {
const data = [
{
value: value,
name: "楼宇耗电",
},
];
const title = [
{ name: "#1" },
{ name: "#2" },
{ name: "#3" },
{ name: "#4" },
{ name: "#5" },
{ name: "#6" },
];
this.$refs.radar.getLeidaChart(
"耗电",
"rgb(45,247,173)",
"rgba(45,247,173,.8)",
data,
title
);
},
floorLeida(value, floorData) {
let _bgArr = [...value].sort((n1, n2) => {
return n2 - n1;
});
let bigMax = _bgArr[0] + 100;
let data = [
{
value: [0, 0, 0, 0, 0, 0],
name: "楼宇耗电",
},
];
let title = [
{ name: "1F", max: 0 },
{ name: "", max: 0 },
{ name: "2F", max: 0 },
{ name: "", max: 0 },
{ name: "3F", max: 0 },
{ name: "", max: 0 },
];
for (let i = 0; i < title.length; i++) {
let isFindIndex = floorData.findIndex((item) => item == title[i].name);
if (isFindIndex == -1) {
title[i] = { name: "", max: bigMax };
} else {
data[0].value[i] = value[isFindIndex];
title[i] = { name: title[i].name, max: bigMax };
}
}
// alert(data[0].value);
this.$refs.radar.getLeidaChart(
"耗电",
"rgb(45,247,173)",
"rgba(45,247,173,.8)",
data,
title
);
},
getLineChart(value, dateList) {
const data = [];
for (let i = 0; i < this.build.length; i++) {
data.push({
name: this.build[i],
type: "line",
data: value[i],
symbol: "rect",
symbolSize: 4,
itemStyle: {
color: this.buildColor[i],
},
lineStyle: {
color: this.buildColor[i],
width: 1,
},
});
}
this.$refs.line.getLineCharts("耗电量(kw·h)", data, dateList);
},
floorLineChart(value, floorData, dateList) {
let data = [];
for (let i = 0; i < floorData.length; i++) {
data.push({
name: floorData[i],
type: "line",
data: value[i],
symbol: "rect",
symbolSize: 4,
itemStyle: {
color: this.buildColor[i],
},
lineStyle: {
color: this.buildColor[i],
width: 1,
},
});
}
// console.log("折现楼层", data);
this.$refs.line.getLineCharts("耗电量(kw·h)", data, dateList);
},
searchBuild() {
this.buildValue = this.choseBuild;
this.choseFloor = "";
this.getData();
// this.floorLeida();
// this.floorLineChart()
},
changeFloor(){
console.log('choseFloor==========>',this.choseFloor)
if(this.buildValue == '04'){
this.getFourPieData()
}else{
this.getPieData()
}
},
},
};
</script>
<style scoped lang="scss">
.build-electric {
width: 50.062rem;
// height: 22.562rem;
height: 25rem;
// background-image: url(../../../../public/img/analysis/build-electric.png);
background-image: url(../../../../public/img/analysis/condition-analy.png);
background-size: 100% 100%;
margin-left: 1.562rem;
position: relative;
overflow: hidden;
.yq-title {
// margin: 0.7rem 0 0 2.5rem;
margin: 0.7rem 0 0 1.5rem;
color: white;
font-weight: bold;
}
.change-tab {
display: inline-flex;
border: 1px solid #08a6ff;
width: 7.5rem;
justify-content: flex-start;
border-radius: 0.312rem;
cursor: pointer;
font-size: 14px;
z-index: 100;
div {
color: white;
width: 50%;
text-align: center;
border-right: 1px solid rgb(8, 166, 255);
}
}
.search-box {
position: absolute;
left: 1.25rem;
top: 3.875rem;
right: 1.25rem;
overflow: hidden;
/deep/ .el-date-editor .el-input__inner {
background-color: rgb(152, 160, 173);
color: rgba(255, 255, 255, 0.7);
border-color: rgb(152, 160, 173);
}
/deep/ .el-date-editor .el-input__inner::-webkit-input-placeholder {
color: white;
}
}
.electric-chart {
margin-top: 3rem;
// margin-left: 1.25rem;
display: flex;
.leida {
p {
color: rgb(7, 230, 236);
}
#leida {
width: 15.625rem;
height: 14.375rem;
}
}
#line-chart {
width: 33rem;
height: 18.875rem;
}
}
.choose-time {
// position: absolute;
// top: 0.5rem;
// right: 2.5rem;
span {
color: rgb(8, 231, 235);
font-size: 14px;
}
.search-btn {
background-color: rgb(1, 238, 235);
color: #0f93e1;
border: 0;
width: 4.687rem;
margin-left: 0.937rem;
font-size: 15px;
}
/deep/ .el-select .el-input__inner {
background-color: rgb(152, 160, 173);
color: rgba(255, 255, 255, 0.7);
border-color: rgb(152, 160, 173);
}
/deep/ .el-select .el-input__inner::-webkit-input-placeholder {
color: white;
}
}
}
</style>