Browse Source

1.修改主机详情页面内容

2.修改设备监控页面单位
3.首页添加空调冷源系统EER数据
gh_ers
selia-zx 3 weeks ago
parent
commit
2b78ecf97a
  1. 2
      .env.development
  2. 2
      .env.production
  3. 2
      package.json
  4. 7
      src/api/index.js
  5. 20
      src/assets/styles/bigScreen.scss
  6. 6
      src/store/modules/permission.js
  7. 556
      src/views/centerairC/sysMonitor/hostDetails.vue
  8. 10
      src/views/centerairC/sysMonitor/monitorCenter.vue
  9. 798
      src/views/components/sysEnergy.vue
  10. 0
      src/views/heatRecoverySys/deviceMonitor/hrMonitorCenter.vue
  11. 2
      src/views/heatRecoverySys/deviceMonitor/index.vue
  12. 440
      src/views/index.vue
  13. 2
      src/views/login.vue
  14. 2
      vue.config.js

2
.env.development

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 铭汉空压热回收系统 VUE_APP_TITLE = 铭汉节能岛系统
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'

2
.env.production

@ -1,5 +1,5 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 铭汉空压热回收系统 VUE_APP_TITLE = 铭汉节能岛系统
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'

2
package.json

@ -1,7 +1,7 @@
{ {
"name": "mh", "name": "mh",
"version": "3.8.8", "version": "3.8.8",
"description": "铭汉空压热回收系统", "description": "铭汉节能岛系统",
"author": "铭汉", "author": "铭汉",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {

7
src/api/index.js

@ -53,3 +53,10 @@ export function ersDatas(query) {
params: query, params: query,
}); });
} }
// 空调系统eer
export function getCoeData() {
return request({
url: "/pro/overview/getCoe",
method: "get",
});
}

20
src/assets/styles/bigScreen.scss

