This commit is contained in:
白菜
2025-10-15 18:16:56 +08:00
parent a8c79eef72
commit 6149cba24e
8 changed files with 430 additions and 189 deletions

View File

@ -100,3 +100,21 @@ export function getSevenChargeData(data) {
data data
}) })
} }
//单站监控 首页 当日功率曲线
export function getPointData(data) {
return request({
url: `/ems/siteMonitor/getPointData`,
method: 'get',
data
})
}
// 获取站点包含的设备种类 用来判断单站监控设备监控的菜单栏展示
export function getSiteAllDeviceCategory(data) {
return request({
url: `/ems/siteConfig/getSiteAllDeviceCategory`,
method: 'get',
data
})
}

View File

@ -31,12 +31,14 @@
} }
}, },
methods: { methods: {
init() { init(today = false) {
const now = new Date(), const now = new Date(),
formatNow = formatDate(now); formatNow = formatDate(now);
const weekAgo = formatDate(new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000)) const weekAgo = formatDate(today ? new Date(now.getTime()) : new Date(now.getTime() - 7 * 24 * 60 * 60 *
1000))
this.dateRange = [weekAgo, formatNow]; this.dateRange = [weekAgo, formatNow];
this.defaultDateRange = [weekAgo, formatNow]; this.defaultDateRange = [weekAgo, formatNow];
console.log('初始化完成', this.defaultDateRange)
this.$emit('updateDate', this.dateRange) this.$emit('updateDate', this.dateRange)
}, },
changeTime(val) { changeTime(val) {
@ -52,6 +54,7 @@
//重置 设置时间范围为初始化时间段 //重置 设置时间范围为初始化时间段
reset() { reset() {
this.resetDate() this.resetDate()
this.$emit('reset')
this.$emit('updateDate', this.dateRange) this.$emit('updateDate', this.dateRange)
}, },
// 搜索 // 搜索
@ -59,17 +62,19 @@
this.$emit('updateDate', this.dateRange) this.$emit('updateDate', this.dateRange)
}, },
timeLine(type) { timeLine(type) {
//baseTime,maxTime 毫秒数 if (!this.dateRange || !this.dateRange[0] || !this.dateRange[1]) return
let baseTime = type === 'before' ? new Date(this.dateRange[0]).getTime() - (24 * 60 * 60 * 1000) : const nowStartTimes = new Date(this.dateRange[0]).getTime(),
new Date(this.dateRange[1]).getTime() + (24 * 60 * 60 * 1000), nowEndTimes = new Date(this.dateRange[1]).getTime(),
maxTime = new Date(this.defaultDateRange[1]).getTime() maxTime = new Date(this.defaultDateRange[1]).getTime()
//updateTime 毫秒数 const nowDis = nowEndTimes - nowStartTimes //用户当前选择时间差 可能=0
let updateTime = type === 'before' ? baseTime - 7 * 24 * 60 * 60 * 1000 : baseTime + 7 * 24 * 60 * 60 * //baseTime,maxTime 毫秒数
1000 const baseDis = 24 * 60 * 60 * 1000
if (type === 'next' && updateTime >= maxTime) updateTime = maxTime const calcDis = nowDis === 0 ? baseDis : nowDis
const start = formatDate(type === 'before' ? updateTime : baseTime) let start = type === 'before' ? nowStartTimes - calcDis : nowStartTimes + calcDis
const end = formatDate(type === 'before' ? baseTime : updateTime) if (start > maxTime) start = maxTime
this.dateRange = [start, end] let end = type === 'before' ? nowEndTimes - calcDis : nowEndTimes + calcDis
if (end > maxTime) end = maxTime
this.dateRange = [formatDate(start), formatDate(end)]
this.$emit('updateDate', this.dateRange) this.$emit('updateDate', this.dateRange)
}, },
} }

View File

