设备监控-点位清单

This commit is contained in:
白菜
2025-11-25 17:56:12 +08:00
parent 0b2e7d9b86
commit 1378947a9e
14 changed files with 169 additions and 80 deletions

View File

@ -154,30 +154,30 @@ export function getClusterData({siteId,stackId,clusterId,dateTime,pageNum,pageSi
// 实时运行
//储能
export function storagePower(siteId) {
export function storagePower(siteId,startTime,endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/storagePower?siteId=${siteId}`,
url: `/ems/siteMonitor/runningGraph/storagePower?siteId=${siteId}&startTime=${startTime}&endTime=${endTime}`,
method: 'get'
})
}
//poc温度
export function pcsMaxTemp(siteId) {
export function pcsMaxTemp(siteId,startTime,endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/pcsMaxTemp?siteId=${siteId}`,
url: `/ems/siteMonitor/runningGraph/pcsMaxTemp?siteId=${siteId}&startTime=${startTime}&endTime=${endTime}`,
method: 'get'
})
}
// 电池平均soc
export function batteryAveSoc(siteId) {
export function batteryAveSoc(siteId,startTime,endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/batteryAveSoc?siteId=${siteId}`,
url: `/ems/siteMonitor/runningGraph/batteryAveSoc?siteId=${siteId}&startTime=${startTime}&endTime=${endTime}`,
method: 'get'
})
}
// 电池平均温度
export function batteryAveTemp(siteId) {
export function batteryAveTemp(siteId,startTime,endTime) {
return request({
url: `/ems/siteMonitor/runningGraph/batteryAveTemp?siteId=${siteId}`,
url: `/ems/siteMonitor/runningGraph/batteryAveTemp?siteId=${siteId}&startTime=${startTime}&endTime=${endTime}`,
method: 'get'
})
}
@ -312,4 +312,4 @@ export function getPointData({siteId,startDate,endDate}) {
url: `/ems/siteMonitor/getPointData?siteId=${siteId}&startDate=${startDate}&endDate=${endDate}`,
method: 'get',
})
}
}

View File

@ -8,7 +8,10 @@
'running-card-container':baseInfo.workStatus === '0'
}">
<div slot="header">
<span class="large-title">{{index+1}}#{{baseInfo.parentDeviceName?`${baseInfo.parentDeviceName} —> ` : ''}}{{baseInfo.deviceName}}</span>
<span class="large-title">{{baseInfo.parentDeviceName?`${baseInfo.parentDeviceName} —> ` : ''}}{{baseInfo.deviceName}}</span>
<div class="alarm">
<el-button type="primary" size="small" style="margin-right:20px;" @click="pointDetail(baseInfo)">详细</el-button>
</div>
</div>
<div class="descriptions-main">
<el-descriptions direction="vertical" :column="3" :colon="false">
@ -80,19 +83,21 @@
</div>
<el-empty v-show="baseInfoList.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 {getBMSBatteryCluster} from '@/api/ems/dzjk'
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
export default {
name:'DzjkSbjkBmsdcc',
mixins:[getQuerySiteId,intervalUpdate],
components:{pointChart},
components:{PointTable, pointChart},
data() {
return {
loading:false,
@ -127,6 +132,11 @@ export default {
}
},
methods:{
// 查看设备电位表格
pointDetail(row){
const {siteId,deviceId} = row
this.$refs.pointTable.showTable({siteId,deviceId,deviceCategory:'CLUSTER'})
},
showChart(pointName,deviceId){
pointName && this.$refs.pointChart.showChart({pointName,deviceCategory:'CLUSTER',deviceId})
},

View File

@ -8,7 +8,10 @@
}" 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">{{index+1}}#{{baseInfo.deviceName}}</span>
<span class="large-title">{{baseInfo.deviceName}}</span>
<div class="alarm">
<el-button type="primary" size="small" style="margin-right:20px;" @click="pointDetail(baseInfo)">详细</el-button>
</div>
</div>
<div class="descriptions-main">
<el-descriptions :colon="false" :column="3" direction="vertical">
@ -111,6 +114,7 @@
</div>
<el-empty v-show="baseInfoList.length<=0" :image-size="200"></el-empty>
<point-chart ref="pointChart" :site-id="siteId"/>
<point-table ref="pointTable"/>
</div>
</template>
@ -119,9 +123,10 @@ import {getBMSOverView} from '@/api/ems/dzjk'
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
import pointChart from "./../PointChart.vue";
import PointTable from "@/views/ems/site/sblb/PointTable.vue";
export default {
name:'DzjkSbjkBmszl',
components: {pointChart,},
components: {pointChart,PointTable},
mixins:[getQuerySiteId,intervalUpdate],
data() {
return {
@ -141,6 +146,11 @@ export default {
}
},
methods:{
// 查看设备电位表格
pointDetail(row){
const {siteId,deviceId} = row
this.$refs.pointTable.showTable({siteId,deviceId,deviceCategory:'STACK'})
},
showChart(pointName,deviceId,deviceCategory = 'STACK'){
pointName && this.$refs.pointChart.showChart({pointName,deviceCategory,deviceId})
},

View File

@ -11,7 +11,7 @@
}"
>
<div slot="header">
<span class="large-title">{{index+1}}#{{ item.deviceName }}</span>
<span class="large-title">{{ item.deviceName }}</span>
<div class="info">
<div>
{{
@ -22,6 +22,9 @@
</div>
<div>数据更新时间{{ item.dataUpdateTime }}</div>
</div>
<div class="alarm">
<el-button type="primary" size="small" style="margin-right:20px;" @click="pointDetail(item)">详细</el-button>
</div>
</div>
<el-row>
<el-col v-for="(tempDataItem,tempDataIndex) in deviceIdTypeMsg[item.deviceId]" :key="tempDataIndex+'dbTempData'" :span="8">
@ -33,6 +36,7 @@
</el-card>
<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>
@ -41,10 +45,11 @@ import pointChart from "./../PointChart.vue";
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import { getAmmeterDataList } from "@/api/ems/dzjk";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
import PointTable from "@/views/ems/site/sblb/PointTable.vue";
export default {
name: "DzjkSbjkDb",
mixins: [getQuerySiteId,intervalUpdate],
components:{pointChart},
components:{PointTable, pointChart},
data() {
return {
loading: false,
@ -140,6 +145,11 @@ export default {
};
},
methods: {
// 查看设备电位表格
pointDetail(row){
const {deviceId} = row
this.$refs.pointTable.showTable({siteId:this.siteId,deviceId,deviceCategory:'AMMETER'})
},
showChart(pointName,deviceId){
pointName && this.$refs.pointChart.showChart({pointName,deviceCategory:'AMMETER',deviceId})
},

View File

@ -52,13 +52,13 @@
</el-button>
</template>
</el-table-column>
<!-- <el-table-column label="曲线图">
<el-table-column label="操作">
<template slot-scope="scope">
<el-button @click="chartDetail(scope.row)" type="text" size="small">
展示
<el-button @click="$emit('pointDetail',scope.row)" type="text" size="small">
详细
</el-button>
</template>
</el-table-column> -->
</el-table-column>
</el-table>
<!-- <el-pagination
v-show="tableData.length > 0"

View File

@ -88,6 +88,7 @@
:totalSize="totalSize"
:pointIdList="pointIdList"
@chart="chartDetail"
@pointDetail="pointDetail"
></component>
<el-pagination
v-show="tableData.length > 0"
@ -104,6 +105,7 @@
</el-pagination>
<chart-detail ref="chartDetail" />
<point-chart ref="pointChart" :site-id="siteId" />
<point-table ref="pointTable"/>
</el-card>
</template>
@ -119,10 +121,12 @@ import ChartDetail from "./ChartDetail.vue";
import Table from "./Table.vue";
import List from "./List.vue";
import pointChart from "./../PointChart.vue";
import PointTable from "@/views/ems/site/sblb/PointTable.vue";
export default {
name: "DzjkSbjkDtdc",
mixins: [getQuerySiteId],
components: {
PointTable,
BarChart,
ChartDetail,
DtdcTable: Table,
@ -165,6 +169,11 @@ export default {
};
},
methods: {
// 查看设备电位表格
pointDetail(row){
const {deviceId,clusterDeviceId} = row
this.$refs.pointTable.showTable({siteId:this.siteId,deviceId,deviceCategory:'BATTERY',parentId:clusterDeviceId})
},
changeMenu(menu) {
const { activeBtn } = this;
activeBtn !== menu && (this.activeBtn = menu);

View File

@ -18,7 +18,7 @@
>
<div slot="header">
<span class="large-title"
>{{ pcsIndex + 1 }}#{{ pcsItem.deviceName }}</span
>{{ pcsItem.deviceName }}</span
>
<div class="info">
<div>
@ -31,6 +31,7 @@
<div>数据更新时间{{ pcsItem.dataUpdateTime }}</div>
</div>
<div class="alarm">
<el-button type="primary" size="small" style="margin-right:20px;" @click="pointDetail(pcsItem)">详细</el-button>
<el-badge :value="pcsItem.alarmNum || 0" class="item">
<i
class="el-icon-message-solid"
@ -170,18 +171,20 @@
</div>
<el-empty v-show="pcsList.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 RealTimeBaseInfo from "./../RealTimeBaseInfo.vue";
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import { getRunningHeadInfo, getPcsDetailInfo } from "@/api/ems/dzjk";
import intervalUpdate from "@/mixins/ems/intervalUpdate";
export default {
name: "DzjkSbjkPcs",
components: { RealTimeBaseInfo, pointChart },
components: { RealTimeBaseInfo, pointChart ,PointTable},
mixins: [getQuerySiteId, intervalUpdate],
data() {
return {
@ -269,6 +272,11 @@ export default {
};
},
methods: {
// 查看设备电位表格
pointDetail(row){
const {siteId,deviceId} = row
this.$refs.pointTable.showTable({siteId,deviceId,deviceCategory:'PCS'})
},
showChart(pointName, deviceId,isBranch=false) {
pointName &&
this.$refs.pointChart.showChart({ pointName,deviceCategory:isBranch ? 'BRANCH' : 'PCS', deviceId });

View File

@ -35,12 +35,13 @@ export default {
this.chart = null;
},
methods: {
init(siteId) {
init(siteId, timeRange) {
this.chart.showLoading();
const x = [];
const data1 = [],
data2 = [];
storagePower(siteId)
const [startTime='', endTime=''] = timeRange;
storagePower(siteId,startTime,endTime)
.then((response) => {
this.setOption(response?.data?.pcsPowerList || []);
})

View File

@ -34,9 +34,10 @@ export default {
this.chart = null;
},
methods: {
init(siteId) {
init(siteId,timeRange) {
this.chart.showLoading();
batteryAveSoc(siteId)
const [startTime='', endTime=''] = timeRange;
batteryAveSoc(siteId,startTime,endTime)
.then((response) => {
this.setOption(response?.data?.batteryAveSOCList || []);
})

View File

@ -35,12 +35,13 @@ export default {
this.chart = null;
},
methods: {
init(siteId) {
init(siteId,timeRange) {
this.chart.showLoading();
const x = [];
const data1 = [],
data2 = [];
batteryAveTemp(siteId)
const [startTime='', endTime=''] = timeRange;
batteryAveTemp(siteId,startTime,endTime)
.then((response) => {
this.setOption(response?.data?.batteryAveTempList || []);
})

View File

@ -35,11 +35,12 @@ export default {
this.chart = null;
},
methods: {
init(siteId) {
init(siteId,timeRange) {
this.chart.showLoading();
const x = [];
const data = [];
pcsMaxTemp(siteId)
const [startTime='', endTime=''] = timeRange;
pcsMaxTemp(siteId,startTime,endTime)
.then((response) => {
this.setOption(response?.data?.pcsMaxTempList || []);
})

View File

@ -3,6 +3,8 @@
<div class="ssyx-ems-dashboard-editor-container">
<!-- 6个方块-->
<real-time-base-info :data="runningHeadData"/>
<!-- 时间选择 -->
<date-range-select ref="dateRangeSelect" @updateDate="updateDate" style="margin-top:20px;"/>
<!-- echart图表-->
<el-row :gutter="32" style="background:#fff;margin:30px 0;">
<el-col :xs="24" :sm="12" :lg="12">
@ -27,6 +29,7 @@
</style>
<script>
import DateRangeSelect from '@/components/Ems/DateRangeSelect/index.vue'
import RealTimeBaseInfo from "./../RealTimeBaseInfo.vue";
import CnglqxChart from './CnglqxChart.vue'
import PocpjwdChart from './PocpjwdChart.vue'
@ -38,11 +41,13 @@ import intervalUpdate from "@/mixins/ems/intervalUpdate";
export default {
name:'DzjkSbjkSsyx',
components:{RealTimeBaseInfo,CnglqxChart,PocpjwdChart,DcpjwdChart,DcpjsocChart},
components:{RealTimeBaseInfo,CnglqxChart,PocpjwdChart,DcpjwdChart,DcpjsocChart,DateRangeSelect},
mixins:[getQuerySiteId,intervalUpdate],
data() {
return {
runningHeadData:{},//运行信息
timeRange:[],
isInit:true
}
},
methods:{
@ -52,17 +57,27 @@ export default {
this.runningHeadData = response?.data || {}
})
},
// 更新时间范围 重置图表
updateDate(data){
this.timeRange=data
!this.isInit && this.updateChart()
this.isInit = false
},
updateChart(){
this.$refs.cnglqx.init(this.siteId,this.timeRange||[])
this.$refs.pocpjwd.init(this.siteId,this.timeRange||[])
this.$refs.dcpjsoc.init(this.siteId,this.timeRange||[])
this.$refs.dcpjwd.init(this.siteId,this.timeRange||[])
this.updateInterval(this.updateData)
},
updateData(){
this.getRunningHeadData()
this.$refs.cnglqx.init(this.siteId)
this.$refs.pocpjwd.init(this.siteId)
this.$refs.dcpjsoc.init(this.siteId)
this.$refs.dcpjwd.init(this.siteId)
this.updateChart()
},
init(){
this.$refs.dateRangeSelect.init(true)
this.$nextTick(()=>{
this.updateData()
this.updateInterval(this.updateData)
})
}
}

View File

@ -7,7 +7,10 @@
class="sbjk-card-container running-card-container"
shadow="always">
<div slot="header">
<span class="large-title">{{index+1}}#{{item.deviceName}}</span>
<span class="large-title">{{item.deviceName}}</span>
<div class="alarm">
<el-button type="primary" size="small" style="margin-right:20px;" @click="pointDetail(item)">详细</el-button>
</div>
</div>
<el-row>
<el-col v-for="(tempDataItem,tempDataIndex) in tempData" :key="tempDataIndex+'ylTempData'" :span="8">
@ -19,6 +22,7 @@
</el-card>
<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>
@ -28,10 +32,11 @@ import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import {getCoolingDataList} from '@/api/ems/dzjk'
import intervalUpdate from "@/mixins/ems/intervalUpdate";
import pointChart from "./../PointChart.vue";
import PointTable from "@/views/ems/site/sblb/PointTable.vue";
export default {
name:'DzjkSbjkYl',
mixins:[getQuerySiteId,intervalUpdate],
components:{pointChart},
components:{pointChart,PointTable},
data() {
return {
loading:false,
@ -48,6 +53,11 @@ export default {
}
},
methods:{
// 查看设备电位表格
pointDetail(row){
const {deviceId} = row
this.$refs.pointTable.showTable({siteId:this.siteId,deviceId,deviceCategory:'COOLING'})
},
showChart(pointName,deviceId){
pointName && this.$refs.pointChart.showChart({pointName,deviceCategory:'COOLING',deviceId})
},

View File

@ -32,10 +32,10 @@
</el-form-item>
<el-form-item label="modbus ip">
<el-input
v-model="form.ipAddress"
clearable
placeholder="请输入ip"
style="width: 150px"
v-model="form.ipAddress"
clearable
placeholder="请输入ip"
style="width: 150px"
></el-input>
</el-form-item>
<el-form-item label="最小值">
@ -56,10 +56,10 @@
</el-form-item>
<el-form-item label="modbus 端口">
<el-input
v-model="form.ipPort"
clearable
placeholder="请输入端口"
style="width: 150px"
v-model="form.ipPort"
clearable
placeholder="请输入端口"
style="width: 150px"
></el-input>
</el-form-item>
<el-form-item style="margin-left: 20px">
@ -77,12 +77,15 @@
@sort-change="handleSortChange"
>
<el-table-column label="数据点位" prop="dataPoint"> </el-table-column>
<el-table-column label="数据点位名称" prop="pointName"></el-table-column>
<el-table-column
label="modbus地址"
>
label="数据点位名称"
prop="pointName"
></el-table-column>
<el-table-column label="modbus地址">
<template slot-scope="scope">
<span>{{`${scope.row.ipAddress || ''} ${scope.row.ipPort || ''}`}}</span>
<span>{{
`${scope.row.ipAddress || ""} ${scope.row.ipPort || ""}`
}}</span>
</template>
</el-table-column>
<el-table-column
@ -92,19 +95,18 @@
sortable="custom"
>
<template slot-scope="scope">
<span
class="pointer"
@click="
showChart(
scope.row
)
"
>{{ scope.row.pointValue }}</span
>
<span class="pointer" @click="showChart(scope.row)">{{
scope.row.pointValue
}}</span>
</template>
</el-table-column>
<el-table-column label="单位" prop="dataUnit"></el-table-column>
<el-table-column label="更新时间" min-width="160px" prop="updateTime" sortable="custom">
<el-table-column
label="更新时间"
min-width="160px"
prop="updateTime"
sortable="custom"
>
</el-table-column>
</el-table>
<el-pagination
@ -137,29 +139,29 @@ export default {
if (!val) {
this.tableData = [];
this.deviceId = "";
this.parentId='';
this.parentId = "";
this.siteId = "";
this.pageSize = 10;
this.pageNum = 1;
this.totalSize = 0;
this.form = {
sortMethod: "desc", //升序不传或者asc、降序desc
sortData:this.defaultSort.prop,
sortData: this.defaultSort.prop,
dataPointName: "", //点位名称
dataPoint: "", //点位名称
lower: "", //
upper: "", //
ipAddress:'',
ipPort:''
ipAddress: "",
ipPort: "",
};
this.loading = false;
}
},
},
computed:{
isDtdc(){
return this.deviceCategory === 'BATTERY'
}
computed: {
isDtdc() {
return this.deviceCategory === "BATTERY";
},
},
data() {
return {
@ -174,12 +176,12 @@ export default {
dataPoint: "", //点位名称
lower: "", //
upper: "", //
ipAddress:'',
ipPort:''
ipAddress: "",
ipPort: "",
},
deviceCategory: "",
deviceId: "",
parentId:'',
parentId: "",
siteId: "",
tableData: [],
pageSize: 10, //分页栏当前每个数据总数
@ -188,15 +190,26 @@ export default {
};
},
methods: {
showChart({pointName}) {
if(pointName){
const {deviceCategory,deviceId}=this
if(this.isDtdc) this.$refs.pointChart.showChart({ pointName, deviceCategory, deviceId:this.parentId,child:[deviceId] });
else this.$refs.pointChart.showChart({ pointName, deviceCategory, deviceId });
showChart({ pointName }) {
if (pointName) {
const { deviceCategory, deviceId } = this;
if (this.isDtdc)
this.$refs.pointChart.showChart({
pointName,
deviceCategory,
deviceId: this.parentId,
child: [deviceId],
});
else
this.$refs.pointChart.showChart({
pointName,
deviceCategory,
deviceId,
});
}
},
handleSortChange(column) {
this.form.sortData = column.prop
this.form.sortData = column.prop;
this.form.sortMethod = column.order === "descending" ? "desc" : "asc";
console.log("切换排序方式", column, this.form);
this.getData();
@ -205,11 +218,11 @@ export default {
this.pageNum = 1;
this.getData();
},
showTable({ deviceCategory, siteId, deviceId ,parentId=''}) {
showTable({ deviceCategory, siteId, deviceId, parentId = "" }) {
this.deviceCategory = deviceCategory;
this.siteId = siteId;
this.deviceId = deviceId;
this.parentId=deviceCategory === 'BATTERY' ? parentId : ''//只有单体电池需要这个值
this.parentId = deviceCategory === "BATTERY" ? parentId : ""; //只有单体电池需要这个值
this.show = true;
this.getData();
},
@ -230,7 +243,7 @@ export default {
lower,
upper,
ipAddress,
ipPort
ipPort,
},
} = this;
getDevicePointList({
@ -247,7 +260,7 @@ export default {
lower,
upper,
ipAddress,
ipPort
ipPort,
})
.then((response) => {
this.tableData = response?.rows || [];