ems、收益报表

This commit is contained in:
白菜
2025-12-08 16:58:43 +08:00
parent 7f3d02b8fb
commit 674a0c6c33
5 changed files with 976 additions and 543 deletions

View File

@ -7,6 +7,7 @@ export function getDzjkHomeView(siteId) {
method: 'get' method: 'get'
}) })
} }
//站点首页 冲放曲线 //站点首页 冲放曲线
export function getSevenChargeData({siteId, startDate, endDate}) { export function getSevenChargeData({siteId, startDate, endDate}) {
return request({ return request({
@ -14,6 +15,7 @@ export function getSevenChargeData({siteId,startDate,endDate}) {
method: 'get' method: 'get'
}) })
} }
// 获取站点包含的设备种类 用来判断单站监控设备监控的菜单栏展示 // 获取站点包含的设备种类 用来判断单站监控设备监控的菜单栏展示
export function getSiteAllDeviceCategory(siteId) { export function getSiteAllDeviceCategory(siteId) {
return request({ return request({
@ -21,6 +23,7 @@ export function getSiteAllDeviceCategory(siteId) {
method: 'get' method: 'get'
}) })
} }
//获取pcs、实时运行头部的设备信息 //获取pcs、实时运行头部的设备信息
export function getRunningHeadInfo(siteId) { export function getRunningHeadInfo(siteId) {
return request({ return request({
@ -28,6 +31,7 @@ export function getRunningHeadInfo(siteId) {
method: 'get' method: 'get'
}) })
} }
//获取pcs列表 //获取pcs列表
export function getPcsDetailInfo(siteId) { export function getPcsDetailInfo(siteId) {
return request({ return request({
@ -59,6 +63,7 @@ export function getStackNameList(siteId) {
method: 'get' method: 'get'
}) })
} }
//获取单体电池 电池簇列表数据 //获取单体电池 电池簇列表数据
export function getClusterNameList({stackDeviceId, siteId}) { export function getClusterNameList({stackDeviceId, siteId}) {
return request({ return request({
@ -66,6 +71,7 @@ export function getClusterNameList({stackDeviceId,siteId}) {
method: 'get' method: 'get'
}) })
} }
//单体电池表格数据 //单体电池表格数据
export function getClusterDataInfoList({siteId, stackDeviceId, clusterDeviceId, batteryId, pageSize, pageNum}) { export function getClusterDataInfoList({siteId, stackDeviceId, clusterDeviceId, batteryId, pageSize, pageNum}) {
return request({ return request({
@ -73,6 +79,7 @@ export function getClusterDataInfoList({siteId, stackDeviceId, clusterDeviceId,b
method: 'get' method: 'get'
}) })
} }
// 单体电池图表 // 单体电池图表
//http://localhost:8089/ems/siteMonitor/getSingleBatteryData?clusterDeviceId=BMSC01&siteId=021_FXX_01&deviceId=001&startDate=2025-07-11&endDate=2025-07-18 //http://localhost:8089/ems/siteMonitor/getSingleBatteryData?clusterDeviceId=BMSC01&siteId=021_FXX_01&deviceId=001&startDate=2025-07-11&endDate=2025-07-18
export function getSingleBatteryData({siteId, deviceId, clusterDeviceId, startDate, endDate}) { export function getSingleBatteryData({siteId, deviceId, clusterDeviceId, startDate, endDate}) {
@ -116,7 +123,16 @@ export function getAmmeterDataList(siteId) {
} }
// 故障告警 // 故障告警
export function getAlarmDetailList({status,siteId, deviceId, alarmLevel, alarmStartTime, alarmEndTime,pageSize,pageNum}) { export function getAlarmDetailList({
status,
siteId,
deviceId,
alarmLevel,
alarmStartTime,
alarmEndTime,
pageSize,
pageNum
}) {
return request({ return request({
url: `/ems/siteAlarm/getAlarmDetailList?siteId=${siteId}&status=${status}&deviceId=${deviceId}&alarmLevel=${alarmLevel}&alarmStartTime=${alarmStartTime}&alarmEndTime=${alarmEndTime}&pageSize=${pageSize}&pageNum=${pageNum}`, url: `/ems/siteAlarm/getAlarmDetailList?siteId=${siteId}&status=${status}&deviceId=${deviceId}&alarmLevel=${alarmLevel}&alarmStartTime=${alarmStartTime}&alarmEndTime=${alarmEndTime}&pageSize=${pageSize}&pageNum=${pageNum}`,
method: 'get' method: 'get'
@ -131,6 +147,7 @@ export function createTicketNo(data) {
data data
}) })
} }
// 概率统计 // 概率统计
//获取概率统计 电量指标接口 //获取概率统计 电量指标接口
export function getElectricData({siteId, startDate, endDate}) { export function getElectricData({siteId, startDate, endDate}) {
@ -139,6 +156,7 @@ export function getElectricData({siteId,startDate,endDate}) {
method: 'get' method: 'get'
}) })
} }
//获取pcs列表 //获取pcs列表
export function getPcsNameList(siteId) { export function getPcsNameList(siteId) {
return request({ return request({
@ -146,6 +164,7 @@ export function getPcsNameList(siteId) {
method: 'get' method: 'get'
}) })
} }
//pcs曲线 //pcs曲线
export function getPCSData({siteId, startTime, endTime, dataType}) { export function getPCSData({siteId, startTime, endTime, dataType}) {
return request({ return request({
@ -153,6 +172,7 @@ export function getPCSData({siteId,startTime,endTime,dataType}) {
method: 'get' method: 'get'
}) })
} }
//电池堆曲线 //电池堆曲线
export function getStackData({siteId, startTime, endTime, dataType}) { export function getStackData({siteId, startTime, endTime, dataType}) {
return request({ return request({
@ -160,6 +180,7 @@ export function getStackData({siteId,startTime,endTime,dataType}) {
method: 'get' method: 'get'
}) })
} }
//电池温度 //电池温度
export function getClusterData({siteId, stackId, clusterId, dateTime, pageNum, pageSize}) { export function getClusterData({siteId, stackId, clusterId, dateTime, pageNum, pageSize}) {
return request({ return request({
@ -177,6 +198,7 @@ export function storagePower(siteId,startTime,endTime) {
method: 'get' method: 'get'
}) })
} }
//poc温度 //poc温度
export function pcsMaxTemp(siteId, startTime, endTime) { export function pcsMaxTemp(siteId, startTime, endTime) {
return request({ return request({
@ -184,6 +206,7 @@ export function pcsMaxTemp(siteId,startTime,endTime) {
method: 'get' method: 'get'
}) })
} }
// 电池平均soc // 电池平均soc
export function batteryAveSoc(siteId, startTime, endTime) { export function batteryAveSoc(siteId, startTime, endTime) {
return request({ return request({
@ -191,6 +214,7 @@ export function batteryAveSoc(siteId,startTime,endTime) {
method: 'get' method: 'get'
}) })
} }
// 电池平均温度 // 电池平均温度
export function batteryAveTemp(siteId, startTime, endTime) { export function batteryAveTemp(siteId, startTime, endTime) {
return request({ return request({
@ -198,6 +222,7 @@ export function batteryAveTemp(siteId,startTime,endTime) {
method: 'get' method: 'get'
}) })
} }
// 功率曲线 // 功率曲线
export function getPowerData({siteId, startDate, endDate}) { export function getPowerData({siteId, startDate, endDate}) {
return request({ return request({
@ -213,6 +238,7 @@ export function getLoadNameList(siteId) {
method: 'get' method: 'get'
}) })
} }
// 电表报表 // 电表报表
export function getAmmeterData({siteId, startTime, endTime, pageSize, pageNum}) { export function getAmmeterData({siteId, startTime, endTime, pageSize, pageNum}) {
return request({ return request({
@ -221,6 +247,14 @@ export function getAmmeterData({siteId,startTime,endTime, pageSize, pageNum}) {
}) })
} }
// 电价报表
export function getAmmeterRevenueData(data) {
return request({
url: `/ems/statsReport/getAmmeterRevenueData`,
method: 'get',
params: data
})
}
//策略列表 //策略列表
export function strategyRunningList(siteId) { export function strategyRunningList(siteId) {
@ -229,6 +263,7 @@ export function strategyRunningList(siteId) {
method: 'get' method: 'get'
}) })
} }
//停止策略 //停止策略
export function stopStrategyRunning(id) { export function stopStrategyRunning(id) {
return request({ return request({
@ -236,6 +271,7 @@ export function stopStrategyRunning(id) {
method: 'get' method: 'get'
}) })
} }
// 获取所有主策略 // 获取所有主策略
export function getMainStrategyList() { export function getMainStrategyList() {
return request({ return request({
@ -243,6 +279,7 @@ export function getMainStrategyList() {
method: 'get' method: 'get'
}) })
} }
//获取所有辅助策略 //获取所有辅助策略
export function getAuxStrategyList() { export function getAuxStrategyList() {
return request({ return request({
@ -250,6 +287,7 @@ export function getAuxStrategyList() {
method: 'get' method: 'get'
}) })
} }
//配置策略 //配置策略
export function configStrategy(data) { export function configStrategy(data) {
return request({ return request({
@ -267,6 +305,7 @@ export function getTempNameList({siteId,strategyId}) {
method: 'get', method: 'get',
}) })
} }
//获取模板详情 //获取模板详情
///strategy/temp/list?templateId=1 ///strategy/temp/list?templateId=1
export function getStrategyTempDetail(templateId) { export function getStrategyTempDetail(templateId) {
@ -275,6 +314,7 @@ export function getStrategyTempDetail(templateId) {
method: 'get', method: 'get',
}) })
} }
//新增模板 //新增模板
export function addStrategyTemp(data) { export function addStrategyTemp(data) {
return request({ return request({
@ -283,6 +323,7 @@ export function addStrategyTemp(data) {
data data
}) })
} }
export function editStrategyTemp(data) { export function editStrategyTemp(data) {
return request({ return request({
url: `/strategy/temp`, url: `/strategy/temp`,
@ -290,6 +331,7 @@ export function editStrategyTemp(data) {
data data
}) })
} }
//http://localhost:8089/strategy/temp/{id} //http://localhost:8089/strategy/temp/{id}
export function deleteStrategyTemp(id) { export function deleteStrategyTemp(id) {
return request({ return request({
@ -305,6 +347,7 @@ export function timeConfigList({siteId,strategyId}) {
method: 'get', method: 'get',
}) })
} }
//保存时间配置 //保存时间配置
// http://localhost:8089/strategy/timeConfig // http://localhost:8089/strategy/timeConfig
export function setTimeConfigList(data) { export function setTimeConfigList(data) {
@ -314,6 +357,7 @@ export function setTimeConfigList(data) {
data data
}) })
} }
// 策略曲线图 // 策略曲线图
//http://localhost:8089/strategy/curve/curveList?strategyId=1&siteId=021_FXX_01 //http://localhost:8089/strategy/curve/curveList?strategyId=1&siteId=021_FXX_01
export function curveList({siteId, strategyId}) { export function curveList({siteId, strategyId}) {

View File

@ -23,13 +23,23 @@ export const dzjk=[
path: '/dzjk/home', path: '/dzjk/home',
component: () => import('@/views/ems/dzjk/home/index.vue'), component: () => import('@/views/ems/dzjk/home/index.vue'),
name: 'DzjkHome', name: 'DzjkHome',
meta: { title: '站点首页',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkHome' } meta: {
title: '站点首页',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkHome'
}
}, },
{ {
path: '/dzjk/zxlt', path: '/dzjk/zxlt',
component: () => import('@/views/ems/dzjk/zxlt/index.vue'), component: () => import('@/views/ems/dzjk/zxlt/index.vue'),
name: 'DzjkZxlt', name: 'DzjkZxlt',
meta: { title: '主线路图',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkZxlt' } meta: {
title: '主线路图',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkZxlt'
}
}, },
{ {
path: '/dzjk/sbjk', path: '/dzjk/sbjk',
@ -42,55 +52,121 @@ export const dzjk=[
path: 'ssyx', path: 'ssyx',
component: () => import('@/views/ems/dzjk/sbjk/ssyx/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/ssyx/index.vue'),
name: 'DzjkSbjkSsyx', name: 'DzjkSbjkSsyx',
meta: { title: '实时运行',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'SSYX'}, meta: {
title: '实时运行',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'SSYX'
},
},
{
path: 'ems',
component: () => import('@/views/ems/dzjk/sbjk/ems/index.vue'),
name: 'DzjkSbjkEms',
meta: {
title: 'EMS',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'EMS'
},
}, },
{ {
path: 'pcs', path: 'pcs',
component: () => import('@/views/ems/dzjk/sbjk/pcs/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/pcs/index.vue'),
name: 'DzjkSbjkPcs', name: 'DzjkSbjkPcs',
meta: { title: 'PCS',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'PCS'}, meta: {
title: 'PCS',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'PCS'
},
}, },
{ {
path: 'bmszl', path: 'bmszl',
component: () => import('@/views/ems/dzjk/sbjk/bmszl/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/bmszl/index.vue'),
name: 'DzjkSbjkBmszl', name: 'DzjkSbjkBmszl',
meta: { title: 'BMS总览',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk', deviceCategory:'STACK'}, meta: {
title: 'BMS总览',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'STACK'
},
}, },
{ {
path: 'bmsdcc', path: 'bmsdcc',
component: () => import('@/views/ems/dzjk/sbjk/bmsdcc/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/bmsdcc/index.vue'),
name: 'DzjkSbjkBmsdcc', name: 'DzjkSbjkBmsdcc',
meta: { title: 'BMS电池簇',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'CLUSTER'}, meta: {
title: 'BMS电池簇',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'CLUSTER'
},
}, },
{ {
path: 'dtdc', path: 'dtdc',
component: () => import('@/views/ems/dzjk/sbjk/dtdc/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/dtdc/index.vue'),
name: 'DzjkSbjkDtdc', name: 'DzjkSbjkDtdc',
meta: { title: '单体电池',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'BATTERY'}, meta: {
title: 'BMS单体电池',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'BATTERY'
},
}, },
{ {
path: 'db', path: 'db',
component: () => import('@/views/ems/dzjk/sbjk/db/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/db/index.vue'),
name: 'DzjkSbjkDb', name: 'DzjkSbjkDb',
meta: { title: '电表',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'AMMETER'}, meta: {
title: '电表',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'AMMETER'
},
}, },
{ {
path: 'yl', path: 'yl',
component: () => import('@/views/ems/dzjk/sbjk/yl/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/yl/index.vue'),
name: 'DzjkSbjkYl', name: 'DzjkSbjkYl',
meta: { title: '液冷',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'COOLING'}, meta: {
title: '冷却',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'COOLING'
},
}, },
{ {
path: 'dh', path: 'dh',
component: () => import('@/views/ems/dzjk/sbjk/dh/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/dh/index.vue'),
name: 'DzjkSbjkDh', name: 'DzjkSbjkDh',
meta: { title: '动环',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'DH'}, meta: {
title: '动环',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'DH'
},
}, },
{ {
path: 'xf', path: 'xf',
component: () => import('@/views/ems/dzjk/sbjk/xf/index.vue'), component: () => import('@/views/ems/dzjk/sbjk/xf/index.vue'),
name: 'DzjkSbjkXf', name: 'DzjkSbjkXf',
meta: { title: '消防',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkSbjk',deviceCategory:'XF'}, meta: {
title: '消防',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkSbjk',
deviceCategory: 'XF'
},
} }
] ]
}, },
@ -98,7 +174,12 @@ export const dzjk=[
path: '/dzjk/gzgj', path: '/dzjk/gzgj',
component: () => import('@/views/ems/dzjk/gzgj/index.vue'), component: () => import('@/views/ems/dzjk/gzgj/index.vue'),
name: 'DzjkGzgj', name: 'DzjkGzgj',
meta: { title: '故障告警',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkGzgj' } meta: {
title: '故障告警',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkGzgj'
}
}, },
{ {
path: '/dzjk/tjbb', path: '/dzjk/tjbb',
@ -111,43 +192,78 @@ export const dzjk=[
path: 'gltj', path: 'gltj',
component: () => import('@/views/ems/dzjk/tjbb/gltj/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/gltj/index.vue'),
name: 'DzjkTjbbGltj', name: 'DzjkTjbbGltj',
meta: { title: '概率统计',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: '概率统计',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
}, },
{ {
path: 'glqx', path: 'glqx',
component: () => import('@/views/ems/dzjk/tjbb/glqx/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/glqx/index.vue'),
name: 'DzjkTjbbGlqx', name: 'DzjkTjbbGlqx',
meta: { title: '功率曲线',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: '功率曲线',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
}, },
{ {
path: 'pcsqx', path: 'pcsqx',
component: () => import('@/views/ems/dzjk/tjbb/pcsqx/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/pcsqx/index.vue'),
name: 'DzjkTjbbPcsqx', name: 'DzjkTjbbPcsqx',
meta: { title: 'PCS曲线',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: 'PCS曲线',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
}, },
{ {
path: 'dcdqx', path: 'dcdqx',
component: () => import('@/views/ems/dzjk/tjbb/dcdqx/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/dcdqx/index.vue'),
name: 'DzjkTjbbDcdqx', name: 'DzjkTjbbDcdqx',
meta: { title: '电池堆曲线',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: '电池堆曲线',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
}, },
{ {
path: 'dcwd', path: 'dcwd',
component: () => import('@/views/ems/dzjk/tjbb/dcwd/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/dcwd/index.vue'),
name: 'DzjkTjbbDcwd', name: 'DzjkTjbbDcwd',
meta: { title: '电池温度',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: '电池温度',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
}, },
{ {
path: 'dbbb', path: 'dbbb',
component: () => import('@/views/ems/dzjk/tjbb/dbbb/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/dbbb/index.vue'),
name: 'DzjkTjbbDbbb', name: 'DzjkTjbbDbbb',
meta: { title: '电表报表',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: '电表报表',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
}, },
{ {
path: 'sybb', path: 'sybb',
component: () => import('@/views/ems/dzjk/tjbb/sybb/index.vue'), component: () => import('@/views/ems/dzjk/tjbb/sybb/index.vue'),
name: 'DzjkTjbbSybb', name: 'DzjkTjbbSybb',
meta: { title: '收益报表',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkTjbb'}, meta: {
title: '收益报表',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkTjbb'
},
} }
] ]
}, },
@ -162,7 +278,12 @@ export const dzjk=[
path: 'clyx', path: 'clyx',
component: () => import('@/views/ems/dzjk/clpz/clyx/index.vue'), component: () => import('@/views/ems/dzjk/clpz/clyx/index.vue'),
name: 'DzjkClpzClyx', name: 'DzjkClpzClyx',
meta: { title: '策略运行',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkClpz'}, meta: {
title: '策略运行',
breadcrumb: false,
activeMenu: '/dzjk',
activeSecondMenuName: 'DzjkClpz'
},
}, },
// { // {
// path: 'xftg', // path: 'xftg',

View File

@ -1,4 +1,5 @@
import {getAlarmDetailList, getSiteAllDeviceCategory} from '@/api/ems/dzjk' import {getAlarmDetailList, getSiteAllDeviceCategory} from '@/api/ems/dzjk'
const ems = { const ems = {
state: { state: {
dzjkAlarmLighting: false,//单站监控 告警统计红点标志 dzjkAlarmLighting: false,//单站监控 告警统计红点标志
@ -17,7 +18,6 @@ const ems = {
ticketStatusOptions: {1: '待处理', 2: '处理中', 3: '已处理'},//工单处理状态 ticketStatusOptions: {1: '待处理', 2: '处理中', 3: '已处理'},//工单处理状态
strategyStatusOptions: {'0': '未启用', '1': '已运行', '2': '已暂停', '3': '禁用', '4': '删除'},//策略状态 strategyStatusOptions: {'0': '未启用', '1': '已运行', '2': '已暂停', '3': '禁用', '4': '删除'},//策略状态
chargeStatusOptions: {'1': '充电', '2': '待机'},//冲放状态 chargeStatusOptions: {'1': '充电', '2': '待机'},//冲放状态
deviceCategoryOptions:{'PCS':'PCS','STACK':'电池堆','CLUSTER':'电池簇','COOLING':'液冷','BATTERY':'单体电池','AMMETER':'电表'},//设备类别
comparisonOperatorOptions: {'>': '>', '<': '<', '=': '=', '>=': '>=', '<=': '<='}, comparisonOperatorOptions: {'>': '>', '<': '<', '=': '=', '>=': '>=', '<=': '<='},
relationWithPoint: {'||': '||', '&&': '&&'} relationWithPoint: {'||': '||', '&&': '&&'}
}, },
@ -35,7 +35,16 @@ const ems = {
actions: { actions: {
//查询站点的所有待处理0的告警 存在展示红点标志 //查询站点的所有待处理0的告警 存在展示红点标志
getSiteAlarmNum({state, commit}, siteId) { getSiteAlarmNum({state, commit}, siteId) {
getAlarmDetailList({status:0,siteId,pageSize:10,pageNum:1,deviceId:'',alarmLevel:'',alarmStartTime:'',alarmEndTime:''}).then(response=>{ getAlarmDetailList({
status: 0,
siteId,
pageSize: 10,
pageNum: 1,
deviceId: '',
alarmLevel: '',
alarmStartTime: '',
alarmEndTime: ''
}).then(response => {
commit('SET_DZJK_ALARM_LIGHTING', !!response?.total || false) commit('SET_DZJK_ALARM_LIGHTING', !!response?.total || false)
}) })
}, },
@ -43,6 +52,7 @@ const ems = {
getSiteAllDeviceCategory(siteId).then(response => { getSiteAllDeviceCategory(siteId).then(response => {
let data = response?.data || []; let data = response?.data || [];
data.unshift('SSYX'); data.unshift('SSYX');
data.unshift('EMS');//todo delete
commit('SET_ZD_DEVICE_CATEGORY_OPTIONS', {siteId, data}) commit('SET_ZD_DEVICE_CATEGORY_OPTIONS', {siteId, data})
}) })
} }

View File

@ -0,0 +1,257 @@
<template>
<div v-loading="loading" class="ems">
<div
v-for="(item, index) in list"
:key="index + 'PcsHome'"
style="margin-bottom: 25px"
>
<el-card
:class="{
'warning-card-container': item.workStatus === '1',
'timing-card-container': item.workStatus === '2',
'running-card-container': !['1', '2'].includes(item.workStatus),
}"
class="sbjk-card-container common-card-container-body-no-padding common-card-container-no-title-bg"
shadow="always"
>
<!-- 标题-->
<div slot="header">
<span class="large-title"
>{{ item.deviceName }}</span
>
<div class="info">
<div>
{{
$store.state.ems.workStatusOptions[item.workStatus]
}}
</div>
<div>数据更新时间{{ item.dataUpdateTime }}</div>
</div>
<div class="alarm">
<el-button type="primary" size="small" style="margin-right:20px;" @click="pointDetail(item,'point')">
详细
</el-button>
<el-badge :value="item.alarmNum || 0" class="item">
<i
class="el-icon-message-solid alarm-icon"
@click="pointDetail(item,'alarmPoint')"
></i>
</el-badge>
</div>
</div>
<!-- 工作状态-->
<div class="descriptions-main">
<el-descriptions :colon="false" :column="5" direction="vertical">
<el-descriptions-item
:contentClassName="`descriptions-direction ${
item.workStatus === '0' ? 'save' : 'danger'
}`"
:span="1"
label="工作状态"
labelClassName="descriptions-label"
>{{
$store.state.ems.workStatusOptions[item.workStatus]
}}
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="工作模式"
labelClassName="descriptions-label"
>
todo 手动/自动
{{
$store.state.ems.gridStatusOptions[item.gridStatus]
}}
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="并网状态"
labelClassName="descriptions-label"
>{{
$store.state.ems.gridStatusOptions[item.gridStatus]
}}
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="告警状态"
labelClassName="descriptions-label"
>
todo
<!--
{{
$store.state.ems.warnOptions[item.warnMode]
}}-->
</el-descriptions-item
>
<el-descriptions-item
:contentClassName="`descriptions-direction ${
item.deviceStatus === '2' ? 'save' : 'danger'
}`"
:span="1"
label="设备状态"
labelClassName="descriptions-label"
>{{
$store.state.ems.deviceStatusOptions[item.deviceStatus]
}}
</el-descriptions-item
>
</el-descriptions>
</div>
<!-- 用电量-->
<div class="descriptions-main descriptions-main-bg-color">
<el-descriptions :colon="false" :column="5" direction="vertical">
<el-descriptions-item
:span="5"
contentClassName="descriptions-direction"
label="当日用电量:"
labelClassName="descriptions-label"
>
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="电网用电量"
labelClassName="descriptions-label"
>
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="储能放电量"
labelClassName="descriptions-label"
>
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="储能充电量"
labelClassName="descriptions-label"
>
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="负荷用电量"
labelClassName="descriptions-label"
>
</el-descriptions-item
>
<el-descriptions-item
:span="1"
contentClassName="descriptions-direction"
label="光伏发电量"
labelClassName="descriptions-label"
>
</el-descriptions-item
>
</el-descriptions>
</div>
<!-- 表格-->
<el-table
class="common-table"
stripe
style="width: 100%;margin-top:25px;">
<el-table-column
label="功率"
prop="type">
</el-table-column>
<el-table-column
label="电网"
>
<template slot-scope="scope">
<span class="pointer"
@click="showChart('簇电压',scope.row.clusterId)">{{ scope.row.clusterVoltage }} V</span>
</template>
</el-table-column>
<el-table-column
label="储能">
<template slot-scope="scope">
<span class="pointer"
@click="showChart('簇电流',scope.row.clusterId)">{{ scope.row.clusterCurrent }} A</span>
</template>
</el-table-column>
<el-table-column
label="负荷">
<template slot-scope="scope">
<span class="pointer"
@click="showChart('簇电流',scope.row.clusterId)">{{ scope.row.clusterCurrent }} A</span>
</template>
</el-table-column>
<el-table-column
label="光伏">
<template slot-scope="scope">
<span class="pointer"
@click="showChart('当前SOC',scope.row.clusterId)">{{ scope.row.currentSoc }} %</span>
</template>
</el-table-column>
</el-table>
<!-- 图表-->
<div id="emsChart" style="height: 350px"></div>
</el-card>
</div>
<el-empty v-show="list.length <= 0" :image-size="200"></el-empty>
<point-chart ref="pointChart" :site-id="siteId"/>
<point-table ref="pointTable"/>
</div>
</template>
<script>
import pointChart from "./../PointChart.vue";
import PointTable from "@/views/ems/site/sblb/PointTable.vue";
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import {getPcsDetailInfo} from "@/api/ems/dzjk";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
export default {
name: "DzjkSbjkEms",
components: {pointChart, PointTable},
mixins: [getQuerySiteId, intervalUpdate],
data() {
return {
loading: false,
list: [],
};
},
methods: {
// 查看设备电位表格
pointDetail(row, dataType) {
const {deviceId} = row
this.$refs.pointTable.showTable({siteId: this.siteId, deviceId, deviceCategory: 'PCS'}, dataType)
},
showChart(pointName, deviceId, isBranch = false) {
pointName &&
this.$refs.pointChart.showChart({pointName, deviceCategory: isBranch ? 'BRANCH' : 'PCS', deviceId});
},
getPcsList() {
this.loading = true;
getPcsDetailInfo(this.siteId)
.then((response) => {
const data = response?.data || {};
this.list = JSON.parse(JSON.stringify(data));
})
.finally(() => (this.loading = false));
},
updateData() {
this.getPcsList();
},
init() {
this.updateData();
this.updateInterval(this.updateData);
},
},
};
</script>
<style lang="scss" scoped></style>

View File

@ -1,4 +1,3 @@
<template> <template>
<div style="width:100%" v-loading="loading"> <div style="width:100%" v-loading="loading">
<!-- 搜索栏--> <!-- 搜索栏-->
@ -41,27 +40,27 @@
<el-table-column label="充电价格" align="center"> <el-table-column label="充电价格" align="center">
<el-table-column <el-table-column
align="center" align="center"
prop="activePeakKwh" prop="activePeakPrice"
label="尖"> label="尖">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="activeHighKwh" prop="activeHighPrice"
label="峰"> label="峰">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="activeFlatKwh" prop="activeFlatPrice"
label="平"> label="平">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="activeValleyKwh" prop="activeValleyPrice"
label="谷"> label="谷">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="activeTotalKwh" prop="activeTotalPrice"
label="总"> label="总">
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
@ -69,27 +68,27 @@
<el-table-column label="放电价格" align="center"> <el-table-column label="放电价格" align="center">
<el-table-column <el-table-column
align="center" align="center"
prop="reActivePeakKwh" prop="reActivePeakPrice"
label="尖"> label="尖">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="reActiveHighKwh" prop="reActiveHighPrice"
label="峰"> label="峰">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="reActiveFlatKwh" prop="reActiveFlatPrice"
label="平"> label="平">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="reActiveValleyKwh" prop="reActiveValleyPrice"
label="谷"> label="谷">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
align="center" align="center"
prop="reActiveTotalKwh" prop="reActiveTotalPrice"
label="总"> label="总">
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
@ -120,8 +119,9 @@
<script> <script>
import getQuerySiteId from "@/mixins/ems/getQuerySiteId"; import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import { getAmmeterData} from '@/api/ems/dzjk' import {getAmmeterRevenueData} from '@/api/ems/dzjk'
import {formatDate} from "@/filters/ems"; import {formatDate} from "@/filters/ems";
export default { export default {
name: 'DzjkTjbbSybb', name: 'DzjkTjbbSybb',
mixins: [getQuerySiteId], mixins: [getQuerySiteId],
@ -171,7 +171,8 @@ export default {
this.loading = true this.loading = true
const {siteId, pageNum, pageSize} = this const {siteId, pageNum, pageSize} = this
const [startTime = '', endTime = ''] = (this.dateRange || []) const [startTime = '', endTime = ''] = (this.dateRange || [])
getAmmeterData({siteId:siteId,startTime,endTime,pageSize,pageNum}).then(response=>{ //http://localhost:8089/ems/statsReport/getAmmeterRevenueData?siteId=021_DDS_01&startTime=2025-10-14&endTime=2025-10-15&pageSize=10&pageNum=1
getAmmeterRevenueData({siteId: siteId, startTime, endTime, pageSize, pageNum}).then(response => {
this.tableData = response?.rows || []; this.tableData = response?.rows || [];
this.totalSize = response?.total || 0 this.totalSize = response?.total || 0
}).finally(() => { }).finally(() => {