Files
emsapp/pages/work/index.vue
2025-08-15 17:41:26 +08:00

303 lines
7.1 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="work-container">
<!-- 站点选择列表 -->
<uni-section title="业态选择" type="line" :titleFontSize="titleFontSize" class="sections-list">
<uni-row>
<uni-col :span="10" :offset='1'>
<uni-section title="业态列表" titleFontSize="14px">
<uni-data-select :clear="false" :value="siteType" :localdata="siteTypeOptions"
@change="selectedSiteType"></uni-data-select>
</uni-section>
</uni-col>
<uni-col :span="10" :offset='2'>
<uni-section title="可选清单" titleFontSize="14px">
<uni-data-select ref="siteListSelect" :clear="false" :value="siteId"
:localdata="siteType ===1 ? siteList : []" @change="selectedSite"></uni-data-select>
</uni-section>
</uni-col>
</uni-row>
</uni-section>
<!-- 静态信息 -->
<uni-section title="静态信息" type="line" :titleFontSize="titleFontSize" class="sections-list">
<view class="base-lists" v-for="(item,index) in singleZdInfo" :key="index+'zdBaseInfo'">
<text class="left">{{item.title}}</text>
<text class="right">{{baseInfo[item.attr]}}</text>
</view>
</uni-section>
<!-- 菜单 -->
<uni-section title="工作台" type="line" :titleFontSize="titleFontSize" class="sections-list">
<view class="grid-body">
<uni-grid :column="4" :showBorder="false" @change="toDetail">
<uni-grid-item v-for="(item,index) in gridList" :index="index" :key="index+'work'">
<view class="grid-item-box">
<view class="icon iconfont" :class="item.icon" size="30"></view>
<text class="text">{{item.text}}</text>
</view>
</uni-grid-item>
</uni-grid>
</view>
</uni-section>
<!-- 一周功率曲线 uchart的组件最好放在同级-->
<uni-section title="一周功率曲线" type="line" :titleFontSize="titleFontSize" class="sections-list">
<!-- <week-chart /> -->
<view style="width:100%;height: 250px;">
<qiun-data-charts type="line" :chartData="chartsData" :optsWatch='false' :inScrollView="true"
:pageScrollTop="pageScrollTop" :opts="options" :ontouch="true" />
</view>
</uni-section>
</view>
</template>
<script>
import WeekChart from './WeekChart.vue'
import {
getAllSites,
getSingleSiteBaseInfo,
getSevenChargeData,
} from '@/api/ems/site.js'
export default {
components: {
WeekChart
},
data() {
return {
// 图表数据
chartsData: {},
pageScrollTop: 0,
options: {
enableScroll: true,
xAxis: {
scrollShow: true,
itemCount: 7,
disableGrid: true
},
update: true,
// duration: 2,
// animation: false,
// enableScroll: true,
// padding: [10, 15, 10, 15]
},
// 图表数据结束
titleFontSize: '16px',
siteType: 1,
siteTypeOptions: [{
text: '储能',
value: 1,
},
{
text: '光能',
value: 2,
},
{
text: '岸电',
value: 3,
}
],
siteList: [],
siteId: '', //选择的站点ID
baseInfo: {}, //站点基本信息
singleZdInfo: [{
title: "电站位置",
attr: "siteAddress",
},
{
title: "投运时间",
attr: "runningTime",
},
{
title: "装机功率(MW)",
attr: "installPower",
},
{
title: "装机容量(MW)",
attr: "installCapacity",
},
],
gridList: [{
page: 'bmszl',
icon: 'icon-BMS',
text: 'BMS总览',
},
{
page: 'bmsdcc',
icon: 'icon-a-dianchicunengliangkuai',
text: 'BMS电池簇',
},
{
page: 'pcs',
icon: 'icon-PCS',
text: 'PCS',
},
{
page: 'db',
icon: 'icon-dianbiao4',
text: '电表',
},
{
page: 'dtdc',
icon: 'icon-dantidianchi',
text: '单体电池',
}
]
}
},
methods: {
toDetail(e) {
if (!this.siteId) return uni.showToast({
title: "请选择清单",
icon: 'none'
})
const {
index
} = e.detail
this.$tab.navigateTo(`/pages/work/${this.gridList[index].page}/index?siteId=${this.siteId}`)
},
selectedSite(id) {
if (id === this.siteId) return
this.siteId = id
if (this.siteType === 1) {
this.getSiteBaseInfo()
this.getWeekChartData()
}
},
selectedSiteType(id) {
if (id === this.siteType) return
this.siteType = id
this.siteId = ''
this.baseInfo = {}
this.chartsData = {}
},
getSiteBaseInfo() {
getSingleSiteBaseInfo({
siteId: this.siteId
}).then(response => {
console.log('获取站点基本信息', response)
this.baseInfo = response?.data || {}
})
},
getSiteList() {
getAllSites().then(response => {
const data = response?.data || []
this.siteList = data.map(item => {
return {
text: item.siteName,
value: item.siteId,
id: item.id
}
})
// 设置默认展示的站点
if (data.length > 0) {
this.siteId = data[0].siteId
this.getSiteBaseInfo()
this.getWeekChartData()
}
})
},
getWeekChartData() {
getSevenChargeData({
siteId: this.siteId,
startDate: '', //timeRange[0],
endDate: '', //timeRange[1]
}).then(response => {
console.log('一周功率曲线', response)
let data = response?.data || [],
categories = [],
chargedCap = [],
disChargedCap = []
data.forEach(item => {
categories.push(item.ammeterDate || undefined)
chargedCap.push(item.chargedCap || undefined)
disChargedCap.push(item.disChargedCap || undefined)
})
this.chartsData = JSON.parse(JSON.stringify({
categories,
series: [{
"name": '充电量',
"data": chargedCap
},
{
"name": '放电量',
"data": disChargedCap
}
]
}))
})
}
},
// 页面切换不会重新调用如果希望每次切换页面都重新调接口使用onShow
mounted() {
if (this.siteType === 1) {
this.getSiteList()
}
},
onPageScroll(e) {
this.pageScrollTop = e.scrollTop
},
}
</script>
<style lang="scss" scoped>
/* #ifndef APP-NVUE */
page {
display: flex;
flex-direction: column;
box-sizing: border-box;
background-color: #fff;
min-height: 100%;
height: auto;
}
view {
font-size: 14px;
line-height: inherit;
}
/* #endif */
.text {
text-align: center;
font-size: 26rpx;
margin-top: 10rpx;
}
.sections-list:not(:first-child) {
margin-top: 40rpx;
}
.grid-item-box {
flex: 1;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
align-items: center;
justify-content: center;
padding: 30rpx 0;
}
.icon {
font-size: 52rpx;
}
.base-lists {
font-size: 28rpx;
line-height: 40rpx;
padding: 10rpx 20rpx;
padding-left: 40rpx;
.left {
width: 220rpx;
display: inline-block;
color: #666;
}
.right {
color: #333;
}
}
@media screen and (min-width: 500px) {}
</style>