@ -749,6 +749,26 @@
// 首页 // 首页
.project-data { .project-data {
margin: 0.16rem 0 !important; margin: 0.16rem 0 !important;
.sysBg {
border-radius: 0.08rem !important;
.sysBg-title {
padding: 0.12rem 0.16rem !important;
font-size: 0.16rem !important;
letter-spacing: 0.02rem !important;
&::before {
width: 0.03rem !important;
}
&::after {
right: 0.12rem !important;
width: 0.08rem !important;
height: 0.08rem !important;
}
}
}
} }
.form-header { .form-header {
font-size: 0.15rem !important; font-size: 0.15rem !important;

6
src/store/modules/permission.js

@ -102,11 +102,11 @@ const permission = {
// 定义要添加的多个路由对象数组 // 定义要添加的多个路由对象数组
const additionalRoutes2 = [ const additionalRoutes2 = [
{ {
path: "/monitorCenter", path: "/hrMonitorCenter",
name: "monitorCenter", name: "hrMonitorCenter",
hidden: true, hidden: true,
component: () => component: () =>
import("@/views/heatRecoverySys/deviceMonitor/monitorCenter"), import("@/views/heatRecoverySys/deviceMonitor/hrMonitorCenter"),
meta: { title: "系统监测", icon: "screen" }, meta: { title: "系统监测", icon: "screen" },
}, },
// 可以继续添加更多路由对象 // 可以继续添加更多路由对象

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

@ -1,102 +1,37 @@
<template> <template>
<div class="monitor" v-loading="loading"> <div class="monitor" v-loading="loading">
<div class="monitor-top"> <div class="monitor-top">
<img <img class="title-left" src="../../../assets/images/title-left.png" alt="" />
class="title-left" <img class="title-center" @click="goSys" src="../../../assets/images/title-center.png" alt="" />
src="../../../assets/images/title-left.png" <img class="title-right" src="../../../assets/images/title-right.png" alt="" />
alt=""
/>
<img
class="title-center"
@click="goSys"
src="../../../assets/images/title-center.png"
alt=""
/>
<img
class="title-right"
src="../../../assets/images/title-right.png"
alt=""
/>
<div class="sys-title" @click="goSys">铭汉高效冷源站管理系统</div> <div class="sys-title" @click="goSys">铭汉高效冷源站管理系统</div>
<!-- logo --> <!-- logo -->
<img src="../../../assets/images/logo-3.png" class="sys-logo" alt="" /> <img src="../../../assets/images/logo-3.png" class="sys-logo" alt="" />
<div class="nowTime">{{ formattedDate }}</div> <div class="nowTime">{{ formattedDate }}</div>
<div class="monitor-time">已监测时长:{{ dayData }}</div> <div class="monitor-time">已监测时长:{{ dayData }}</div>
<img <img class="icon_warning" src="../../../assets/images/warning.png" title="报警记录" @click="goWarning"
class="icon_warning" v-if="isShowWarning" alt="" />
src="../../../assets/images/warning.png" <img class="icon_home" src="../../../assets/images/icon_home.png" title="首页" @click="goSys" alt="" />
title="报警记录" <img class="back-icon" src="../../../assets/images/back-icon.png" title="返回" @click="goBack" alt="" />
@click="goWarning"
v-if="isShowWarning"
alt=""
/>
<img
class="icon_home"
src="../../../assets/images/icon_home.png"
title="首页"
@click="goSys"
alt=""
/>
<img
class="back-icon"
src="../../../assets/images/back-icon.png"
title="返回"
@click="goBack"
alt=""
/>
</div> </div>
<div class="host-detail"> <div class="host-detail">
<div class="detail-top"> <div class="detail-top">
<div class="detail-top-left"> <div class="detail-top-left">
<img <img class="host-img1" src="../../../assets/images/host-img3.png" alt="" v-if="isMagnetic === 'true'" />
class="host-img1" <img class="host-img1" src="../../../assets/images/host-img6.png" alt="" v-if="deviceName === '1号螺杆机'" />
src="../../../assets/images/host-img3.png" <img class="host-img1" src="../../../assets/images/host-img4.png" alt="" v-if="deviceName === '2号离心机'" />
alt=""
v-if="isMagnetic === 'true'"
/>
<img
class="host-img1"
src="../../../assets/images/host-img6.png"
alt=""
v-if="deviceName === '1号螺杆机'"
/>
<img
class="host-img1"
src="../../../assets/images/host-img4.png"
alt=""
v-if="deviceName === '2号离心机'"
/>
<div class="host-name">{{ deviceName }}</div> <div class="host-name">{{ deviceName }}</div>
<!-- 冷凝器蒸发器压力--> <!-- 冷凝器蒸发器压力-->
<div class="outIn"> <div class="outIn">
<!-- <div class="outIn-li in1">
<svg-icon slot="prefix" icon-class="arrow" class="arrow" />
<div class="kpa">冷凝器压力:{{ condenserPre }}kpa</div>
</div>
<div class="outIn-li out1">
<svg-icon slot="prefix" icon-class="arrow" class="arrow" />
<div class="kpa">蒸发器压力:{{ evaporatorPre }}kpa</div>
</div> -->
<!-- <div class="outIn-li in2">
<svg-icon slot="prefix" icon-class="arrow" class="arrow" />
<div class="kpa">566.6kpa</div>
</div>
<div class="outIn-li out2">
<svg-icon slot="prefix" icon-class="arrow" class="arrow" />
<div class="kpa">566.6kpa</div>
</div> -->
</div> </div>
<!-- 运行状态 --> <!-- 运行状态 -->
<img <img src="../../../assets/images/fan-img.png" :class="{
src="../../../assets/images/fan-img.png" moveClass: hostListClass('1'),
:class="{ fanBlade: isMagnetic === 'true',
moveClass: hostListClass('1'), rightFan1: deviceName === '1号螺杆机',
fanBlade: isMagnetic === 'true', rightFan2: deviceName === '2号离心机',
rightFan1: deviceName === '1号螺杆机', }" alt="" />
rightFan2: deviceName === '2号离心机',
}"
alt=""
/>
<!-- 启停状态 --> <!-- 启停状态 -->
<div class="startClass" v-if="hostListClass('2')"></div> <div class="startClass" v-if="hostListClass('2')"></div>
<!-- 冷冻冷却水流信号 --> <!-- 冷冻冷却水流信号 -->
@ -105,63 +40,34 @@
<span>冷却水流:</span> <span>冷却水流:</span>
<span v-if="hostListClass('21')">接通</span> <span v-if="hostListClass('21')">接通</span>
<span v-else>断开</span> <span v-else>断开</span>
<span <span class="break" :class="{ connect: hostListClass('21') }"></span>
class="break"
:class="{ connect: hostListClass('21') }"
></span>
</div> </div>
<div class="water-flow-li"> <div class="water-flow-li">
<span>冷冻水流:</span> <span>冷冻水流:</span>
<span v-if="hostListClass('20')">接通</span> <span v-if="hostListClass('20')">接通</span>
<span v-else>断开</span> <span v-else>断开</span>
<span <span class="break" :class="{ connect: hostListClass('20') }"></span>
class="break"
:class="{ connect: hostListClass('20') }"
></span>
</div> </div>
</div> </div>
<div class="hostStatus"> <div class="hostStatus">
<div class="hostStatus-li"> <div class="hostStatus-li">
<span>远程启动信号:</span> <span>本地远程信号:</span>
<span class="automaticData">{{ onOffObj.curValue }}</span> <span class="automaticData" :class="onOffObj.curValue === '远程' ? 'remoteData' : 'localData'">{{
onOffObj.curValue }}</span>
</div> </div>
<div class="hostStatus-li"> <div class="hostStatus-li">
<span>运行累计时间:</span> <span>运行累计时间:</span>
<span class="timeData">{{ timeObj.curValue }}小时</span> <span class="timeData">{{ timeObj.curValue }}小时</span>
</div> </div>
<div class="hostStatus-li">
<span>实时冷冻水温度设点:</span>
<span class="dotData">{{ coldWaterSetObj.curValue }}</span>
</div>
<div class="hostStatus-li" v-if="isMagnetic === 'true'">
<span>用户冷冻水控制点:</span>
<span class="goodData">{{ coldWaterControlObj.curValue }}</span>
<!-- <span class="badData" v-else>{{ coldWaterControlObj.curValue }}</span> -->
</div>
<div class="hostStatus-li" v-if="isMagnetic === 'true'"> <div class="hostStatus-li" v-if="isMagnetic === 'true'">
<span>冷水设定值偏移:</span> <span>蒸发器出水温度:</span>
<!-- <span class="goodData">{{ offsetValuerControlObj.curValue }}</span> -->
<span class="goodData"> <span class="goodData">
<el-input <el-input v-model="evaporatorOutletWaterObj.curValue" size="mini" @keyup.enter.native="
v-model="offsetValuerControlObj.curValue" handleEnter(evaporatorOutletWaterObj, $event)
size="mini" " @input="handleInput(evaporatorOutletWaterObj.curValue)" @blur="handleBlur()">
@keyup.enter.native=" <template #suffix></template></el-input></span>
handleEnter(offsetValuerControlObj, $event)
"
@input="handleInput(offsetValuerControlObj.curValue)"
@blur="handleBlur()"
>
<template #suffix></template></el-input
></span
>
</div> </div>
<div class="hostStatus-li" v-if="isMagnetic === 'true'">
<span>最终冷冻水温度设定值:</span>
<span class="goodData">{{ finalColdWaterTemp }}</span>
</div>
<!-- <div class="hostStatus-li2" @click="openTimeSwitch">
偏移值定时设置
</div> -->
</div> </div>
<!-- 负载 --> <!-- 负载 -->
<LoadData class="loadData" :hostData="hostData"></LoadData> <LoadData class="loadData" :hostData="hostData"></LoadData>
@ -179,22 +85,15 @@
<title-img></title-img> <title-img></title-img>
</div> </div>
<div class="detail-data-bottom"> <div class="detail-data-bottom">
<div <div class="detail-data-li" v-for="(item, index) in rightHostData" :key="index">
class="detail-data-li"
v-for="(item, index) in rightHostData"
:key="index"
>
<div class="rightDot"> <div class="rightDot">
<div class="leftDot"> <div class="leftDot">
<span>{{ item.otherName }}:</span> <span>{{ item.otherName }}:</span>
<span <span :class="{
:class="{ dotData: !isSpecialValue(item.curValue),
dotData: !isSpecialValue(item.curValue), goodData: isSpecialValue(item.curValue),
goodData: isSpecialValue(item.curValue), badData: item.curValue === '故障',
badData: item.curValue === '故障', }">{{ item.curValue }}</span>
}"
>{{ item.curValue }}</span
>
<span>{{ item.unit }}</span> <span>{{ item.unit }}</span>
</div> </div>
</div> </div>
@ -210,22 +109,15 @@
<title-img></title-img> <title-img></title-img>
</div> </div>
<div class="detail-data-bottom"> <div class="detail-data-bottom">
<div <div class="detail-data-li" v-for="(subItem, subIndex) in compressorData1.list" :key="subIndex">
class="detail-data-li"
v-for="(subItem, subIndex) in compressorData1.list"
:key="subIndex"
>
<div class="rightDot"> <div class="rightDot">
<div class="leftDot"> <div class="leftDot">
<span>{{ subItem.otherName }}:</span> <span>{{ subItem.otherName }}:</span>
<span <span :class="{
:class="{ dotData: !isSpecialValue(subItem.curValue),
dotData: !isSpecialValue(subItem.curValue), goodData: isSpecialValue(subItem.curValue),
goodData: isSpecialValue(subItem.curValue), badData: subItem.curValue === '故障',
badData: subItem.curValue === '故障', }">{{ subItem.curValue }}</span>
}"
>{{ subItem.curValue }}</span
>
<span>{{ subItem.unit }}</span> <span>{{ subItem.unit }}</span>
</div> </div>
</div> </div>
@ -241,29 +133,22 @@
<title-img></title-img> <title-img></title-img>
</div> </div>
<div class="detail-data-bottom"> <div class="detail-data-bottom">
<div <div class="detail-data-li" v-for="(subItem, subIndex) in compressorData2.list" :key="subIndex">
class="detail-data-li"
v-for="(subItem, subIndex) in compressorData2.list"
:key="subIndex"
>
<div class="rightDot"> <div class="rightDot">
<div class="leftDot"> <div class="leftDot">
<span>{{ subItem.otherName }}:</span> <span>{{ subItem.otherName }}:</span>
<span <span :class="{
:class="{ dotData: !isSpecialValue(subItem.curValue),
dotData: !isSpecialValue(subItem.curValue), goodData: isSpecialValue(subItem.curValue),
goodData: isSpecialValue(subItem.curValue), badData: subItem.curValue === '故障',
badData: subItem.curValue === '故障', }">{{ subItem.curValue }}</span>
}"
>{{ subItem.curValue }}</span
>
<span>{{ subItem.unit }}</span> <span>{{ subItem.unit }}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="detail-data compressor"> <!-- <div class="detail-data compressor">
<div class="detail-data-top"> <div class="detail-data-top">
<title-img></title-img> <title-img></title-img>
<div class="choice"> <div class="choice">
@ -272,38 +157,25 @@
<title-img></title-img> <title-img></title-img>
</div> </div>
<div class="detail-data-bottom"> <div class="detail-data-bottom">
<div <div class="detail-data-li" v-for="(subItem, subIndex) in compressorData3.list" :key="subIndex">
class="detail-data-li"
v-for="(subItem, subIndex) in compressorData3.list"
:key="subIndex"
>
<div class="rightDot"> <div class="rightDot">
<div class="leftDot"> <div class="leftDot">
<span>{{ subItem.otherName }}:</span> <span>{{ subItem.otherName }}:</span>
<span <span :class="{
:class="{ dotData: !isSpecialValue(subItem.curValue),
dotData: !isSpecialValue(subItem.curValue), goodData: isSpecialValue(subItem.curValue),
goodData: isSpecialValue(subItem.curValue), badData: subItem.curValue === '故障',
badData: subItem.curValue === '故障', }">{{ subItem.curValue }}</span>
}"
>{{ subItem.curValue }}</span
>
<span>{{ subItem.unit }}</span> <span>{{ subItem.unit }}</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
<!-- 定时开关内容 --> <!-- 定时开关内容 -->
<el-dialog <el-dialog title="偏移值定时设置" :visible.sync="isOpenTimeSwitch" append-to-body width="800px" class="custom-dialog">
title="偏移值定时设置"
:visible.sync="isOpenTimeSwitch"
append-to-body
width="800px"
class="custom-dialog"
>
<div class="dialog-content"> <div class="dialog-content">
<div class="device-container" v-loading="loading"> <div class="device-container" v-loading="loading">
<div class="device-li"> <div class="device-li">
@ -315,93 +187,52 @@
<div class="device-name">最终设定值</div> <div class="device-name">最终设定值</div>
<div class="device-name">启动状态</div> <div class="device-name">启动状态</div>
</div> </div>
<div <div class="device-li" v-for="(item, index) in delayList" :key="index"
class="device-li" :class="{ highlight: item.name.includes(currentWeekday) }">
v-for="(item, index) in delayList"
:key="index"
:class="{ highlight: item.name.includes(currentWeekday) }"
>
<div class="device-name">{{ item.name }}</div> <div class="device-name">{{ item.name }}</div>
<div class="device-name"> <div class="device-name">
<el-form @submit.native.prevent> <el-form @submit.native.prevent>
<el-form-item> <el-form-item>
<el-input <el-input size="mini" v-model="item.delayOpenHour" @keyup.enter.native="
size="mini" handleSwitchEnter(item, 'openHour', $event)
v-model="item.delayOpenHour" " @input="handleSwitchInput(item, 'delayOpenHour', 'hour')"></el-input> </el-form-item></el-form>
@keyup.enter.native="
handleSwitchEnter(item, 'openHour', $event)
"
@input="handleSwitchInput(item, 'delayOpenHour', 'hour')"
></el-input> </el-form-item
></el-form>
<div class="slip">:</div> <div class="slip">:</div>
<el-form @submit.native.prevent> <el-form @submit.native.prevent>
<el-form-item> <el-form-item>
<el-input <el-input size="mini" v-model="item.delayOpenMinute" @keyup.enter.native="
size="mini" handleSwitchEnter(item, 'openMinute', $event)
v-model="item.delayOpenMinute" " @input="
@keyup.enter.native="
handleSwitchEnter(item, 'openMinute', $event)
"
@input="
handleSwitchInput(item, 'delayOpenMinute', 'minute') handleSwitchInput(item, 'delayOpenMinute', 'minute')
" "></el-input> </el-form-item></el-form>
></el-input> </el-form-item
></el-form>
</div> </div>
<div class="device-name"> <div class="device-name">
<el-form @submit.native.prevent> <el-form @submit.native.prevent>
<el-form-item> <el-form-item>
<el-input <el-input size="mini" v-model="item.delayCloseHour" @keyup.enter.native="
size="mini" handleSwitchEnter(item, 'closeHour', $event)
v-model="item.delayCloseHour" " @input="handleSwitchInput(item, 'delayCloseHour', 'hour')"></el-input></el-form-item></el-form>
@keyup.enter.native="
handleSwitchEnter(item, 'closeHour', $event)
"
@input="handleSwitchInput(item, 'delayCloseHour', 'hour')"
></el-input></el-form-item
></el-form>
<div class="slip">:</div> <div class="slip">:</div>
<el-form @submit.native.prevent> <el-form @submit.native.prevent>
<el-form-item> <el-form-item>
<el-input <el-input size="mini" v-model="item.delayCloseMinute" @keyup.enter.native="
size="mini" handleSwitchEnter(item, 'closeMinute', $event)
v-model="item.delayCloseMinute" " @input="
@keyup.enter.native="
handleSwitchEnter(item, 'closeMinute', $event)
"
@input="
handleSwitchInput(item, 'delayCloseMinute', 'minute') handleSwitchInput(item, 'delayCloseMinute', 'minute')
" "></el-input></el-form-item></el-form>
></el-input></el-form-item
></el-form>
</div> </div>
<!-- 三个值偏移值可输入 --> <!-- 三个值偏移值可输入 -->
<div class="device-name"> <div class="device-name">
<el-form @submit.native.prevent> <el-form @submit.native.prevent>
<el-form-item> <el-form-item>
<el-input <el-input size="mini" v-model="item.offsetValue" @keyup.enter.native="
size="mini" handleOffsetValueEnter(item, 'offset', $event)
v-model="item.offsetValue" " @input="handleSwitchInput(item, 'offsetValue', 'offset')"></el-input></el-form-item></el-form>
@keyup.enter.native="
handleOffsetValueEnter(item, 'offset', $event)
"
@input="handleSwitchInput(item, 'offsetValue', 'offset')"
></el-input></el-form-item
></el-form>
</div> </div>
<div class="device-name">{{ item.curValue }}</div> <div class="device-name">{{ item.curValue }}</div>
<div class="device-name">{{ item.finalOutWaterTemp }}</div> <div class="device-name">{{ item.finalOutWaterTemp }}</div>
<div class="device-name"> <div class="device-name">
<el-switch <el-switch style="display: block" active-color="#13ce66" inactive-color="#ff4949" active-text="开启"
style="display: block" inactive-text="停用" v-model="item.delayStatus" @change="handleSwitchStatus(item)">
active-color="#13ce66"
inactive-color="#ff4949"
active-text="开启"
inactive-text="停用"
v-model="item.delayStatus"
@change="handleSwitchStatus(item)"
>
</el-switch> </el-switch>
</div> </div>
</div> </div>
@ -438,15 +269,16 @@ export default {
currentDate: new Date(), currentDate: new Date(),
nowTimer: null, nowTimer: null,
deviceName: "", // deviceName: "", //
hostData: [], // hostData: [], //
allHostData: [], //
condenserPre: "", // condenserPre: "", //
evaporatorPre: "", // evaporatorPre: "", //
rightHostData: [], // rightHostData: [], //
onOffObj: {}, // onOffObj: {}, //
timeObj: {}, // timeObj: {}, //
coldWaterSetObj: {}, //
coldWaterControlObj: {}, //
offsetValuerControlObj: {}, // evaporatorOutletWaterObj: {}, //
compressorData1: [], //1 compressorData1: [], //1
compressorData2: [], compressorData2: [],
compressorData3: [], compressorData3: [],
@ -482,19 +314,8 @@ export default {
const weekDay = weekDays[this.currentDate.getDay()]; const weekDay = weekDays[this.currentDate.getDay()];
return `${year}${month}${day}${hours}:${minutes}:${seconds} ${weekDay}`; return `${year}${month}${day}${hours}:${minutes}:${seconds} ${weekDay}`;
}, },
finalColdWaterTemp() {
const coldWaterValue =
this.coldWaterControlObj.curValue === ""
? 0
: parseFloat(this.coldWaterControlObj.curValue);
const offsetValue =
this.offsetValuerControlObj.curValue === ""
? 0
: parseFloat(this.offsetValuerControlObj.curValue);
return coldWaterValue + offsetValue;
},
}, },
created() {}, created() { },
mounted() { mounted() {
this.getHostDetailsData(); this.getHostDetailsData();
this.getAlarnStatus(); this.getAlarnStatus();
@ -626,13 +447,29 @@ export default {
const isCombinedCondition3 = const isCombinedCondition3 =
Number(item.paramType) === 12 && Number(item.paramType) === 12 &&
item.otherName.includes("冷冻水偏移值设置"); item.otherName.includes("冷冻水偏移值设置");
const isCombinedCondition4 =
Number(item.paramType) === 22 &&
item.otherName.includes("本地远程");
const isCombinedCondition5 =
Number(item.paramType) === 20 &&
item.otherName.includes("蒸发器水流信号");
const isCombinedCondition6 =
Number(item.paramType) === 21 &&
item.otherName.includes("冷凝器水流信号");
const isCombinedCondition7 =
Number(item.paramType) === 14 &&
item.otherName.includes("蒸发器出水温度设置");
// false // false
return ( return (
!isSpecificParamType && !isSpecificParamType &&
!isCombinedCondition0 && !isCombinedCondition0 &&
!isCombinedCondition1 && !isCombinedCondition1 &&
!isCombinedCondition2 && !isCombinedCondition2 &&
!isCombinedCondition3 !isCombinedCondition3 &&
!isCombinedCondition4 &&
!isCombinedCondition5 &&
!isCombinedCondition6 &&
!isCombinedCondition7
); );
}); });
// ordernum // ordernum
@ -643,42 +480,19 @@ export default {
// paramType showValue // paramType showValue
if ( if (
item.paramType === "22" && item.paramType === "22" &&
item.otherName.includes("远程启动信号") item.otherName.includes("本地远程")
) { ) {
// -
// item.showValue =
// Number(item.curValue) === 0 ? "" : "";
this.onOffObj = item; this.onOffObj = item;
} else if (item.paramType === "26") { } else if (item.paramType === "26") {
// //
this.timeObj = item; this.timeObj = item;
} else if ( } else if (
item.paramType === "12" && item.paramType === "14" &&
item.otherName.includes("冷水控制设定值") item.otherName.includes("蒸发器出水温度设置")
) {
//
this.coldWaterSetObj = item;
} else if (
item.paramType === "12" &&
item.otherName.includes("用户冷水设定值")
) {
//
this.coldWaterControlObj = item;
} else if (
item.paramType === "12" &&
item.otherName.includes("冷冻水偏移值设置")
) { ) {
// //
this.offsetValuerControlObj = item; this.evaporatorOutletWaterObj = item;
// curValue
if (
this.offsetValuerControlObj.curValue !== undefined &&
!isNaN(parseFloat(this.offsetValuerControlObj.curValue))
) {
// curValue 10
this.offsetValuerControlObj.curValue =
parseInt(this.offsetValuerControlObj.curValue, 10) / 10;
}
} }
}); });
} }
@ -862,7 +676,7 @@ export default {
let input = String(item); let input = String(item);
// //
if (input === "") { if (input === "") {
this.offsetValuerControlObj.curValue = ""; this.evaporatorOutletWaterObj.curValue = "";
return; return;
} }
@ -900,7 +714,7 @@ export default {
// //
if (filteredInput === "") { if (filteredInput === "") {
this.offsetValuerControlObj.curValue = ""; this.evaporatorOutletWaterObj.curValue = "";
return; return;
} }
@ -910,12 +724,12 @@ export default {
// 0 10 // 0 10
if (!isNaN(numInput) && numInput >= 0 && numInput <= 10) { if (!isNaN(numInput) && numInput >= 0 && numInput <= 10) {
// //
this.offsetValuerControlObj.curValue = filteredInput; this.evaporatorOutletWaterObj.curValue = filteredInput;
} else { } else {
// //
this.$modal.msgWarning("只能输入0-10之间且最多一位小数的数值"); this.$modal.msgWarning("只能输入0-10之间且最多一位小数的数值");
// //
this.offsetValuerControlObj.curValue = ""; this.evaporatorOutletWaterObj.curValue = "";
} }
}, },
// //
@ -931,7 +745,7 @@ export default {
// //
event.target.blur(); event.target.blur();
this.$confirm( this.$confirm(
`确定要修改冷水设定值偏移的温度为:${item.curValue} ℃吗?`, `确定要修改蒸发器出水温度设置为:${item.curValue} ℃吗?`,
"提示", "提示",
{ {
confirmButtonText: "确定", confirmButtonText: "确定",
@ -1070,7 +884,7 @@ export default {
// //
const offsetValue = const offsetValue =
delayItem.offsetValue !== null && delayItem.offsetValue !== null &&
delayItem.offsetValue !== "" delayItem.offsetValue !== ""
? parseFloat(delayItem.offsetValue) ? parseFloat(delayItem.offsetValue)
: NaN; : NaN;
const curValue = const curValue =
@ -1285,8 +1099,7 @@ export default {
// //
handleSwitchStatus(item) { handleSwitchStatus(item) {
this.$confirm( this.$confirm(
`确定要切换"${item.name}"的状态为:${ `确定要切换"${item.name}"的状态为:${item.delayStatus ? "开启" : "停用 吗?"
item.delayStatus ? "开启" : "停用 吗?"
}`, }`,
"提示", "提示",
{ {
@ -1552,7 +1365,7 @@ export default {
.hostStatus { .hostStatus {
z-index: 10; z-index: 10;
position: absolute; position: absolute;
top: 0.6rem; top: 1rem;
left: 4.9rem; left: 4.9rem;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@ -1655,8 +1468,7 @@ export default {
width: 0.5rem; width: 0.5rem;
height: 0.5rem; height: 0.5rem;
transform-style: preserve-3d; transform-style: preserve-3d;
transform: translateX(-50%) rotateX(15deg) rotateZ(20deg) transform: translateX(-50%) rotateX(15deg) rotateZ(20deg) rotateY(40deg);
rotateY(40deg);
} }
.rightFan1 { .rightFan1 {
@ -1667,19 +1479,18 @@ export default {
width: 0.5rem; width: 0.5rem;
height: 0.5rem; height: 0.5rem;
transform-style: preserve-3d; transform-style: preserve-3d;
transform: translateX(-50%) rotateX(15deg) rotateZ(20deg) transform: translateX(-50%) rotateX(15deg) rotateZ(20deg) rotateY(40deg);
rotateY(40deg);
} }
.rightFan2 { .rightFan2 {
z-index: 10; z-index: 10;
position: absolute; position: absolute;
top: 2.4rem; top: 2.4rem;
left: 4.2rem; left: 4.2rem;
width: 0.5rem; width: 0.5rem;
height: 0.5rem; height: 0.5rem;
transform-style: preserve-3d; transform-style: preserve-3d;
transform: translateX(-50%) rotateX(15deg) rotateZ(20deg) transform: translateX(-50%) rotateX(15deg) rotateZ(20deg) rotateY(40deg);
rotateY(40deg);
} }
.moveClass { .moveClass {
@ -1713,7 +1524,7 @@ export default {
.detail-bottom { .detail-bottom {
// height: 5rem; // height: 5rem;
margin-top: 0.3rem; // margin-top: 0.3rem;
margin-left: 0.25rem; margin-left: 0.25rem;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@ -1763,28 +1574,20 @@ export default {
font-size: 0.18rem; font-size: 0.18rem;
position: relative; position: relative;
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
border-left: 0.01rem solid #217df5; border-left: 1px solid #217df5;
border-right: 0.01rem solid #217df5; border-right: 1px solid #217df5;
background-image: radial-gradient( background-image: radial-gradient(circle at left top,
circle at left top,
#217df5 0.01rem, #217df5 0.01rem,
transparent 0.01rem transparent 0.01rem),
), radial-gradient(circle at right top,
radial-gradient(
circle at right top,
#217df5 0.01rem, #217df5 0.01rem,
transparent 0.01rem transparent 0.01rem),
), radial-gradient(circle at left bottom,
radial-gradient(
circle at left bottom,
#217df5 0.01rem, #217df5 0.01rem,
transparent 0.01rem transparent 0.01rem),
), radial-gradient(circle at right bottom,
radial-gradient(
circle at right bottom,
#217df5 0.01rem, #217df5 0.01rem,
transparent 0.01rem transparent 0.01rem);
);
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: left top, right top, left bottom, right bottom; background-position: left top, right top, left bottom, right bottom;
} }
@ -1795,21 +1598,21 @@ export default {
position: absolute; position: absolute;
left: 0; left: 0;
right: 0; right: 0;
height: 0.01rem; height: 1px;
background-image: linear-gradient( background-image: linear-gradient(to right,
to right, #217df5 0%,
#217df5 0%, rgba(41, 128, 185, 0) 50%,
rgba(41, 128, 185, 0) 50%, #217df5 100%);
#217df5 100%
);
} }
.detail-data-li::before { .detail-data-li::before {
top: 0; top: 0;
transform: scaleY(0.5);
} }
.detail-data-li::after { .detail-data-li::after {
bottom: 0; bottom: 0;
transform: scaleY(0.5);
} }
.rightDot { .rightDot {
@ -1827,6 +1630,24 @@ export default {
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
span {
text-align: center;
&:first-child {
flex: 2;
text-align: left;
}
&:nth-child(2) {
flex: 1;
}
&:last-child {
flex: 0.6;
text-align: right;
}
}
} }
.rightDot::before { .rightDot::before {
@ -1838,11 +1659,9 @@ export default {
height: 0.06rem; height: 0.06rem;
background-color: #217df5; background-color: #217df5;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9); box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient( background-image: radial-gradient(circle at 30% 30%,
circle at 30% 30%, rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 70%);
rgba(255, 255, 255, 0) 70%
);
border-radius: 50%; border-radius: 50%;
z-index: 10; z-index: 10;
} }
@ -1856,11 +1675,9 @@ export default {
height: 0.06rem; height: 0.06rem;
background-color: #217df5; background-color: #217df5;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9); box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient( background-image: radial-gradient(circle at 30% 30%,
circle at 30% 30%, rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 70%);
rgba(255, 255, 255, 0) 70%
);
border-radius: 50%; border-radius: 50%;
z-index: 10; z-index: 10;
} }
@ -1876,11 +1693,9 @@ export default {
border-radius: 50%; border-radius: 50%;
z-index: 10; z-index: 10;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9); box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient( background-image: radial-gradient(circle at 30% 30%,
circle at 30% 30%, rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 70%);
rgba(255, 255, 255, 0) 70%
);
} }
.leftDot::after { .leftDot::after {
@ -1893,11 +1708,9 @@ export default {
background-color: #217df5; background-color: #217df5;
z-index: 10; z-index: 10;
box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9); box-shadow: 0 0 0.1rem 0.02rem rgba(33, 125, 245, 0.9);
background-image: radial-gradient( background-image: radial-gradient(circle at 30% 30%,
circle at 30% 30%, rgba(255, 255, 255, 0.8) 0%,
rgba(255, 255, 255, 0.8) 0%, rgba(255, 255, 255, 0) 70%);
rgba(255, 255, 255, 0) 70%
);
border-radius: 50%; border-radius: 50%;
} }
} }
@ -1909,9 +1722,10 @@ export default {
} }
.hostparams { .hostparams {
width: 7rem; width: 10rem;
.detail-data-bottom { .detail-data-bottom {
// padding-left: 0.5rem; // padding-left: 0.5rem;
.detail-data-li { .detail-data-li {
// width: 3.2rem; // width: 3.2rem;
@ -1922,9 +1736,10 @@ export default {
} }
.compressor { .compressor {
width: 3.5rem; width: 4.5rem;
.detail-data-bottom { .detail-data-bottom {
// padding-left: 0.75rem; // padding-left: 0.75rem;
.detail-data-li { .detail-data-li {
// width: 3.4rem; // width: 3.4rem;
@ -1981,6 +1796,16 @@ export default {
color: #da7b10; color: #da7b10;
} }
/** 本地信号颜色(橙色) */
.localData {
color: #da7b10;
}
/** 远程信号颜色(青蓝色) */
.remoteData {
color: #68ff5a;
}
.timeData { .timeData {
font-weight: bold; font-weight: bold;
margin: 0 0.06rem; margin: 0 0.06rem;
@ -1988,31 +1813,32 @@ export default {
} }
</style> </style>
<style scoped> <style scoped>
.goodData >>> .el-input--mini { .goodData>>>.el-input--mini {
font-size: 0.16rem !important; font-size: 0.16rem !important;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
} }
.goodData >>> .el-input { .goodData>>>.el-input {
width: 1rem !important; width: 1rem !important;
} }
.goodData >>> .el-input--suffix .el-input__inner {
.goodData>>>.el-input--suffix .el-input__inner {
padding-right: 0.3rem !important; padding-right: 0.3rem !important;
} }
.goodData >>> .el-input--mini .el-input__inner { .goodData>>>.el-input--mini .el-input__inner {
height: 0.28rem !important; height: 0.28rem !important;
line-height: 20.28rem !important; line-height: 20.28rem !important;
} }
.goodData >>> .el-input__inner { .goodData>>>.el-input__inner {
font-weight: bold; font-weight: bold;
box-shadow: none !important; box-shadow: none !important;
} }
.goodData >>> .el-input__suffix { .goodData>>>.el-input__suffix {
font-weight: bold; font-weight: bold;
right: 0.05rem !important; right: 0.05rem !important;
height: 100% !important; height: 100% !important;
@ -2032,7 +1858,7 @@ export default {
margin: 0 5px; margin: 0 5px;
} }
.device-name >>> .el-form { .device-name>>>.el-form {
width: 50px !important; width: 50px !important;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@ -2041,11 +1867,11 @@ export default {
flex-wrap: nowrap; flex-wrap: nowrap;
} }
.device-name >>> .el-form-item { .device-name>>>.el-form-item {
margin-bottom: 0 !important; margin-bottom: 0 !important;
} }
.device-name >>> .el-input { .device-name>>>.el-input {
width: 50px !important; width: 50px !important;
} }

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

@ -70,17 +70,17 @@
<div class="weather-li"> <div class="weather-li">
<span>全年EER</span> <span>全年EER</span>
<span class="deepColor">{{ performanceObj.yearEER }}</span> <span class="deepColor">{{ performanceObj.yearEER }}</span>
<span>kw</span> <span>kwh/kwh</span>
</div> </div>
<div class="weather-li"> <div class="weather-li">
<span>全年用电</span> <span>全年用电</span>
<span class="deepColor">{{ performanceObj.yearPower }}</span> <span class="deepColor">{{ performanceObj.yearPower }}</span>
<span>kw/h</span> <span>kwh</span>
</div> </div>
<div class="weather-li"> <div class="weather-li">
<span>全年产冷</span> <span>全年产冷</span>
<span class="deepColor">{{ performanceObj.yearCold }}</span> <span class="deepColor">{{ performanceObj.yearCold }}</span>
<span>kw</span> <span>kwh</span>
</div> </div>
</div> </div>
</div> </div>
@ -3709,7 +3709,7 @@ export default {
.performance { .performance {
position: absolute; position: absolute;
top: 6.4rem !important; top: 6.4rem !important;
right: -1rem !important; right: -1.3rem !important;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start; align-items: flex-start;
@ -3718,7 +3718,7 @@ export default {
} }
.perdformance-bg { .perdformance-bg {
width: 2.9rem; width: 3.2rem;
z-index: 10; z-index: 10;
display: flex; display: flex;
flex-direction: column; flex-direction: column;

798
src/views/components/sysEnergy.vue

@ -0,0 +1,798 @@
<template>
<div class="sys_content">
<div class="sys_charts" ref="sys_charts"></div>
<div class="score">
<div class="excellent">优秀</div>
<div class="good">良好</div>
<div class="bad"></div>
<div class="improve">需要改进</div>
</div>
</div>
</template>
<script>
import { getCoeData } from "@/api/index";
import * as echarts from "echarts";
export default {
data() {
return {
data1: "0",
data2: "0",
data3: "0",
data4: "0",
data5: "0",
chartInstance2: null,
option2: {},
}
},
mounted() {
this.getCoe()
this.initChart2();
this.screenAdapter2();
window.addEventListener("resize", this.screenAdapter2);
// this.nowData()
},
destroyed() {
//mounted
window.removeEventListener("resize", this.screenAdapter2);
},
methods: {
//
getGaugeColor(value, min, max, colorRanges) {
// value
const numValue = Number(value);
if (isNaN(numValue) || numValue <= min) {
// 0
return colorRanges[0][1];
}
// [0, 1]
const percent = (numValue - min) / (max - min);
//
for (let i = 0; i < colorRanges.length; i++) {
if (percent <= colorRanges[i][0]) {
return colorRanges[i][1];
}
}
//
return colorRanges[colorRanges.length - 1][1];
},
//chartInstance2 线
initChart2() {
const titleFontSize = this.$refs.sys_charts.offsetWidth / 180;
this.chartInstance2 = echarts.init(this.$refs.sys_charts);
this.option2 = {
tooltip: { //
formatter: "{a} <br/>{b} : {c}"
},
// cavas
// backgroundColor: "#f5f5f5",
series: [
{ //
name: '实时EER系数',
type: 'gauge',
radius: "65%", // :number, string , 75%
center: ["48%", "40%"],
startAngle: 180,
endAngle: 0,
clockWise: true,
min: 0,
max: 15,
splitNumber: 4, // , 10
axisTick: { // (线)
distance: titleFontSize * 0.2,
length: titleFontSize,
show: true, // (线), true
splitNumber: 5, // 线, 5
lineStyle: { // 线
color: "auto", //线, #eee
opacity: 1, // 0 1 0
width: titleFontSize * 0.1,
type: "solid", //线, solid dashed,dotted
// shadowBlur: 10, //() shadowColor,shadowOffsetX, shadowOffsetY
// shadowColor: "#fff", //color
},
},
pointer: {
length: '40%', //
width: titleFontSize * 0.4,
offsetCenter: ['0', '-20%'], //
itemStyle: {
color: 'auto'// 线
}
},
axisLine: { // 线(线)
show: true, // 线(线), true
lineStyle: { // 线
width: titleFontSize,
color: [ // 线
[0.35, '#ffb219'],
[0.38, '#00be97'],
[1, '#208fff'],
]
}
},
splitLine: { // 线
distance: titleFontSize * 0.35,
show: true, // 线, true
length: titleFontSize,
lineStyle: { // 线
color: "auto", //线, #eee
opacity: 1, // 0 1 0
width: titleFontSize * 0.2,
type: "solid", //线, solid dashed,dotted
// shadowBlur: 10, //() shadowColor,shadowOffsetX, shadowOffsetY
// shadowColor: "#fff", //color
},
},
axisLabel: {
show: true, // , true
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5,
color: 'inherit',
},
title: {
color: '#ffffff',
fontSize: titleFontSize * 2,
offsetCenter: ['-30%', '20%'],//
},
detail: {
valueAnimation: true,
animationDuration: 2000,
color: '#c5fff3',
fontSize: titleFontSize * 2,
offsetCenter: ['28%', '20%'], //
},
data: [{
value: 0,
name: '主机'
}]
},
{//
name: '实时EER系数',
type: 'gauge',
radius: "65%",
center: ["48%", "90%"],
startAngle: 180,
endAngle: 0,
clockWise: true,
min: 0,
max: 120,
splitNumber: 4,
axisTick: {
distance: titleFontSize * 0.2,
show: true,
splitNumber: 5,
length: titleFontSize,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.1,
type: "solid",
},
},
pointer: {
length: '40%',
width: titleFontSize * 0.4, //
offsetCenter: [0, '-25%'],
itemStyle: {
color: 'auto'
}
},
axisLine: {
show: true,
lineStyle: {
width: titleFontSize,
color: [
[0.407, '#ffb219'],
[0.446, '#00be97'],
[1, '#208fff'],
]
}
},
splitLine: {
distance: titleFontSize * 0.35,
show: true,
length: titleFontSize,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.2,
type: "solid",
}
},
axisLabel: {
show: true,
fontSize: titleFontSize * 1.5, //线
distance: titleFontSize * 1.5,
color: 'inherit',
},
title: {
fontSize: titleFontSize * 2,
offsetCenter: ['-33%', '20%'],
color: '#ffffff'
},
detail: {
valueAnimation: true,
animationDuration: 2000,
color: '#c5fff3',
fontSize: titleFontSize * 2,
offsetCenter: ['28%', '20%'], //
},
data: [{
value: 0,
name: "冷却塔"
}]
},
{//
name: '实时EER系数',
type: 'gauge',
detail: { formatter: '{value}' },
radius: "90%",
center: ["15%", "55%"],
startAngle: 225,
endAngle: -45,
clockWise: true,
min: 0,
max: 10,
splitNumber: 4,
axisTick: {
distance: titleFontSize * 0.4,
show: true,
splitNumber: 5,
length: titleFontSize * 1.2,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.2,
type: "solid",
},
},
axisLabel: {
color: 'inherit',
fontSize: titleFontSize * 1.8,
distance: titleFontSize * 3,
},
pointer: {
width: titleFontSize * 0.6,
itemStyle: {
color: 'auto'
}
},
axisLine: {
show: true,
lineStyle: {
width: titleFontSize * 1.6,
color: [
[0.35, '#ee5e5e'],
[0.415, '#ffb219'],
[0.5, '#00be97'],
[1, '#208fff'],
],
}
},
splitLine: {
distance: titleFontSize * 0.35,
show: true,
length: titleFontSize * 2,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.2,
type: "solid",
}
},
title: {
fontSize: titleFontSize * 2.6,
color: '#ffffff',
offsetCenter: ['-25%', '90%'],//
},
detail: {
valueAnimation: true,
animationDuration: 2000,
color: '#c5fff3',
fontSize: titleFontSize * 2.6,
offsetCenter: ['35%', '90%'], //
},
data: [{
value: 0,
name: '系统EER',
}]
},
{//
name: '实时EER系数',
type: 'gauge',
radius: "65%",
center: ["75%", "40%"],
startAngle: 180,
endAngle: 0,
clockWise: true,
min: 0,
max: 100,
splitNumber: 4,
axisTick: {
distance: titleFontSize * 0.2,
show: true,
splitNumber: 5,
length: titleFontSize,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.1,
type: "solid",
},
},
pointer: {
length: '40%',
width: titleFontSize * 0.4, //
offsetCenter: [0, '-20%'],
// width: 3.5, //
itemStyle: {
color: 'auto'
}
},
axisLine: {
show: true,
lineStyle: {
width: titleFontSize,
color: [
[0.417, '#ffb219'],
[0.459, '#00be97'],
[1, '#208fff'],
]
}
},
splitLine: {
show: true,
distance: titleFontSize * 0.35,
length: titleFontSize,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.2,
type: "solid",
}
},
axisLabel: {
show: true,
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5,
color: 'inherit',
},
title: {
fontSize: titleFontSize * 2,
offsetCenter: ['-33%', '20%'],
color: '#ffffff'
},
detail: {
valueAnimation: true,
animationDuration: 2000,
color: '#c5fff3',
fontSize: titleFontSize * 2,
offsetCenter: ['28%', '20%'], //
},
data: [{
value: 0,
name: '冷冻泵'
}]
},
{//
name: '实时EER系数',
type: 'gauge',
radius: "65%",
center: ["75%", "90%"],
startAngle: 180,
endAngle: 0,
clockWise: true,
min: 0,
max: 100,
splitNumber: 4,
axisTick: {
distance: titleFontSize * 0.2,
show: true,
splitNumber: 5,
length: titleFontSize,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.1,
type: "solid",
},
},
pointer: {
length: '40%',
width: titleFontSize * 0.4,//
offsetCenter: [0, '-20%'],
itemStyle: {
color: 'auto'
}
},
axisLine: {
show: true,
lineStyle: {
width: titleFontSize,
color: [
[0.417, '#ffb219'],
[0.459, '#00be97'],
[1, '#208fff'],
]
}
},
splitLine: {
distance: titleFontSize * 0.35,
show: true,
length: titleFontSize,
lineStyle: {
color: "auto",
opacity: 1,
width: titleFontSize * 0.2,
type: "solid",
}
},
axisLabel: {
show: true,
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5,
color: 'inherit',
},
title: {
fontSize: titleFontSize * 2,
offsetCenter: ['-33%', '20%'],
color: '#ffffff'
},
detail: {
valueAnimation: true,
animationDuration: 2000,
color: '#c5fff3',
fontSize: titleFontSize * 2,
offsetCenter: ['28%', '20%'], //
},
data: [{
value: 0,
name: "冷却泵"
}]
}
]
};
//
this.chartInstance2.setOption(this.option2, true);
},
//
nowData() {//option.series[0].data[0].value使random()
const v0 = (Math.random() * 7).toFixed(2);
const v1 = (Math.random() * 10).toFixed(2);
const v2 = (Math.random() * 2).toFixed(2);
const v3 = (Math.random() * 2).toFixed(2);
const v4 = (Math.random() * 10).toFixed(2);
// detail
const color0 = this.getGaugeColor(v0, 0, 15, [[0.35, '#ffb219'], [0.38, '#00be97'], [1, '#208fff']]);
const color1 = this.getGaugeColor(v1, 0, 120, [[0.407, '#ffb219'], [0.446, '#00be97'], [1, '#208fff']]);
const color2 = this.getGaugeColor(v2, 0, 10, [[0.35, '#ee5e5e'], [0.415, '#ffb219'], [0.5, '#00be97'], [1, '#208fff']]);
const color3 = this.getGaugeColor(v3, 0, 100, [[0.417, '#ffb219'], [0.459, '#00be97'], [1, '#208fff']]);
const color4 = this.getGaugeColor(v4, 0, 100, [[0.417, '#ffb219'], [0.459, '#00be97'], [1, '#208fff']]);
// 使 merge detail.color
this.chartInstance2.setOption({
series: [
{ detail: { color: color0 }, data: [{ value: v0 }] },
{ detail: { color: color1 }, data: [{ value: v1 }] },
{ detail: { color: color2 }, data: [{ value: v2 }] },
{ detail: { color: color3 }, data: [{ value: v3 }] },
{ detail: { color: color4 }, data: [{ value: v4 }] },
]
});
setInterval(this.nowData, 100000);
this.clear();
},
clear() {
clearInterval(this.nowData);
this.nowData = null;
},
screenAdapter2() {
const titleFontSize = this.$refs.sys_charts.offsetWidth / 180;
const adapterOption = {
series: [
{ //
name: '实时EER系数',
type: 'gauge',
axisTick: { // (线)
distance: titleFontSize * 0.2, //线
length: titleFontSize, // 线, 8
lineStyle: { // 线
width: titleFontSize * 0.1, //线, 1
},
},
pointer: {
width: titleFontSize * 0.4, //
},
axisLine: { // 线(线)
lineStyle: { // 线
width: titleFontSize, //线, 30
}
},
splitLine: { // 线
distance: titleFontSize * 0.35, //线
length: titleFontSize, // 线线, 30
lineStyle: { // 线
width: titleFontSize * 0.2, //线, 2
},
},
axisLabel: {
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5, // 线, 5
},
title: {
fontSize: titleFontSize * 2,
},
detail: {
fontSize: titleFontSize * 2,
},
},
{ //
name: '实时EER系数',
type: 'gauge',
axisTick: { // (线)
distance: titleFontSize * 0.2, //线
length: titleFontSize, // 线, 8
lineStyle: { // 线
width: titleFontSize * 0.1, //线, 1
},
},
pointer: {
width: titleFontSize * 0.4, //
},
axisLine: { // 线(线)
lineStyle: { // 线
width: titleFontSize, //线, 30
}
},
splitLine: { // 线
distance: titleFontSize * 0.35, //线
length: titleFontSize, // 线线, 30
lineStyle: { // 线
width: titleFontSize * 0.2, //线, 2
},
},
axisLabel: {
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5, // 线, 5
},
title: {
fontSize: titleFontSize * 2,
},
detail: {
fontSize: titleFontSize * 2,
},
},
{ //
name: '实时EER系数',
type: 'gauge',
axisTick: { // (线)
distance: titleFontSize * 0.4, //线
length: titleFontSize * 1.2, // 线, 8
lineStyle: { // 线
width: titleFontSize * 0.2, //线, 1
},
},
pointer: {
width: titleFontSize * 0.6, //
},
axisLine: { // 线(线)
lineStyle: { // 线
width: titleFontSize * 1.6, //线, 30
}
},
splitLine: { // 线
distance: titleFontSize * 0.35, //线
length: titleFontSize * 2, // 线线, 30
lineStyle: { // 线
width: titleFontSize * 0.2, //线, 2
},
},
axisLabel: {
fontSize: titleFontSize * 1.8,
distance: titleFontSize * 3, // 线, 5
},
title: {
fontSize: titleFontSize * 2.6,
},
detail: {
fontSize: titleFontSize * 2.6,
},
},
{ //
name: '实时EER系数',
type: 'gauge',
axisTick: { // (线)
distance: titleFontSize * 0.2, //线
length: titleFontSize, // 线, 8
lineStyle: { // 线
width: titleFontSize * 0.1, //线, 1
},
},
pointer: {
width: titleFontSize * 0.4, //
},
axisLine: { // 线(线)
lineStyle: { // 线
width: titleFontSize, //线, 30
}
},
splitLine: { // 线
distance: titleFontSize * 0.35, //线
length: titleFontSize, // 线线, 30
lineStyle: { // 线
width: titleFontSize * 0.2, //线, 2
},
},
axisLabel: {
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5, // 线, 5
},
title: {
fontSize: titleFontSize * 2,
},
detail: {
fontSize: titleFontSize * 2,
},
},
{ //
name: '实时EER系数',
type: 'gauge',
axisTick: { // (线)
distance: titleFontSize * 0.2, //线
length: titleFontSize, // 线, 8
lineStyle: { // 线
width: titleFontSize * 0.1, //线, 1
},
},
pointer: {
width: titleFontSize * 0.4, //
},
axisLine: { // 线(线)
lineStyle: { // 线
width: titleFontSize, //线, 30
}
},
splitLine: { // 线
distance: titleFontSize * 0.35, //线
length: titleFontSize, // 线线, 30
lineStyle: { // 线
width: titleFontSize * 0.2, //线, 2
},
},
axisLabel: {
fontSize: titleFontSize * 1.5,
distance: titleFontSize * 1.5, // 线, 5
},
title: {
fontSize: titleFontSize * 2,
},
detail: {
fontSize: titleFontSize * 2,
},
},]
};
this.chartInstance2.setOption(adapterOption);
this.chartInstance2.resize();
},
//
getCoe() {
getCoeData().then((res) => {
console.log("系统系数返回", res)
if (res.code == 200) {
this.data1 = res.rows[0].sysCoe || this.data1;
this.data2 = res.rows[0].chillerCoe || this.data2;
this.data3 = res.rows[0].chillPumpCoe || this.data3;
this.data4 = res.rows[0].coolPumpCoe || this.data4;
this.data5 = res.rows[0].towerCoe || this.data5;
//
const color0 = this.getGaugeColor(this.data2, 0, 15, [[0.35, '#ffb219'], [0.38, '#00be97'], [1, '#208fff']]);
this.option2.series[0].data[0].value = this.data2;
this.option2.series[0].detail.color = color0;
//
const color1 = this.getGaugeColor(this.data5, 0, 120, [[0.407, '#ffb219'], [0.446, '#00be97'], [1, '#208fff']]);
this.option2.series[1].data[0].value = this.data5;
this.option2.series[1].detail.color = color1;
// EER
const color2 = this.getGaugeColor(this.data1, 0, 10, [[0.35, '#ee5e5e'], [0.415, '#ffb219'], [0.5, '#00be97'], [1, '#208fff']]);
this.option2.series[2].data[0].value = this.data1;
this.option2.series[2].detail.color = color2;
//
const color3 = this.getGaugeColor(this.data3, 0, 100, [[0.417, '#ffb219'], [0.459, '#00be97'], [1, '#208fff']]);
this.option2.series[3].data[0].value = this.data3;
this.option2.series[3].detail.color = color3;
//
const color4 = this.getGaugeColor(this.data4, 0, 100, [[0.417, '#ffb219'], [0.459, '#00be97'], [1, '#208fff']]);
this.option2.series[4].data[0].value = this.data4;
this.option2.series[4].detail.color = color4;
// 使 merge detail.color
this.chartInstance2.setOption({
series: [
{ detail: { color: color0 }, data: [{ value: this.data2, name: '主机' }] },
{ detail: { color: color1 }, data: [{ value: this.data5, name: '冷却塔' }] },
{ detail: { color: color2 }, data: [{ value: this.data1, name: '系统EER' }] },
{ detail: { color: color3 }, data: [{ value: this.data3, name: '冷冻泵' }] },
{ detail: { color: color4 }, data: [{ value: this.data4, name: '冷却泵' }] },
]
});
}
})
},
}
}
</script>
<style lang="scss" scoped>
.sys_content {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: flex-start;
width: 100%;
height:3rem;
padding: 20px;
.sys_charts {
width: 90%;
height: 2.5rem;
margin-bottom: -0.9rem;
}
.score {
width: 10%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: center;
font-size: 0.18rem;
color: #ffffff;
margin: 10px;
.excellent,
.good,
.bad,
.improve {
display: flex;
flex-direction: row;
align-items: center;
margin-bottom: 0.1rem;
white-space: nowrap;
}
.excellent::before,
.good::before,
.bad::before,
.improve::before {
display: block;
content: '';
width: 0.15rem;
height: 0.14rem;
margin-right: 0.16rem;
}
.excellent::before {
background-color: #208fff;
}
.good::before {
background-color: #00be97;
}
.bad::before {
background-color: #ffb219;
}
.improve::before {
background-color: #ee5e5e;
}
}
}
</style>

0
src/views/heatRecoverySys/deviceMonitor/monitorCenter.vue → src/views/heatRecoverySys/deviceMonitor/hrMonitorCenter.vue

2
src/views/heatRecoverySys/deviceMonitor/index.vue

@ -11,7 +11,7 @@ export default {
toPage() { toPage() {
console.log("需要跳转的"); console.log("需要跳转的");
// //
this.$router.push("/monitorCenter"); this.$router.push("/hrMonitorCenter");
}, },
}, },
}; };

440
src/views/index.vue

@ -5,42 +5,25 @@
<div class="special-title">项目简介</div> <div class="special-title">项目简介</div>
</div> </div>
<div class="project-all"> <div class="project-all">
<img <img class="project-img" :src="imgUrl + projectObj.logo" @click="showDialog" alt="Base64 Image" />
class="project-img"
:src="imgUrl + projectObj.logo"
@click="showDialog"
alt="Base64 Image"
/>
<div class="project-li"> <div class="project-li">
<div class="list-con"> <div class="list-con">
<div class="project-left"> <div class="project-left">
<img <img class="left-icon" src="../assets/images/project-icon1.png" alt="" />
class="left-icon"
src="../assets/images/project-icon1.png"
alt=""
/>
<div class="project-name">项目名称</div> <div class="project-name">项目名称</div>
</div> </div>
<div class="project-right">{{ projectObj.proName }}</div> <div class="project-right">{{ projectObj.proName }}</div>
</div> </div>
<div class="list-con"> <div class="list-con">
<div class="project-left"> <div class="project-left">
<img <img class="left-icon" src="../assets/images/project-icon2.png" alt="" />
class="left-icon"
src="../assets/images/project-icon2.png"
alt=""
/>
<div class="project-name">建筑面积</div> <div class="project-name">建筑面积</div>
</div> </div>
<div class="project-right">{{ projectObj.buildingArea }}</div> <div class="project-right">{{ projectObj.buildingArea }}</div>
</div> </div>
<div class="list-con"> <div class="list-con">
<div class="project-left"> <div class="project-left">
<img <img class="left-icon" src="../assets/images/project-icon3.png" alt="" />
class="left-icon"
src="../assets/images/project-icon3.png"
alt=""
/>
<div class="project-name">运营地址</div> <div class="project-name">运营地址</div>
</div> </div>
<div class="project-right">{{ projectObj.proAddr }}</div> <div class="project-right">{{ projectObj.proAddr }}</div>
@ -49,11 +32,7 @@
<div class="project-li"> <div class="project-li">
<div class="list-con"> <div class="list-con">
<div class="project-left"> <div class="project-left">
<img <img class="left-icon" src="../assets/images/project-icon3.png" alt="" />
class="left-icon"
src="../assets/images/project-icon3.png"
alt=""
/>
<div class="project-name">项目运行开始时间</div> <div class="project-name">项目运行开始时间</div>
</div> </div>
<div class="project-right">{{ projectObj.operateStartTime }}</div> <div class="project-right">{{ projectObj.operateStartTime }}</div>
@ -61,185 +40,139 @@
</div> </div>
</div> </div>
</div> </div>
<div class="project-data"> <div class=" special-div" style="width: 100%;margin-top: 20px;">
<div class="special-div" style="width: 49.4%"> <div class="special-top">
<div class="special-top"> <div class="special-title">中央空调冷源系统(实时EER系数)</div>
<div class="special-title">出水温度</div>
</div>
<div class="overview">
<div class="overview-li" @click="goEnergy">
<div>离心机高温出水温度</div>
<div
class="overview-details"
v-html="getTempDisplay('离心机高温出水温度', outWaterTemperature)"
></div>
</div>
<div class="overview-li" @click="goEnergy">
<div>中温换热出水温度</div>
<div
class="overview-details"
v-html="getTempDisplay('中温换热出水温度', outWaterTemperature)"
></div>
</div>
<div class="overview-li" @click="goEnergy">
<div>低温1换热出水温度</div>
<div
class="overview-details"
v-html="getTempDisplay('低温1换热出水温度', outWaterTemperature)"
></div>
</div>
<div class="overview-li" @click="goEnergy">
<div>低温2换热出水温度</div>
<div
class="overview-details"
v-html="getTempDisplay('低温2换热出水温度', outWaterTemperature)"
></div>
</div>
</div>
</div> </div>
<div class="special-div" style="width: 49.4%"> <sys-energy ref="sysEnergy"></sys-energy>
<div class="special-top"> </div>
<div class="special-title">热量数据</div> <div class=" special-div" style="width: 100%;margin-top: 20px;">
</div> <div class="special-top">
<div class="overview"> <div class="special-title">空压热回收系统</div>
<div class="overview-li" @click="goEnergy"> </div>
<div>生产累计热量</div> <div class="project-data">
<div class="overview-details"> <div class="sysBg" style="width: 49.4%">
{{ heatData.productionHeatSum }}kwh <div class="sysBg-title">出水温度</div>
<div class="overview">
<div class="overview-li" @click="goEnergy">
<div>离心机高温出水温度</div>
<div class="overview-details" v-html="getTempDisplay('离心机高温出水温度', outWaterTemperature)"></div>
</div> </div>
</div> <div class="overview-li" @click="goEnergy">
<div class="overview-li" @click="goEnergy"> <div>中温换热出水温度</div>
<div>散热累计热量</div> <div class="overview-details" v-html="getTempDisplay('中温换热出水温度', outWaterTemperature)"></div>
<div class="overview-details">
{{ heatData.dissipationHeatSum }}kwh
</div> </div>
</div> <div class="overview-li" @click="goEnergy">
<div class="overview-li" @click="goEnergy"> <div>低温1换热出水温度</div>
<div>总热量回收</div> <div class="overview-details" v-html="getTempDisplay('低温1换热出水温度', outWaterTemperature)"></div>
<div class="overview-details"> </div>
{{ heatData.totalHeatRecoverySum }}kwh <div class="overview-li" @click="goEnergy">
<div>低温2换热出水温度</div>
<div class="overview-details" v-html="getTempDisplay('低温2换热出水温度', outWaterTemperature)"></div>
</div> </div>
</div> </div>
<div class="overview-li" @click="goEnergy"> </div>
<div>热利用率</div> <div class="sysBg" style="width: 49.4%">
<div class="overview-details">{{ heatData.heatUtilization }}%</div> <div class="sysBg-title">热量数据</div>
<div class="overview">
<div class="overview-li" @click="goEnergy">
<div>生产累计热量</div>
<div class="overview-details">
{{ heatData.productionHeatSum }}kwh
</div>
</div>
<div class="overview-li" @click="goEnergy">
<div>散热累计热量</div>
<div class="overview-details">
{{ heatData.dissipationHeatSum }}kwh
</div>
</div>
<div class="overview-li" @click="goEnergy">
<div>总热量回收</div>
<div class="overview-details">
{{ heatData.totalHeatRecoverySum }}kwh
</div>
</div>
<div class="overview-li" @click="goEnergy">
<div>热利用率</div>
<div class="overview-details">{{ heatData.heatUtilization }}%</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> <div class="project-bie">
<div class="project-bie"> <div class="sysBg" style="width: 49.4%">
<div class="special-div" style="width: 49.4%"> <div class="sysBg-title">系统数据</div>
<div class="special-top"> <div class="hot-tem">
<div class="special-title">系统数据</div> <div class="tem-li">
</div> <div class="tem-title">离心机入口温度</div>
<div class="hot-tem"> <div class="tem-detail" v-html="getTempDisplay('离心机入口温度', systemData)"></div>
<div class="tem-li"> </div>
<div class="tem-title">离心机入口温度</div> <div class="tem-li">
<div <div class="tem-title">离心机出水温度</div>
class="tem-detail" <div class="tem-detail" v-html="getTempDisplay('离心机出水温度', systemData)"></div>
v-html="getTempDisplay('离心机入口温度', systemData)" </div>
></div> <div class="tem-li">
</div> <div class="tem-title">保障进水温度</div>
<div class="tem-li"> <div class="tem-detail" v-html="getTempDisplay('保障进水温度', systemData)"></div>
<div class="tem-title">离心机出水温度</div> </div>
<div
class="tem-detail"
v-html="getTempDisplay('离心机出水温度', systemData)"
></div>
</div> </div>
<div class="tem-li"> <div class="pressure">
<div class="tem-title">保障进水温度</div> <view-cold-sys :subData="getDeviceData('离心机进水压力')" :title="'离心机进水压力'"></view-cold-sys>
<div <view-cold-sys :subData="getDeviceData('离心机出水压力')" :title="'离心机出水压力'"></view-cold-sys>
class="tem-detail" <view-cold-sys :subData="getDeviceData('离心机压差')" :title="'离心机压差'"></view-cold-sys>
v-html="getTempDisplay('保障进水温度', systemData)"
></div>
</div> </div>
</div> </div>
<div class="pressure"> <div class="bir-right">
<view-cold-sys <div class="sysBg">
:subData="getDeviceData('离心机进水压力')" <div class="sysBg-title">阀门开度</div>
:title="'离心机进水压力'" <hot-water :subData="valveData"></hot-water>
></view-cold-sys>
<view-cold-sys
:subData="getDeviceData('离心机出水压力')"
:title="'离心机出水压力'"
></view-cold-sys>
<view-cold-sys
:subData="getDeviceData('离心机压差')"
:title="'离心机压差'"
></view-cold-sys>
</div>
</div>
<div class="bir-right">
<div class="special-div">
<div class="special-top">
<div class="special-title">阀门开度</div>
</div> </div>
<hot-water :subData="valveData"></hot-water> <div class="later-data">
</div> <div class="sysBg" style="width:49%">
<div class="later-data"> <div class="sysBg-title">热回收数据</div>
<div class="special-div"> <div class="hot-data">
<div class="special-top"> <div class="hot-li">
<div class="special-title">热回收数据</div> <div class="hot-title">瞬时热量:</div>
</div> <div class="hot-detail">{{ heatRecoveryData.instantaneousHeatSum }}kw</div>
<div class="hot-data"> </div>
<div class="hot-li"> <div class="hot-li">
<div class="hot-title">瞬时热量:</div> <div class="hot-title">日累计热量:</div>
<div class="hot-detail">{{heatRecoveryData.instantaneousHeatSum}}kw</div> <div class="hot-detail">{{ heatRecoveryData.dailyAccumulatedHeat }}kwh</div>
</div> </div>
<div class="hot-li"> <div class="hot-li">
<div class="hot-title">日累计热量:</div> <div class="hot-title">累计热量:</div>
<div class="hot-detail">{{heatRecoveryData.dailyAccumulatedHeat}}kwh</div> <div class="hot-detail">{{ heatRecoveryData.accumulatedHeatSum }}kwh</div>
</div>
</div> </div>
<div class="hot-li">
<div class="hot-title">累计热量:</div>
<div class="hot-detail">{{heatRecoveryData.accumulatedHeatSum}}kwh</div>
</div>
</div>
</div>
<div class="special-div">
<div class="special-top">
<div class="special-title">应用测数据</div>
</div> </div>
<div class="hot-data"> <div class="sysBg" style="width:49%">
<div class="hot-li"> <div class="sysBg-title">应用测数据</div>
<div class="hot-title">瞬时热量:</div> <div class="hot-data">
<div class="hot-detail">{{applicationData.instantaneousHeatSum}}kw</div> <div class="hot-li">
</div> <div class="hot-title">瞬时热量:</div>
<div class="hot-li"> <div class="hot-detail">{{ applicationData.instantaneousHeatSum }}kw</div>
<div class="hot-title">日累计热量:</div> </div>
<div class="hot-detail">{{applicationData.dailyAccumulatedHeat}}kwh</div> <div class="hot-li">
</div> <div class="hot-title">日累计热量:</div>
<div class="hot-li"> <div class="hot-detail">{{ applicationData.dailyAccumulatedHeat }}kwh</div>
<div class="hot-title">累计热量:</div> </div>
<div class="hot-detail">{{applicationData.accumulatedHeatSum}}kwh</div> <div class="hot-li">
<div class="hot-title">累计热量:</div>
<div class="hot-detail">{{ applicationData.accumulatedHeatSum }}kwh</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<el-dialog <el-dialog :visible.sync="dialogVisible" title="上传图片" width="500px" @close="addExpenseClose">
:visible.sync="dialogVisible"
title="上传图片"
width="500px"
@close="addExpenseClose"
>
<!-- 使用 el-upload 组件 --> <!-- 使用 el-upload 组件 -->
<el-upload <el-upload class="upload-demo" ref="uploadComponent" action="#" list-type="picture-card"
class="upload-demo" :on-preview="handlePictureCardPreview" :on-remove="handleRemove" :before-upload="beforeUpload" :limit="1"
ref="uploadComponent" :on-exceed="handleExceed" :on-change="handleFileChange" accept="image/png, image/jpeg"
action="#" :http-request="customHttpRequest">
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:before-upload="beforeUpload"
:limit="1"
:on-exceed="handleExceed"
:on-change="handleFileChange"
accept="image/png, image/jpeg"
:http-request="customHttpRequest"
>
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
</el-upload> </el-upload>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -257,11 +190,13 @@ import { imgUrl } from "@/utils/global";
import { introduction, changeLogo, ersDatas } from "@/api/index"; import { introduction, changeLogo, ersDatas } from "@/api/index";
import ViewColdSys from "./components/viewColdSys.vue"; import ViewColdSys from "./components/viewColdSys.vue";
import HotWater from "./components/hotWater.vue"; import HotWater from "./components/hotWater.vue";
import SysEnergy from "./components/sysEnergy.vue";
export default { export default {
components: { components: {
ViewColdSys, ViewColdSys,
HotWater, HotWater,
SysEnergy
}, },
data() { data() {
return { return {
@ -350,7 +285,7 @@ export default {
this.viewImageUrl = file.url; this.viewImageUrl = file.url;
}, },
// //
handleUploadSuccess(response, file, fileList) {}, handleUploadSuccess(response, file, fileList) { },
// //
handleFileChange(file, fileList) { handleFileChange(file, fileList) {
console.log("file", file); console.log("file", file);
@ -500,6 +435,7 @@ export default {
flex-direction: row; flex-direction: row;
align-items: flex-start; align-items: flex-start;
padding: 0.35rem; padding: 0.35rem;
.project-img { .project-img {
width: 1.4rem; width: 1.4rem;
height: 1.4rem; height: 1.4rem;
@ -508,24 +444,29 @@ export default {
margin-right: 0.4rem; margin-right: 0.4rem;
cursor: pointer; cursor: pointer;
} }
.project-li { .project-li {
width: calc((100% - 0.7rem) / 2); width: calc((100% - 0.7rem) / 2);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.list-con { .list-con {
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.project-left { .project-left {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
.left-icon { .left-icon {
width: 0.2rem; width: 0.2rem;
height: 0.2rem; height: 0.2rem;
} }
.project-name { .project-name {
font-family: SourceHanSansCN-Regular; font-family: SourceHanSansCN-Regular;
font-size: 0.18rem; font-size: 0.18rem;
@ -535,6 +476,7 @@ export default {
margin-left: 0.15rem; margin-left: 0.15rem;
} }
} }
.project-right { .project-right {
font-family: SourceHanSansCN-Regular; font-family: SourceHanSansCN-Regular;
font-size: 0.18rem; font-size: 0.18rem;
@ -543,16 +485,104 @@ export default {
} }
} }
} }
.project-li:nth-last-child(1) { .project-li:nth-last-child(1) {
margin-left: 1.5rem; margin-left: 1.5rem;
} }
} }
.sysBg {
background: linear-gradient(180deg,
rgba(0, 68, 126, 0.45) 0%,
rgba(0, 40, 80, 0.2) 100%);
border: 1px solid rgba(0, 136, 240, 0.25);
border-radius: 8px;
overflow: hidden;
position: relative;
//
&::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 40px;
height: 40px;
background: radial-gradient(circle at top left,
rgba(0, 180, 255, 0.15) 0%,
transparent 70%);
pointer-events: none;
}
//
&::after {
content: "";
position: absolute;
bottom: 0;
right: 0;
width: 60px;
height: 60px;
background: radial-gradient(circle at bottom right,
rgba(0, 136, 240, 0.1) 0%,
transparent 70%);
pointer-events: none;
}
.sysBg-title {
padding: 12px 16px;
font-family: Source Han Sans CN;
font-weight: 500;
font-size: 16px;
color: #ffffff;
letter-spacing: 2px;
position: relative;
background: linear-gradient(90deg,
rgba(0, 121, 206, 0.5) 0%,
rgba(0, 121, 206, 0.08) 100%);
border-bottom: 1px solid rgba(0, 136, 240, 0.2);
//
&::before {
content: "";
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 60%;
background: linear-gradient(180deg,
#00b4ff 0%,
#0079ce 100%);
border-radius: 2px;
box-shadow: 0 0 6px rgba(0, 180, 255, 0.6);
}
//
&::after {
content: "";
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
width: 8px;
height: 8px;
background: rgba(0, 180, 255, 0.6);
border-radius: 50%;
box-shadow: 0 0 8px rgba(0, 180, 255, 0.4);
}
text-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
}
}
.project-data { .project-data {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: stretch; align-items: stretch;
justify-content: space-between; justify-content: space-between;
margin: 16px 0; margin: 20px;
.overview { .overview {
width: 100%; width: 100%;
padding: 30px 20px 5px 20px; padding: 30px 20px 5px 20px;
@ -561,6 +591,7 @@ export default {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
.overview-li { .overview-li {
cursor: pointer; cursor: pointer;
width: 49%; width: 49%;
@ -574,16 +605,15 @@ export default {
font-size: 15px; font-size: 15px;
color: #ffffff; color: #ffffff;
/* 从 rgba(41, 128, 185, 0.8) 渐变到透明 */ /* 从 rgba(41, 128, 185, 0.8) 渐变到透明 */
background: linear-gradient( background: linear-gradient(to bottom,
to bottom, rgba(31, 100, 146, 0.6) 0%,
rgba(31, 100, 146, 0.6) 0%, rgba(33, 65, 87, 0.3) 50%,
rgba(33, 65, 87, 0.3) 50%, rgba(40, 62, 77, 0) 100%);
rgba(40, 62, 77, 0) 100%
);
border-radius: 8px; border-radius: 8px;
padding: 5px; padding: 5px;
color: white; color: white;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
.overview-details { .overview-details {
font-family: DIN-Bold; font-family: DIN-Bold;
font-size: 20px; font-size: 20px;
@ -593,16 +623,19 @@ export default {
} }
} }
} }
.chartsDiv { .chartsDiv {
width: 100%; width: 100%;
height: 4rem; height: 4rem;
} }
.project-bie { .project-bie {
width: 100%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: stretch; align-items: stretch;
justify-content: space-between; justify-content: space-between;
margin: 10px 20px 20px 20px;
.pressure { .pressure {
width: 100%; width: 100%;
display: flex; display: flex;
@ -610,6 +643,7 @@ export default {
align-items: center; align-items: center;
margin-top: 25px; margin-top: 25px;
} }
.hot-tem { .hot-tem {
width: 100%; width: 100%;
padding: 0 20px; padding: 0 20px;
@ -619,6 +653,7 @@ export default {
align-items: stretch; align-items: stretch;
flex-wrap: wrap; flex-wrap: wrap;
margin-top: 25px; margin-top: 25px;
.tem-li { .tem-li {
background-color: rgba(93, 125, 143, 0.5); background-color: rgba(93, 125, 143, 0.5);
width: 32%; width: 32%;
@ -628,11 +663,13 @@ export default {
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20px; margin-bottom: 20px;
.tem-title { .tem-title {
font-size: 15px; font-size: 15px;
font-weight: 600; font-weight: 600;
color: #ffffff; color: #ffffff;
} }
.tem-detail { .tem-detail {
margin-top: 8px; margin-top: 8px;
font-size: 20px; font-size: 20px;
@ -642,27 +679,34 @@ export default {
} }
} }
} }
.bir-right { .bir-right {
width: 49.4%; width: 49.4%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
.special-div { .special-div {
width: 100%; width: 100%;
margin-bottom: 20px; margin-bottom: 20px;
} }
.later-data { .later-data {
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: space-between; justify-content: space-between;
margin-top: 20px;
.special-div { .special-div {
width: 49%; width: 49%;
margin-bottom: 0; margin-bottom: 0;
} }
.hot-data { .hot-data {
width: 100%; width: 100%;
padding: 25px 25px 5px 25px; padding: 25px 25px 5px 25px;
.hot-li { .hot-li {
width: 100%; width: 100%;
display: flex; display: flex;
@ -670,11 +714,13 @@ export default {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 20px; margin-bottom: 20px;
.hot-title { .hot-title {
font-size: 15px; font-size: 15px;
font-weight: 600; font-weight: 600;
color: #ffffff; color: #ffffff;
} }
.hot-detail { .hot-detail {
font-size: 20px; font-size: 20px;
font-weight: 600; font-weight: 600;
@ -685,9 +731,9 @@ export default {
} }
} }
} }
@media (max-width: 1485px) {
} @media (max-width: 1485px) {}
// 2000px // 2000px
@media (min-width: 2000px) { @media (min-width: 2000px) {}
}
</style> </style>

2
src/views/login.vue

@ -10,7 +10,7 @@
class="login_img_down" class="login_img_down"
alt="" alt=""
/> />
<div class="sys-title">铭汉空压热回收系统</div> <div class="sys-title">铭汉节能岛系统</div>
<el-form <el-form
ref="loginForm" ref="loginForm"
:model="loginForm" :model="loginForm"

2
vue.config.js

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require("compression-webpack-plugin"); const CompressionPlugin = require("compression-webpack-plugin");
const name = process.env.VUE_APP_TITLE || "铭汉空压热回收系统"; // 网页标题 const name = process.env.VUE_APP_TITLE || "铭汉节能岛系统"; // 网页标题
const port = process.env.port || process.env.npm_config_port || 80; // 端口 const port = process.env.port || process.env.npm_config_port || 80; // 端口

Loading…
Cancel
Save