This commit is contained in:
白菜
2025-08-11 21:50:38 +08:00
parent 9db3b4f9f7
commit d203ca541a
19 changed files with 62 additions and 71 deletions

View File

@ -7,6 +7,13 @@ export function getDzjkHomeView(siteId) {
method: 'get' method: 'get'
}) })
} }
//站点首页 冲放曲线
export function getSevenChargeData({siteId,startDate,endDate}) {
return request({
url: `/ems/siteMap/getSevenChargeData?siteId=${siteId}&startDate=${startDate}&endDate=${endDate}`,
method: 'get'
})
}
//获取pcs、实时运行头部的设备信息 //获取pcs、实时运行头部的设备信息
export function getRunningHeadInfo(siteId) { export function getRunningHeadInfo(siteId) {
@ -86,9 +93,9 @@ export function getAmmeterDataList(siteId) {
} }
// 故障告警 // 故障告警
export function getAlarmDetailList({siteId, deviceType, alarmLevel, alarmStartTime, alarmEndTime,pageSize,pageNum}) { export function getAlarmDetailList({siteId, deviceId, alarmLevel, alarmStartTime, alarmEndTime,pageSize,pageNum}) {
return request({ return request({
url: `/ems/siteAlarm/getAlarmDetailList?siteId=${siteId}&deviceType=${deviceType}&alarmLevel=${alarmLevel}&alarmStartTime=${alarmStartTime}&alarmEndTime=${alarmEndTime}&pageSize=${pageSize}&pageNum=${pageNum}`, url: `/ems/siteAlarm/getAlarmDetailList?siteId=${siteId}&deviceId=${deviceId}&alarmLevel=${alarmLevel}&alarmStartTime=${alarmStartTime}&alarmEndTime=${alarmEndTime}&pageSize=${pageSize}&pageNum=${pageNum}`,
method: 'get' method: 'get'
}) })
} }

View File

@ -62,7 +62,8 @@ export default {
}, },
timeLine(type){ timeLine(type){
//baseTime,maxTime //baseTime,maxTime
let baseTime = new Date(this.dateRange[type === 'before' ? 0 : 1]).getTime(),maxTime = new Date(this.defaultDateRange[1]).getTime() let baseTime = type === 'before' ? new Date(this.dateRange[0]).getTime() - ( 24 * 60 * 60 * 1000) :new Date(this.dateRange[1]).getTime() + ( 24 * 60 * 60 * 1000) ,
maxTime = new Date(this.defaultDateRange[1]).getTime()
//updateTime //updateTime
let updateTime = type === 'before' ? baseTime - 7 * 24 * 60 * 60 * 1000 : baseTime + 7 * 24 * 60 * 60 * 1000 let updateTime = type === 'before' ? baseTime - 7 * 24 * 60 * 60 * 1000 : baseTime + 7 * 24 * 60 * 60 * 1000
if(type === 'next' && updateTime >= maxTime) updateTime = maxTime if(type === 'next' && updateTime >= maxTime) updateTime = maxTime
@ -79,6 +80,9 @@ export default {
.time-range{ .time-range{
display: flex; display: flex;
::v-deep { ::v-deep {
.el-range-editor--medium .el-range__icon, .el-range-editor--medium .el-range__close-icon{
line-height: 22px;
}
.el-range-editor--medium.el-input__inner{ .el-range-editor--medium.el-input__inner{
height: 30px; height: 30px;
} }

View File

@ -1,23 +1,5 @@
import Layout from "@/layout/index.vue"; import Layout from "@/layout/index.vue";
//todo delete 删除动态路由页面的定义 接口会传递进来
// const ems = [
// {
// path: '',
// component: Layout,
// redirect: 'noRedirect',
// children: [
// {
// path: 'zddt',
// component: () => import('@/views/ems/zddt/index'),
// name: 'zddt',
// meta: { title: '站点地图', icon: 'guide' }
// }
// ]
// }
// ]
// export default ems
//单站监控 //单站监控
// todo 本地设置了 hidden:true,不会显示在侧边栏,需要在系统管理、菜单管理中手动添加菜单后才会展示在侧边栏 // todo 本地设置了 hidden:true,不会显示在侧边栏,需要在系统管理、菜单管理中手动添加菜单后才会展示在侧边栏
export const dzjk=[ export const dzjk=[

View File

@ -1,7 +1,5 @@
import Vue from 'vue' import Vue from 'vue'
import Router from 'vue-router' import Router from 'vue-router'
// todo delete
import ems from './ems'//EMS管理系统routers引用
import {dzjk} from '@/router/ems' import {dzjk} from '@/router/ems'
Vue.use(Router) Vue.use(Router)
@ -92,7 +90,6 @@ export const constantRoutes = [
] ]
}, },
// EMS管理系统routers // EMS管理系统routers
// ...ems
...dzjk ...dzjk
] ]

View File

@ -40,7 +40,6 @@ export default {
this.$refs.tomePowerChart.changeSiteId() this.$refs.tomePowerChart.changeSiteId()
}) })
}, },
//在编辑、删除模板后更新时间配置、echart的数据todo
updateTimeSetting(){ updateTimeSetting(){
this.$refs.timeSetting.init() this.$refs.timeSetting.init()
this.$refs.tomePowerChart.init() this.$refs.tomePowerChart.init()

View File

@ -4,8 +4,8 @@
<!-- 搜索栏--> <!-- 搜索栏-->
<el-form :inline="true" class="select-container"> <el-form :inline="true" class="select-container">
<el-form-item label="设备清单"> <el-form-item label="设备清单">
<el-select v-model="search.deviceType" clearable placeholder="请选择" :loading="loading" loading-text="正在加载数据"> <el-select v-model="search.deviceId" clearable placeholder="请选择" :loading="loading" loading-text="正在加载数据">
<el-option :label="value" :value="key" v-for="(value,key) in $store.state.ems.deviceTypeOptions" :key="key+'deviceTypeOptions'"></el-option> <el-option :label="item.deviceName" :value="item.deviceId" v-for="(item,key) in deviceOptions" :key="key+'deviceIdOptions'"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="告警等级"> <el-form-item label="告警等级">
@ -114,6 +114,7 @@
<script> <script>
import {getAlarmDetailList} from'@/api/ems/dzjk' import {getAlarmDetailList} from'@/api/ems/dzjk'
import {getDeviceList} from'@/api/ems/site'
import getQuerySiteId from "@/mixins/ems/getQuerySiteId"; import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
import { formatDate } from '@/filters/ems' import { formatDate } from '@/filters/ems'
export default { export default {
@ -126,6 +127,7 @@ export default {
{name:'今日告警',id:'today'}, {name:'今日告警',id:'today'},
{name:'历史告警',id:'history'}, {name:'历史告警',id:'history'},
], ],
deviceOptions:[],//设备列表
pickerOptions:{ pickerOptions:{
disabledDate(time) { disabledDate(time) {
return time.getTime() > Date.now(); return time.getTime() > Date.now();
@ -134,7 +136,7 @@ export default {
defaultDateRange:[],//默认展示的时间 defaultDateRange:[],//默认展示的时间
dateRange:[],//alarmStartTime,alarmEndTime dateRange:[],//alarmStartTime,alarmEndTime
activeBtn:'today', activeBtn:'today',
search:{deviceType:'',alarmLevel:''}, search:{deviceId:'',alarmLevel:''},
// 表格、分页 // 表格、分页
tableData:[], tableData:[],
pageSize:10,//分页栏当前每个数据总数 pageSize:10,//分页栏当前每个数据总数
@ -186,7 +188,7 @@ export default {
}, },
// 重置 // 重置
onReset(){ onReset(){
this.search={deviceType:'',alarmLevel:''} this.search={deviceId:'',alarmLevel:''}
this.dateRange=[] this.dateRange=[]
this.pageNum =1//每次搜索从1开始搜索 this.pageNum =1//每次搜索从1开始搜索
this.getData() this.getData()
@ -213,7 +215,7 @@ export default {
// 获取数据 // 获取数据
getData(){ getData(){
this.loading=true this.loading=true
const {deviceType,alarmLevel} = this.search const {deviceId,alarmLevel} = this.search
const {siteId,pageNum,pageSize,activeBtn} =this const {siteId,pageNum,pageSize,activeBtn} =this
const [alarmStartTime='',alarmEndTime='']=(this.dateRange || []) const [alarmStartTime='',alarmEndTime='']=(this.dateRange || [])
let start='',end = '',now =new Date() let start='',end = '',now =new Date()
@ -230,12 +232,18 @@ export default {
// end.setDate(end.getDate() - 1); // end.setDate(end.getDate() - 1);
} }
} }
getAlarmDetailList({deviceType,alarmLevel,siteId,pageSize,pageNum,alarmStartTime:formatDate(start),alarmEndTime:formatDate(end)}).then(response => { getAlarmDetailList({deviceId,alarmLevel,siteId,pageSize,pageNum,alarmStartTime:formatDate(start),alarmEndTime:formatDate(end)}).then(response => {
this.tableData=response?.rows || []; this.tableData=response?.rows || [];
this.totalSize = response?.total || 0 this.totalSize = response?.total || 0
}).finally(() => {this.loading=false}) }).finally(() => {this.loading=false})
}, },
getDeviceOptions(){
getDeviceList(this.siteId).then(response => {
this.deviceOptions = JSON.parse(JSON.stringify(response?.data || []))
})
},
init(){ init(){
this.getDeviceOptions()
this.onReset() this.onReset()
}, },
}, },

View File

@ -12,7 +12,7 @@
<script> <script>
import * as echarts from 'echarts' import * as echarts from 'echarts'
import resize from '@/mixins/ems/resize' import resize from '@/mixins/ems/resize'
import DateRangeSelect from '@/components/Ems/DateRangeSelect.vue' import DateRangeSelect from '@/components/Ems/DateRangeSelect/index.vue'
import {getPcsNameList, getPowerData} from '@/api/ems/dzjk' import {getPcsNameList, getPowerData} from '@/api/ems/dzjk'
export default { export default {

View File

@ -12,8 +12,8 @@
<script> <script>
import * as echarts from 'echarts' import * as echarts from 'echarts'
import resize from '@/mixins/ems/resize' import resize from '@/mixins/ems/resize'
import DateRangeSelect from '@/components/Ems/DateRangeSelect.vue' import DateRangeSelect from '@/components/Ems/DateRangeSelect/index.vue'
// import {getPcsNameList, getPowerData} from '@/api/ems/dzjk' import {getSevenChargeData} from '@/api/ems/dzjk'
export default { export default {
mixins: [resize], mixins: [resize],
components: {DateRangeSelect}, components: {DateRangeSelect},
@ -45,11 +45,10 @@ export default {
getWeekKData(){ getWeekKData(){
this.showLoading() this.showLoading()
const {siteId,timeRange}=this const {siteId,timeRange}=this
//todo delete
this.hideLoading() this.hideLoading()
// todo({siteId,startDate:timeRange[0],endDate:timeRange[1]}).then(response => { getSevenChargeData({siteId,startDate:timeRange[0],endDate:timeRange[1]}).then(response => {
// this.setOption(response?.data || []) this.setOption(response?.data || [])
// }).finally(()=>this.hideLoading()) }).finally(()=>this.hideLoading())
}, },
init(siteId){ init(siteId){
//初始化 清空数据 //初始化 清空数据
@ -57,7 +56,6 @@ export default {
this.timeRange=[] this.timeRange=[]
this.deviceId='' this.deviceId=''
this.$refs.dateRangeSelect.init() this.$refs.dateRangeSelect.init()
this.getWeekKData()
}, },
initChart() { initChart() {
this.chart = echarts.init(document.querySelector('#weekChart')) this.chart = echarts.init(document.querySelector('#weekChart'))

View File

@ -1,6 +1,6 @@
<template> <template>
<div v-loading="loading"> <div v-loading="loading">
<el-row style="background:#fff;" class="row-container"> <el-row style="background:#fff;" class="row-container" :gutter="15">
<el-col v-if="tableData.length>0" :xs="24" :sm="24" :lg="24"> <el-col v-if="tableData.length>0" :xs="24" :sm="24" :lg="24">
<alarm-table :tableData="tableData"/> <alarm-table :tableData="tableData"/>
</el-col> </el-col>

View File

@ -64,5 +64,10 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
@media only screen and (min-width: 1200px) {
.single-square-box-container {
min-width: 16.6666666667%;
width: fit-content;
}
}
</style> </style>

View File

@ -62,7 +62,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="maxVoltage" prop="maxCellVoltageId"
label="电池号码"> label="电池号码">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -73,7 +73,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="maxVoltage" prop="minCellVoltageId"
label="电池号码"> label="电池号码">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -83,7 +83,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="maxVoltage" prop="maxCellTempId"
label="电池号码"> label="电池号码">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -94,7 +94,7 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="maxVoltage" prop="minCellTempId"
label="电池号码"> label="电池号码">
</el-table-column> </el-table-column>

View File

@ -13,7 +13,7 @@
<div>数据更新时间{{pcsItem.dataUpdateTime}}</div> <div>数据更新时间{{pcsItem.dataUpdateTime}}</div>
</div> </div>
<div class="pcs-btns"> <div class="pcs-btns">
<el-badge :value="0" class="item"> <el-badge :value="pcsItem.alarmNum || 0" class="item">
<i class="el-icon-message-solid" style="font-size: 26px;color: #fff;display: block;"></i> <i class="el-icon-message-solid" style="font-size: 26px;color: #fff;display: block;"></i>
</el-badge> </el-badge>
</div> </div>
@ -92,11 +92,8 @@ export default {
if (action === 'confirm') { if (action === 'confirm') {
instance.confirmButtonLoading = true; instance.confirmButtonLoading = true;
setTimeout(() => { setTimeout(() => {
// todo 调用接口如果关机成功 调用done方法 否则不关闭弹窗
done(); done();
// setTimeout(() => {
instance.confirmButtonLoading = false; instance.confirmButtonLoading = false;
// }, 300);
}, 3000); }, 3000);
} else { } else {
done(); done();
@ -123,11 +120,8 @@ export default {
if (action === 'confirm') { if (action === 'confirm') {
instance.confirmButtonLoading = true; instance.confirmButtonLoading = true;
setTimeout(() => { setTimeout(() => {
// todo 调用接口如果关机成功 调用done方法 否则不关闭弹窗
done(); done();
// setTimeout(() => {
instance.confirmButtonLoading = false; instance.confirmButtonLoading = false;
// }, 300);
}, 3000); }, 3000);
} else { } else {
done(); done();

View File

@ -57,7 +57,7 @@ export default {
top: '10', top: '10',
}, },
grid: { grid: {
left: "15%" containLabel: true
}, },
tooltip: { tooltip: {
trigger: 'axis', trigger: 'axis',

View File

@ -61,7 +61,7 @@ export default {
} }
}, },
grid: { grid: {
left: "15%" containLabel: true
}, },
textStyle:{ textStyle:{
color:"#333333", color:"#333333",

View File

@ -62,7 +62,7 @@ export default {
} }
}, },
grid: { grid: {
left: "15%" containLabel: true
}, },
textStyle:{ textStyle:{
color:"#333333", color:"#333333",

View File

@ -58,7 +58,7 @@ export default {
} }
}, },
grid: { grid: {
left: "15%" containLabel: true
}, },
textStyle:{ textStyle:{
color:"#333333", color:"#333333",

View File

@ -1,7 +1,6 @@
<template> <template>
<div v-loading="loading"> <div v-loading="loading">
<!-- todo 判断条件是否需要更新-->
<div class="yl-item-container" :class="{'yl-warn-item-container':item.workMode !== '0'}" v-for="(item,index) in list" :key="index+'ylLise'"> <div class="yl-item-container" :class="{'yl-warn-item-container':item.workMode !== '0'}" v-for="(item,index) in list" :key="index+'ylLise'">
<div class="header"> <div class="header">
<div class="header-title">{{item.systemName}}</div> <div class="header-title">{{item.systemName}}</div>

View File

@ -23,8 +23,8 @@
<!-- bmspcs 下级和上级在一列 --> <!-- bmspcs 下级和上级在一列 -->
<div class="row-lists pcs-row-lists" v-if="showPcsAndBms"> <div class="row-lists pcs-row-lists" v-if="showPcsAndBms">
<div class="item-square"> <div class="item-square">
<div class="row-lists-title" v-if="showPcs">PCS</div> <div class="row-lists-title" v-if="showPcs">PCS({{pcs.length}})</div>
<div class="row-lists-title" v-if="showBms">BMS</div> <div class="row-lists-title" v-if="showBms">BMS({{bms.length}})</div>
</div> </div>
<!-- 上下级块 class区分--> <!-- 上下级块 class区分-->
<div class="item-square pcs-has-children-item-square" :class="{'no-bms-list':!showBms}" v-for="(item,index) in pcsHasChildren" :key="index+'pcsHasChildren'"> <div class="item-square pcs-has-children-item-square" :class="{'no-bms-list':!showBms}" v-for="(item,index) in pcsHasChildren" :key="index+'pcsHasChildren'">
@ -92,7 +92,7 @@
<!-- 电表--> <!-- 电表-->
<div class="row-lists" v-if="showDb"> <div class="row-lists" v-if="showDb">
<div class="item-square"> <div class="item-square">
<div class="row-lists-title" style="width:100%;">电表</div> <div class="row-lists-title" style="width:100%;">电表({{db.length}})</div>
</div> </div>
<div class="item-square"> <div class="item-square">
<!-- 左边的下级 下级有多个--> <!-- 左边的下级 下级有多个-->
@ -115,7 +115,7 @@
<!--冷却--> <!--冷却-->
<div class="row-lists" v-if="showLq"> <div class="row-lists" v-if="showLq">
<div class="item-square"> <div class="item-square">
<div class="row-lists-title" style="width:100%;">冷却</div> <div class="row-lists-title" style="width:100%;">冷却({{lq.length}})</div>
</div> </div>
<div class="item-square"> <div class="item-square">
<div class="item-lists"> <div class="item-lists">

View File

@ -33,13 +33,11 @@
<el-option :label="item" :value="item" v-for="(item,index) in deviceCategoryList" :key="index+'deviceCategoryList'"></el-option> <el-option :label="item" :value="item" v-for="(item,index) in deviceCategoryList" :key="index+'deviceCategoryList'"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- todo 只有电池簇展示-->
<el-form-item label="上级设备" prop="parentId" v-if="formData.deviceCategory === dccDeviceCategory"> <el-form-item label="上级设备" prop="parentId" v-if="formData.deviceCategory === dccDeviceCategory">
<el-select v-model="formData.parentId" :placeholder="parentDeviceList.length === 0 && !formData.siteId ? '请先选择站点' : '请选择'" :style="{width: '100%'}"> <el-select v-model="formData.parentId" :placeholder="parentDeviceList.length === 0 && !formData.siteId ? '请先选择站点' : '请选择'" :style="{width: '100%'}">
<el-option :label="item.deviceName" :value="item.id" v-for="(item,index) in parentDeviceList" :key="index+'parentDeviceList'" ></el-option> <el-option :label="item.deviceName" :value="item.id" v-for="(item,index) in parentDeviceList" :key="index+'parentDeviceList'" ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!--todo tcp设备才展示ip地址端口号-->
<el-form-item label="TCP设备的ip地址" prop="ipAddress" v-if="formData.deviceType === 'TCP'"> <el-form-item label="TCP设备的ip地址" prop="ipAddress" v-if="formData.deviceType === 'TCP'">
<el-input v-model="formData.ipAddress" placeholder="请输入" clearable :style="{width: '100%'}"> <el-input v-model="formData.ipAddress" placeholder="请输入" clearable :style="{width: '100%'}">
</el-input> </el-input>