@ -2,7 +2,8 @@
<view class="page-container"> <view class="page-container">
<uni-collapse ref="collapse" accordion v-if="list.length > 0"> <uni-collapse ref="collapse" accordion v-if="list.length > 0">
<uni-collapse-item v-for="(item,index) in list" :key="item.deviceId+'bmsdcc'" :open="index===0" <uni-collapse-item v-for="(item,index) in list" :key="item.deviceId+'bmsdcc'" :open="index===0"
:title="`${index+1}#${item.deviceName}`" :class="item.workStatus === '0' ? 'running' :'danger'"> :title="`${index+1}#${item.parentDeviceName?`${item.parentDeviceName} —> ` : ''}${item.deviceName}`"
:class="item.workStatus === '0' ? 'running' :'danger'">
<view> <view>
<uni-group mode="card" class="work-group"> <uni-group mode="card" class="work-group">
<uni-grid :column="3" :showBorder="false"> <uni-grid :column="3" :showBorder="false">
@ -103,52 +104,62 @@
infoData: [{ infoData: [{
label: '簇电压', label: '簇电压',
attr: 'clusterVoltage', attr: 'clusterVoltage',
unit: 'V' unit: 'V',
pointName: '簇电压'
}, },
{ {
label: '可充电量', label: '可充电量',
attr: 'chargeableCapacity', attr: 'chargeableCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '可充电量'
}, },
{ {
label: '累计充电量', label: '累计充电量',
attr: 'totalChargedCapacity', attr: 'totalChargedCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '累计充电量'
}, },
{ {
label: '簇电流', label: '簇电流',
attr: 'clusterCurrent', attr: 'clusterCurrent',
unit: 'A' unit: 'A',
pointName: '簇电流'
}, },
{ {
label: '可放电量', label: '可放电量',
attr: 'dischargeableCapacity', attr: 'dischargeableCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '可放电量'
}, },
{ {
label: '累计放电量', label: '累计放电量',
attr: 'totalDischargedCapacity', attr: 'totalDischargedCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '累计放电量'
}, },
{ {
label: 'SOH', label: 'SOH',
attr: 'soh', attr: 'soh',
unit: '%' unit: '%',
pointName: 'SOH'
}, },
{ {
label: '平均温度', label: '平均温度',
attr: 'averageTemperature', attr: 'averageTemperature',
unit: '&#8451;' unit: '&#8451;',
pointName: '平均温度'
}, },
{ {
label: '绝缘电阻', label: '绝缘电阻',
attr: 'insulationResistance', attr: 'insulationResistance',
unit: '&Omega;' unit: '&Omega;',
pointName: '绝缘电阻'
}, },
{ {
label: '当前SOC', label: '当前SOC',
attr: 'currentSoc', attr: 'currentSoc',
unit: '%' unit: '%',
pointName: '当前SOC'
}, },
] ]

View File

