Compare commits

..

37 Commits
dev ... meizhou

Author SHA1 Message Date
selia-zx 54929bc638 修改能耗分析图表参数 3 weeks ago
selia-zx 1629c56cc5 处理能耗报表报错问题 3 weeks ago
selia-zx 2c51fbf984 修改大屏数据 3 weeks ago
selia-zx 61dc4a5d59 修改生活热水-热泵开关机逻辑 3 weeks ago
selia-zx b422e6e323 1.修改大屏数据 3 weeks ago
selia-zx b31574e5fd 修改能源分析-能耗报表数据 3 weeks ago
selia-zx 8416806539 1.修改热水-项目总览,饼图描述 4 weeks ago
selia-zx 68efeef754 更新2000px以上页面样式变动2.0 1 month ago
selia-zx 56da047b0f 修改设备定时开关匹配数据逻辑 1 month ago
selia-zx b829c8d52d 更新2000px以上页面样式变动 1 month ago
selia-zx 46fe8ea70c 1.生活热水-首页修改热泵总数 1 month ago
selia-zx 7e78020d6e 1.对接生活热水供水监控系统-项目总览-项目概况、当月数据统计 1 month ago
selia-zx eec0e3cabb 1.生活热水供水监控系统添加:项目总览、能源分析(能耗报表、温度变化表、水位变化表)、用能查询(能耗、水表读数、电表读数)、数据分析四个静态页面内容 1 month ago
selia-zx 928427732c 修改首页饼图数据 2 months ago
selia-zx d99ad9947d 修改首页饼图数据 2 months ago
selia-zx bf2640958b 1.首页添加生活热水、温度系统、风柜系统的数据 2 months ago
25604 c90530caad 1、风柜系统添加定时; 2 months ago
selia-zx b71839eba6 1.压缩机排序 2 months ago
selia-zx eb9d523e1e 1.修改风柜系统监测-定时开关机参数问题 2 months ago
selia-zx 027e4d6d7f 1.修改大屏数据 2 months ago
selia-zx 781cc7e59f 1.修改风柜系统监测-定时开关机弹框高亮 2 months ago
selia-zx ad60088e00 1.主机详情页面,图表添加负载y轴,压缩机参数不采用tab形式 2 months ago
selia-zx 8282126f15 1.冷源监控-系统监测添加可点击打开弹窗控制阀门、水泵、风机、主机 2 months ago
mh ee447e1d7f 监控界面、主机详情、温湿度图表优化 2 months ago
selia-zx a9833153fb 1.修改中央空调-系统监测-压缩机参数内容tab分开展示 2 months ago
selia-zx c06ca6002c 1.空调风柜监控系统-系统监控添加定时开关功能 2 months ago
selia-zx e6b93684ae 1.修改生活热水-实时监控的动态图 2 months ago
selia-zx abec1b1416 1.ps修改生活热水-实时监控的动态图,修改添加供水泵1、供水泵2、补水状态、回水状态、热泵等状态 2 months ago
mh ac91f0837c 冷热源界面修改 2 months ago
v-lijf43 f9a2a9b905 阀门开关到位修改 2 months ago
selia-zx 39661b7ba6 1.联调梅州-中央空调-系统监测页面内容,调整样式 2 months ago
selia-zx ccde8e6187 修改主机参数页面数据 3 months ago
selia-zx 4f79f5bac9 1.解决冲突 3 months ago
selia-zx c6b4345766 系统监测采用大屏显示版本 3 months ago
selia-zx a74c3ad306 修改定时任务、表单构建样式 3 months ago
selia-zx 11d131c3ec 1.修改系统监测页面 3 months ago
selia-zx e068a1a14b 梅州分支 3 months ago
  1. 4
      .env.development
  2. 4
      package.json
  3. BIN
      src/assets/images/detail-line.png
  4. BIN
      src/assets/images/meizhou.png
  5. 4
      src/assets/styles/bigScreen.scss
  6. 10
      src/views/bigScreen/bigScreen.vue
  7. 2
      src/views/bigScreen/components/coldSysEnergy.vue
  8. 4
      src/views/centerairC/overview/index.vue
  9. 31
      src/views/centerairC/sysControl/index.vue
  10. 159
      src/views/centerairC/sysControl/listHeader.vue
  11. 107
      src/views/centerairC/sysControl/vavleheader.vue
  12. 14
      src/views/centerairC/sysMonitor/components/hostChart.vue
  13. 566
      src/views/centerairC/sysMonitor/hostDetails.vue
  14. 1519
      src/views/centerairC/sysMonitor/monitorCenter.vue
  15. 147
      src/views/centerairC/sysMonitor/performance.vue
  16. 391
      src/views/centerairC/temHistoryQuery/index.vue
  17. 2
      src/views/centerairC/timeSwitch/index.vue
  18. 228
      src/views/components/viewColdSys.vue
  19. 10
      src/views/components/viewEnergy.vue
  20. 45
      src/views/hotWater/energyAnalysis/components/energyReport.vue
  21. 158
      src/views/hotWater/waterControl/index.vue
  22. 102
      src/views/index.vue

4
.env.development

@ -8,8 +8,8 @@ ENV = 'development'
# VUE_APP_BASE_API = '/dev-api'
# 后台
# VUE_APP_BASE_API = 'http://192.168.1.222:8080'
# 海湾酒店-云端
VUE_APP_BASE_API = 'http://106.55.173.225:8090'
# 梅州云端
VUE_APP_BASE_API = 'http://106.55.173.225:8091'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

4
package.json

