Compare commits

..

No commits in common. "9f5afda6f6ac3a9c889dafbe0b837ce08ec3262e" and "26b24711c5a1f8550ddcf07613dfe4de6ae7f219" have entirely different histories.

19 changed files with 99 additions and 1656 deletions

32
package-lock.json generated
View File

@ -9,7 +9,6 @@
"version": "0.0.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"echarts": "^5.4.3", "echarts": "^5.4.3",
"echarts-gl": "^2.0.9",
"element-plus": "^2.4.3", "element-plus": "^2.4.3",
"moment": "^2.29.4", "moment": "^2.29.4",
"sass": "^1.69.5", "sass": "^1.69.5",
@ -1030,11 +1029,6 @@
"node": ">=6.0" "node": ">=6.0"
} }
}, },
"node_modules/claygl": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz",
"integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ=="
},
"node_modules/commander": { "node_modules/commander": {
"version": "2.20.3", "version": "2.20.3",
"resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
@ -1069,18 +1063,6 @@
"zrender": "5.4.4" "zrender": "5.4.4"
} }
}, },
"node_modules/echarts-gl": {
"version": "2.0.9",
"resolved": "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz",
"integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==",
"dependencies": {
"claygl": "^1.2.1",
"zrender": "^5.1.1"
},
"peerDependencies": {
"echarts": "^5.1.2"
}
},
"node_modules/echarts/node_modules/tslib": { "node_modules/echarts/node_modules/tslib": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
@ -2844,11 +2826,6 @@
"integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
"peer": true "peer": true
}, },
"claygl": {
"version": "1.3.0",
"resolved": "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz",
"integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ=="
},
"commander": { "commander": {
"version": "2.20.3", "version": "2.20.3",
"resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
@ -2890,15 +2867,6 @@
} }
} }
}, },
"echarts-gl": {
"version": "2.0.9",
"resolved": "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz",
"integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==",
"requires": {
"claygl": "^1.2.1",
"zrender": "^5.1.1"
}
},
"electron-to-chromium": { "electron-to-chromium": {
"version": "1.4.609", "version": "1.4.609",
"resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.609.tgz", "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.609.tgz",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 162 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 491 B

View File

@ -1,6 +1,6 @@
<script setup> <script setup>
import moment from "moment" import moment from "moment"
import {onMounted, ref, shallowRef} from "vue"; import {ref,shallowRef} from "vue";
import overview from '@/views/overview/index.vue' // import overview from '@/views/overview/index.vue' //
import energyEfficiency from '@/views/energyEfficiency/index.vue' // import energyEfficiency from '@/views/energyEfficiency/index.vue' //
import drainage from '@/views/drainage/index.vue' // import drainage from '@/views/drainage/index.vue' //
@ -17,40 +17,37 @@ const nowWeek = ref('')
const nowMin = ref('') const nowMin = ref('')
const timer = ref(0) const timer = ref(0)
const getNowDate = () => { const getNowDate = () =>{
nowDate.value = moment().format('YYYY年MM月DD日') nowDate.value = moment().format('YYYY年MM月DD日')
nowWeek.value = moment().format('dddd') nowWeek.value = moment().format('dddd')
nowMin.value = moment().format('HH:mm:ss') nowMin.value = moment().format('HH:mm:ss')
} }
getNowDate() getNowDate()
timer.value = setInterval(() => { timer.value = setInterval(()=>{
getNowDate() getNowDate()
}, 1000) },1000)
const menuList = ref([ const menuList = ref([
{name: shallowRef(overview), default: getPath.overview, select: getPath.overviewselect}, {name:shallowRef(overview),default:getPath.overview,select:getPath.overviewselect},
{ {name:shallowRef(energyMonitoring),
name: shallowRef(energyMonitoring), default:getPath.energy,select:getPath.energyselect},
default: getPath.energy, select: getPath.energyselect {name:shallowRef(energyEfficiency),default:getPath.energyefficiency,select:getPath.energyefficiencyselect},
}, {name:shallowRef(drainage),default:getPath.drainage,select:getPath.drainageselect},
{name: shallowRef(energyEfficiency), default: getPath.energyefficiency, select: getPath.energyefficiencyselect}, {name:shallowRef(airConditioning),default:getPath.airconditioning,select:getPath.airconditioningselect},
{name: shallowRef(drainage), default: getPath.drainage, select: getPath.drainageselect}, {name:shallowRef(lighting),default:getPath.lighting,select:getPath.lightingselect},
{name: shallowRef(airConditioning), default: getPath.airconditioning, select: getPath.airconditioningselect}, {name:shallowRef(carbonEmission),default:getPath.carbon,select:getPath.carbonselect},
{name: shallowRef(lighting), default: getPath.lighting, select: getPath.lightingselect}, {name:shallowRef(screen),default:getPath.screen,select:getPath.screenselect}
{name: shallowRef(carbonEmission), default: getPath.carbon, select: getPath.carbonselect},
{name: shallowRef(screen), default: getPath.screen, select: getPath.screenselect}
]) ])
const menuIndex = ref(0) const menuIndex = ref(0)
// const animationShow = ref(false)
// //
const toggleClick = (item, index) => { const toggleClick = (item,index) =>{
tabName.value = item?.name tabName.value = item?.name
menuIndex.value = index menuIndex.value = index
} }
const tabName = shallowRef(overview) const tabName = shallowRef(overview)
onMounted(() => { const getImageUrl=(name)=>{
return `url(${new URL(name, import.meta.url).href})`
}) }
</script> </script>
@ -69,9 +66,9 @@ onMounted(() => {
<div class="container"> <div class="container">
<div class="date"> <div class="date">
<p> <p>
<span class="m10">{{ nowDate }}</span> <span class="m10">{{nowDate}}</span>
<span class="m10">{{ nowWeek }}</span> <span class="m10">{{nowWeek}}</span>
<span>{{ nowMin }}</span> <span>{{nowMin}}</span>
</p> </p>
<p> <p>
<span class="m10 weaIcon"></span> <span class="m10 weaIcon"></span>
@ -81,46 +78,18 @@ onMounted(() => {
</div> </div>
<div class="menu"> <div class="menu">
<ul> <ul>
<li v-for="(item,index) in menuList" :class="'menu-icon'+index" <li @click="toggleClick(item,index)" v-for="(item,index) in menuList" :style="'background-image:'+ getImageUrl(menuIndex==index?item.select:item.default)" :class="'menu-icon'+index"></li>
:style="menuIndex===index?'background-image:url('+ item.select + ')':'background-image:url('+ item.default + ')'"
@click="toggleClick(item,index)"></li>
</ul> </ul>
</div> </div>
<!-- <overview></overview>--> <!-- <overview></overview>-->
<!-- <router-view />--> <!-- <router-view />-->
<transition appear mode="out-in">
<keep-alive> <keep-alive>
<component :is="tabName"></component> <component :is="tabName"></component>
</keep-alive> </keep-alive>
</transition>
</div> </div>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.v-enter-from {
opacity: 0;
}
.v-enter-active {
transition: opacity 1s ease-in;
}
.v-enter-to {
opacity: 1;
}
.v-leave-from {
opacity: 1;
}
.v-leave-active {
transition: opacity 1s ease-in
}
.v-leave-to {
opacity: 0;
}
.header { .header {
height: vh(136); height: vh(136);
width: 100%; width: 100%;
@ -130,9 +99,7 @@ onMounted(() => {
background-image: url('@/assets/images/mask/top.png'); background-image: url('@/assets/images/mask/top.png');
background-size: 100% 100%; background-size: 100% 100%;
z-index: -1 !important; z-index: -1 !important;
} }
.left-mask { .left-mask {
width: vw(600); width: vw(600);
left: 0; left: 0;
@ -153,45 +120,38 @@ onMounted(() => {
background-image: url('@/assets/images/mask/right.png'); background-image: url('@/assets/images/mask/right.png');
background-size: 100% 100%; background-size: 100% 100%;
} }
.date{
.date {
display: flex; display: flex;
color: #fff; color:#fff;
margin: 2.5rem 2.2rem 0 2.2rem; margin: 2.5rem 2.2rem 0 2.2rem;
justify-content: space-between; justify-content: space-between;
} }
.m10{
.m10 {
margin-right: 1.3rem; margin-right: 1.3rem;
} }
.weaIcon{
.weaIcon {
} }
.menu{
.menu {
position: fixed; position: fixed;
bottom: vh(24); bottom: vh(24);
z-index: 999; z-index:999;
left: 29.15%; left:29.15%;
width: vw(800); width: vw(800);
height: vh(100); height: vh(100);
ul{
ul {
//width: 100%; //width: 100%;
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
li{
li {
list-style: none; list-style: none;
cursor: pointer; cursor: pointer;
width: 12.5%; width:12.5%;
height: 100%; height: 100%;
background-size: 100% 100%; background-size: 100% 100%;
} }
} }
} }
</style> </style>

View File

@ -50,37 +50,12 @@ p,ul,li{
&-right-box { &-right-box {
padding-right: 2.375rem; padding-right: 2.375rem;
} }
&-left-box { &-left-box {
padding-left: 2.375rem; padding-left: 2.375rem;
//transform: translateX(-100%);
} }
} }
@keyframes slide-out {
//0%{
// transform: translateX(0%);
//}
from {
opacity: 0;
}
to {
opacity: 1;
}
}
//@keyframes slide-in {
// //0%{
// // transform: translateX(0%);
// //}
// from{
// opacity: 0;
// }
// to {
// opacity: 1;
// }
//}
.m100{ .m100{
position: relative; position: relative;
top:2rem; top:2rem;
@ -116,7 +91,6 @@ p,ul,li{
span{ span{
font-size: 14px; font-size: 14px;
font-weight: normal; font-weight: normal;
font-family: normal;
} }
.year,.month,.day{ .year,.month,.day{
padding: 0 0.8rem; padding: 0 0.8rem;
@ -126,9 +100,6 @@ p,ul,li{
background-size: 100% 100%; background-size: 100% 100%;
cursor: pointer; cursor: pointer;
} }
.selectMonth,.selectYear,.selectDay{
background-image: url('@/assets/images/small-icon-select.png');
}
.day{ .day{
margin-left: .5rem; margin-left: .5rem;
} }
@ -137,101 +108,3 @@ p,ul,li{
} }
} }
} }
//table的css
.tableBoby>span{
//width: 4rem;
text-align: center;
flex-basis: 33%;
display: block;
}
.tableBoby .date{
font-weight: 600;
color: rgba(61, 255, 244, 1);
span{
font-weight: normal;
color: rgba(221, 255, 253, 1);
}
}
:deep(.el-switch){
//width: 4rem;
flex-basis: 33%;
justify-content: center;
}
.runningState {
height: 98%;
width: 100%;
padding: 2% 2%;
box-sizing: border-box;
.tableTitle {
background: url("@/assets/images/overview/runTime.png") no-repeat;
background-size: 100% 100%;
width: 100%;
height: 15.5%;
display: flex;
justify-content: space-around;
align-items: center;
font-size: 16px;
span{
flex-basis: 33%;
text-align: center;
}
}
.tableContent {
width: 100%;
height: calc(100% - 4.5%);
overflow: auto;
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */
.tableBoby {
background: url("@/assets/images/air-conditioning/table-item.png") no-repeat;
background-size: 100% 100%;
width: 100%;
height: 15.5%;
display: flex;
justify-content: space-around;
align-items: center;
font-size: 14px;
margin-top: .3rem;
}
}
::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
}
//弹窗
.dialog {
position: fixed;
top: 0;
right: 0;
left: 0;
bottom: 0;
margin: auto;
width: vw(506);
height: vh(317);
background-image: url('@/assets/images/lighting/dialog.png');
background-size: 100% 100%;
&-title {
padding-left: 2.5rem;
padding-top: .2rem;
box-sizing: border-box;
font-weight: 400;
color: rgba(255, 255, 255, 1);
font-size: 1.4rem;
font-family: title;
}
.close-btn {
background-image: url('@/assets/images/lighting/dialog-close.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 5%;
height: 8.5%;
position: absolute;
right: 0;
top: 3%;
cursor: pointer;
}
}

View File

@ -1,185 +0,0 @@
<script setup>
import {ref} from 'vue'
const checkAll = ref(false)
const isIndeterminate = ref(true)
//
const props = defineProps({
dialogName:{
type:String,
default:''
}
})
const emit = defineEmits(['update'])
const closeDialog = () =>{
//
emit('update',false)
}
//
const checkedSystem = ref(['2号机窗'])
const systems = ['1号机窗', '2号机窗', '3号机窗', '4号机窗']
const handleCheckAllChange = (val) => {
checkedSystem.value = val ? systems : []
isIndeterminate.value = false
}
const handleCheckedCitiesChange = (value) => {
const checkedCount = value.length
checkAll.value = checkedCount === systems.length
isIndeterminate.value = checkedCount > 0 && checkedCount < systems.length
}
//
const toggleClose = (index) =>{
checkedSystem.value.splice(index,1)
const checkedCount = checkedSystem.value.length
checkAll.value = checkedCount === systems.length
isIndeterminate.value = checkedCount > 0 && checkedCount < systems.length
}
</script>
<template>
<div class="dialog">
<div class="close-btn" @click="closeDialog"></div>
<div class="dialog-title">策略编辑</div>
<div class="dialog-box">
<div class="dialog-box-name">
<el-form-item label="策略名称:">
<el-input v-model="props.dialogName"></el-input>
</el-form-item>
</div>
<div class="dialog-box-content">
<div class="dialog-box-content-item">
<el-checkbox
v-model="checkAll"
:indeterminate="isIndeterminate"
@change="handleCheckAllChange"
>全部设备</el-checkbox
>
<el-checkbox-group
v-model="checkedSystem"
@change="handleCheckedCitiesChange"
>
<el-checkbox v-for="city in systems" :key="city" :label="city">{{
city
}}</el-checkbox>
</el-checkbox-group>
</div>
<div class="dialog-box-content-item">
<div class="on-device">开机设备</div>
<div class="system">
<div class="select-system" v-for="(item,index) in checkedSystem">
<span>{{item}}</span>
<span class="close" @click="toggleClose(index)"></span>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
.dialog-box{
width: 100%;
height: 90%;
padding: 1rem;
box-sizing: border-box;
&-content{
//background-color: #fff;
display: flex;
justify-content: space-between;
width: 100%;
height: 86%;
&-item{
font-size: .875rem;
padding: 2%;
box-sizing: border-box;
width: 47%;
height: 90%;
background-image: url('@/assets/images/air-conditioning/dialog-item-bg.png');
background-size: 100% 100%;
.on-device{
height: 20%;
display: flex;
align-items: center;
margin-bottom: 2%;
}
.system{
height: 80%;
.select-system{
margin-bottom: 2%;
width: 60%;
padding-left: 1rem;
padding-right: .5rem;
box-sizing: border-box;
height: 20%;
display: flex;
justify-content: space-between;
background-image: url("@/assets/images/air-conditioning/system-border.png");
background-size: 100% 100%;
background-repeat: no-repeat;
align-items: center;
.close{
width: 8%;
cursor: pointer;
height: 40%;
background-image: url("@/assets/images/air-conditioning/close-btn.png");
background-size: 100% 100%;
}
}
}
}
}
}
:deep(.el-input__inner){
color:rgba(255, 255, 255, 1);
}
:deep(.el-input__wrapper){
background-color: transparent !important;
}
:deep(.el-form-item__label){
color:rgba(255, 255, 255, 1);
font-size: .875rem;
}
:deep(.el-input){
width: 50%;
height: 65%;
}
:deep(.el-input__wrapper){
border-radius: 0;
}
:deep(.el-form-item){
margin-bottom: 1%;
}
:deep(.el-checkbox){
height: 20%;
width: 100%;
margin-bottom: 2%;
color:rgba(221, 255, 253, 1);
}
:deep(.el-checkbox-group){
height: 80%;
}
:deep(.el-checkbox__input.is-checked+.el-checkbox__label){
color:rgba(221, 255, 253, 1);
}
:deep(.el-checkbox__input.is-checked .el-checkbox__inner::after){
border-color:#000;
}
:deep(.el-checkbox__input.is-checked .el-checkbox__inner){
background-color: rgba(255, 221, 0, 1);
border-color: rgba(255, 221, 0, 1);
}
:deep(.el-checkbox__input.is-indeterminate .el-checkbox__inner::before){
background-color: #000;
}
:deep(.el-checkbox__input.is-indeterminate .el-checkbox__inner){
background-color: rgba(221, 255, 253, 1);
}
</style>

View File

@ -1,7 +1,7 @@
<script setup> <script setup>
import {ref, reactive} from "vue"; import {ref, reactive} from "vue";
import getPath from "@/utils/getPath.js"; import getPath from "@/utils/getPath.js";
import dialogBox from './components/dialogBox.vue'
const systemNumList = ref([ const systemNumList = ref([
{ {
name: '运行设备数量', name: '运行设备数量',
@ -153,23 +153,10 @@ const maintenanceList = ref([
date: '09', date: '09',
} }
]) ])
//
const dialogBoxShow = ref(false)
const dialogName = ref('')
const openDialog = (name) =>{
dialogBoxShow.value = true
dialogName.value = name
}
const closeDialog = (val) =>{
dialogBoxShow.value = val
}
</script> </script>
<template> <template>
<div class="page m100"> <div class="page m100">
<!-- 弹窗-->
<dialogBox v-show="dialogBoxShow" @update="closeDialog" :dialogName="dialogName"/>
<div class="page-left-box"> <div class="page-left-box">
<!-- 概况--> <!-- 概况-->
<div class="title"> <div class="title">
@ -235,7 +222,6 @@ const closeDialog = (val) =>{
<span>开机策略</span> <span>开机策略</span>
</div> </div>
<div class="margin10 box-bg"> <div class="margin10 box-bg">
<!-- tbale -->
<div class="runningState"> <div class="runningState">
<div class="tableTitle"> <div class="tableTitle">
<span>策略名称</span> <span>策略名称</span>
@ -249,7 +235,7 @@ const closeDialog = (val) =>{
> >
<span class="name">{{ item.name }}</span> <span class="name">{{ item.name }}</span>
<el-switch v-model="item.value" style="left: 8px" /> <el-switch v-model="item.value" style="left: 8px" />
<span @click="openDialog(item.name)" style="cursor: pointer">编辑</span> <span>编辑</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -8,7 +8,7 @@
<div <div
v-for="(item, index) in overviewDate" v-for="(item, index) in overviewDate"
:key="index" :key="index"
:class="[activeDate === index ? 'dateAc' : 'date']" :class="[activeDate == index ? 'dateAc' : 'date']"
@click="switchDate(index)" @click="switchDate(index)"
> >
{{ item.name }} {{ item.name }}
@ -40,7 +40,7 @@
<div class="title margin10"> <div class="title margin10">
<span>碳流图</span> <span>碳流图</span>
</div> </div>
<div class="margin10 box-bg" id="energyFlow"></div> <div class="margin10 box-bg" id=""></div>
<!-- 碳排放趋势--> <!-- 碳排放趋势-->
<div class="title margin10"> <div class="title margin10">
<span>碳排放趋势</span> <span>碳排放趋势</span>
@ -48,7 +48,7 @@
<div <div
v-for="(item, index) in trendDate" v-for="(item, index) in trendDate"
:key="index" :key="index"
:class="[trendActiveDate === index ? 'dateAc' : 'date']" :class="[trendActiveDate == index ? 'dateAc' : 'date']"
@click="trandSwitchDate(index)" @click="trandSwitchDate(index)"
> >
{{ item.name }} {{ item.name }}
@ -89,6 +89,9 @@ import * as echarts from "echarts";
import "echarts-gl"; import "echarts-gl";
import { getPie3D, getParametricEquation } from "@/utils/carbonNeutrality"; import { getPie3D, getParametricEquation } from "@/utils/carbonNeutrality";
const getImageUrl = (name) => {
return new URL(name, import.meta.url).href;
};
const overviewDate = ref([ const overviewDate = ref([
{ {
name: "年", name: "年",
@ -236,7 +239,7 @@ function getCarbonTrends() {
myChart.setOption(option); myChart.setOption(option);
} }
// //
const getCarbonIntensity=()=> { function getCarbonIntensity() {
const offsetX = 10; //bar const offsetX = 10; //bar
const offsetY = 5; // const offsetY = 5; //
// //
@ -362,7 +365,7 @@ const getCarbonIntensity=()=> {
}, },
axisLabel: { axisLabel: {
color: "rgba(221, 255, 253, 1)", color: "rgba(221, 255, 253, 1)",
fontSize: 12, fontSize: 14,
interval: 0, interval: 0,
// 使 // 使
// formatter: function (value) { // formatter: function (value) {
@ -405,7 +408,7 @@ const getCarbonIntensity=()=> {
}, },
// y // y
axisLabel: { axisLabel: {
fontSize: 12, fontSize: 14,
color: "#DDFFFD", color: "#DDFFFD",
}, },
}, },
@ -537,7 +540,7 @@ const getCarbonIntensity=()=> {
myChart.setOption(option); myChart.setOption(option);
} }
// //
const getCarbonEmissionStatistics = ()=> { function getCarbonEmissionStatistics() {
let myChart = echarts.init( let myChart = echarts.init(
document.getElementById("carbonEmissionStatistics") document.getElementById("carbonEmissionStatistics")
); );
@ -681,7 +684,7 @@ const color = [
"rgba(1, 225, 242, 1)", "rgba(1, 225, 242, 1)",
"rgba(27, 255, 118, 1)", "rgba(27, 255, 118, 1)",
]; ];
const setLabel = ()=> { function setLabel() {
optionData.value.forEach((item, index) => { optionData.value.forEach((item, index) => {
item.itemStyle = { item.itemStyle = {
color: color[index], color: color[index],
@ -736,7 +739,7 @@ const setLabel = ()=> {
}); });
} }
// //
const getCarbonNeutrality = () => { function getCarbonNeutrality() {
setLabel(); setLabel();
let myChart = echarts.init(document.getElementById("carbonNeutrality")); let myChart = echarts.init(document.getElementById("carbonNeutrality"));
let option = getPie3D(optionData.value, 0, 270, 26, 40, 1); let option = getPie3D(optionData.value, 0, 270, 26, 40, 1);
@ -764,160 +767,6 @@ const getCarbonNeutrality = () => {
myChart.setOption(option); myChart.setOption(option);
// bindListen(myChart); // bindListen(myChart);
} }
//
const drawEnergyFlow = () => {
let myChart = echarts.init(document.getElementById("energyFlow"));
let sourceData = [
{
name: "电",
nameValue: 1562,
valueUnit: "KWh",
},
{
name: "空调",
nameValue: 562,
valueUnit: "kWh",
},
{
name: "照明",
nameValue: 490,
valueUnit: "kWh",
},
{
name: "电梯",
nameValue: 510,
valueUnit: "kWh",
},
{
name: "其他",
nameValue:320,
valueUnit: "kWh",
},
];
let sangjiColor = [
"rgba(91, 250, 241, 1)",
"rgba(91, 250, 241, 1)",
"rgba(91, 250, 241, 1)",
"rgba(91, 250, 241, 1)",
"rgba(91, 250, 241, 1)",
];
let itemStyleSource = [];
for (let d = 0; d < sourceData.length; d++) {
if (sourceData[d].name === "电") {
sourceData[d].label = {
position: "right",
};
}
sourceData[d].itemStyle = {
color: sangjiColor[d],
};
itemStyleSource.push(sourceData[d]);
}
let option = {
series: [
{
// select:{
// disabled:true
// },
type: "sankey",
layout: "none",
top: "5%",
bottom: "4%",
left: "6%",
right: "5%",
nodeAlign:'right',
nodeWidth: "13",
// nodeAlign:'right',
focusNodeAdjacency: "allEdges",
data: itemStyleSource,
links: [
{
source: "电",
target: "空调",
value: 8,
},
{
source: "电",
target: "照明",
value: 8,
},
{
source: "电",
target: "电梯",
value: 8,
},
{
source: "电",
target: "其他",
value: 8,
},
],
label: {
position: "left",
color: "#fff",
fontSize: 14,
formatter: function (params) {
if (params.dataIndex === 0) {
return (
"{a|" +
params.data.name +
"}\n" +
"{b|" +
params.data.nameValue +
"}" +
" " +
params.data.valueUnit
);
} else {
return (
"{name|" +
params.data.name +
"}" +
"{value|" +
params.data.nameValue +
"}" +
// " " +
params.data.valueUnit
);
}
},
rich: {
a: {
padding: [0, 15, 10, 0],
fontSize: "14",
},
b: {
color: "rgba(91, 250, 241, 1)",
fontWeight: "600",
fontSize: "16",
},
name: {
fontSize: 14,
// padding: [10, 0, 0, 0],
},
value: {
color: "rgba(91, 250, 241, 1)",
fontWeight: "600",
fontSize: "16",
padding: [0, 10, 0, 10],
},
},
},
lineStyle: {
color: "source",
// curveness: 0.5,
},
itemStyle: {
borderWidth: 1,
borderColor: "transparent",
},
},
],
};
myChart.setOption(option);
};
//dom //dom
onMounted(() => { onMounted(() => {
// //
@ -928,8 +777,6 @@ onMounted(() => {
getCarbonEmissionStatistics(); getCarbonEmissionStatistics();
// //
getCarbonNeutrality(); getCarbonNeutrality();
//
drawEnergyFlow()
}); });
</script> </script>

View File

@ -73,23 +73,6 @@ const systemRightList = ref([
} }
]// ]//
]) ])
//
const totalEnergyDate = ref('month')
const toggleTotalEnergy = (event) =>{
totalEnergyDate.value = event.srcElement.className
}
//
const managementDate = ref('month')
const toggleManagement = (event) => {
managementDate.value = event.srcElement.className
}
//
const exhibitionLoadDate = ref('month')
const toggleExhibitionLoad = (event) =>{
exhibitionLoadDate.value = event.srcElement.className
}
const selectSystemTab = (index) => { const selectSystemTab = (index) => {
systemTabIndex.value = index; systemTabIndex.value = index;
}; };
@ -926,7 +909,6 @@ const drawElectricityPrice = () => {
}; };
myChart.setOption(option) myChart.setOption(option)
} }
// dom // dom
onMounted(() => { onMounted(() => {
// //
@ -951,8 +933,8 @@ onMounted(() => {
<div class="title"> <div class="title">
<span>能耗总量</span> <span>能耗总量</span>
<p> <p>
<span class="month" :class="totalEnergyDate === 'month'?'selectMonth':''" @click="toggleTotalEnergy"></span> <span class="month"></span>
<span class="day" :class="totalEnergyDate === 'day'?'selectDay':''" @click="toggleTotalEnergy"></span> <span class="day"></span>
</p> </p>
</div> </div>
<div id="totalEnergy" class="margin10 box-bg"></div> <div id="totalEnergy" class="margin10 box-bg"></div>
@ -960,8 +942,8 @@ onMounted(() => {
<div class="title margin10"> <div class="title margin10">
<span>能效对标定额管理</span> <span>能效对标定额管理</span>
<p> <p>
<span class="year" :class="managementDate === 'year'?'selectYear':''" @click="toggleManagement"></span> <span class="year"></span>
<span class="month" :class="managementDate === 'month'?'selectMonth':''" @click="toggleManagement"></span> <span class="month"></span>
</p> </p>
</div> </div>
<div id="management" class="margin10 box-bg"></div> <div id="management" class="margin10 box-bg"></div>
@ -980,7 +962,7 @@ onMounted(() => {
<ul class="system-tab"> <ul class="system-tab">
<li <li
v-for="(item, index) in systemTab" v-for="(item, index) in systemTab"
:class="index === systemTabIndex ? 'tab-select' : ''" :class="index == systemTabIndex ? 'tab-select' : ''"
@click="selectSystemTab(index)" @click="selectSystemTab(index)"
> >
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
@ -1014,9 +996,9 @@ onMounted(() => {
<div class="title margin10"> <div class="title margin10">
<span>复费率</span> <span>复费率</span>
<p> <p>
<span class="year" :class="exhibitionLoadDate === 'year'?'selectYear':''" @click="toggleExhibitionLoad"></span> <span class="year"></span>
<span class="month" :class="exhibitionLoadDate === 'month'?'selectMonth':''" @click="toggleExhibitionLoad"></span> <span class="month"></span>
<span class="day" :class="exhibitionLoadDate === 'day'?'selectDay':''" @click="toggleExhibitionLoad"></span> <span class="day"></span>
</p> </p>
</div> </div>
<div id="exhibitionLoad" class="margin10 box-bg"></div> <div id="exhibitionLoad" class="margin10 box-bg"></div>

View File

@ -44,9 +44,8 @@ const getImageUrl = (name) => {
return new URL(name, import.meta.url).href; return new URL(name, import.meta.url).href;
}; };
// //
const getRealTimeLoad = ()=> { function getRealTimeLoad() {
let myChart let myChart = echarts.init(document.getElementById("realTimeLoad"));
myChart = echarts.init(document.getElementById("realTimeLoad"));
const option = { const option = {
// backgroundColor: "#05224d", // backgroundColor: "#05224d",
tooltip: {}, tooltip: {},
@ -126,7 +125,7 @@ const getRealTimeLoad = ()=> {
myChart.setOption(option); myChart.setOption(option);
} }
// //
const getDailyElectricityConsumption = () => { function getDailyElectricityConsumption() {
const offsetX = 10; //bar const offsetX = 10; //bar
const offsetY = 5; // const offsetY = 5; //
// //
@ -253,7 +252,7 @@ const getDailyElectricityConsumption = () => {
}, },
axisLabel: { axisLabel: {
color: "rgba(221, 255, 253, 1)", color: "rgba(221, 255, 253, 1)",
fontSize: 12, fontSize: 14,
interval: 1, interval: 1,
// 使 // 使
// formatter: function (value) { // formatter: function (value) {
@ -294,7 +293,7 @@ const getDailyElectricityConsumption = () => {
}, },
// y // y
axisLabel: { axisLabel: {
fontSize: 12, fontSize: 14,
color: "#DDFFFD", color: "#DDFFFD",
}, },
}, },
@ -409,7 +408,7 @@ const getDailyElectricityConsumption = () => {
} }
// //
const drawAirConditioningLoad = ()=> { function drawAirConditioningLoad() {
let myChart = echarts.init(document.getElementById("airConditioningLoad")); let myChart = echarts.init(document.getElementById("airConditioningLoad"));
const option = { const option = {
// backgroundColor: "#05224d", // backgroundColor: "#05224d",
@ -509,7 +508,7 @@ const drawAirConditioningLoad = ()=> {
myChart.setOption(option); myChart.setOption(option);
} }
// //
const drawExhibitionLoad =()=> { function drawExhibitionLoad() {
let myChart = echarts.init(document.getElementById("exhibitionLoad")); let myChart = echarts.init(document.getElementById("exhibitionLoad"));
const option = { const option = {
// backgroundColor: "#05224d", // backgroundColor: "#05224d",
@ -609,7 +608,7 @@ const drawExhibitionLoad =()=> {
myChart.setOption(option); myChart.setOption(option);
} }
// //
const drawRanking = ()=> { function drawRanking() {
let myChart = echarts.init(document.getElementById("ranking")); let myChart = echarts.init(document.getElementById("ranking"));
let option = { let option = {
grid: { grid: {
@ -745,7 +744,7 @@ const drawRanking = ()=> {
myChart.setOption(option); myChart.setOption(option);
} }
// //
const getLoadClassification=()=> { function getLoadClassification() {
var trafficWay = [ var trafficWay = [
{ {
name: "一级", name: "一级",
@ -928,6 +927,7 @@ const getLoadClassification=()=> {
}, },
}, },
labelLine: { labelLine: {
length: 60,
length: 60, length: 60,
length2: 60, length2: 60,
show: true, show: true,
@ -955,7 +955,7 @@ onMounted(() => {
drawRanking(); drawRanking();
// //
getLoadClassification(); getLoadClassification();
}) });
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@ -1,144 +0,0 @@
<script setup>
import {ref} from 'vue'
const lightControl = ref([
{
name:'照明1',
state:false
},
{
name:'照明1',
state:true
},
{
name:'照明1',
state:false
},
{
name:'照明1',
state:false
},
{
name:'照明1',
state:false
}
])
//
const controlBtn = ref('')
const toggleControl = (event) =>{
controlBtn.value = event.srcElement.className
if(event.srcElement.className==="off"){
lightControl.value.forEach(ele=>{
ele.state = false
})
}else if(event.srcElement.className==="on"){
lightControl.value.forEach(ele=>{
ele.state = true
})
}
}
const props = defineProps(
{
show:{
type:Boolean,
default:false,
},
name:{
type:String,
default:"",
}
}
)
const emit = defineEmits(['update'])
const closeDialog = () => {
//
emit('update',false)
}
</script>
<template>
<div class="dialog" v-if="props.show">
<div class="close-btn" @click="closeDialog"></div>
<div class="dialog-title">
<span>{{props.name}}</span>
</div>
<div class="control-btn">
<span class="on" :class="controlBtn==='on'?'select':''" @click="toggleControl">全开</span>
<span style="margin-left: .7rem" class="off" :class="controlBtn==='off'?'select':''" @click="toggleControl">全关</span>
</div>
<div class="dialog-content">
<div class="runningState">
<div class="tableTitle">
<span>回路名称</span>
<span>操作</span>
</div>
<div class="tableContent">
<div class="tableBoby"
v-for="(item, index) in lightControl"
:key="index"
>
<span class="name">{{ item.name }}</span>
<span><el-switch v-model="item.state" style="left: 8px" /></span>
</div>
</div>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.dialog-content{
width: 100%;
height: 74%;
box-sizing: border-box;
//padding: 1rem .5rem 0 1rem;
}
.control-btn{
padding-left: 1rem;
padding-top: .8rem;
box-sizing: border-box;
display: flex;
.select{
background-image: url("@/assets/images/air-tab-select.png") !important;
}
span{
background-image: url("@/assets/images/air-tab.png");
cursor: pointer;
font-family: normal;
color: rgba(221, 255, 253, 1);
background-size: 100% 100%;
font-size: 0.8rem;
padding: 0.2rem 1.1rem;
}
}
:deep(.el-switch__core) {
border-radius: 0;
background: transparent;
border: 1px solid rgba(223, 94, 94, 1);
}
:deep(.el-switch.is-checked .el-switch__core) {
background: transparent;
border: 1px solid rgba(80, 233, 83, 1);
}
:deep(.el-switch__core .el-switch__action) {
border-radius: 0;
height: 13px;
width: 13px;
background: rgba(223, 94, 94, 1);
}
:deep(.el-switch.is-checked .el-switch__action) {
border-radius: 0;
height: 13px;
width: 13px;
background: rgba(80, 233, 83, 1);
}
</style>

View File

@ -1,8 +1,6 @@
<script setup> <script setup>
import {onMounted, ref} from "vue" import {ref} from "vue"
import getPath from "@/utils/getPath.js"; import getPath from "@/utils/getPath.js";
import * as echarts from "echarts";
import dialogBox from './components/dialog.vue'
// //
const lightingNumList = ref([ const lightingNumList = ref([
{ {
@ -26,681 +24,10 @@ const lightingNumList = ref([
pic:getPath.offlineNum, pic:getPath.offlineNum,
} }
]) ])
//
const lightDetail = ref([
{
name:'照明1',
address:"西大厅",
state:false
},
{
name:'照明2',
address:"西大厅",
state:false
},
{
name:'照明3',
address:"西大厅",
state:false
},
{
name:'照明4',
address:"西大厅",
state:true
},
{
name:'照明5',
address:"西大厅",
state:true
}
])
//
const lightControl = ref([
{
name:'控制箱名称1'
},
{
name:'控制箱名称2'
},
{
name:'控制箱名称3'
},
{
name:'控制箱名称4'
},
{
name:'控制箱名称5'
}
])
//
const lightLoadDate = ref('day')
const toggleLightLoad = (event) =>{
lightLoadDate.value = event.srcElement.className
}
//
const controlBtn = ref('')
const toggleControl = (event) =>{
controlBtn.value = event.srcElement.className
}
//
const dialogShow = ref(false)
const box = ref("")
const dialogTitle = ref("")
const openDialog = (name) =>{
dialogShow.value = true
dialogTitle.value = name
}
const closeDialog = (val) =>{
dialogShow.value = val
}
//
const drawFaultConditionsChart = () =>{
let trafficWay = [
{
name: "正常",
value: 1260,
},
{
name: "故障",
value: 80,
},
];
var total = 0;
for (var i = 0; i < trafficWay.length; i++) {
total += trafficWay[i].value;
}
var data = [];
var color = [
'rgba(1, 246, 139, 1)',
'rgba(255, 221, 0, 1)'
];
for (var i = 0; i < trafficWay.length; i++) {
data.push(
{
value: trafficWay[i].value,
name: trafficWay[i].name,
itemStyle: {
borderWidth: 5,
// shadowBlur: 20,
borderRadius: 10,
borderColor: color[i],
shadowColor: color[i],
},
},
{
value: total * 0.04,
name: "",
itemStyle: {
label: {
show: false,
},
labelLine: {
show: false,
},
color: "rgba(0, 0, 0, 0)",
borderWidth: 0,
},
},
);
}
var img = "/src/assets/images/energyMonitoring/loadClassification.png";
let myChart = echarts.init(document.getElementById("faultConditions"));
let option = {
graphic: {
elements: [
{
type: "image",
z: 3,
style: {
image: img,
width: 175,
height: 175,
},
left: "center",
top: "center",
},
],
},
color: color,
title: [
{
text: total,
x: "47%",
y: "42%",
textAlign: "center",
textStyle: {
fontFamily: "Verdana-Bold",
fontSize: "20",
fontWeight: "bold",
color: "#FFF",
},
},
{
text: "个",
x: "58%",
y: "45%",
textAlign: "center",
textStyle: {
fontSize: "13",
fontWeight: "100",
color: "#FFF",
},
},
{
text: "照明四路数量",
left: "49%",
top: "55%",
textAlign: "center",
textStyle: {
fontFamily: "MicrosoftYaHei",
fontSize: "12",
fontWeight: "100",
color: "#fff",
},
},
],
tooltip: {
show: true,
},
series: [
{
name: "",
type: "pie",
clockWise: true,
radius: [50, 56],
hoverAnimation: false,
itemStyle: {
normal: {
label: {
show: true,
position: "outside",
color: "#FFFFFF",
fontSize: 13,
formatter: function (params) {
var percent = 0;
// var total = 0
// for (var i = 0; i < trafficWay.length; i++) {
// total += trafficWay[i].value
// }
percent = params.percent;
let unit = "个";
// percent = ((params.value / total) * 100).toFixed(0)
if (params.name !== "") {
return (
`{a${params.dataIndex / 2}|` +
params.value +
"}" +
`{s0|` +
unit +
"}" +
"\n" +
params.name
);
} else {
return "";
}
},
padding: [60, -50],
textStyle: {
rich: {
a0: {
color: "rgba(1, 246, 139, 1)",
padding: [0, 0, 10, 0],
fontSize: 15,
},
a1: {
color: color[1],
padding: [0, 0, 10, 0],
fontSize: 15,
},
s0: {
color: "#fff",
padding: [0, 0, 10, 5],
fontSize: 12,
},
},
},
},
labelLine: {
length: 20,
length2: 100,
show: true,
showAbove:true,
color: "#00ffff",
},
},
},
data: data,
},
],
};
myChart.setOption(option);
}
//
const drawHallLightingChart =()=>{
const offsetX = 10; //bar
const offsetY = 5; //
//
const CubeLeft = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0,
},
buildPath: function (ctx, shape) {
const xAxisPoint = shape.xAxisPoint;
const c0 = [shape.x - 7, shape.y];
const c1 = [shape.x + 7, shape.y];
const c2 = [xAxisPoint[0] + 7, xAxisPoint[1]];
const c3 = [xAxisPoint[0] - 7, xAxisPoint[1]];
ctx
.moveTo(c0[0], c0[1])
.lineTo(c1[0], c1[1])
.lineTo(c2[0], c2[1])
.lineTo(c3[0], c3[1])
.closePath();
ctx.stroke();
},
});
//
const CubeRight = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0,
},
buildPath: function (ctx, shape) {
const xAxisPoint = shape.xAxisPoint;
const c1 = [shape.x + 7, shape.y];
const c2 = [xAxisPoint[0] + 7, xAxisPoint[1]];
const c3 = [xAxisPoint[0] + 7 + 7, xAxisPoint[1] - 10];
const c4 = [shape.x + 7 + 7, shape.y - 5];
ctx
.moveTo(c1[0], c1[1])
.lineTo(c2[0], c2[1])
.lineTo(c3[0], c3[1])
.lineTo(c4[0], c4[1])
.closePath();
ctx.stroke();
},
});
//
const CubeTop = echarts.graphic.extendShape({
shape: {
x: 0,
y: 0,
},
buildPath: function (ctx, shape) {
const c1 = [shape.x - 7, shape.y];
const c2 = [shape.x + 8, shape.y];
const c3 = [shape.x + 15, shape.y - 5];
const c4 = [shape.x - 2, shape.y - 5];
ctx
.moveTo(c1[0], c1[1])
.lineTo(c2[0], c2[1])
.lineTo(c3[0], c3[1])
.lineTo(c4[0], c4[1])
.closePath();
ctx.stroke();
},
});
//
echarts.graphic.registerShape("CubeLeft", CubeLeft);
echarts.graphic.registerShape("CubeRight", CubeRight);
echarts.graphic.registerShape("CubeTop", CubeTop);
let intAxisData = ['室内','户外'];
let intSeriesData = [100,200];
// 绿
// let colorArr = [["#12D5AF"], ["#0BC19D", "rgba(13,8,16,0)"], ["#68EFD4", "rgba(14,185,151,0)"]]
let colorArr;
let myChart = echarts.init(
document.getElementById("hallLighting")
);
const option = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow",
},
formatter: function (params, ticket, callback) {
const item = params[1];
return item.name + " : " + item.value;
},
},
grid: {
left: "4%",
right: "5%",
top: "18%",
bottom: "5%",
containLabel: true,
},
xAxis: {
type: "category",
data: intAxisData,
axisLine: {
show: true,
lineStyle: {
width: 1,
type: "solid",
color: "rgba(255, 255, 255, 0.20)",
},
},
axisTick: {
show: false,
},
axisLabel: {
color: "rgba(221, 255, 253, 1)",
fontSize: 14,
interval: 0,
// 使
// formatter: function (value) {
// const length = value.length;
// if (length > 3) {
// const start = Math.floor(length / 2);
// const str =
// value.slice(0, start) + "\n" + value.slice(start, length);
// return str;
// }
// return value;
// },
},
},
yAxis: {
type: "value",
name: "单位:kW",
nameTextStyle: {
color: "#DDFFFD",
padding:[0,20,0,0]
},
// minInterval: 1,
// y线
axisLine: {
show: false,
},
// y 线
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "rgba(1, 39, 37, 0.30)",
},
},
// y线
axisTick: {
show: false,
},
// y
axisLabel: {
fontSize: 14,
color: "#DDFFFD",
},
},
series: [
{
type: "custom",
renderItem: (params, api) => {
const location = api.coord([api.value(0), api.value(1)]);
colorArr = params.dataIndex===0?[
//
["rgba(0, 170, 193, 1)"],
["rgba(0, 224, 255, 1)", "rgba(0, 224, 255,0)"],
]:[
// 绿
["rgba(0, 193, 113, 1)"],
["rgba(0, 255, 140, 1)", "rgba(0, 255, 140,0)"],
]
return {
type: "group",
children: [
//
{
type: "CubeLeft",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0]),
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[1][0],
},
{
offset: 1,
color: colorArr[1][1],
},
]),
},
},
//
{
type: "CubeRight",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0]),
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[1][0],
},
{
offset: 1,
color: colorArr[1][1],
},
]),
},
},
//
{
type: "CubeTop",
shape: {
api,
xValue: api.value(0),
yValue: api.value(1),
x: location[0],
y: location[1],
xAxisPoint: api.coord([api.value(0), 0]),
},
style: {
fill: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{
offset: 0,
color: colorArr[0][0],
},
{
offset: 1,
color: colorArr[0][0],
},
]),
},
},
],
};
},
data: intSeriesData,
},
{
type: "bar",
label: {
normal: {
show: false,
position: "top",
formatter: (e) => {
return e.value;
},
fontSize: 16,
color: "#43C4F1",
offset: [0, -5],
},
},
itemStyle: {
color: "transparent",
},
tooltip: {},
data: intSeriesData,
},
],
};
myChart.setOption(option);
}
//
const drawLightLoadChart = () =>{
let myChart = echarts.init(document.getElementById("lightLoad"));
let option = {
grid: {
top: '18%',
left: '3%',
right: '5%',
bottom: '7%',
containLabel: true
},
tooltip: {
trigger: 'axis',
borderWidth: 1,
// axisPointer: {
// type: 'shadow'
// },
// extraCssText: 'z-index:2'
},
legend: [{
icon: 'rect',
top: 5,
left: 'right',
orient: 'horizontal',
// data: ['', ''],
borderRadius: 20,
itemHeight:10,
itemWidth:15,
textStyle: {
color: '#DDFFFD',
fontSize: 12,
// fontWeight: 400
}
}],
xAxis: {
type: 'category',
data: ['13:00', '14:00', '15:00', '16:00', '17:00'],
axisLine: {
//线x
show: true,
lineStyle: {
// type:'dashed',
color: "#557775"
// color: "#233e64",
},
},
axisTick: {
show: false
},
axisLabel: {
show: true,
textStyle: {
color: "#DDFFFD",//X
}
}
},
yAxis: [
{
min:0,
max:500,
type: 'value',
name: '单位/kW',
nameTextStyle: {
color: "#DDFFFD",
fontSize: 12,
padding: [0, 10, 0, 0], //
},
axisTick: {
show: false
},
axisLabel: {
color: "#DDFFFD",
fontSize: 12
},
splitLine: {
show: true,
lineStyle: {
type:'dashed',
color: "rgba(1, 39, 37, 0.30)",
},
}
}
],
series: [
{
name: '昨日',
type: 'line',
//
//
symbol: "none",
itemStyle: {
//线
color: 'white',
borderWidth: '2',
borderColor: 'rgba(91, 250, 241, 1)',
normal: {
color: 'rgba(91, 250, 241, 1)'//
}
},
lineStyle: {
color: 'rgba(91, 250, 241, 1)'
},
data: [400, 320, 100, 320, 100]
},
{
name: '今日',
type: 'line',
symbol: "none",
itemStyle: {
//线
color: 'white',
borderWidth: '2',
borderColor: '#91cc75',
normal: {
color: '#91cc75'//
}
},
lineStyle: {
color: '#91cc75'
},
data: [100, 320, 400,420, 500]
}
]
}
myChart.setOption(option)
}
onMounted(()=>{
//
drawFaultConditionsChart()
//
drawHallLightingChart()
//
drawLightLoadChart()
})
</script> </script>
<template> <template>
<div class="page m100"> <div class="page m100">
<dialogBox ref="box" :show="dialogShow" @update="closeDialog" :name="dialogTitle"/>
<div class="page-left-box"> <div class="page-left-box">
<!-- 照明监测--> <!-- 照明监测-->
<div class="title"> <div class="title">
@ -720,73 +47,29 @@ onMounted(()=>{
<div class="title margin10"> <div class="title margin10">
<span>照明回路详情</span> <span>照明回路详情</span>
</div> </div>
<div class="margin10 box-bg"> <div class="margin10 box-bg"></div>
<div class="runningState">
<div class="tableTitle">
<span>名称</span>
<span>位置</span>
<span>状态</span>
</div>
<div class="tableContent">
<div class="tableBoby"
v-for="(item, index) in lightDetail"
:key="index"
>
<span class="name">{{ item.name }}</span>
<span>{{item.address}}</span>
<span ><i :class="item.state?'state1':'state0'"></i></span>
</div>
</div>
</div>
</div>
<!-- 照明负荷--> <!-- 照明负荷-->
<div class="title margin10"> <div class="title margin10">
<span>照明负荷</span> <span>照明负荷</span>
<p>
<span class="year" :class="lightLoadDate === 'year'?'selectYear':''" @click="toggleLightLoad"></span>
<span class="month" :class="lightLoadDate === 'month'?'selectMonth':''" @click="toggleLightLoad"></span>
<span class="day" :class="lightLoadDate === 'day'?'selectDay':''" @click="toggleLightLoad"></span>
</p>
</div> </div>
<div class="margin10 box-bg" id="lightLoad"></div> <div class="margin10 box-bg"></div>
</div> </div>
<div class="page-right-box"> <div class="page-right-box">
<!-- 展馆照明 --> <!-- 展馆照明 -->
<div class="title"> <div class="title">
<span>展馆照明</span> <span>展馆照明</span>
</div> </div>
<div class="margin10 box-bg" id="hallLighting"></div> <div class="margin10 box-bg" id="airConditioningLoad"></div>
<!-- 照明控制--> <!-- 照明控制-->
<div class="title margin10"> <div class="title margin10">
<span>照明控制</span> <span>照明控制</span>
<p class="control-btn">
<span class="on" :class="controlBtn==='on'?'select':''" @click="toggleControl">全开</span>
<span style="margin-left: .7rem" class="off" :class="controlBtn==='off'?'select':''" @click="toggleControl">全关</span>
</p>
</div>
<div class="margin10 box-bg" >
<div class="runningState">
<div class="tableTitle">
<span>控制箱名称</span>
<span>操作</span>
</div>
<div class="tableContent">
<div class="tableBoby"
v-for="(item, index) in lightControl"
:key="index"
>
<span class="name">{{ item.name }}</span>
<span class="control" @click="openDialog(item.name)">照明控制</span>
</div>
</div>
</div>
</div> </div>
<div class="margin10 box-bg" id="exhibitionLoad"></div>
<!-- 故障情况--> <!-- 故障情况-->
<div class="title margin10"> <div class="title margin10">
<span>故障情况</span> <span>故障情况</span>
</div> </div>
<div class="margin10 box-bg" id="faultConditions"></div> <div class="margin10 box-bg" id="ranking"></div>
</div> </div>
</div> </div>
</template> </template>
@ -828,43 +111,5 @@ onMounted(()=>{
font-size: .75rem; font-size: .75rem;
} }
} }
}
//
.state0,.state1{
width: 1.1rem;
height: 1.1rem;
display: block;
background-size: 100% 100%;
margin: 0 auto;
}
.state0{
background-image: url('@/assets/images/lighting/state0.png');
}
.state1{
background-image: url('@/assets/images/lighting/state1.png');
}
//
.control{
color:rgba(61, 255, 244, 1);
cursor: pointer;
}
.control-btn{
display: flex;
.select{
background-image: url("@/assets/images/air-tab-select.png") !important;
}
span{
background-image: url("@/assets/images/air-tab.png");
cursor: pointer;
font-family: normal;
color: rgba(221, 255, 253, 1);
background-size: 100% 100%;
font-size: 0.8rem;
padding: 0.2rem 1.1rem;
}
}
//
.dialog{
} }
</style> </style>

View File

@ -30,17 +30,7 @@ onMounted(()=>{
// //
getCarbonEmission() getCarbonEmission()
}) })
//
const powerDate = ref('year')
const togglePower = (event) =>{
powerDate.value = event.srcElement.className
}
//
const carbonEmissionDate = ref('month')
const toggleCarbonEmission = (event) =>{
carbonEmissionDate.value = event.srcElement.className
}
const drawPowerEcharts = () =>{ const drawPowerEcharts = () =>{
let myChart = echarts.init(document.getElementById('power')) let myChart = echarts.init(document.getElementById('power'))
const option = { const option = {
@ -396,7 +386,7 @@ function getCarbonEmission() {
}, },
axisLabel: { axisLabel: {
color: "rgba(221, 255, 253, 1)", color: "rgba(221, 255, 253, 1)",
fontSize: 12, fontSize: 14,
interval: 0, interval: 0,
// 使 // 使
// formatter: function (value) { // formatter: function (value) {
@ -437,7 +427,7 @@ function getCarbonEmission() {
}, },
// y // y
axisLabel: { axisLabel: {
fontSize: 12, fontSize: 14,
color: "#DDFFFD", color: "#DDFFFD",
}, },
}, },
@ -561,8 +551,8 @@ function getCarbonEmission() {
<div class="title"> <div class="title">
<span>用电量</span> <span>用电量</span>
<p> <p>
<span class="year" :class="powerDate === 'year'?'selectYear':''" @click="togglePower"></span> <span class="year"></span>
<span class="month" :class="powerDate === 'month'?'selectMonth':''" @click="togglePower"></span> <span class="month"></span>
</p> </p>
</div> </div>
<div class="margin10 box-bg" id="power"> <div class="margin10 box-bg" id="power">
@ -582,8 +572,8 @@ function getCarbonEmission() {
<div class="title margin10"> <div class="title margin10">
<span>碳排放</span> <span>碳排放</span>
<p> <p>
<span class="year" :class="carbonEmissionDate === 'year'?'selectYear':''" @click="toggleCarbonEmission"></span> <span class="year"></span>
<span class="month" :class="carbonEmissionDate === 'month'?'selectMonth':''" @click="toggleCarbonEmission"></span> <span class="month"></span>
</p> </p>
</div> </div>
<div class="margin10 box-bg" id="carbonEmission"> <div class="margin10 box-bg" id="carbonEmission">

View File

@ -110,86 +110,7 @@ const runTimeList = ref([
name: "西大厅4", name: "西大厅4",
value: true, value: true,
}, },
{
name: "西大厅5",
value: false,
},
{
name: "西大厅6",
value: true,
},
{
name: "西大厅7",
value: true,
},
{
name: "西大厅8",
value: true,
},
{
name: "西大厅9",
value: false,
},
{
name: "西大厅10",
value: true,
},
{
name: "西大厅11",
value: true,
},
{
name: "西大厅12",
value: true,
},
{
name: "西大厅13",
value: false,
},
{
name: "西大厅14",
value: true,
},
{
name: "西大厅15",
value: true,
},
{
name: "西大厅16",
value: true,
},
{
name: "西大厅17",
value: false,
},
{
name: "西大厅18",
value: true,
},
{
name: "西大厅19",
value: true,
},
{
name: "西大厅20",
value: true,
},
{
name: "西大厅21",
value: false,
},
{
name: "西大厅22",
value: true,
},
{
name: "西大厅23",
value: true,
},
{
name: "西大厅24",
value: true,
},
]); ]);
</script> </script>