@ -50,9 +50,13 @@
<uni-th align="center">簇电流</uni-th> <uni-th align="center">簇电流</uni-th>
<uni-th align="center">簇SOC</uni-th> <uni-th align="center">簇SOC</uni-th>
<uni-th align="center">单体最高电压</uni-th> <uni-th align="center">单体最高电压</uni-th>
<uni-th align="center">电池号码</uni-th>
<uni-th align="center">单体最低电压</uni-th> <uni-th align="center">单体最低电压</uni-th>
<uni-th align="center">电池号码</uni-th>
<uni-th align="center">单体最高温度</uni-th> <uni-th align="center">单体最高温度</uni-th>
<uni-th align="center">电池号码</uni-th>
<uni-th align="center">单体最低温度</uni-th> <uni-th align="center">单体最低温度</uni-th>
<uni-th align="center">电池号码</uni-th>
</uni-tr> </uni-tr>
<!-- 表格数据行 --> <!-- 表格数据行 -->
<uni-tr v-for="(tableItem, tableIndex) in item.batteryDataList" <uni-tr v-for="(tableItem, tableIndex) in item.batteryDataList"
@ -62,9 +66,13 @@
<uni-td align="center">{{tableItem.clusterCurrent}}A</uni-td> <uni-td align="center">{{tableItem.clusterCurrent}}A</uni-td>
<uni-td align="center">{{tableItem.currentSoc}}%</uni-td> <uni-td align="center">{{tableItem.currentSoc}}%</uni-td>
<uni-td align="center">{{tableItem.maxCellVoltage}}V</uni-td> <uni-td align="center">{{tableItem.maxCellVoltage}}V</uni-td>
<uni-td align="center">{{tableItem.maxCellVoltageId}}</uni-td>
<uni-td align="center">{{tableItem.minCellVoltage}}V</uni-td> <uni-td align="center">{{tableItem.minCellVoltage}}V</uni-td>
<uni-td align="center">{{tableItem.maxCellVoltageId}}</uni-td>
<uni-td align="center">{{tableItem.maxCellTemp}}&#8451;</uni-td> <uni-td align="center">{{tableItem.maxCellTemp}}&#8451;</uni-td>
<uni-td align="center">{{tableItem.maxCellTempId}}</uni-td>
<uni-td align="center">{{tableItem.minCellTemp}}&#8451;</uni-td> <uni-td align="center">{{tableItem.minCellTemp}}&#8451;</uni-td>
<uni-td align="center">{{tableItem.minCellTempId}}</uni-td>
</uni-tr> </uni-tr>
</uni-table> </uni-table>
</uni-group> </uni-group>
@ -101,52 +109,62 @@
infoData: [{ infoData: [{
label: '电池堆总电压', label: '电池堆总电压',
attr: 'stackVoltage', attr: 'stackVoltage',
unit: 'V' unit: 'V',
pointName: '电池堆电压'
}, },
{ {
label: '可充电量', label: '可充电量',
attr: 'availableChargeCapacity', attr: 'availableChargeCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '可充电量'
}, },
{ {
label: '累计充电量', label: '累计充电量',
attr: 'totalChargeCapacity', attr: 'totalChargeCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '累计充电量'
}, },
{ {
label: '电池堆总电流', label: '电池堆总电流',
attr: 'stackCurrent', attr: 'stackCurrent',
unit: 'A' unit: 'A',
pointName: '电池堆总电流'
}, },
{ {
label: '可放电量', label: '可放电量',
attr: 'availableDischargeCapacity', attr: 'availableDischargeCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '可放电量'
}, },
{ {
label: '累计放电量', label: '累计放电量',
attr: 'totalDischargeCapacity', attr: 'totalDischargeCapacity',
unit: 'kWh' unit: 'kWh',
pointName: '累计放电量'
}, },
{ {
label: 'SOH', label: 'SOH',
attr: 'stackSoh', attr: 'stackSoh',
unit: '%' unit: '%',
pointName: 'SOH'
}, },
{ {
label: '平均温度', label: '平均温度',
attr: 'operatingTemp', attr: 'operatingTemp',
unit: '&#8451;' unit: '&#8451;',
pointName: '平均温度'
}, },
{ {
label: '绝缘电阻', label: '绝缘电阻',
attr: 'stackInsulationResistance', attr: 'stackInsulationResistance',
unit: '&Omega;' unit: '&Omega;',
pointName: '绝缘电阻'
}, },
{ {
label: '当前SOC', label: '当前SOC',
attr: 'stackSoc', attr: 'stackSoc',
unit: '%' unit: '%',
pointName: '当前SOC'
}, },
] ]

View File