@ -59,7 +59,8 @@
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
"vuedraggable": "2.24.3",
"vuex": "3.6.0"
"vuex": "3.6.0",
"xlsx": "^0.18.5"
},
"devDependencies": {
"@vue/cli-plugin-babel": "4.4.6",
@ -72,6 +73,7 @@
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"html-webpack-plugin": "^5.6.3",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",

BIN
src/assets/images/detail-line.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

BIN
src/assets/images/meizhou.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 MiB

4
src/assets/styles/bigScreen.scss

@ -679,10 +679,6 @@
.el-card__header {
padding: 0.14rem 0.15rem 0.07rem !important;
min-height: 0.4rem !important;
}
.el-form-item__error {
font-size: 0.12rem !important;
padding-top: 0.04rem !important;
}
}
@media (min-width: 2000px) {

10
src/views/bigScreen/bigScreen.vue

@ -52,7 +52,7 @@
<div class="special-top">
<div class="special-title">
<div class="title-left">
<div>冷源系统能</div>
<div>冷源系统能</div>
<time-data
v-model="sharedIndex"
:currentIndex="sharedIndex"
@ -153,7 +153,7 @@
src="../../assets/images/message-img5.png"
alt=""
/>
<div class="message-data">{{ viewMes.eleUnitArea }}wkh/</div>
<div class="message-data">{{ viewMes.eleUnitArea }}kwh/</div>
<div>面积电耗</div>
</div>
<div class="message-li">
@ -162,7 +162,7 @@
src="../../assets/images/message-img7.png"
alt=""
/>
<div class="message-data">{{ viewMes.waterUnitArea }}kwh</div>
<div class="message-data">{{ viewMes.waterUnitArea }}t/</div>
<div>面积水耗</div>
</div>
<div class="message-li">
@ -171,7 +171,7 @@
src="../../assets/images/message-img8.png"
alt=""
/>
<div class="message-data">{{ viewMes.coldUnitArea }}kw/lm³</div>
<div class="message-data">{{ viewMes.coldUnitArea }}kw/</div>
<div>面积冷耗</div>
</div>
<div class="message-li">
@ -180,7 +180,7 @@
src="../../assets/images/message-img9.png"
alt=""
/>
<div class="message-data">{{ viewMes.gasUnitArea }}kw/lm³</div>
<div class="message-data">{{ viewMes.gasUnitArea }}t/</div>
<div>面积汽耗</div>
</div>
</div>

2
src/views/bigScreen/components/coldSysEnergy.vue

@ -2,8 +2,8 @@
<div class="energy_content">
<div class="sys_charts" ref="sys_charts"></div>
<div class="eer">
<div>用电量:{{ energyMes.totalEle }}kw/h</div>
<div>产冷量:{{ energyMes.totalCold }}kwh</div>
<div>用电量:{{ energyMes.totalEle }}kw/h</div>
</div>
</div>
</template>

4
src/views/centerairC/overview/index.vue

@ -115,7 +115,7 @@
</el-table-column>
<el-table-column prop="copData" label="EER"> </el-table-column>
</el-table>
<div class="page" >
<div class="page">
<el-pagination
background
style="width: 100%; height: 20%"
@ -991,7 +991,7 @@ export default {
align-items: center;
width: 16rem;
}
.page{
.page {
margin-top: 0.22rem;
}

31
src/views/centerairC/sysControl/index.vue

@ -86,6 +86,7 @@
<list-header
:deviceList="hostList"
:isNoShowHz="true"
:isNoShowlocalRemote="true"
@operationControl="hadleOperationConrol"
@upList="getOperationList"
></list-header>
@ -187,7 +188,8 @@ export default {
//
else if (
child.paramType === "2" &&
!child.name.includes("阀")
!child.name.includes("阀") &&
child.name.includes("启停")
) {
deviceItem.controlText =
Number(child.value) == 0 ? false : true;
@ -217,6 +219,15 @@ export default {
deviceItem.localRemote =
Number(child.value) == 0 ? "本地" : "远程";
}
// -
else if (
child.paramType === "40" &&
!child.name.includes("阀")
) {
deviceItem.frequencyAutotext =
Number(child.value) == 0 ? false : true;
deviceItem.frequencyAutotextId = child.id;
}
//
else if (
child.paramType === "3" &&
@ -258,24 +269,24 @@ export default {
}
//
if (
child.name.includes("关到位") &&
child.name.endsWith("关到位") &&
Number(child.value) == 0
) {
valveClosed = false;
} else if (
child.name.includes("关到位") &&
child.name.endsWith("关到位") &&
Number(child.value) == 1
) {
valveClosed = true;
}
//
if (
child.name.includes("开到位") &&
child.name.endsWith("开到位") &&
Number(child.value) == 0
) {
valveOpened = false;
} else if (
child.name.includes("开到位") &&
child.name.endsWith("开到位") &&
Number(child.value) == 1
) {
valveOpened = true;
@ -414,16 +425,6 @@ export default {
</script>
<style lang="scss" scoped>
/* 设备控制列表样式 */
.device-container {
display: flex;
flex-direction: column;
width: 100%;
background-color: #142c4e;
padding: 10px 10px 30px 10px;
border-radius: 10px;
margin-bottom: 20px;
}
/* 状态统计样式 */
.status-statistics {
margin-bottom: 25px;

159
src/views/centerairC/sysControl/listHeader.vue

@ -7,6 +7,7 @@
<div class="device-name">手动控制</div>
<div class="device-name" v-if="!isNoShowlocalRemote">本地远程状态</div>
<div class="device-name">故障报警</div>
<div class="device-name" v-if="!isNoShowHz">频率手自动切换</div>
<div class="device-name" v-if="!isNoShowHz">频率调节</div>
<div class="device-name" v-if="!isNoShowHz">频率反馈</div>
<div class="device-name">运行时间</div>
@ -55,6 +56,20 @@
{{ item.warnText }}
</div>
</div>
<!-- 频率-手自动切换 -->
<div class="device-name" v-if="!isNoShowHz">
<el-switch
style="display: block"
v-model="item.frequencyAutotext"
active-color="#13ce66"
inactive-color="#ff4949"
active-text="手动"
inactive-text="自动"
v-if="item.frequencySet !== null && item.frequencySet !== undefined"
@change="handleFrequencyAutomaticText(item)"
>
</el-switch>
</div>
<!-- 频率调节 -->
<div class="device-name" v-if="!isNoShowHz">
<el-input
@ -64,7 +79,7 @@
@keyup.enter.native="handleEnter(item, $event)"
@input="handleInput(item)"
@blur="handleBlur()"
:disabled="!item.automaticText"
:disabled="!item.frequencyAutotext"
></el-input>
<div class="device-name" v-else></div>
</div>
@ -108,7 +123,7 @@ export default {
// this.currentFocusIndex = "";
},
handleEnter(item, event) {
console.log("请求后端");
console.log("请求后端", item);
//
event.target.blur();
this.$confirm(
@ -121,7 +136,6 @@ export default {
}
)
.then(() => {
// operationControl
this.$emit("operationControl", item.frequencyId, item.frequencySet);
})
.catch(() => {
@ -189,116 +203,37 @@ export default {
console.log("不请求后台");
});
},
// -
handleFrequencyAutomaticText(item) {
this.$confirm(
`确定要切换"${item.name}"的频率手自动状态为:${
item.frequencyAutotext ? "手动" : "自动 吗?"
}`,
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
//
console.log("请求后台", item.frequencyAutotext);
let param = null;
if (item.frequencyAutotext) {
param = 1;
} else {
param = 0;
}
this.$emit("operationControl", item.frequencyAutotextId, param);
})
.catch(() => {
//
item.frequencyAutotext = !item.frequencyAutotext;
console.log("不请求后台");
});
},
},
};
</script>
<style lang="scss" scoped>
.device-li {
flex: 1;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
padding: 12px 0;
color: #abcdfc;
border-bottom: 1px dashed #0349ac;
.device-name {
flex: 1;
white-space: nowrap;
font-size: 14px;
.el-switch {
width: 120px !important;
}
.run {
display: flex;
flex-direction: row;
align-items: center;
display: block;
}
.run::before {
content: "";
display: inline-block;
width: 10px;
height: 10px;
background-color: rgb(16, 231, 16);
border-radius: 50%;
margin-right: 5px;
}
.no-run {
display: flex;
flex-direction: row;
align-items: center;
display: block;
}
.no-run::before {
content: "";
display: inline-block;
width: 10px;
height: 10px;
background-color: rgb(180, 180, 180);
border-radius: 50%;
margin-right: 5px;
}
.el-input {
width: 100px;
}
.strong-electric {
background-color: rgba(59, 130, 246, 0.2);
color: #60a5fa;
padding: 5px 20px;
border-radius: 10px;
}
.auto-electric {
background-color: rgba(231, 144, 45, 0.2);
color: #e47f21;
padding: 5px 20px;
border-radius: 10px;
}
.good-status {
color: #4ade80;
}
.bad-status {
color: #f05348;
}
}
}
.device-li:nth-child(1) {
color: #9ca3af;
}
// 2000px
@media (min-width: 2000px) {
.device-li {
padding: 0.12rem 0 !important;
border-bottom: 0.01rem dashed #0349ac !important;
.device-name {
font-size: 0.14rem !important;
.el-switch {
width: 1.2rem !important;
}
.run::before {
width: 0.1rem !important;
height: 0.1rem !important;
margin-right: 0.05rem !important;
}
.no-run::before {
width: 0.1rem !important;
height: 0.1rem !important;
margin-right: 0.05rem !important;
}
.el-input {
width: 1rem !important;
}
.strong-electric {
padding: 0.05rem 0.2rem;
border-radius: 0.1rem !important;
}
.auto-electric {
padding: 0.05rem 0.2rem;
border-radius: 0.1rem !important;
}
}
}
}
</style>

107
src/views/centerairC/sysControl/vavleheader.vue

@ -125,111 +125,4 @@ export default {
</script>
<style lang="scss" scoped>
.device-li {
flex: 1;
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
padding: 12px 0;
color: #abcdfc;
border-bottom: 1px dashed #0349ac;
.device-name {
flex: 1;
white-space: nowrap;
font-size: 14px;
.el-switch {
width: 120px !important;
}
.run {
display: flex;
flex-direction: row;
align-items: center;
display: block;
}
.run::before {
content: "";
display: inline-block;
width: 10px;
height: 10px;
background-color: rgb(16, 231, 16);
border-radius: 50%;
margin-right: 5px;
}
.no-run {
display: flex;
flex-direction: row;
align-items: center;
display: block;
}
.no-run::before {
content: "";
display: inline-block;
width: 10px;
height: 10px;
background-color: rgb(180, 180, 180);
border-radius: 50%;
margin-right: 5px;
}
.el-input {
width: 100px;
}
.strong-electric {
background-color: rgba(59, 130, 246, 0.2);
color: #60a5fa;
padding: 5px 20px;
border-radius: 10px;
}
.auto-electric {
background-color: rgba(231, 144, 45, 0.2);
color: #e47f21;
padding: 5px 20px;
border-radius: 10px;
}
.good-status {
color: #4ade80;
}
.bad-status {
color: #f05348;
}
}
}
.device-li:nth-child(1) {
color: #9ca3af;
}
// 2000px
@media (min-width: 2000px) {
.device-li {
padding: 0.12rem 0 !important;
border-bottom: 0.01rem dashed #0349ac !important;
.device-name {
font-size: 0.14rem !important;
.el-switch {
width: 1.2rem !important;
}
.run::before {
width: 0.1rem !important;
height: 0.1rem !important;
margin-right: 0.05rem !important;
}
.no-run::before {
width: 0.1rem !important;
height: 0.1rem !important;
margin-right: 0.05rem !important;
}
.el-input {
width: 1rem !important;
}
.strong-electric {
padding: 0.05rem 0.2rem;
border-radius: 0.1rem !important;
}
.auto-electric {
padding: 0.05rem 0.2rem;
border-radius: 0.1rem !important;
}
}
}
}
</style>

14
src/views/centerairC/sysMonitor/components/hostChart.vue

@ -3,6 +3,7 @@
<div class="historyCharts" ref="chart_ref"></div>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
@ -40,6 +41,7 @@ export default {
const titleStr = data[1].titleStr;
// dataList
const dataList = data[3].dataList;
// dataList
dataList.forEach((item) => {
// name title
@ -55,15 +57,18 @@ export default {
let name3 = "";
let name4 = "";
let name5 = "";
data.forEach((item) => {
if (item.timeStr) {
this.bottomData = item.timeStr;
}
if (item.dataList) {
// name
const names = [];
// chartData
const chartData = [];
//
let loadDataIndex = -1;
for (let i = 0; i < item.dataList.length; i++) {
@ -77,10 +82,12 @@ export default {
break;
}
}
//
if (loadDataIndex !== -1) {
item.dataList.splice(loadDataIndex, 1);
}
//
item.dataList.slice(0, 4).forEach((val, index) => {
if (val.name) {
@ -88,11 +95,13 @@ export default {
names[index] = val.name;
}
});
// chartData this.chartDataX
this.chartData1 = chartData[0] || "";
this.chartData2 = chartData[1] || "";
this.chartData3 = chartData[2] || "";
this.chartData4 = chartData[3] || "";
// names
name1 = names[0] || "";
name2 = names[1] || "";
@ -503,9 +512,10 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.historyCharts {
width: 100%;
height: 4rem;
height: 4.4rem;
}
</style>
</style>

566
src/views/centerairC/sysMonitor/hostDetails.vue

@ -112,6 +112,25 @@
></span>
</div>
</div>
<div class="hostStatus">
<div class="hostStatus-li">
<span>远程开关机:</span>
<span class="automaticData">{{ onOffObj.curValue }}</span>
</div>
<div class="hostStatus-li">
<span>运行累计时间:</span>
<span class="timeData">{{ timeObj.curValue }}小时</span>
</div>
<div class="hostStatus-li">
<span>本地出水温度设定值:</span>
<span class="dotData">{{ coldWaterSetObj.curValue }}</span>
</div>
<div class="hostStatus-li">
<span>远程出水温度设定值:</span>
<span class="goodData">{{ coldWaterControlObj.curValue }}</span>
<!-- <span class="badData" v-else>{{ coldWaterControlObj.curValue }}</span> -->
</div>
</div>
<!-- 负载 -->
<LoadData class="loadData" :hostData="hostData"></LoadData>
</div>
@ -121,61 +140,6 @@
</div>
</div>
<div class="detail-bottom">
<div class="hostStatus">
<div class="hostStatus-li">
<span style="">冷冻供水温度:</span>
<el-input
size="mini"
style="width: 40%"
v-model="frozenupply"
@keyup.enter.native="
handleEnter(
'冷冻供水温度',
'℃',
frozenupply,
frozenupplIdy,
$event
)
"
@input="handleInput(children)"
@blur="handleBlur()"
></el-input>
<span></span>
</div>
<div class="hostStatus-li">
<span>需求设定值:</span>
<el-input
size="mini"
style="width: 40%"
v-model="requireSet"
@keyup.enter.native="
handleEnter('需求设定值', '%', requireSet, requireSetId, $event)
"
@input="handleInput(children)"
@blur="handleBlur()"
></el-input>
<span>%</span>
</div>
<div class="hostStatus-li">
<span>手自动切换:</span>
<span class="automaticData">{{ automaticObj.showValue }}</span>
</div>
<div class="hostStatus-li">
<span>本地远程状态:</span>
<span class="dotData">{{ localObj.showValue }}</span>
</div>
<div class="hostStatus-li">
<span>故障状态:</span>
<span class="goodData" v-if="badObj.showValue === '未故障'">{{
badObj.showValue
}}</span>
<span class="badData" v-else>{{ badObj.showValue }}</span>
</div>
<div class="hostStatus-li">
<span>运行累计时间:</span>
<span class="timeData">{{ timeObj.showValue }}小时</span>
</div>
</div>
<div class="detail-data hostparams">
<div class="detail-data-top">
<title-img></title-img>
@ -201,20 +165,70 @@
<div class="detail-data compressor">
<div class="detail-data-top">
<title-img></title-img>
<div class="details-title">压缩机参数</div>
<div class="choice">
<div>{{ compressorData1.mtTypeName }}</div>
</div>
<title-img></title-img>
</div>
<div class="detail-data-bottom">
<div
class="detail-data-li"
v-for="(item, index) in compressorData"
:key="index + 1"
v-for="(subItem, subIndex) in compressorData1.list"
:key="subIndex"
>
<div class="rightDot">
<div class="leftDot">
<span>{{ item.otherName }}:</span>
<span class="dotData">{{ item.curValue }}</span>
<span>{{ item.unit }}</span>
<span>{{ subItem.otherName }}:</span>
<span class="dotData">{{ subItem.curValue }}</span>
<span>{{ subItem.unit }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="detail-data compressor">
<div class="detail-data-top">
<title-img></title-img>
<div class="choice">
<div>{{ compressorData2.mtTypeName }}</div>
</div>
<title-img></title-img>
</div>
<div class="detail-data-bottom">
<div
class="detail-data-li"
v-for="(subItem, subIndex) in compressorData2.list"
:key="subIndex"
>
<div class="rightDot">
<div class="leftDot">
<span>{{ subItem.otherName }}:</span>
<span class="dotData">{{ subItem.curValue }}</span>
<span>{{ subItem.unit }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="detail-data compressor">
<div class="detail-data-top">
<title-img></title-img>
<div class="choice">
<div>{{ compressorData3.mtTypeName }}</div>
</div>
<title-img></title-img>
</div>
<div class="detail-data-bottom">
<div
class="detail-data-li"
v-for="(subItem, subIndex) in compressorData3.list"
:key="subIndex"
>
<div class="rightDot">
<div class="leftDot">
<span>{{ subItem.otherName }}:</span>
<span class="dotData">{{ subItem.curValue }}</span>
<span>{{ subItem.unit }}</span>
</div>
</div>
</div>
@ -224,6 +238,7 @@
</div>
</div>
</template>
<script>
import {
hostDetailsData,
@ -238,13 +253,13 @@ import titleImg from "./components/titleImg.vue";
import lineSquare from "./components/lineSquare.vue";
import { format } from "@/utils/datetime";
import { getDay } from "@/utils/datetime";
import { operationConrol } from "@/api/hotWater/waterControl";
export default {
name: "sysControl",
components: { LoadData, hostChart, titleImg, lineSquare },
data() {
return {
loading: false,
currentDate: new Date(),
nowTimer: null,
deviceName: "", //
@ -252,19 +267,18 @@ export default {
condenserPre: "", //
evaporatorPre: "", //
rightHostData: [], //
frozenupply: "", //
frozenupplyId: "",
requireSet: "", //
requireSetId: "",
automaticObj: {}, //
localObj: {}, //
badObj: {}, //
onOffObj: {}, //
timeObj: {}, //
compressorData: [], //
coldWaterSetObj: {}, //
coldWaterControlObj: {}, //
compressorData1: [], //1
compressorData2: [],
compressorData3: [],
temArray: [], //
isMagnetic: false,
isShowWarning: false, //
dayData: "", //
sharedIndex: 0,
};
},
computed: {
@ -396,88 +410,108 @@ export default {
this.leftHostData = [];
this.rightHostData = [];
// paramType
// this.rightHostData = this.hostData.filter((item) => {
// return !["2", "21", "20", "6", "5", "22", "26"].includes(
// Number(item.paramType)
// );
// });
this.rightHostData = this.hostData.filter((item) => {
const specificParamTypes = [6, 5, 22, 26];
// const specificParamTypes = [];
const specificParamTypes = [26];
// paramType
const isSpecificParamType = specificParamTypes.includes(
Number(item.paramType)
);
// const isCombinedCondition0 =
// Number(item.paramType) === 2 &&
// item.otherName.includes("");
const isCombinedCondition0 =
Number(item.paramType) === 2 &&
item.otherName.includes("手动启停");
// item.paramType 12 otherName ""
const isCombinedCondition1 =
Number(item.paramType) === 12 &&
item.otherName.includes("冷水控制设定值");
const isCombinedCondition2 =
Number(item.paramType) === 12 &&
item.otherName.includes("用户冷水设定值");
// false
return !isSpecificParamType;
return (
!isSpecificParamType &&
!isCombinedCondition0 &&
!isCombinedCondition1 &&
!isCombinedCondition2
);
});
// ordernum
this.rightHostData.sort((a, b) => {
return Number(a.ordernum) - Number(b.ordernum);
return Number(a.orderNum) - Number(b.orderNum);
});
this.hostData.forEach((item) => {
// paramType showValue
if (
item.paramType === "6" &&
item.otherName.includes("手自动切换")
) {
//
item.showValue =
Number(item.curValue) === 0 ? "自动" : "手动";
this.automaticObj = item;
} else if (
item.paramType === "5" &&
item.otherName.includes("故障")
) {
//
item.showValue =
Number(item.curValue) === 0 ? "未故障" : "故障";
this.badObj = item;
} else if (
item.paramType === "22" &&
item.otherName === "本地_远程"
) {
//
item.showValue =
Number(item.curValue) === 0 ? "本地" : "远程";
this.localObj = item;
} else if (
item.paramType === "26" &&
item.otherName.includes("运行累计时间")
item.paramType === "2" &&
item.otherName.includes("手动启停")
) {
// -
// item.showValue =
// Number(item.curValue) === 0 ? "" : "";
this.onOffObj = item;
} else if (item.paramType === "26") {
//
item.showValue = item.curValue;
this.timeObj = item;
} else if (
item.paramType === "12" &&
item.otherName.includes("冷冻供水温度")
item.otherName.includes("冷水控制设定值")
) {
//
this.frozenupply = item.curValue;
this.frozenupplyId = item.id;
//
this.coldWaterSetObj = item;
} else if (
item.paramType === "0" &&
item.otherName.includes("需求设定值")
item.paramType === "12" &&
item.otherName.includes("用户冷水设定值")
) {
//
this.requireSet = item.curValue;
this.requireSetId = id;
//
this.coldWaterControlObj = item;
}
});
}
});
// 使 filter item '0'
let compressorData = data.filter((obj) => obj.mtType !== "0");
console.log("压缩机数组", this.compressorData);
compressorData.forEach((item) => {
if (item.mtType === "9") {
//
this.compressorData = item.list;
//
for (let i = 0; i < this.compressorData.length; i++) {
const item = this.compressorData[i];
if (item.paramType === "1" && Number(item.curValue) === 0) {
item.curValue = "停止";
console.log("压缩机停止了啊是0···················");
} else if (
item.paramType === "1" &&
Number(item.curValue) === 1
) {
item.curValue = "运行";
}
// 1
this.compressorData1 = item;
// ordernum
if (
this.compressorData1.list &&
Array.isArray(this.compressorData1.list)
) {
this.compressorData1.list.sort((a, b) => {
return Number(a.orderNum) - Number(b.orderNum);
});
}
}
if (item.mtType === "10") {
// 2
this.compressorData2 = item;
// this.compressorData2 list
if (
this.compressorData2.list &&
Array.isArray(this.compressorData2.list)
) {
this.compressorData2.list.sort((a, b) => {
return Number(a.orderNum) - Number(b.orderNum);
});
}
}
if (item.mtType === "11") {
// 3
this.compressorData3 = item;
if (
this.compressorData3.list &&
Array.isArray(this.compressorData3.list)
) {
this.compressorData3.list.sort((a, b) => {
return Number(a.orderNum) - Number(b.orderNum);
});
}
}
});
@ -541,8 +575,45 @@ export default {
hostListClass(paramType) {
for (let i = 0; i < this.hostData.length; i++) {
const item = this.hostData[i];
if (item.paramType === paramType && Number(item.curValue) !== 0) {
return true;
if (
item.paramType === paramType &&
typeof item.curValue === "string" &&
/[\u4e00-\u9fa5]/.test(item.curValue)
) {
switch (item.paramType) {
case "1": //
if (item.curValue === "运行") {
return true;
}
break;
case "2": //
if (item.curValue === "启动" && item.otherName.includes("启停")) {
return true;
}
break;
case "5": //
if (item.curValue === "正常") {
return true;
}
break;
case "6": //
if (item.curValue === "自动") {
return true;
}
break;
case "22": //
if (item.curValue === "远程") {
return true;
}
break;
default:
return false;
break;
}
} else {
if (item.paramType === paramType && Number(item.curValue) !== 0) {
return true;
}
}
}
//
@ -568,82 +639,10 @@ export default {
this.exitFullscreen();
this.$router.push("/alarm/alarmRecord");
},
//
handleInput(children) {
console.log("校验");
//
children.curValue = String(children.curValue).replace(/[^\d.]/g, "");
//
const parts = children.curValue.split(".");
if (parts.length > 2) {
//
children.curValue = parts[0] + "." + parts[1];
}
//
if (parts.length === 2) {
children.curValue = parts[0] + "." + parts[1].slice(0, 2);
}
},
//
handleBlur() {
// this.currentFocusIndex = "";
},
handleEnter(title, unit, value, id, event) {
console.log("请求后端", value);
//
event.target.blur();
this.$confirm(
`确定要修改"${title}"的数据为:${value} ${unit}吗?`,
"提示",
{
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
this.hadleOperationConrol(id, value);
})
.catch(() => {
//
// this.getOperationList();
});
},
hadleOperationConrol(id, param) {
let data = {
id: id,
param: param,
};
console.log("操作参数", data);
operationConrol([data])
.then((res) => {
if (res.code == 200) {
this.$modal.msgSuccess("指令下发成功!");
// loading
this.loading = true;
// ;
setTimeout(() => {
this.getPolicyList().finally(() => {
// loading
this.loading = false;
});
}, 5000);
} else {
// this.$modal.msgError("");
console.log("应该更新状态的");
// ;
this.getPolicyList();
}
})
.catch((error) => {
console.log("请求发生错误,更新设备状态", error);
// ;
this.getPolicyList();
});
},
},
};
</script>
<style lang="scss" scoped>
.monitor {
width: 100%;
@ -759,13 +758,12 @@ export default {
align-items: center;
justify-content: space-between;
.detail-top-left {
width: 7rem;
height: 4.4rem;
// background-color: aquamarine;
position: relative;
.host-img1 {
width: 4.88rem;
height: 3.97rem;
width: 4.48rem;
height: 3.57rem;
margin: 0.2rem 0 0 0.2rem;
}
.outIn {
@ -837,18 +835,71 @@ export default {
.startClass {
z-index: 10;
position: absolute;
top: 2.9rem;
left: 3.4rem;
top: 2.2rem;
left: 2.7rem;
width: 0.18rem;
height: 0.18rem;
border-radius: 50%;
animation: blink 1s infinite;
background-color: #38fc52 !important;
}
.hostStatus {
z-index: 10;
position: absolute;
top: 0.6rem;
left: 4.9rem;
display: flex;
flex-direction: column;
justify-content: flex-start;
width: 2.8rem !important;
margin-top: 1.5rem;
.hostStatus-li {
background-color: #25455a;
color: #c0dffc;
font-size: 0.16rem;
margin-bottom: 0.1rem;
padding: 0.1rem;
letter-spacing: 0.02rem;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: flex-start;
span {
white-space: nowrap;
}
}
.dotData {
font-weight: bold;
margin: 0 0.06rem;
color: #3b80ff;
display: flex;
align-items: center;
}
.goodData {
font-weight: bold;
margin: 0 0.06rem;
color: #3df574;
}
.badData {
font-weight: bold;
margin: 0 0.06rem;
color: #cf3607;
}
.automaticData {
font-weight: bold;
margin: 0 0.06rem;
color: #da7b10;
}
.timeData {
font-weight: bold;
margin: 0 0.06rem;
color: #1df3e8;
}
}
.water-flow3 {
z-index: 10;
position: absolute;
top: 3.6rem;
top: 3.5rem;
left: 1.2rem;
.water-flow-li {
margin-bottom: 0.04rem;
@ -891,9 +942,9 @@ export default {
.fanBlade {
z-index: 10;
position: absolute;
top: 2.75rem;
left: 4.4rem;
width: 0.6rem;
top: 2.5rem;
left: 4.1rem;
width: 0.5rem;
height: 0.5rem;
transform-style: preserve-3d;
transform: translateX(-50%) rotateX(15deg) rotateZ(20deg)
@ -902,7 +953,7 @@ export default {
.leftFan {
z-index: 10;
position: absolute;
top: 2.55rem;
top: 2.29rem;
left: 0.53rem;
width: 0.5rem;
height: 0.5rem;
@ -915,21 +966,21 @@ export default {
.host-name {
z-index: 10;
position: absolute;
top: 1.55rem;
left: 1.8rem;
color: #3520f8;
top: 1.6rem;
left: 1.44rem;
color: #2925f8;
font-weight: bold;
font-size: 0.18rem;
}
.loadData {
z-index: 10;
position: absolute;
top: 0.2rem;
right: 0rem;
top: 0rem;
left: 5rem;
}
}
.detail-top-right {
width: calc(100% - 7.25rem);
width: calc(100% - 7.6rem);
height: 4.4rem;
// background-color: rgb(127, 172, 255);
}
@ -941,31 +992,6 @@ export default {
display: flex;
flex-direction: row;
justify-content: space-between;
.hostStatus {
display: flex;
flex-direction: column;
justify-content: flex-start;
width: 3rem !important;
margin-top: 1.5rem;
.hostStatus-li {
background-color: #25455a;
color: #c0dffc;
font-size: 0.18rem;
margin-bottom: 0.1rem;
padding: 0.1rem;
letter-spacing: 0.02rem;
display: flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
span {
white-space: nowrap;
}
.el-input {
margin: 0 0.05rem;
}
}
}
.detail-data {
display: flex;
flex-direction: column;
@ -987,7 +1013,7 @@ export default {
}
}
.detail-data-bottom {
// width: 100%;
width: 100%;
// padding: 0.1rem 0.3rem;
z-index: 0;
display: flex;
@ -1045,6 +1071,7 @@ export default {
#217df5 100%
);
}
.detail-data-li::before {
top: 0;
}
@ -1066,6 +1093,7 @@ export default {
align-items: center;
justify-content: space-between;
}
.rightDot::before {
content: "";
position: absolute;
@ -1083,6 +1111,7 @@ export default {
border-radius: 50%;
z-index: 10;
}
.rightDot::after {
content: "";
position: absolute;
@ -1117,6 +1146,7 @@ export default {
rgba(255, 255, 255, 0) 70%
);
}
.leftDot::after {
content: "";
position: absolute;
@ -1141,7 +1171,6 @@ export default {
}
}
.hostparams {
// width: 7.7rem;
width: 7rem;
.detail-data-bottom {
// padding-left: 0.5rem;
@ -1153,45 +1182,32 @@ export default {
}
}
.compressor {
width: 7.6rem;
width: 3.5rem;
.detail-data-bottom {
// padding-left: 0.75rem;
// width: 10rem;
.detail-data-li {
// width: 3.4rem;
width: calc(50% - 0.2rem) !important;
width: calc(100%) !important;
margin: 0 0.1rem;
}
}
}
.dotData {
font-weight: bold;
margin: 0 0.06rem;
color: #3b80ff;
display: flex;
align-items: center;
}
.goodData {
font-weight: bold;
margin: 0 0.06rem;
color: #3df574;
}
.badData {
font-weight: bold;
margin: 0 0.06rem;
color: #cf3607;
}
.automaticData {
font-weight: bold;
margin: 0 0.06rem;
color: #da7b10;
}
.timeData {
font-weight: bold;
margin: 0 0.06rem;
color: #1df3e8;
}
}
}
}
.choice {
margin-left: 0 !important;
}
.choice .mr20 {
width: 1rem !important;
color: #c0dffc;
font-weight: bold !important;
font-size: 0.18rem !important;
text-align: center !important;
background-color: transparent !important;
box-shadow: none !important;
}
.timeStyle {
color: #ffffff !important;
}
</style>

1519
src/views/centerairC/sysMonitor/monitorCenter.vue

File diff suppressed because it is too large Load Diff

147
src/views/centerairC/sysMonitor/performance.vue

@ -714,153 +714,6 @@ export default {
flex-wrap: wrap;
align-items: flex-start;
justify-content: center;
.detail-data-li {
width: 80%;
margin-right: 0.1rem;
position: relative;
color: #89acc4;
font-family: Arial, sans-serif;
letter-spacing: 0.02rem;
font-size: 0.18rem;
position: relative;
margin-bottom: 0.08rem;
border-left: 0.01rem solid #217df5;
border-right: 0.01rem solid #217df5;
background-image: radial-gradient(
circle at left top,
#217df5 0.01rem,
transparent 0.01rem
),
radial-gradient(
circle at right top,
#217df5 0.01rem,
transparent 0.01rem
),
radial-gradient(
circle at left bottom,
#217df5 0.01rem,
transparent 0.01rem
),
radial-gradient(
circle at right bottom,
#217df5 0.01rem,
transparent 0.01rem
);
background-repeat: no-repeat;
background-position: left top, right top, left bottom, right bottom;
}
.detail-data-li::before,
.detail-data-li::after {
content: "";
position: absolute;
left: 0;
right: 0;
height: 0.01rem;
background-image: linear-gradient(
to right,
#217df5 0%,
rgba(41, 128, 185, 0) 50%,
#217df5 100%
) !important;
}
.year-data {
margin-top: 0.1rem;
}
.rightDot {
position: relative;
width: 100%;
height: 100%;
z-index: 999;
}
.leftDot {
position: relative;
width: 100%;
height: 100%;
padding: 0.04rem 0.1rem;
display: flex;
flex-direction: row;
justify-content: space-between;
.dotData {
font-weight: bold;
margin: 0 0.06rem;
color: #3b80ff;
display: flex;
align-items: center;
}
.dotUnit{
width: 0.55rem;
text-align: left;
display: flex;
align-items: center;
}
}
.rightDot::before {
content: "";
position: absolute;
top: -0.03rem;
right: -0.03rem;
width: 0.06rem;
height: 0.06rem;
background-color: #217df5;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient(
circle at 30% 30%,
rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0) 70%
);
border-radius: 50%;
}
.rightDot::after {
content: "";
position: absolute;
bottom: -0.03rem;
right: -0.03rem;
width: 0.06rem;
height: 0.06rem;
background-color: #217df5;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient(
circle at 30% 30%,
rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0) 70%
);
border-radius: 50%;
}
.leftDot::before {
content: "";
position: absolute;
top: -0.03rem;
left: -0.03rem;
width: 0.06rem;
height: 0.06rem;
background-color: #217df5;
border-radius: 50%;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient(
circle at 30% 30%,
rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0) 70%
);
}
.leftDot::after {
content: "";
position: absolute;
bottom: -0.03rem;
left: -0.03rem;
width: 0.06rem;
height: 0.06rem;
background-color: #217df5;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient(
circle at 30% 30%,
rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0) 70%
);
border-radius: 50%;
}
}
.line1 {
position: absolute;

391
src/views/centerairC/temHistoryQuery/index.vue

@ -0,0 +1,391 @@
<template>
<div class="app-container">
<div class="btn-condition">
<div class="condition-left" v-show="showSearch">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
>
<el-form-item label="日期" prop="msgCode">
<el-date-picker
style="width: auto"
v-model="monthValue"
type="month"
placeholder="选择月"
value-format="yyyy-MM"
>
</el-date-picker>
</el-form-item>
</el-form>
<div class="primary-btn">
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
</div>
<div class="cancel-btn">
<el-button
type="cancel"
icon="el-icon-refresh"
size="mini"
@click="resetQuery"
>重置</el-button
>
</div>
</div>
</div>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</div>
</el-col> -->
</el-row>
<div class="charts" ref="chart_ref"></div>
<el-table
v-loading="loading"
:data="postList"
stripe
:cell-style="tableRowStyle"
>
<el-table-column label="日期" align="center" prop="dateAndWeek" />
<el-table-column label="最高气温" align="center" prop="maxTemp" />
<el-table-column label="最低气温" align="center" prop="minTemp" />
<el-table-column label="天气" align="center" prop="weatherConditions" />
<el-table-column label="风向" align="center" prop="windDirection" />
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { weatherTempData } from "@/api/centerairC/temHistory";
import * as echarts from "echarts";
export default {
name: "temHistoryQuery",
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
postList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
startTime: "",
endTime: "",
},
monthValue: "",
chartInstance: null,
option: {},
};
},
created() {
//
const currentDate = new Date();
//
const year = currentDate.getFullYear();
// 0 1
const month = String(currentDate.getMonth() + 1).padStart(2, "0");
// yyyy-MM
this.monthValue = `${year}-${month}`;
},
mounted() {
this.getList();
this.initChart();
window.addEventListener("resize", this.screenAdapter);
this.screenAdapter();
this.getChartData();
},
methods: {
tableRowStyle({ row, column, rowIndex, columnIndex }) {
//
if (columnIndex === 1) {
return "color: #fd1e00;!important;text-align:center";
}
if (columnIndex === 2) {
return "color: #3390ff;!important;text-align:center";
}
if (columnIndex === 4) {
return "color: #75d148;!important;text-align:center";
}
// return "text-align:center";
},
/** 查询报警编码列表 */
getList() {
this.loading = true;
this.queryParams.startTime = this.queryParams.endTime = this.monthValue;
console.log("参数", this.queryParams);
weatherTempData(this.queryParams).then((response) => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
},
getChartData() {
this.loading = true;
this.queryParams.pageNum = 0;
this.queryParams.startTime = this.queryParams.endTime = this.monthValue;
console.log("图表参数", this.queryParams);
weatherTempData(this.queryParams).then((response) => {
console.log("处理值然后渲染");
if (response.rows.length > 0) {
let data = response.rows;
let timeValue = [];
let hightValue = [];
let lowValue = [];
data.forEach((element) => {
timeValue.push(element.weatherDate);
hightValue.push(element.maxTemp);
lowValue.push(element.minTemp);
});
let adapterOption = {};
adapterOption = {
xAxis: {
data: timeValue,
},
series: [
{
data: hightValue,
//线
itemStyle: {
color: "rgb(18, 126, 226)", //线
},
lineStyle: {
color: "rgb(18, 126, 226)", //线
},
},
{
data: lowValue,
//线
itemStyle: {
color: "rgb(250, 169, 19)", //线
},
lineStyle: {
color: "rgb(250, 169, 19)", //线
},
},
],
};
//.chartInstanceoptiondataoption
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
} else {
let adapterOption = {};
adapterOption = {
xAxis: {
data: [],
},
series: [
{
data: [],
},
{
data: [],
},
],
};
//.chartInstanceoptiondataoption
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
}
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
this.getChartData();
},
/** 重置按钮操作 */
resetQuery() {
this.handleQuery();
},
/** 导出按钮操作 */
handleExport() {
this.download(
"device/gateway/export",
{
...this.queryParams,
},
`post_${new Date().getTime()}.xlsx`
);
},
// 线+ + 线
screenAdapter() {
//,2.6 mes_ref
const titleFontSize = this.$refs.chart_ref.offsetWidth / 130;
//optionoption
const adapterOption = {};
//.chartInstanceoptiondataoption
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
},
//chartInstance
initChart() {
this.chartInstance = echarts.init(this.$refs.chart_ref);
const titleFontSize = this.$refs.chart_ref.offsetWidth / 100;
this.option = {
tooltip: {
// axis x
trigger: "axis",
textStyle: {
//
fontSize: titleFontSize,
},
},
legend: {
show: false,
// textStyle: {
// //
// fontSize: 14
// }
},
grid: {
top: "10%",
left: "4%",
right: "6%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "category",
//true
boundaryGap: true,
// x
axisLabel: {
// interval: 0, //x
// rotate: 30, //x30
color: "rgba(255, 255, 255, 1)",
fontSize: titleFontSize, //x
},
axisTick: {
show: false, // 线
},
// x
axisLine: {
show: true,
lineStyle: {
color: "#365576",
},
},
splitLine: {
lineStyle: {
color: "#e2e6f0",
},
}, //x线
},
yAxis: {
min: 0,
// max:20,
// name: "kwh", // y
// name
nameTextStyle: {
color: "rgba(255, 255, 255, 1)",
fontSize: 12, //y
},
miniInterval: 5,
type: "value",
// y
axisLabel: {
color: "rgba(255, 255, 255, 1)",
fontSize: titleFontSize, //x
},
// y
axisLine: {
show: true,
lineStyle: {
color: "#365576", // y 线
},
},
//y线
// splitNumber: 10,
// y线
splitLine: {
lineStyle: {
color: "#1a3d62", // 线
type: "dashed", // 线线
},
},
},
series: [
{
type: "line",
//
symbolSize: titleFontSize * 0.5,
lineStyle: {
// 线
width: titleFontSize * 0.1,
},
symbol: "circle",
name: "最高气温",
},
{
type: "line",
//
symbolSize: titleFontSize * 0.5,
lineStyle: {
// 线
width: titleFontSize * 0.1,
},
symbol: "circle",
name: "最低气温",
},
],
};
//
this.chartInstance.setOption(this.option, true);
},
},
};
</script>
<style lang="scss" scoped>
.charts {
width: 100%;
height: 300px;
margin-bottom: 0.1rem;
}
// 2000px
@media (min-width: 2000px) {
.charts {
height: 3rem !important;
}
}
</style>

2
src/views/centerairC/timeSwitch/index.vue

@ -102,7 +102,7 @@ export default {
// console.log("child.pointName", child.pointName);
if (child.pointName) {
// -
if (child.pointName.includes(`开_`)) {
if (child.pointName.includes(`开_`)) {
// console.log("-·························");
delayItem.delayOpenHour = child.curValue;
delayItem.delayOpenHourId = child.cpmId;

228
src/views/components/viewColdSys.vue

@ -9,6 +9,12 @@
import * as echarts from "echarts";
import { viewMainParams } from "@/api/index";
export default {
props: {
subData: {
type: Array,
required: true,
},
},
data() {
return {
chartInstance: null,
@ -36,11 +42,24 @@ export default {
},
};
},
watch: {
subData: {
immediate: true, //
handler(newVal) {
// console.log("", this.subData);
if (Object.keys(newVal).length > 0) {
console.log("newval", newVal);
this.$nextTick(() => {
this.echartsData();
});
}
},
},
},
mounted() {
this.initChart();
this.screenAdapter();
window.addEventListener("resize", this.screenAdapter);
this.getChartsData();
},
destroyed() {
//mounted
@ -441,118 +460,114 @@ export default {
this.chartInstance.resize();
},
//
getChartsData() {
viewMainParams().then((res) => {
console.log("系统参数返回", res);
console.log("冷源监控返回", res.rows[0]);
if (res.code == 200) {
this.useForm.maxData = 10;
this.useForm.useData = res.rows[0].values[0].value;
let that = this;
// 使
const axisLineColor = this.getAxisLineColor(
this.useForm.useData,
this.useForm.maxData
);
const titleFontSize = this.$refs.sys_charts.offsetWidth / 30;
const adapterOption = {
series: [
{
name: "内部动态阴影",
axisLine: {
lineStyle: {
color: axisLineColor,
//
// width: 80,
},
echartsData() {
if (this.subData.length > 0) {
this.useForm.maxData = 10;
this.useForm.useData = this.subData[0].value;
let that = this;
// 使
const axisLineColor = this.getAxisLineColor(
this.useForm.useData,
this.useForm.maxData
);
const titleFontSize = this.$refs.sys_charts.offsetWidth / 20;
const adapterOption = {
series: [
{
name: "内部动态阴影",
axisLine: {
lineStyle: {
color: axisLineColor,
//
// width: 80,
},
},
{
name: "内部大边框",
min: 0,
max: this.useForm.maxData,
},
{
name: "指针上的圆",
data: [
{
value: 5,
},
{
name: "内部大边框",
min: 0,
max: this.useForm.maxData,
},
{
name: "指针上的圆",
data: [
{
value: 5,
},
],
},
{
name: "指针上的渐变圆",
label: {
show: true,
position: "center", //
offset: [0, -titleFontSize * 0.6], // 10
formatter: function () {
// HTML 使 rich
return `{line|${that.useForm.useData}}`;
},
rich: {
line: {
color: "#fff", //
fontSize: titleFontSize, //
lineHeight: 5, //
},
],
},
},
{
name: "指针上的渐变圆",
label: {
show: true,
position: "center", //
offset: [0, -titleFontSize * 0.6], // 10
formatter: function () {
// HTML 使 rich
return `{line|${that.useForm.useData}}`;
},
rich: {
line: {
color: "#fff", //
fontSize: titleFontSize, //
lineHeight: 5, //
data: [
{
value: 0,
itemStyle: {
//
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "rgb(4,112,212)", //
},
{
offset: 0.3,
color: "rgba(0, 46, 93)", //
},
],
global: false, // false
},
},
},
data: [
{
value: 0,
itemStyle: {
//
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "rgb(4,112,212)", //
},
{
offset: 0.3,
color: "rgba(0, 46, 93)", //
},
],
global: false, // false
},
},
},
],
},
{
//
name: this.energyCostText,
max: this.useForm.maxData, //
axisLabel: {
formatter: (value) => {
// 0
if (value === 0 || value == this.useForm.maxData) {
// 100
return value;
}
return "";
},
],
},
{
//
name: this.energyCostText,
max: this.useForm.maxData, //
axisLabel: {
formatter: (value) => {
// 0
if (value === 0 || value == this.useForm.maxData) {
// 100
return value;
}
return "";
},
data: [
{
name: this.dateUse,
value: this.useForm.useData,
},
],
},
],
};
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
}
});
data: [
{
name: this.dateUse,
value: this.useForm.useData,
},
],
},
],
};
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
}
},
},
};
@ -569,7 +584,7 @@ export default {
.sys_charts {
width: 100%;
height: 1.6rem;
height: 150px;
}
.eer {
font-size: 18px;
@ -578,6 +593,9 @@ export default {
}
// 2000px
@media (min-width: 2000px) {
.sys_charts {
height: 1.5rem !important;
}
.eer {
font-size: 0.18rem !important;
margin-top: 0.25rem !important;

10
src/views/components/viewEnergy.vue

@ -81,16 +81,12 @@ export default {
);
console.log("当前要渲染的数据对象", chartsObj);
console.log("当前要渲染的颜色对象", colorObj);
const titleFontSize = this.$refs.chart_ref.offsetWidth / 100;
const titleFontSize = this.$refs.chart_ref.offsetWidth / 50;
let adapterOption = {};
// 线
adapterOption = {
tooltip: {
trigger: "axis",
textStyle: {
//
fontSize: titleFontSize,
},
// tooltip
formatter: function (params) {
var res = params[0].name + "<br/>";
@ -143,13 +139,9 @@ export default {
{
data: chartsObj.data,
name: event,
//
symbolSize: titleFontSize * 0.5,
//线
itemStyle: {
color: colorObj.color, //线
// 线
width: titleFontSize * 0.1,
},
lineStyle: {
color: colorObj.color, //线

45
src/views/hotWater/energyAnalysis/components/energyReport.vue

@ -11,13 +11,13 @@
<div v-if="dateType === 'day'">与昨日相比</div>
<div v-if="dateType === 'month'">与上月相比</div>
<div v-if="dateType === 'year'">与上年相比</div>
<div class="upText" v-if="useWaterRadio > 0">
<i class="el-icon-bottom"></i>
<span>+{{ useWaterRadio }}</span>
<div class="upText" v-if="isPositive(useWaterRadio)">
<i class="el-icon-top"></i>
<span>{{ useWaterRadio }}</span>
</div>
<div class="downText" v-else>
<i class="el-icon-bottom"></i>
<span>-{{ useWaterRadio }}</span>
<span>{{ useWaterRadio }}</span>
</div>
</div>
<img
@ -36,13 +36,13 @@
<div v-if="dateType === 'day'">与昨日相比</div>
<div v-if="dateType === 'month'">与上月相比</div>
<div v-if="dateType === 'year'">与上年相比</div>
<div class="upText" v-if="useElectRadio > 0">
<i class="el-icon-bottom"></i>
<span>+{{ useElectRadio }}</span>
<div class="upText" v-if="isPositive(useElectRadio)">
<i class="el-icon-top"></i>
<span>{{ useElectRadio }}</span>
</div>
<div class="downText" v-else>
<i class="el-icon-bottom"></i>
<span>-{{ useElectRadio }}</span>
<span>{{ useElectRadio }}</span>
</div>
</div>
<img
@ -61,13 +61,13 @@
<div v-if="dateType === 'day'">与昨日相比</div>
<div v-if="dateType === 'month'">与上月相比</div>
<div v-if="dateType === 'year'">与上年相比</div>
<div class="upText" v-if="useUnitRadio > 0">
<i class="el-icon-bottom"></i>
<span>+{{ useUnitRadio }}</span>
<div class="upText" v-if="isPositive(useUnitRadio)">
<i class="el-icon-top"></i>
<span>{{ useUnitRadio }}</span>
</div>
<div class="downText" v-else>
<i class="el-icon-bottom"></i>
<span>-{{ useUnitRadio }}</span>
<span>{{ useUnitRadio }}</span>
</div>
</div>
<img
@ -250,6 +250,20 @@ export default {
window.removeEventListener("resize", this.screenAdapter);
},
methods: {
isPositive(value) {
// value
if (typeof value === "string") {
//
const numberPart = value.replace("%", "");
//
const num = parseFloat(numberPart);
return num > 0;
} else {
//
// console.error(":", value);
return false;
}
},
handleEnter(index) {
this.currentIndex = index;
this.renderingBroken();
@ -620,12 +634,7 @@ export default {
import("@/assets/excel/Export2Excel").then((excel) => {
// excel
if (this.building == "所有") {
var tHeader = [
"日期",
"用水量(吨)",
"用电量(度)",
"单耗(度/吨)",
]; // excel
var tHeader = ["日期", "用水量(吨)", "用电量(度)", "单耗(度/吨)"]; // excel
var filterVal = [
"curDate",
"useHotWater",

158
src/views/hotWater/waterControl/index.vue

@ -67,59 +67,64 @@
/>
<div class="monitor-words">
<div class="words-li">
<div class="ash">运行状态模式:</div>
<div class="ash">开关控制:</div>
<div class="white">
<el-select
<el-switch
style="display: block"
v-model="item.hotPumpStatus"
placeholder="请选择"
active-color="#13ce66"
active-text="开机"
inactive-text="关机"
@change="handleHotPump(item)"
>
<el-option
v-for="item in hotPumpOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-switch>
</div>
</div>
<div class="words-li">
<div class="ash">故障信息:</div>
<el-tag
</div>
</div>
<div class="control-bottom">
<div class="words-li">
<div class="ash">故障信息:</div>
<el-tag
size="mini"
v-if="item.alarmStatus === '无故障'"
type="success"
>{{ item.alarmStatus }}</el-tag
>
<el-tag size="mini" v-else type="danger">{{
item.alarmStatus
}}</el-tag>
</div>
<div class="words-li">
<div class="ash">运行状态:</div>
<el-tag size="mini" v-if="item.hotPumpStatus" type="success"
>开机</el-tag
>
<el-tag size="mini" v-else type="danger">关机</el-tag>
</div>
<div class="words-li">
<div class="ash">实际温度:</div>
<div class="white">{{ item.temp }}</div>
</div>
<div class="words-li">
<div class="ash">设定温度:</div>
<div class="white">
<el-input
size="mini"
v-if="item.alarmStatus === '无故障'"
type="success"
>{{ item.alarmStatus }}</el-tag
>
<el-tag size="mini" v-else type="danger">{{
item.alarmStatus
}}</el-tag>
</div>
<div class="words-li">
<div class="ash">实际温度:</div>
<div class="white">{{ item.temp }}</div>
</div>
<div class="words-li">
<div class="ash">设定温度:</div>
<div class="white">
<el-input
size="mini"
v-model="item.tempSet"
placeholder="请输入"
@keyup.enter.native="
handleEnter(
item,
item.tempSet,
item.tempSetId,
'设定温度',
'℃'
)
"
@input="handleInput(item)"
@blur="handleBlur()"
></el-input>
</div>
v-model="item.tempSet"
placeholder="请输入"
@keyup.enter.native="
handleEnter(
item,
item.tempSet,
item.tempSetId,
'设定温度',
'℃'
)
"
@input="handleInput(item)"
@blur="handleBlur()"
></el-input>
</div>
</div>
</div>
@ -593,15 +598,7 @@ export default {
value: 0,
},
{
label: "制冷",
value: 2,
},
{
label: "制热",
value: 3,
},
{
label: "热水",
label: "开机",
value: 4,
},
],
@ -768,7 +765,12 @@ export default {
...item,
waterLevel: Number(item.waterLevel),
runningStatus: Number(item.runningStatus) == 0 ? "停止" : "运行", //
hotPumpStatus: item.switchStatus, //
hotPumpStatus:
Number(item.switchStatus) === 0
? false
: Number(item.switchStatus) === 4
? true
: "", //
switchStatus: Number(item.switchStatus) == 0 ? false : true, //
alarmStatus: Number(item.alarmStatus) == 0 ? "无故障" : "故障", //
handAutomaticSwitch:
@ -829,7 +831,12 @@ export default {
waterLevel: Number(item.waterLevel),
runningStatus:
Number(item.runningStatus) == 0 ? "运行" : "停止", //
hotPumpStatus: item.switchStatus, //
hotPumpStatus:
Number(item.switchStatus) === 0
? false
: Number(item.switchStatus) === 4
? true
: "未知状态", //
switchStatus:
Number(item.switchStatus) == 0 ? false : true, //
alarmStatus:
@ -933,26 +940,10 @@ export default {
},
//
handleHotPump(item) {
//
const originalStatus = item.hotPumpStatus;
// value label
let statusLabel = "";
switch (item.hotPumpStatus) {
case 0:
statusLabel = "关机";
break;
case 2:
statusLabel = "制冷";
break;
case 3:
statusLabel = "制热";
break;
case 4:
statusLabel = "热水";
break;
}
this.$confirm(
`确定要切换设备"${item.name}"的状态为:${statusLabel} 吗?"`,
`确定要切换设备"${item.name}"的状态为:${
item.hotPumpStatus ? "开机" : "关机 吗?"
}`,
"提示",
{
confirmButtonText: "确定",
@ -961,11 +952,20 @@ export default {
}
)
.then(() => {
this.hadleOperationConrol(item.switchStatusId, item.hotPumpStatus);
//
console.log("请求后台", item.hotPumpStatus);
let param = null;
if (item.hotPumpStatus) {
param = 4;
} else {
param = 0;
}
console.log("参数",param)
this.hadleOperationConrol(item.switchStatusId, param);
})
.catch(() => {
//
item.hotPumpStatus = originalStatus;
//
item.switchStatus = !item.switchStatus;
});
},
//

102
src/views/index.vue

@ -119,15 +119,33 @@
<div class="special-top">
<div class="special-title">冷源系统</div>
</div>
<view-cold-sys></view-cold-sys>
<view-energy></view-energy>
</div>
</div>
<div class="project-bie">
<div class="special-div">
<div class="special-top">
<div class="special-title">能耗分析</div>
<div class="special-title">冷源能耗</div>
</div>
<view-energy></view-energy>
<view-cold-sys :subData="coldSys"></view-cold-sys>
</div>
<div class="special-div">
<div class="special-top">
<div class="special-title">热水系统</div>
</div>
<hot-water :subData="hotWaterSys"></hot-water>
</div>
<div class="special-div">
<div class="special-top">
<div class="special-title">风柜系统</div>
</div>
<airc-and-windc-meter :subData="airAndWindSys"></airc-and-windc-meter>
</div>
<div class="special-div">
<div class="special-top">
<div class="special-title">温度系统</div>
</div>
<tem-meter :subData="temSys"></tem-meter>
</div>
</div>
<el-dialog
@ -166,12 +184,26 @@
<script>
import * as echarts from "echarts";
import { imgUrl } from "@/utils/global";
import { introduction, changeLogo, viewProfile } from "@/api/index";
import {
introduction,
changeLogo,
viewProfile,
viewMainParams,
} from "@/api/index";
import viewEnergy from "./components/viewEnergy.vue";
import ViewColdSys from "./components/viewColdSys.vue";
import HotWater from "./components/hotWater.vue";
import AircAndWindcMeter from "./components/aircAndWindcMeter.vue";
import TemMeter from "./components/temMeter.vue";
export default {
components: { viewEnergy, ViewColdSys },
components: {
viewEnergy,
ViewColdSys,
HotWater,
AircAndWindcMeter,
TemMeter,
},
data() {
return {
imgUrl: "",
@ -203,11 +235,18 @@ export default {
chartsData1: null,
chartsData2: null,
isShowHome: true,
//
coldSys: [],
hotWaterSys: [],
airAndWindSys: [],
temSys: [],
};
},
mounted() {
this.getProject();
this.getHomeData();
this.getSubData();
// this.initChart();
// window.addEventListener("resize", this.screenAdapter);
// this.screenAdapter();
@ -474,7 +513,7 @@ export default {
//resize
this.chartInstance.resize();
},
// 30
//
getChartsData() {
const now = new Date();
const startDate = new Date(
@ -547,6 +586,34 @@ export default {
}
});
},
//
getSubData() {
viewMainParams().then((res) => {
console.log("系统参数返回", res);
console.log("冷源监控返回", res.rows[0]);
this.coldSys = [];
this.hotWaterSys = [];
this.airAndWindSys = [];
this.temSys = [];
if (res.code == 200 && res.rows) {
res.rows.forEach((val) => {
if (val.name.includes("冷源")) {
this.coldSys = val.values;
console.log("this.coldSys111111111111", this.coldSys);
}
if (val.name.includes("热水")) {
this.hotWaterSys = val.values;
}
if (val.name.includes("风柜")) {
this.airAndWindSys = val.values;
}
if (val.name.includes("温度")) {
this.temSys = val.values;
}
});
}
});
},
},
};
</script>
@ -653,7 +720,28 @@ export default {
align-items: stretch;
justify-content: space-between;
.special-div {
width: 100%;
width: 24.5%;
}
}
@media (max-width: 1485px) {
.overview-li {
width: calc(33.33%) !important;
height: 2rem !important;
background-size: 2rem 2rem !important;
margin-bottom: 0.3rem;
font-size: 0.22rem !important;
.overview-details {
font-size: 0.27rem !important;
}
}
.project-bie {
flex-wrap: wrap !important;
.special-div {
width: 49.5% !important;
margin-bottom: 0.25rem;
}
}
}
// 2000px
@media (min-width: 2000px) {}
</style>

Loading…
Cancel
Save