@ -1,90 +1,39 @@
<template> <template>
<view class="page-container"> <view class="page-container">
<uni-collapse ref="collapse"> <uni-collapse ref="collapse">
<!-- 总表 --> <uni-collapse-item open v-for="(item,index) in list" :key="index+'dbList'"
<uni-collapse-item open :class="zbInfo.emsCommunicationStatus !== '0' ? 'danger' :'running'"> :class="item.emsCommunicationStatus !== '0' ? 'danger' :'running'">
<template v-slot:title> <template v-slot:title>
<view class="title-row"> <view class="title-row">
<view class="title">{{`1#${zbInfo.deviceName || ''}`}}</view> <view class="title">{{index+1}}#{{item.deviceName || ''}}</view>
<view class="msg"> <view class="msg">
<view>{{communicationStatusOptions[zbInfo.emsCommunicationStatus] || ''}}</view> <view>{{communicationStatusOptions[item.emsCommunicationStatus] || ''}}</view>
<view>数据更新时间{{zbInfo.dataUpdateTime || ''}}</view> <view>数据更新时间{{item.dataUpdateTime || ''}}</view>
</view> </view>
</view> </view>
</template> </template>
<uni-group :title=" item.category" mode="card" v-for="(item,index) in zbInfo.loadDataDetailInfo" <uni-group mode="card">
:key="index+'zbInfo'"> <uni-grid :column="2" showBorder class="info-grid">
<uni-row> <uni-grid-item v-for="(tempDataItem,tempDataIndex) in
<uni-col :span="8"> deviceIdTypeMsg[item.deviceId]" :key="tempDataIndex+'dbTempData'">
<view>/kWh</view> <view class="grid-item-box">
</uni-col> <view class="title">{{tempDataItem.name}}</view>
<uni-col :span="16"> <text class="text">{{item[tempDataItem.attr]}}
<view>{{item.totalKwh}}</view> <!-- <text v-if="infoDataItem.unit" v-html="infoDataItem.unit"></text> -->
</uni-col> </text>
</uni-row>
<uni-row>
<uni-col :span="8">
<view>/kWh</view>
</uni-col>
<uni-col :span="16">
<view>{{item.peakKwh}}</view>
</uni-col>
</uni-row>
<uni-row>
<uni-col :span="8">
<view>/kWh</view>
</uni-col>
<uni-col :span="16">
<view>{{item.highKwh}}</view>
</uni-col>
</uni-row>
<uni-row>
<uni-col :span="8">
<view>/kWh</view>
</uni-col>
<uni-col :span="16">
<view>{{item.flatKwh}}</view>
</uni-col>
</uni-row>
<uni-row>
<uni-col :span="8">
<view>/kWh</view>
</uni-col>
<uni-col :span="16">
<view>{{item.valleyKwh}}</view>
</uni-col>
</uni-row>
</uni-group>
</uni-collapse-item>
<!-- 储能表 -->
<uni-collapse-item open :class="cnbInfo.emsCommunicationStatus !== '0' ? 'danger' :'running'">
<template v-slot:title>
<view class="title-row">
<view class="title">{{`2#${cnbInfo.deviceName || ''}`}}</view>
<view class="msg">
<view>{{communicationStatusOptions[cnbInfo.emsCommunicationStatus] || ''}}</view>
<view>数据更新时间{{cnbInfo.dataUpdateTime || ''}}</view>
</view> </view>
</view> </uni-grid-item>
</template> </uni-grid>
<uni-group :title="item.category" mode="card" v-for="(item,index) in cnbInfo.meteDataDetailInfo"
:key="index+'cnbInfo'"> <!-- <uni-row v-for="(tempDataItem,tempDataIndex) in deviceIdTypeMsg[item.deviceId]"
<uni-row> :key="tempDataIndex+'dbTempData'">
<uni-col :span="8"> <uni-col :span="8">
<view>有功功率</view> <view>{{tempDataItem.name}}</view>
</uni-col> </uni-col>
<uni-col :span="16"> <uni-col :span="16">
<view>{{item.activePower}}</view> <view>{{item[tempDataItem.attr]}}</view>
</uni-col> </uni-col>
</uni-row> </uni-row> -->
<uni-row>
<uni-col :span="8">
<view>无功功率</view>
</uni-col>
<uni-col :span="16">
<view>{{item.reactivePower}}</view>
</uni-col>
</uni-row>
</uni-group> </uni-group>
</uni-collapse-item> </uni-collapse-item>
</uni-collapse> </uni-collapse>
@ -110,8 +59,93 @@
data() { data() {
return { return {
siteId: '', siteId: '',
zbInfo: {}, list: [],
cnbInfo: {}, deviceIdTypeMsg: {
'LOAD': [{
name: '正向有功电能',
attr: 'forwardActive',
pointName: '正向有功电能'
},
{
name: '反向有功电能',
attr: 'reverseActive',
pointName: '反向有功电能'
},
{
name: '正向无功电能',
attr: 'forwardReactive',
pointName: '正向无功电能'
},
{
name: '反向无功电能',
attr: 'reverseReactive',
pointName: '反向无功电能'
},
{
name: '有功功率',
attr: 'activePower',
pointName: '总有功功率'
},
{
name: '无功功率',
attr: 'reactivePower',
pointName: '总无功功率'
}
],
'METE': [{
name: '正向有功电能',
attr: 'forwardActive',
pointName: '正向有功电能'
},
{
name: '反向有功电能',
attr: 'reverseActive',
pointName: '反向有功电能'
},
{
name: '正向无功电能',
attr: 'forwardReactive',
pointName: '正向无功电能'
},
{
name: '反向无功电能',
attr: 'reverseReactive',
pointName: '反向无功电能'
},
{
name: '有功功率',
attr: 'activePower',
pointName: '总有功功率'
},
{
name: '无功功率',
attr: 'reactivePower',
pointName: '总无功功率'
}
],
'METEGF': [{
name: '有功电能',
attr: 'activeEnergy',
pointName: '有功电能'
},
{
name: '无功电能',
attr: 'reactiveEnergy',
pointName: '无功电能'
},
{
name: '有功功率',
attr: 'activePower',
pointName: '总有功功率'
},
{
name: '无功功率',
attr: 'reactivePower',
pointName: '总无功功率'
}
]
}
} }
}, },
mounted() { mounted() {
@ -120,8 +154,7 @@
getAmmeterDataList({ getAmmeterDataList({
siteId: this.siteId siteId: this.siteId
}).then(response => { }).then(response => {
this.zbInfo = JSON.parse(JSON.stringify(response?.data?.ammeterLoadData || {})); this.list = response?.data || []
this.cnbInfo = JSON.parse(JSON.stringify(response?.data?.ammeterMeteData || {}));
this.$nextTick(() => { this.$nextTick(() => {
setTimeout(() => { setTimeout(() => {
this.$refs.collapse.resize() this.$refs.collapse.resize()
@ -155,7 +188,52 @@
} }
} }
.grid-item-box {
flex: 1;
// position: relative;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
align-items: center;
justify-content: center;
padding: 10px;
background-color: #fff;
.title {
font-size: 14px;
color: #666;
}
.text {
margin-top: 10px;
font-size: 16px;
font-weight: 500;
color: #666;
overflow-wrap: anywhere;
}
.status-danger {
color: #FC6B69;
}
.status-running {
color: #05AEA3;
}
}
::v-deep { ::v-deep {
.info-grid {
.uni-grid-item {
height: 80px !important;
.grid-item-box {
padding: 0;
}
}
}
.uni-group__title { .uni-group__title {
background-color: #959595; background-color: #959595;

View File

@ -66,7 +66,7 @@
<uni-popup ref="popup" type="center" :animation="false" :mask-click="false" :is-mask-click="false" <uni-popup ref="popup" type="center" :animation="false" :mask-click="false" :is-mask-click="false"
@maskClick="maskClick"> @maskClick="maskClick">
<view class="chart-popup" v-if="showChart"> <view class="chart-popup" v-if="showChart">
<uni-datetime-picker v-model="range" type="daterange" :end="end" rangeSeparator="至" @change="changeTime" <date-range-select ref="chartDateRangeSelect" @updateDate="updateChartDate"
style="margin-bottom: 10px;" /> style="margin-bottom: 10px;" />
<view class="chart-container"> <view class="chart-container">
<qiun-data-charts type="line" :reload="showChart" :optsWatch='false' :opts="options" <qiun-data-charts type="line" :reload="showChart" :optsWatch='false' :opts="options"
@ -100,6 +100,7 @@
<script> <script>
// import Chart from './Chart.vue' // import Chart from './Chart.vue'
import DateRangeSelect from './../DateRangeSelect.vue'
import { import {
getStackNameList, getStackNameList,
getClusterNameList, getClusterNameList,
@ -110,9 +111,6 @@
mapState mapState
} from 'vuex' } from 'vuex'
export default { export default {
components: {
// Chart
},
computed: { computed: {
...mapState({ ...mapState({
workStatusOptions: (state) => workStatusOptions: (state) =>
@ -121,6 +119,9 @@
state.ems.communicationStatusOptions, state.ems.communicationStatusOptions,
}) })
}, },
components: {
DateRangeSelect
},
data() { data() {
return { return {
pageNum: 1, pageNum: 1,
@ -182,7 +183,6 @@
deviceId deviceId
}, dataType) { }, dataType) {
this.loading = false this.loading = false
this.range = []
this.chartSearchData = { this.chartSearchData = {
clusterDeviceId, clusterDeviceId,
deviceId, deviceId,
@ -191,11 +191,13 @@
this.$refs.popup.open() this.$refs.popup.open()
setTimeout(() => { setTimeout(() => {
this.showChart = true this.showChart = true
this.getChartData() this.$nextTick(() => {
}, 100) this.$refs.chartDateRangeSelect.init()
})
}, 500)
}, },
changeTime(val) { updateChartDate(data) {
this.range = val || [] this.range = data || []
this.getChartData() this.getChartData()
}, },
getChartData() { getChartData() {

View File

@ -28,7 +28,7 @@
<uni-section title="工作台" type="line" :titleFontSize="titleFontSize" class="sections-list"> <uni-section title="工作台" type="line" :titleFontSize="titleFontSize" class="sections-list">
<view class="grid-body"> <view class="grid-body">
<uni-grid :column="4" :showBorder="false" @change="toDetail"> <uni-grid :column="4" :showBorder="false" @change="toDetail">
<uni-grid-item v-for="(item,index) in gridList" :index="index" :key="index+'work'"> <uni-grid-item v-for="(item,index) in siteGirdList" :index="index" :key="index+'work'">
<view class="grid-item-box"> <view class="grid-item-box">
<view class="icon iconfont" :class="item.icon" size="30"></view> <view class="icon iconfont" :class="item.icon" size="30"></view>
<text class="text">{{item.text}}</text> <text class="text">{{item.text}}</text>
@ -50,7 +50,7 @@
<date-range-select ref="activeChartDateRangeSelect" @updateDate="updateActiveChartDate" /> <date-range-select ref="activeChartDateRangeSelect" @updateDate="updateActiveChartDate" />
<view style="width:100%;height: 250px;"> <view style="width:100%;height: 250px;">
<qiun-data-charts type="line" :chartData="activeChartData" :optsWatch='false' :inScrollView="true" <qiun-data-charts type="line" :chartData="activeChartData" :optsWatch='false' :inScrollView="true"
:pageScrollTop="pageScrollTop" :opts="options" :ontouch="true" /> :pageScrollTop="pageScrollTop" :opts="glqxOptions" :ontouch="true" />
</view> </view>
</uni-section> </uni-section>
</view> </view>
@ -62,6 +62,8 @@
getAllSites, getAllSites,
getSingleSiteBaseInfo, getSingleSiteBaseInfo,
getSevenChargeData, getSevenChargeData,
getPointData,
getSiteAllDeviceCategory
} from '@/api/ems/site.js' } from '@/api/ems/site.js'
export default { export default {
components: { components: {
@ -75,6 +77,20 @@
weekChartData: {}, weekChartData: {},
activeChartData: {}, activeChartData: {},
pageScrollTop: 0, pageScrollTop: 0,
glqxOptions: {
dataLabel: false,
enableScroll: true,
xAxis: {
scrollShow: true,
itemCount: 3,
disableGrid: true
},
// update: true,
// duration: 2,
// animation: false,
// enableScroll: true,
// padding: [10, 15, 10, 15]
},
options: { options: {
dataLabel: false, dataLabel: false,
enableScroll: true, enableScroll: true,
@ -89,9 +105,8 @@
// enableScroll: true, // enableScroll: true,
// padding: [10, 15, 10, 15] // padding: [10, 15, 10, 15]
}, },
// 图表数据结束 // 图表数据结束
deviceCategoryOptions: [], //当前站点包含的设备类别
titleFontSize: '16px', titleFontSize: '16px',
siteType: 1, siteType: 1,
siteTypeOptions: [{ siteTypeOptions: [{
@ -131,30 +146,40 @@
page: 'bmszl', page: 'bmszl',
icon: 'icon-BMS', icon: 'icon-BMS',
text: 'BMS总览', text: 'BMS总览',
categoryName: 'STACK'
}, },
{ {
page: 'bmsdcc', page: 'bmsdcc',
icon: 'icon-a-dianchicunengliangkuai', icon: 'icon-a-dianchicunengliangkuai',
text: 'BMS电池簇', text: 'BMS电池簇',
categoryName: 'CLUSTER'
}, },
{ {
page: 'pcs', page: 'pcs',
icon: 'icon-PCS', icon: 'icon-PCS',
text: 'PCS', text: 'PCS',
categoryName: 'PCS'
}, },
{ {
page: 'db', page: 'db',
icon: 'icon-dianbiao4', icon: 'icon-dianbiao4',
text: '电表', text: '电表',
categoryName: 'AMMETER'
}, },
{ {
page: 'dtdc', page: 'dtdc',
icon: 'icon-dantidianchi', icon: 'icon-dantidianchi',
text: '单体电池', text: '单体电池',
categoryName: 'BATTERY'
} }
] ]
} }
}, },
computed: {
siteGirdList() {
return this.gridList.filter(i => this.deviceCategoryOptions.includes(i.categoryName))
}
},
methods: { methods: {
// 更新一周冲放曲线时间范围 重置图表 // 更新一周冲放曲线时间范围 重置图表
updateWeekChartDate(data) { updateWeekChartDate(data) {
@ -163,9 +188,8 @@
}, },
// 更新当日功率曲线时间范围 重置图表 // 更新当日功率曲线时间范围 重置图表
updateActiveChartDate(data) { updateActiveChartDate(data) {
this.weekChartTimeRange = data || [] this.activeChartTimeRange = data || []
//todo 更新当日功率曲线 接口还没定 this.siteId && this.getGVQXData()
// this.siteId && this.getWeekChartData()
}, },
toDetail(e) { toDetail(e) {
if (!this.siteId) return uni.showToast({ if (!this.siteId) return uni.showToast({
@ -181,10 +205,15 @@
if (id === this.siteId) return if (id === this.siteId) return
this.siteId = id this.siteId = id
if (this.siteType === 1) { if (this.siteType === 1) {
this.updateSiteInfo()
}
},
updateSiteInfo() {
if (!this.siteId) return
this.getSiteBaseInfo() this.getSiteBaseInfo()
this.getWeekChartData() this.getWeekChartData()
//todo 更新当日功率曲线 this.getGVQXData()
} this.getSiteDeviceCategory()
}, },
selectedSiteType(id) { selectedSiteType(id) {
if (id === this.siteType) return if (id === this.siteType) return
@ -194,14 +223,6 @@
this.weekChartData = {} this.weekChartData = {}
this.activeChartData = {} this.activeChartData = {}
}, },
getSiteBaseInfo() {
getSingleSiteBaseInfo({
siteId: this.siteId
}).then(response => {
console.log('获取站点基本信息', response)
this.baseInfo = response?.data || {}
})
},
getSiteList() { getSiteList() {
getAllSites().then(response => { getAllSites().then(response => {
const data = response?.data || [] const data = response?.data || []
@ -215,12 +236,25 @@
// 设置默认展示的站点 // 设置默认展示的站点
if (data.length > 0) { if (data.length > 0) {
this.siteId = data[0].siteId this.siteId = data[0].siteId
this.getSiteBaseInfo() this.updateSiteInfo()
this.getWeekChartData()
//todo 更新当日功率曲线
} }
}) })
}, },
getSiteBaseInfo() {
getSingleSiteBaseInfo({
siteId: this.siteId
}).then(response => {
console.log('获取站点基本信息', response)
this.baseInfo = response?.data || {}
})
},
getSiteDeviceCategory() {
getSiteAllDeviceCategory({
siteId: this.siteId
}).then(response => {
this.deviceCategoryOptions = response?.data || []
})
},
handleDate(date) { handleDate(date) {
if (!date) return date if (!date) return date
const time = new Date(date) const time = new Date(date)
@ -228,6 +262,64 @@
day = time.getDate() day = time.getDate()
return `${month<10?'0'+month : month}/${day<10 ? '0'+day : day}` return `${month<10?'0'+month : month}/${day<10 ? '0'+day : day}`
}, },
getGVQXData() {
this.$refs.activeChartDateRangeSelect.showBtnLoading(true)
getPointData({
siteId: this.siteId,
startDate: this.activeChartTimeRange[0],
endDate: this.activeChartTimeRange[1]
}).then(response => {
console.log('当日功率曲线', response)
let data = response?.data || [],
categories = [],
source = [{
name: '电网功率',
attr: 'gridPower',
data: []
},
{
name: '负载功率',
attr: 'loadPower',
data: []
},
{
name: '储能功率',
attr: 'storagePower',
data: []
},
{
name: '光伏功率',
attr: 'pvPower',
data: []
},
{
name: 'soc平均值',
attr: 'avgSoc',
data: []
},
{
name: 'soh平均值',
attr: 'avgSoh',
data: []
},
{
name: '电池平均温度平均值平均值',
attr: 'avgTemp',
data: []
},
]
data.forEach((item) => {
categories.push(item.statisDate || undefined)
source.forEach(i => i.data.push(item[i.attr]))
})
this.activeChartData = JSON.parse(JSON.stringify({
categories,
series: source
}))
}).finally(() => this.$refs.activeChartDateRangeSelect.showBtnLoading(false))
},
getWeekChartData() { getWeekChartData() {
this.$refs.weekChartDateRangeSelect.showBtnLoading(true) this.$refs.weekChartDateRangeSelect.showBtnLoading(true)
getSevenChargeData({ getSevenChargeData({
@ -264,7 +356,7 @@
mounted() { mounted() {
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.weekChartDateRangeSelect.init() this.$refs.weekChartDateRangeSelect.init()
this.$refs.activeChartDateRangeSelect.init() this.$refs.activeChartDateRangeSelect.init(true)
if (this.siteType === 1) { if (this.siteType === 1) {
this.getSiteList() this.getSiteList()
} }

View File

@ -157,80 +157,97 @@
list: [], list: [],
siteId: '', siteId: '',
infoData: [{ infoData: [{
label: '总交流有功电率', label: "总交流有功电率",
attr: 'totalActivePower', attr: "totalActivePower",
unit: 'kW' unit: "kW",
pointName: "总交流有功电率",
}, },
{ {
label: '总交流无功电率', label: "总交流无功电率",
attr: 'totalReactivePower', attr: "totalReactivePower",
unit: 'kVar' unit: "kVar",
pointName: "总交流无功电率",
}, },
{ {
label: '当天交流充电量', label: "当天交流充电量",
attr: 'dailyAcChargeEnergy', attr: "dailyAcChargeEnergy",
unit: 'kWh' unit: "kWh",
pointName: "当天交流充电量 (kWh)",
}, },
{ {
label: '当天交流放电量', label: "当天交流放电量",
attr: 'dailyAcDischargeEnergy', attr: "dailyAcDischargeEnergy",
unit: 'kWh' unit: "kWh",
pointName: "当天交流放电量 (kWh)",
}, },
{ {
label: '总交流视在功率', label: "A相电压",
attr: 'totalApparentPower', attr: "aPhaseVoltage",
unit: 'kVA' unit: "V",
pointName: ""
}, },
{ {
label: '总交流功率因数', label: "A相电流",
attr: 'totalPowerFactor', attr: "aPhaseCurrent",
unit: '' unit: "A",
pointName: "A相电流",
},
{
label: "B相电压",
attr: "bPhaseVoltage",
unit: "V",
pointName: ""
}, },
{ {
label: 'PCS模块温度', label: "B相电流",
attr: 'pcsModuleTemperature', attr: "bPhaseCurrent",
unit: '&#8451;' unit: "A",
pointName: "B相电流",
}, },
{ {
label: 'PCS环境温度', label: "总交流视在功率",
attr: 'pcsEnvironmentTemperature', attr: "totalApparentPower",
unit: '&#8451;' unit: "kVA",
pointName: "总交流视在功率",
}, },
{ {
label: 'A相电压', label: "总交流功率因数",
attr: 'aPhaseVoltage', attr: "totalPowerFactor",
unit: 'V' unit: "",
pointName: "总交流功率因数",
}, },
{ {
label: 'A相电流', label: "PCS模块温度",
attr: 'aPhaseCurrent', attr: "pcsModuleTemperature",
unit: 'A' unit: "&#8451;",
pointName: "",
}, },
{ {
label: 'B相电压', label: "PCS环境温度",
attr: 'bPhaseVoltage', attr: "pcsEnvironmentTemperature",
unit: 'V' unit: "&#8451;",
pointName: "",
}, },
{ {
label: 'B相电流', label: "C相电压",
attr: 'bPhaseCurrent', attr: "cPhaseVoltage",
unit: 'A' unit: "V",
pointName: ""
}, },
{ {
label: 'C相电压', label: "C相电流",
attr: 'cPhaseVoltage', attr: "cPhaseCurrent",
unit: 'V' unit: "A",
pointName: "C相电流",
}, },
{ {
label: 'C相电流', label: "交流频率",
attr: 'cPhaseCurrent', attr: "acFrequency",
unit: 'A' unit: "Hz",
pointName: "交流频率",
}, },
{
label: '交流频率',
attr: 'acFrequency',
unit: 'Hz'
}
] ]
} }
}, },