Compare commits
36 Commits
screen-dev
...
085f6fd252
| Author | SHA1 | Date | |
|---|---|---|---|
| 085f6fd252 | |||
| d3e51322ab | |||
| 81f8f75d7e | |||
| fccddab04a | |||
| 1b712a70f6 | |||
| 5d84972b8a | |||
| b122ab35ab | |||
| 80f07876c6 | |||
| bef8f01d0d | |||
| b469190d9f | |||
| e98b4ed287 | |||
| 6140ca8f14 | |||
| a3d6cf7c55 | |||
| 6fb706b528 | |||
| 579920e007 | |||
| d9eeee106f | |||
| c90f4f5766 | |||
| 4a4d26f018 | |||
| 1a11c67aad | |||
| 71fd48918d | |||
| 34d9e038e6 | |||
| b4c49c3e58 | |||
| 9cfce671a6 | |||
| 87e3db9f0f | |||
| 4132d8e539 | |||
| 28176ce052 | |||
| fdcf82e343 | |||
| e4c6f1f798 | |||
| f4a42c168f | |||
| 371a2d8be0 | |||
| c403922639 | |||
| 2a3d2fcf63 | |||
| 25bb28f77a | |||
| 3d5d8918d7 | |||
| fe14089562 | |||
| b68f2608f3 |
@ -5,8 +5,9 @@ VUE_APP_TITLE = 上动新能源-EMS管理系统
|
|||||||
NODE_ENV = 'production'
|
NODE_ENV = 'production'
|
||||||
|
|
||||||
# EMS管理系统/生产环境
|
# EMS管理系统/生产环境
|
||||||
VUE_APP_BASE_API= 'http://1.15.120.242:8089'
|
VUE_APP_BASE_API= 'http://127.0.0.1:8089'
|
||||||
|
|
||||||
|
|
||||||
# EMS管理系统/生产环境 图片拼接地址
|
# EMS管理系统/生产环境 图片拼接地址
|
||||||
VUE_APP_IMG_URL = 'http://1.15.120.242:8089'
|
VUE_APP_IMG_URL = 'http://127.0.0.1:8089'
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import ThemePicker from "@/components/ThemePicker"
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "App",
|
name: "App",
|
||||||
components: { ThemePicker }
|
components: { ThemePicker },
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
//右侧内容区域
|
//右侧内容区域
|
||||||
//父元素
|
//父元素
|
||||||
.ems-dashboard-editor-container {
|
.ems-dashboard-editor-container{
|
||||||
background-color: #F1F5FC;
|
background-color: #FFFFFF;//#F1F5FC
|
||||||
padding: 24px;
|
padding: 24px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
}
|
}
|
||||||
@ -280,7 +280,7 @@
|
|||||||
|
|
||||||
.ems-third-menu-container {
|
.ems-third-menu-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-left: 140px;
|
padding-left: 160px;
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
|
|
||||||
.ems-third-menu {
|
.ems-third-menu {
|
||||||
@ -288,10 +288,9 @@
|
|||||||
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
|
||||||
height: fit-content;
|
height: fit-content;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top:20px;
|
||||||
left: 0;
|
left:20px;
|
||||||
|
.el-menu-item{
|
||||||
.el-menu-item {
|
|
||||||
line-height: 45px;
|
line-height: 45px;
|
||||||
height: 45px;
|
height: 45px;
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
|
|||||||
@ -41,6 +41,7 @@
|
|||||||
<svg-icon icon-class="more-up"/>
|
<svg-icon icon-class="more-up"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<BigDataPopup ref="bigDataPopup"/>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -52,6 +53,7 @@ import Hamburger from '@/components/Hamburger'
|
|||||||
import Screenfull from '@/components/Screenfull'
|
import Screenfull from '@/components/Screenfull'
|
||||||
import SizeSelect from '@/components/SizeSelect'
|
import SizeSelect from '@/components/SizeSelect'
|
||||||
import Search from '@/components/HeaderSearch'
|
import Search from '@/components/HeaderSearch'
|
||||||
|
import BigDataPopup from '@/components/BigDataPopup'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
emits: ['setLayout'],
|
emits: ['setLayout'],
|
||||||
@ -61,7 +63,8 @@ export default {
|
|||||||
Hamburger,
|
Hamburger,
|
||||||
Screenfull,
|
Screenfull,
|
||||||
SizeSelect,
|
SizeSelect,
|
||||||
Search
|
Search,
|
||||||
|
BigDataPopup
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
@ -83,10 +86,7 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
showBigDataImg() {
|
showBigDataImg() {
|
||||||
const routeUrl = this.$router.resolve({
|
this.$refs.bigDataPopup.show = true
|
||||||
path: '/screen'
|
|
||||||
})
|
|
||||||
window.open(routeUrl.href, '_blank')
|
|
||||||
},
|
},
|
||||||
toggleSideBar() {
|
toggleSideBar() {
|
||||||
this.$store.dispatch('app/toggleSideBar')
|
this.$store.dispatch('app/toggleSideBar')
|
||||||
|
|||||||
@ -6,16 +6,16 @@ const getQuerySiteId= {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
'$route.query':{
|
'$store.state.ems.zdList':{
|
||||||
handler (newQuery,oldQuery) {
|
handler (newQuery,oldQuery) {
|
||||||
|
if(!newQuery || newQuery.length === 0){return}
|
||||||
// 参数变化处理
|
// 参数变化处理
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
const {siteId} =newQuery
|
const {siteId} =newQuery[0]
|
||||||
if(siteId){
|
this.siteId = siteId
|
||||||
this.siteId = siteId
|
siteId && this.init(newQuery.siteId)
|
||||||
siteId && this.init(newQuery.siteId)
|
console.log('watch站点列表返回数据newQuery=',newQuery)
|
||||||
console.log('mixin=>getQuerySiteId=>页面参数siteId发生了变化,this.siteId=',this.siteId)
|
console.log('设置页面siteId,this.siteId=',this.siteId)
|
||||||
}
|
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
immediate: true,
|
immediate: true,
|
||||||
|
|||||||
@ -31,6 +31,7 @@ router.beforeEach((to, from, next) => {
|
|||||||
// 判断当前用户是否已拉取完user_info信息
|
// 判断当前用户是否已拉取完user_info信息
|
||||||
store.dispatch('GetInfo').then(() => {
|
store.dispatch('GetInfo').then(() => {
|
||||||
isRelogin.show = false
|
isRelogin.show = false
|
||||||
|
store.dispatch('getZdList')
|
||||||
store.dispatch('GenerateRoutes').then(accessRoutes => {
|
store.dispatch('GenerateRoutes').then(accessRoutes => {
|
||||||
// 根据roles权限生成可访问的路由表
|
// 根据roles权限生成可访问的路由表
|
||||||
router.addRoutes(accessRoutes) // 动态添加可访问路由表
|
router.addRoutes(accessRoutes) // 动态添加可访问路由表
|
||||||
|
|||||||
@ -7,295 +7,257 @@ export const dzjk = [
|
|||||||
path: '/dzjk',
|
path: '/dzjk',
|
||||||
component: Layout,
|
component: Layout,
|
||||||
redirect: '/dzjk/home',
|
redirect: '/dzjk/home',
|
||||||
meta: {title: '单站监控', icon: 'dashboard',},
|
meta: {title: '单站监控', icon: 'server',},
|
||||||
alwaysShow: false,
|
alwaysShow: false,
|
||||||
name: 'Dzjk',
|
name: 'Dzjk',
|
||||||
hidden: true,
|
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '',
|
path: '/dzjk/home',
|
||||||
component: () => import('@/views/ems/dzjk/index'),
|
component: () => import('@/views/ems/dzjk/home/index.vue'),
|
||||||
name: 'Dzjk',
|
name: 'DzjkHome',
|
||||||
redirect: '/dzjk/home',
|
meta: {title: '站点首页', breadcrumb: false, activeMenu: '/dzjk/home', activeSecondMenuName: 'DzjkHome'}
|
||||||
hidden: true,
|
},
|
||||||
|
{
|
||||||
|
path: '/dzjk/zxlt',
|
||||||
|
component: () => import('@/views/ems/dzjk/zxlt/index.vue'),
|
||||||
|
name: 'DzjkZxlt',
|
||||||
|
meta: {title: '主线路图', breadcrumb: false, activeMenu: '/dzjk/zxlt', activeSecondMenuName: 'DzjkZxlt'}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dzjk/sbjk',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/index.vue'),
|
||||||
|
name: 'DzjkSbjk',
|
||||||
|
alwaysShow: false,
|
||||||
|
meta: {title: '设备监控', breadcrumb: false, activeMenu: '/dzjk/sbjk'},
|
||||||
|
hidden: false,
|
||||||
|
redirect: '/dzjk/sbjk/ssyx',
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: '/dzjk/home',
|
path: 'ssyx',
|
||||||
component: () => import('@/views/ems/dzjk/home/index.vue'),
|
component: () => import('@/views/ems/dzjk/sbjk/ssyx/index.vue'),
|
||||||
name: 'DzjkHome',
|
name: 'DzjkSbjkSsyx',
|
||||||
|
hidden: true,
|
||||||
meta: {
|
meta: {
|
||||||
title: '站点首页',
|
title: '实时运行',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'SSYX'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'ems',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/ems/index.vue'),
|
||||||
|
name: 'DzjkSbjkEms',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: 'EMS',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'EMS'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'pcs',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/pcs/index.vue'),
|
||||||
|
name: 'DzjkSbjkPcs',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: 'PCS',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'PCS'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'bmszl',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/bmszl/index.vue'),
|
||||||
|
name: 'DzjkSbjkBmszl',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: 'BMS总览',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'STACK'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'bmsdcc',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/bmsdcc/index.vue'),
|
||||||
|
name: 'DzjkSbjkBmsdcc',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: 'BMS电池簇',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'CLUSTER'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dtdc',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/dtdc/index.vue'),
|
||||||
|
name: 'DzjkSbjkDtdc',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '单体电池',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'BATTERY'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'db',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/db/index.vue'),
|
||||||
|
name: 'DzjkSbjkDb',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '电表',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'AMMETER'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'yl',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/yl/index.vue'),
|
||||||
|
name: 'DzjkSbjkYl',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '液冷',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/sbjk',
|
||||||
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
|
deviceCategory: 'COOLING'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dh',
|
||||||
|
component: () => import('@/views/ems/dzjk/sbjk/dh/index.vue'),
|
||||||
|
name: 'DzjkSbjkDh',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '动环',
|
||||||
breadcrumb: false,
|
breadcrumb: false,
|
||||||
activeMenu: '/dzjk',
|
activeMenu: '/dzjk',
|
||||||
activeSecondMenuName: 'DzjkHome'
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
}
|
deviceCategory: 'DH'
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/dzjk/zxlt',
|
path: 'xf',
|
||||||
component: () => import('@/views/ems/dzjk/zxlt/index.vue'),
|
component: () => import('@/views/ems/dzjk/sbjk/xf/index.vue'),
|
||||||
name: 'DzjkZxlt',
|
name: 'DzjkSbjkXf',
|
||||||
|
hidden: true,
|
||||||
meta: {
|
meta: {
|
||||||
title: '主线路图',
|
title: '消防',
|
||||||
breadcrumb: false,
|
breadcrumb: false,
|
||||||
activeMenu: '/dzjk',
|
activeMenu: '/dzjk',
|
||||||
activeSecondMenuName: 'DzjkZxlt'
|
activeSecondMenuName: 'DzjkSbjk',
|
||||||
}
|
deviceCategory: 'XF'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/dzjk/sbjk',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/index.vue'),
|
|
||||||
name: 'DzjkSbjk',
|
|
||||||
meta: {title: '设备监控', breadcrumb: false, activeMenu: '/dzjk'},
|
|
||||||
redirect: '/dzjk/sbjk/ssyx',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'ssyx',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/ssyx/index.vue'),
|
|
||||||
name: 'DzjkSbjkSsyx',
|
|
||||||
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',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/pcs/index.vue'),
|
|
||||||
name: 'DzjkSbjkPcs',
|
|
||||||
meta: {
|
|
||||||
title: 'PCS',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'PCS'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'bmszl',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/bmszl/index.vue'),
|
|
||||||
name: 'DzjkSbjkBmszl',
|
|
||||||
meta: {
|
|
||||||
title: 'BMS总览',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'STACK'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'bmsdcc',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/bmsdcc/index.vue'),
|
|
||||||
name: 'DzjkSbjkBmsdcc',
|
|
||||||
meta: {
|
|
||||||
title: 'BMS电池簇',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'CLUSTER'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dtdc',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/dtdc/index.vue'),
|
|
||||||
name: 'DzjkSbjkDtdc',
|
|
||||||
meta: {
|
|
||||||
title: 'BMS单体电池',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'BATTERY'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'db',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/db/index.vue'),
|
|
||||||
name: 'DzjkSbjkDb',
|
|
||||||
meta: {
|
|
||||||
title: '电表',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'AMMETER'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'yl',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/yl/index.vue'),
|
|
||||||
name: 'DzjkSbjkYl',
|
|
||||||
meta: {
|
|
||||||
title: '冷却',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'COOLING'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dh',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/dh/index.vue'),
|
|
||||||
name: 'DzjkSbjkDh',
|
|
||||||
meta: {
|
|
||||||
title: '动环',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'DH'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'xf',
|
|
||||||
component: () => import('@/views/ems/dzjk/sbjk/xf/index.vue'),
|
|
||||||
name: 'DzjkSbjkXf',
|
|
||||||
meta: {
|
|
||||||
title: '消防',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkSbjk',
|
|
||||||
deviceCategory: 'XF'
|
|
||||||
},
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/dzjk/gzgj',
|
|
||||||
component: () => import('@/views/ems/dzjk/gzgj/index.vue'),
|
|
||||||
name: 'DzjkGzgj',
|
|
||||||
meta: {
|
|
||||||
title: '故障告警',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkGzgj'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/dzjk/tjbb',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/index.vue'),
|
|
||||||
name: 'DzjkTjbb',
|
|
||||||
meta: {title: '统计报表', breadcrumb: false, activeMenu: '/dzjk'},
|
|
||||||
redirect: '/dzjk/tjbb/gltj',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'gltj',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/gltj/index.vue'),
|
|
||||||
name: 'DzjkTjbbGltj',
|
|
||||||
meta: {
|
|
||||||
title: '运行统计',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'glqx',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/glqx/index.vue'),
|
|
||||||
name: 'DzjkTjbbGlqx',
|
|
||||||
meta: {
|
|
||||||
title: '功率曲线',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'pcsqx',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/pcsqx/index.vue'),
|
|
||||||
name: 'DzjkTjbbPcsqx',
|
|
||||||
meta: {
|
|
||||||
title: 'PCS曲线',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dcdqx',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/dcdqx/index.vue'),
|
|
||||||
name: 'DzjkTjbbDcdqx',
|
|
||||||
meta: {
|
|
||||||
title: '电池堆曲线',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dcwd',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/dcwd/index.vue'),
|
|
||||||
name: 'DzjkTjbbDcwd',
|
|
||||||
meta: {
|
|
||||||
title: '电池温度',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'dbbb',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/dbbb/index.vue'),
|
|
||||||
name: 'DzjkTjbbDbbb',
|
|
||||||
meta: {
|
|
||||||
title: '电表报表',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: 'sybb',
|
|
||||||
component: () => import('@/views/ems/dzjk/tjbb/sybb/index.vue'),
|
|
||||||
name: 'DzjkTjbbSybb',
|
|
||||||
meta: {
|
|
||||||
title: '收益报表',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkTjbb'
|
|
||||||
},
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path: '/dzjk/clpz',
|
|
||||||
component: () => import('@/views/ems/dzjk/clpz/index.vue'),
|
|
||||||
name: 'DzjkClpz',
|
|
||||||
meta: {title: '策略配置', breadcrumb: false, activeMenu: '/dzjk'},
|
|
||||||
redirect: '/dzjk/clpz/clyx',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
path: 'clyx',
|
|
||||||
component: () => import('@/views/ems/dzjk/clpz/clyx/index.vue'),
|
|
||||||
name: 'DzjkClpzClyx',
|
|
||||||
meta: {
|
|
||||||
title: '策略运行',
|
|
||||||
breadcrumb: false,
|
|
||||||
activeMenu: '/dzjk',
|
|
||||||
activeSecondMenuName: 'DzjkClpz'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
// {
|
|
||||||
// path: 'xftg',
|
|
||||||
// component: () => import('@/views/ems/dzjk/clpz/xftg/index.vue'),
|
|
||||||
// hidden:true,
|
|
||||||
// breadcrumb: false,
|
|
||||||
// name: 'DzjkClpzXftg',
|
|
||||||
// meta: { title: '削峰填谷',breadcrumb: false,activeMenu: '/dzjk',activeSecondMenuName:'DzjkClpz'},
|
|
||||||
// }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dzjk/gzgj',
|
||||||
|
component: () => import('@/views/ems/dzjk/gzgj/index.vue'),
|
||||||
|
name: 'DzjkGzgj',
|
||||||
|
meta: {title: '故障告警', breadcrumb: false, activeMenu: '/dzjk/gzgj', activeSecondMenuName: 'DzjkGzgj'}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dzjk/tjbb',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/index.vue'),
|
||||||
|
name: 'DzjkTjbb',
|
||||||
|
alwaysShow: false,
|
||||||
|
meta: {title: '统计报表', breadcrumb: false, activeMenu: '/dzjk/tjbb'},
|
||||||
|
hidden: false,
|
||||||
|
redirect: '/dzjk/tjbb/gltj',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'gltj',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/gltj/index.vue'),
|
||||||
|
name: 'DzjkTjbbGltj',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '运行统计',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/tjbb',
|
||||||
|
activeSecondMenuName: 'DzjkTjbb'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'glqx',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/glqx/index.vue'),
|
||||||
|
name: 'DzjkTjbbGlqx',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '功率曲线',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/tjbb',
|
||||||
|
activeSecondMenuName: 'DzjkTjbb'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'pcsqx',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/pcsqx/index.vue'),
|
||||||
|
name: 'DzjkTjbbPcsqx',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: 'PCS曲线',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/tjbb',
|
||||||
|
activeSecondMenuName: 'DzjkTjbb'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dcdqx',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/dcdqx/index.vue'),
|
||||||
|
name: 'DzjkTjbbDcdqx',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '电池堆曲线',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/tjbb',
|
||||||
|
activeSecondMenuName: 'DzjkTjbb'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dcwd',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/dcwd/index.vue'),
|
||||||
|
name: 'DzjkTjbbDcwd',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '电池温度',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/tjbb',
|
||||||
|
activeSecondMenuName: 'DzjkTjbb'
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'dbbb',
|
||||||
|
component: () => import('@/views/ems/dzjk/tjbb/dbbb/index.vue'),
|
||||||
|
name: 'DzjkTjbbDbbb',
|
||||||
|
hidden: true,
|
||||||
|
meta: {
|
||||||
|
title: '电表报表',
|
||||||
|
breadcrumb: false,
|
||||||
|
activeMenu: '/dzjk/tjbb',
|
||||||
|
activeSecondMenuName: 'DzjkTjbb'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dzjk/clpz',
|
||||||
|
component: () => import('@/views/ems/dzjk/clpz/clyx/index.vue'),
|
||||||
|
name: 'DzjkClpz',
|
||||||
|
meta: {title: '策略配置', breadcrumb: false, activeMenu: '/dzjk/clpz'},
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,11 +52,6 @@ export const constantRoutes = [
|
|||||||
component: () => import('@/views/register'),
|
component: () => import('@/views/register'),
|
||||||
hidden: true
|
hidden: true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: '/screen',
|
|
||||||
component: () => import('@/views/screen/index'),
|
|
||||||
hidden: true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: '/404',
|
path: '/404',
|
||||||
component: () => import('@/views/error/404'),
|
component: () => import('@/views/error/404'),
|
||||||
|
|||||||
@ -7,7 +7,7 @@ module.exports = {
|
|||||||
/**
|
/**
|
||||||
* 侧边栏主题 深色主题theme-dark,浅色主题theme-light
|
* 侧边栏主题 深色主题theme-dark,浅色主题theme-light
|
||||||
*/
|
*/
|
||||||
sideTheme: 'theme-light',
|
sideTheme: 'theme-dark',
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统布局配置
|
* 系统布局配置
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import {getAllSites} from '@/api/ems/zddt'
|
||||||
import {getAlarmDetailList, getSiteAllDeviceCategory} from '@/api/ems/dzjk'
|
import {getAlarmDetailList, getSiteAllDeviceCategory} from '@/api/ems/dzjk'
|
||||||
|
|
||||||
const ems = {
|
const ems = {
|
||||||
@ -5,17 +6,9 @@ const ems = {
|
|||||||
dzjkAlarmLighting: false,//单站监控 告警统计红点标志
|
dzjkAlarmLighting: false,//单站监控 告警统计红点标志
|
||||||
zdList: [],
|
zdList: [],
|
||||||
zdDeviceCategoryOptions: {},//站点各个站点包含的设备种类 {021_DDS_01:["BATTERY","CLUSTER","STACK", "DH", "AMMETER", "PCS", "XF"],021_DDS_02:[]...}
|
zdDeviceCategoryOptions: {},//站点各个站点包含的设备种类 {021_DDS_01:["BATTERY","CLUSTER","STACK", "DH", "AMMETER", "PCS", "XF"],021_DDS_02:[]...}
|
||||||
CLUSTERWorkStatusOptions: {'0': '静置', '1': '充电', '2': '放电', '3': '待机', '5': '运行', '9': "故障"},//电池簇工作状态
|
workStatusOptions: {'0': '运行', '1': '停机', '2': '故障'},//工作状态
|
||||||
PCSWorkStatusOptions: {'0': '运行', '1': '停机', '2': '故障', '3': '待机', '4': '充电', '5': '放电'},//PCS工作状态
|
PCSWorkStatusOptions: {'0': '运行', '1': '停机', '2': '故障', '3': '待机', '4': '充电', '5': '放电'},//PCS工作状态
|
||||||
STACKWorkStatusOptions: {
|
STACKWorkStatusOptions: {"0": "净置", "1": "充电", "2": "放电", "3": "浮充", '9': "故障"},//STACKBMS总览工作状态
|
||||||
"0": "静置",
|
|
||||||
"1": "充电",
|
|
||||||
"2": "放电",
|
|
||||||
"3": "浮充",
|
|
||||||
'4': '待机',
|
|
||||||
'5': '运行',
|
|
||||||
'9': "故障"
|
|
||||||
},//STACKBMS总览工作状态
|
|
||||||
deviceStatusOptions: {'0': '离线', '1': '在线'},//设备状态
|
deviceStatusOptions: {'0': '离线', '1': '在线'},//设备状态
|
||||||
gridStatusOptions: {'0': '并网', '1': '未并网'},//并网状态
|
gridStatusOptions: {'0': '并网', '1': '未并网'},//并网状态
|
||||||
controlModeOptions: {'0': '远程', '1': '本地'},//控制模式
|
controlModeOptions: {'0': '远程', '1': '本地'},//控制模式
|
||||||
@ -43,6 +36,14 @@ const ems = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
getZdList({commit, state}) {
|
||||||
|
if (state.zdList.length === 0) {
|
||||||
|
getAllSites().then(response => {
|
||||||
|
commit('SET_ZD_LIST', response?.data || [])
|
||||||
|
console.log('store action getZdList 获取站点数据', state.zdList)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
//查询站点的所有待处理0的告警 存在展示红点标志
|
//查询站点的所有待处理0的告警 存在展示红点标志
|
||||||
getSiteAlarmNum({state, commit}, siteId) {
|
getSiteAlarmNum({state, commit}, siteId) {
|
||||||
getAlarmDetailList({
|
getAlarmDetailList({
|
||||||
|
|||||||
@ -33,12 +33,13 @@ const permission = {
|
|||||||
GenerateRoutes({ commit }) {
|
GenerateRoutes({ commit }) {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
// 向后端请求路由数据
|
// 向后端请求路由数据
|
||||||
getRouters().then(res => {
|
getRouters().then(res => {
|
||||||
let hasDzjk = false
|
let sysDzjk = -1
|
||||||
if(res?.data){
|
if(res?.data){
|
||||||
res.data.forEach(i=>{
|
sysDzjk = res.data.findIndex(i=>{
|
||||||
i.children && i.children.find(j=>j.path.indexOf('dzjk')>-1) && (hasDzjk=true)
|
return i.children && i.children.find(j=>j.path.indexOf('dzjk')>-1)
|
||||||
})
|
})
|
||||||
|
if(sysDzjk>-1) res.data.splice(sysDzjk,1)
|
||||||
}
|
}
|
||||||
const sdata = JSON.parse(JSON.stringify(res.data))
|
const sdata = JSON.parse(JSON.stringify(res.data))
|
||||||
const rdata = JSON.parse(JSON.stringify(res.data))
|
const rdata = JSON.parse(JSON.stringify(res.data))
|
||||||
@ -47,7 +48,7 @@ const permission = {
|
|||||||
const asyncRoutes = filterDynamicRoutes(dynamicRoutes)
|
const asyncRoutes = filterDynamicRoutes(dynamicRoutes)
|
||||||
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
|
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
|
||||||
router.addRoutes(asyncRoutes)
|
router.addRoutes(asyncRoutes)
|
||||||
if(!hasDzjk){
|
if(sysDzjk === -1){
|
||||||
const index = constantRoutes.findIndex(i=>i.path.indexOf('dzjk')>-1)
|
const index = constantRoutes.findIndex(i=>i.path.indexOf('dzjk')>-1)
|
||||||
constantRoutes.splice(index,1)
|
constantRoutes.splice(index,1)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div v-loading="loading">
|
<div v-loading="loading" class="ems-dashboard-editor-container ems-content-container-padding">
|
||||||
<template v-if="!showTemp">
|
<template v-if="!showTemp">
|
||||||
<el-button v-if="!showTemp" type="primary" plain @click="settingStrategy" style="margin-bottom: 20px;">新增策略</el-button>
|
<el-button v-if="!showTemp" type="primary" plain @click="settingStrategy" style="margin-bottom: 20px;">新增策略</el-button>
|
||||||
<cl-container v-for="(item,index) in list" :key="index+'clContainer'" :info="item" :hide-setting-btn="showTemp" class="contain" @update="init" @showSetting="settingStrategy(item)">
|
<cl-container v-for="(item,index) in list" :key="index+'clContainer'" :info="item" :hide-setting-btn="showTemp" class="contain" @update="init" @showSetting="settingStrategy(item)">
|
||||||
|
|||||||
@ -1,53 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="ems-dashboard-editor-container ems-third-menu-container">
|
|
||||||
<el-menu
|
|
||||||
class="ems-third-menu"
|
|
||||||
:default-active="$route.name"
|
|
||||||
background-color="#ffffff"
|
|
||||||
text-color="#666666"
|
|
||||||
active-text-color="#ffffff"
|
|
||||||
>
|
|
||||||
<el-menu-item :index="item.name" v-for="(item,index) in childrenRoute" :key="index+'clpzChildrenRoute'">
|
|
||||||
<router-link style="height: 100%;width: 100%;display: block;" :to="{path:item.path,query:$route.query}">
|
|
||||||
{{item.meta.title}}
|
|
||||||
</router-link>
|
|
||||||
</el-menu-item>
|
|
||||||
</el-menu>
|
|
||||||
|
|
||||||
<div class="ems-content-container ems-content-container-padding clpz-ems-content-container">
|
|
||||||
<keep-alive>
|
|
||||||
<router-view></router-view>
|
|
||||||
</keep-alive>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import { dzjk } from '@/router/ems'
|
|
||||||
const childrenRoute = dzjk[0].children[0].children.find(item=> item.name==='DzjkClpz').children.filter(item=>!item?.hidden)//获取到统计报表下面的字路由
|
|
||||||
console.log('设备监控子路由',childrenRoute)
|
|
||||||
export default {
|
|
||||||
name:'DzjkClpz',
|
|
||||||
data(){
|
|
||||||
return {
|
|
||||||
childrenRoute,
|
|
||||||
activeMenu:''
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
console.log('当前统计报表页面路由',this.$route)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
.clpz-ems-content-container{
|
|
||||||
margin-top:0;
|
|
||||||
padding-top:0;
|
|
||||||
padding-right: 0;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<!-- <cl-container :hideSettingBtn="true">-->
|
<!-- <cl-container :hideSettingBtn="true">-->
|
||||||
<!-- <template v-slot:default>-->
|
<!-- <template v-slot:default>-->
|
||||||
<div>
|
<div class="ems-dashboard-editor-container ems-content-container-padding">
|
||||||
<temp-table ref="tempTable" @updateTimeSetting="updateTimeSetting"/>
|
<temp-table ref="tempTable" @updateTimeSetting="updateTimeSetting"/>
|
||||||
<time-setting ref="timeSetting"/>
|
<time-setting ref="timeSetting"/>
|
||||||
<temp-power-chart ref="tomePowerChart"/>
|
<temp-power-chart ref="tomePowerChart"/>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
<template>
|
<template>
|
||||||
<el-card v-loading="loading" gshadow="always" class="common-card-container common-card-container-no-title-bg">
|
<div v-loading="loading" class="ems-dashboard-editor-container ems-content-container-padding">
|
||||||
<!-- 搜索栏-->
|
<!-- 搜索栏-->
|
||||||
<el-form :inline="true" class="select-container">
|
<el-form :inline="true" class="select-container">
|
||||||
<el-form-item label="设备清单">
|
<el-form-item label="设备清单">
|
||||||
@ -108,7 +108,7 @@
|
|||||||
>
|
>
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</div>
|
</div>
|
||||||
</el-card>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-loading="loading">
|
<div
|
||||||
|
class="ems-dashboard-editor-container ems-content-container-padding"
|
||||||
|
v-loading="loading"
|
||||||
|
>
|
||||||
<el-row style="background: #fff" class="row-container" :gutter="15">
|
<el-row style="background: #fff" class="row-container" :gutter="15">
|
||||||
<el-col :xs="24" :sm="24" :lg="5">
|
<el-col :xs="24" :sm="24" :lg="5">
|
||||||
<!-- 站点信息-->
|
<!-- 站点信息-->
|
||||||
|
|||||||
@ -29,7 +29,7 @@
|
|||||||
<el-descriptions-item
|
<el-descriptions-item
|
||||||
contentClassName="descriptions-direction work-status"
|
contentClassName="descriptions-direction work-status"
|
||||||
:span="1" label="工作状态">
|
:span="1" label="工作状态">
|
||||||
{{ CLUSTERWorkStatusOptions[baseInfo.workStatus] }}
|
{{ workStatusOptions[baseInfo.workStatus] }}
|
||||||
</el-descriptions-item>
|
</el-descriptions-item>
|
||||||
<el-descriptions-item contentClassName="descriptions-direction"
|
<el-descriptions-item contentClassName="descriptions-direction"
|
||||||
:span="1" label="与PCS通信">
|
:span="1" label="与PCS通信">
|
||||||
@ -136,7 +136,7 @@ export default {
|
|||||||
components: {PointTable, pointChart},
|
components: {PointTable, pointChart},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
CLUSTERWorkStatusOptions: state => state?.ems?.CLUSTERWorkStatusOptions || {},
|
workStatusOptions: state => state?.ems?.workStatusOptions || {},
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
@ -175,7 +175,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
handleCardClass(item) {
|
handleCardClass(item) {
|
||||||
const {workStatus = ''} = item
|
const {workStatus = ''} = item
|
||||||
return !(Object.keys(this.CLUSTERWorkStatusOptions).includes(item.workStatus)) ? "timing-card-container" : workStatus === '9' ? 'warning-card-container' : 'running-card-container'
|
return !['0', '2'].includes(item.workStatus) ? "timing-card-container" : workStatus === '2' ? 'warning-card-container' : 'running-card-container'
|
||||||
},
|
},
|
||||||
// 查看设备电位表格
|
// 查看设备电位表格
|
||||||
pointDetail(row, dataType) {
|
pointDetail(row, dataType) {
|
||||||
|
|||||||
@ -19,14 +19,13 @@
|
|||||||
</keep-alive>
|
</keep-alive>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
|
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
|
||||||
import { dzjk } from '@/router/ems'
|
import { dzjk } from '@/router/ems'
|
||||||
import {mapState} from "vuex";
|
import {mapState} from "vuex";
|
||||||
const childrenRoute = dzjk[0].children[0].children.find(item=> item.name==='DzjkSbjk').children//获取到单站监控-设备监控下面的字路由
|
const childrenRoute = ((dzjk[0]?.children || []).find(item=> item.name==='DzjkSbjk').children) || []//获取到单站监控-设备监控下面的字路由
|
||||||
export default {
|
export default {
|
||||||
name:'DzjkSbjk',
|
name:'DzjkSbjk',
|
||||||
mixins:[getQuerySiteId],
|
mixins:[getQuerySiteId],
|
||||||
@ -65,11 +64,14 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.sbjk-ems-content-container{
|
.sbjk-ems-dashboard-editor-container {
|
||||||
margin-top:0;
|
display: flex;
|
||||||
padding-top:0;
|
background: #ffffff;
|
||||||
|
}
|
||||||
|
.sbjk-ems-content-container {
|
||||||
|
margin-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|||||||
@ -27,6 +27,12 @@
|
|||||||
<div>数据更新时间:{{ pcsItem.dataUpdateTime }}</div>
|
<div>数据更新时间:{{ pcsItem.dataUpdateTime }}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="alarm">
|
<div class="alarm">
|
||||||
|
<pcs-switch style="margin-right:10px;"
|
||||||
|
:round="true"
|
||||||
|
size="small"
|
||||||
|
type="danger"
|
||||||
|
:data="pcsItem"
|
||||||
|
@updateSuccess="init"/>
|
||||||
<el-button type="primary" round size="small" style="margin-right:20px;"
|
<el-button type="primary" round size="small" style="margin-right:20px;"
|
||||||
@click="pointDetail(pcsItem,'point')">
|
@click="pointDetail(pcsItem,'point')">
|
||||||
详细
|
详细
|
||||||
@ -184,11 +190,12 @@ import RealTimeBaseInfo from "./../RealTimeBaseInfo.vue";
|
|||||||
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
|
import getQuerySiteId from "@/mixins/ems/getQuerySiteId";
|
||||||
import {getPcsDetailInfo, getRunningHeadInfo} from "@/api/ems/dzjk";
|
import {getPcsDetailInfo, getRunningHeadInfo} from "@/api/ems/dzjk";
|
||||||
import intervalUpdate from "@/mixins/ems/intervalUpdate";
|
import intervalUpdate from "@/mixins/ems/intervalUpdate";
|
||||||
|
import PcsSwitch from "@/views/ems/site/sblb/PcsSwitch.vue";
|
||||||
import {mapState} from "vuex";
|
import {mapState} from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "DzjkSbjkPcs",
|
name: "DzjkSbjkPcs",
|
||||||
components: {RealTimeBaseInfo, pointChart, PointTable},
|
components: {RealTimeBaseInfo, pointChart, PointTable, PcsSwitch},
|
||||||
mixins: [getQuerySiteId, intervalUpdate],
|
mixins: [getQuerySiteId, intervalUpdate],
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
|
|||||||
@ -7,47 +7,55 @@
|
|||||||
text-color="#666666"
|
text-color="#666666"
|
||||||
active-text-color="#ffffff"
|
active-text-color="#ffffff"
|
||||||
>
|
>
|
||||||
<el-menu-item :index="item.name" v-for="(item,index) in childrenRoute" :key="index+'tjbbChildrenRoute'">
|
<el-menu-item
|
||||||
<router-link style="height: 100%;width: 100%;display: block;" :to="{path:item.path,query:$route.query}">
|
:index="item.name"
|
||||||
{{item.meta.title}}
|
v-for="(item, index) in childrenRoute"
|
||||||
|
:key="index + 'tjbbChildrenRoute'"
|
||||||
|
>
|
||||||
|
<router-link
|
||||||
|
style="height: 100%; width: 100%; display: block"
|
||||||
|
:to="{ path: item.path, query: $route.query }"
|
||||||
|
>
|
||||||
|
{{ item.meta.title }}
|
||||||
</router-link>
|
</router-link>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
</el-menu>
|
</el-menu>
|
||||||
|
|
||||||
<div class="ems-content-container ems-content-container-padding tjbb-ems-content-container">
|
<div
|
||||||
|
class="ems-content-container ems-content-container-padding tjbb-ems-content-container"
|
||||||
|
>
|
||||||
<keep-alive>
|
<keep-alive>
|
||||||
<router-view></router-view>
|
<router-view></router-view>
|
||||||
</keep-alive>
|
</keep-alive>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { dzjk } from '@/router/ems'
|
import { dzjk } from "@/router/ems";
|
||||||
const childrenRoute = dzjk[0].children[0].children.find(item=> item.name==='DzjkTjbb').children//获取到统计报表下面的字路由
|
const childrenRoute = dzjk[0].children.find(
|
||||||
console.log('设备监控子路由',childrenRoute)
|
(item) => item.name === "DzjkTjbb"
|
||||||
|
).children; //获取到统计报表下面的字路由
|
||||||
|
console.log("设备监控子路由", childrenRoute);
|
||||||
export default {
|
export default {
|
||||||
name:'DzjkTjbb',
|
name: "DzjkTjbb",
|
||||||
data(){
|
data() {
|
||||||
return {
|
return {
|
||||||
childrenRoute,
|
childrenRoute,
|
||||||
activeMenu:''
|
activeMenu: "",
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
console.log('当前统计报表页面路由',this.$route)
|
console.log("当前统计报表页面路由", this.$route);
|
||||||
}
|
},
|
||||||
|
};
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.tjbb-ems-content-container{
|
.tjbb-ems-content-container {
|
||||||
margin-top:0;
|
margin-top: 0;
|
||||||
padding-top:0;
|
padding-top: 0;
|
||||||
padding-right: 0;
|
padding-right: 0;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|||||||
@ -323,7 +323,7 @@ $lineColor: #86bcc7;
|
|||||||
|
|
||||||
.ems-dashboard-editor-container {
|
.ems-dashboard-editor-container {
|
||||||
background-color: #ffffff;
|
background-color: #ffffff;
|
||||||
padding: 0;
|
padding: 30px;
|
||||||
color: #666666;
|
color: #666666;
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
|
|||||||
@ -40,14 +40,18 @@ export default {
|
|||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
runningStatusMap: ['0', '3', '4', '6']
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
label() {
|
label() {
|
||||||
return this.data.workStatus === '0' ? '关机' : '开机'
|
return this.runningStatusMap.includes(this.data.workStatus) ? '关机' : '开机'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
switchStatus() {
|
switchStatus() {
|
||||||
console.log(this.data, 11111111)
|
|
||||||
const {workStatus, deviceId, deviceName, siteId} = this.data
|
const {workStatus, deviceId, deviceName, siteId} = this.data
|
||||||
this.$confirm(`确认要${this.label}设备${deviceName || ''}吗?`, {
|
this.$confirm(`确认要${this.label}设备${deviceName || ''}吗?`, {
|
||||||
confirmButtonText: "确定",
|
confirmButtonText: "确定",
|
||||||
@ -61,7 +65,7 @@ export default {
|
|||||||
//做开关机操作,更新成功后刷新表格
|
//做开关机操作,更新成功后刷新表格
|
||||||
updateDeviceStatus({
|
updateDeviceStatus({
|
||||||
siteId,
|
siteId,
|
||||||
workStatus: workStatus === '0' ? "1" : '0',
|
workStatus: this.runningStatusMap.includes(workStatus) ? "1" : '0',
|
||||||
deviceId
|
deviceId
|
||||||
})
|
})
|
||||||
.then((response) => {
|
.then((response) => {
|
||||||
|
|||||||
@ -84,10 +84,10 @@
|
|||||||
label="在线状态">
|
label="在线状态">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span>{{ $store.state.ems.deviceStatusOptions[scope.row.deviceStatus] }}</span>
|
<span>{{ $store.state.ems.deviceStatusOptions[scope.row.deviceStatus] }}</span>
|
||||||
<!-- <pcs-switch v-if="scope.row.deviceCategory === 'PCS' && ![null,'',undefined].includes(scope.row.deviceStatus)"-->
|
<pcs-switch v-if="scope.row.deviceCategory === 'PCS' && ![null,'',undefined].includes(scope.row.workStatus)"
|
||||||
<!-- style="margin-left:5px;"-->
|
style="margin-left:5px;"
|
||||||
<!-- :data="{siteId:scope.row.siteId,deviceStatus:scope.row.deviceStatus,deviceId:scope.row.deviceId,deviceName:scope.row.deviceName}"-->
|
:data="{siteId:scope.row.siteId,workStatus:scope.row.workStatus,deviceId:scope.row.deviceId,deviceName:scope.row.deviceName}"
|
||||||
<!-- @updateSuccess="getData"/>-->
|
@updateSuccess="getData"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@ -180,11 +180,11 @@ import {getAllDeviceCategory} from '@/api/ems/search'
|
|||||||
import PointTable from './PointTable.vue'
|
import PointTable from './PointTable.vue'
|
||||||
import AddDevice from "./AddDevice.vue";
|
import AddDevice from "./AddDevice.vue";
|
||||||
import PointUpload from "./PointUpload.vue";
|
import PointUpload from "./PointUpload.vue";
|
||||||
// import PcsSwitch from "./PcsSwitch.vue";
|
import PcsSwitch from "./PcsSwitch.vue";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Sblb",
|
name: "Sblb",
|
||||||
components: {AddDevice, PointTable, PointUpload},
|
components: {AddDevice, PointTable, PointUpload, PcsSwitch},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
loading: false,
|
loading: false,
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 MiB |
@ -1,418 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="big-screen-container">
|
|
||||||
<!-- 背景容器 -->
|
|
||||||
<div class="bg-wrapper">
|
|
||||||
<!-- 右侧功率曲线图表 -->
|
|
||||||
<div class="chart-box power-chart">
|
|
||||||
<div ref="powerChart" class="chart-content"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 底部中间电力需求曲线图表(width:980px, bottom:26px) -->
|
|
||||||
<div class="chart-box demand-chart">
|
|
||||||
<div ref="demandChart" class="chart-content"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import * as echarts from 'echarts'
|
|
||||||
import { getPointData } from '@/api/ems/dzjk'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
name: 'PowerCurveScreen',
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
powerChartInstance: null, // 功率曲线实例
|
|
||||||
demandChartInstance: null, // 电力需求曲线实例
|
|
||||||
timer: null,
|
|
||||||
siteId: '021_DDS_01',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
mounted() {
|
|
||||||
this.initPowerChart() // 初始化功率曲线
|
|
||||||
this.initDemandChart() // 初始化电力需求曲线
|
|
||||||
|
|
||||||
// Initial fetch
|
|
||||||
this.fetchData()
|
|
||||||
// Polling every 5 seconds
|
|
||||||
this.timer = setInterval(() => {
|
|
||||||
this.fetchData()
|
|
||||||
}, 5000)
|
|
||||||
|
|
||||||
window.addEventListener('resize', this.resizeAllCharts)
|
|
||||||
},
|
|
||||||
beforeDestroy() {
|
|
||||||
if (this.timer) {
|
|
||||||
clearInterval(this.timer)
|
|
||||||
this.timer = null
|
|
||||||
}
|
|
||||||
// 销毁两个图表实例
|
|
||||||
if (this.powerChartInstance) {
|
|
||||||
this.powerChartInstance.dispose()
|
|
||||||
this.powerChartInstance = null
|
|
||||||
}
|
|
||||||
if (this.demandChartInstance) {
|
|
||||||
this.demandChartInstance.dispose()
|
|
||||||
this.demandChartInstance = null
|
|
||||||
}
|
|
||||||
window.removeEventListener('resize', this.resizeAllCharts)
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
getTodayDate() {
|
|
||||||
const now = new Date()
|
|
||||||
const year = now.getFullYear()
|
|
||||||
const month = String(now.getMonth() + 1).padStart(2, '0')
|
|
||||||
const day = String(now.getDate()).padStart(2, '0')
|
|
||||||
return `${year}-${month}-${day}`
|
|
||||||
},
|
|
||||||
fetchData() {
|
|
||||||
const today = this.getTodayDate()
|
|
||||||
getPointData({
|
|
||||||
siteId: this.siteId,
|
|
||||||
startDate: today,
|
|
||||||
endDate: today
|
|
||||||
}).then(response => {
|
|
||||||
if (response.code === 200 && response.data) {
|
|
||||||
this.updateCharts(response.data)
|
|
||||||
}
|
|
||||||
}).catch(error => {
|
|
||||||
console.error('Failed to fetch point data:', error)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
updateCharts(data) {
|
|
||||||
if (!data || !Array.isArray(data)) return
|
|
||||||
const source = [['日期', '电网功率', '负载功率', '储能功率', '光伏功率']];
|
|
||||||
const demandSource = [['日期', '电网功率', '负载功率']]
|
|
||||||
|
|
||||||
data.forEach(item => {
|
|
||||||
source.push([
|
|
||||||
item.statisDate,
|
|
||||||
item.gridPower,
|
|
||||||
item.loadPower,
|
|
||||||
item.storagePower,
|
|
||||||
item.pvPower
|
|
||||||
]);
|
|
||||||
demandSource.push([
|
|
||||||
item.statisDate,
|
|
||||||
item.gridPower, // Mapping Grid Power to Plan Demand (or just as 2nd series)
|
|
||||||
item.loadPower, // Mapping Load Power to Actual Demand
|
|
||||||
])
|
|
||||||
})
|
|
||||||
|
|
||||||
if (this.powerChartInstance) {
|
|
||||||
this.powerChartInstance.setOption({
|
|
||||||
dataset: {
|
|
||||||
source: source
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.demandChartInstance) {
|
|
||||||
this.demandChartInstance.setOption({
|
|
||||||
dataset: {
|
|
||||||
source: demandSource
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
// 初始化右侧功率曲线
|
|
||||||
initPowerChart() {
|
|
||||||
this.powerChartInstance = echarts.init(this.$refs.powerChart)
|
|
||||||
|
|
||||||
const option = {
|
|
||||||
backgroundColor: 'transparent',
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis',
|
|
||||||
confine: true,
|
|
||||||
backgroundColor: 'rgba(0, 30, 60, 0.9)',
|
|
||||||
borderColor: '#00ccff',
|
|
||||||
textStyle: { color: '#fff' },
|
|
||||||
axisPointer: {
|
|
||||||
type: 'line',
|
|
||||||
lineStyle: {
|
|
||||||
color: 'rgba(0, 204, 255, 0.5)',
|
|
||||||
type: 'dashed'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
legend: {
|
|
||||||
textStyle: { color: '#00ccff', fontSize: 10 },
|
|
||||||
bottom: 0,
|
|
||||||
left: 'center',
|
|
||||||
itemWidth: 9,
|
|
||||||
itemHeight: 9,
|
|
||||||
itemGap: 8,
|
|
||||||
padding: [0, 0, 0, 0]
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
left: '2%',
|
|
||||||
right: '2%',
|
|
||||||
top: '15%',
|
|
||||||
bottom: '12%',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
dataset: {
|
|
||||||
source: [] // Initial empty source
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
boundaryGap: false,
|
|
||||||
axisLabel: {
|
|
||||||
color: '#00ccff',
|
|
||||||
fontSize: 10,
|
|
||||||
rotate: 0, // 取消旋转,因为标签较少
|
|
||||||
margin: 10,
|
|
||||||
},
|
|
||||||
axisLine: {
|
|
||||||
show: true,
|
|
||||||
lineStyle: { color: '#006699', width: 1.5 }
|
|
||||||
},
|
|
||||||
splitLine: { show: false },
|
|
||||||
axisTick: { show: true }
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value',
|
|
||||||
min: 0, // Remove fixed min/max to let it auto-scale
|
|
||||||
max: 350,
|
|
||||||
interval: 50,
|
|
||||||
axisLabel: {
|
|
||||||
color: '#00ccff',
|
|
||||||
fontSize: 12,
|
|
||||||
margin: 10,
|
|
||||||
fontWeight: 'bold'
|
|
||||||
},
|
|
||||||
axisLine: {
|
|
||||||
show: false,
|
|
||||||
lineStyle: { color: '#006699', width: 1.5 }
|
|
||||||
},
|
|
||||||
splitLine: { lineStyle: { color: 'rgba(0, 100, 150, 0.2)' } },
|
|
||||||
axisTick: { show: false }
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
// name: '电网功率', // Removed, auto-matched from dataset header
|
|
||||||
type: 'line',
|
|
||||||
// data: [], // Removed
|
|
||||||
smooth: true,
|
|
||||||
symbol: 'none',
|
|
||||||
lineStyle: { color: '#0099ff', width: 2 },
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{ offset: 0, color: 'rgba(0, 153, 255, 0.4)' },
|
|
||||||
{ offset: 1, color: 'rgba(0, 153, 255, 0.05)' }
|
|
||||||
])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// name: '负载功率',
|
|
||||||
type: 'line',
|
|
||||||
// data: [],
|
|
||||||
smooth: true,
|
|
||||||
symbol: 'none',
|
|
||||||
lineStyle: { color: '#00cc66', width: 2 },
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{ offset: 0, color: 'rgba(0, 204, 102, 0.4)' },
|
|
||||||
{ offset: 1, color: 'rgba(0, 204, 102, 0.05)' }
|
|
||||||
])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// name: '储能功率',
|
|
||||||
type: 'line',
|
|
||||||
// data: [],
|
|
||||||
smooth: true,
|
|
||||||
symbol: 'none',
|
|
||||||
lineStyle: { color: '#ffcc00', width: 2 },
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{ offset: 0, color: 'rgba(255, 204, 0, 0.4)' },
|
|
||||||
{ offset: 1, color: 'rgba(255, 204, 0, 0.05)' }
|
|
||||||
])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// name: '光伏功率',
|
|
||||||
type: 'line',
|
|
||||||
// data: [],
|
|
||||||
smooth: true,
|
|
||||||
symbol: 'none',
|
|
||||||
lineStyle: { color: '#ff3333', width: 2 },
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{ offset: 0, color: 'rgba(255, 51, 51, 0.4)' },
|
|
||||||
{ offset: 1, color: 'rgba(255, 51, 51, 0.05)' }
|
|
||||||
])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
this.powerChartInstance.setOption(option)
|
|
||||||
},
|
|
||||||
|
|
||||||
// 初始化底部中间电力需求曲线(适配980px宽度+130px高度+bottom:26px,两条曲线区分配色)
|
|
||||||
initDemandChart() {
|
|
||||||
this.demandChartInstance = echarts.init(this.$refs.demandChart)
|
|
||||||
|
|
||||||
const option = {
|
|
||||||
backgroundColor: 'transparent', // 透明背景
|
|
||||||
tooltip: {
|
|
||||||
trigger: 'axis',
|
|
||||||
backgroundColor: 'rgba(0, 30, 60, 0.9)',
|
|
||||||
borderColor: '#00ccff', // 匹配图片主色
|
|
||||||
textStyle: { color: '#fff' },
|
|
||||||
axisPointer: { type: 'shadow' },
|
|
||||||
confine: true,
|
|
||||||
},
|
|
||||||
grid: {
|
|
||||||
left: '2%',
|
|
||||||
right: '2%',
|
|
||||||
top: '5%',
|
|
||||||
bottom: '8%',
|
|
||||||
containLabel: true
|
|
||||||
},
|
|
||||||
dataset: {
|
|
||||||
source: [] // Initial empty
|
|
||||||
},
|
|
||||||
xAxis: {
|
|
||||||
type: 'category',
|
|
||||||
boundaryGap: false,
|
|
||||||
// data: [], // Handled by dataset
|
|
||||||
axisLabel: {
|
|
||||||
color: '#00ccff', // 匹配图片主色
|
|
||||||
fontSize: 10,
|
|
||||||
margin: 10,
|
|
||||||
},
|
|
||||||
axisLine: {
|
|
||||||
show: true,
|
|
||||||
lineStyle: { color: '#006699', width: 1.5 }
|
|
||||||
},
|
|
||||||
splitLine: { show: false },
|
|
||||||
axisTick: { show: true }
|
|
||||||
},
|
|
||||||
yAxis: {
|
|
||||||
type: 'value',
|
|
||||||
min: 0,
|
|
||||||
max: 300,
|
|
||||||
interval: 50,
|
|
||||||
axisLabel: {
|
|
||||||
color: '#00ccff', // 匹配图片主色
|
|
||||||
fontSize: 12,
|
|
||||||
margin: 10,
|
|
||||||
fontWeight: 'bold'
|
|
||||||
},
|
|
||||||
axisLine: {
|
|
||||||
show: false,
|
|
||||||
// lineStyle: { color: '#006699', width: 1.5 }
|
|
||||||
},
|
|
||||||
splitLine: { lineStyle: { color: 'rgba(0, 100, 150, 0.2)' } },
|
|
||||||
axisTick: { show: false }
|
|
||||||
},
|
|
||||||
series: [
|
|
||||||
{
|
|
||||||
type: 'line',
|
|
||||||
// data: [],
|
|
||||||
smooth: true, // 平滑曲线
|
|
||||||
symbol: 'none', // 无数据点
|
|
||||||
// lineStyle: { color: '#00F2FF', width: 2.5 }, // 匹配图片主题色
|
|
||||||
// areaStyle: {
|
|
||||||
// // 匹配图片的线性渐变:#00F2FF 从100%不透明到0%不透明
|
|
||||||
// color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
// { offset: 0, color: 'rgba(0, 242, 255, 1)' }, // 0%位置:#00F2FF 100%不透明
|
|
||||||
// { offset: 1, color: 'rgba(0, 242, 255, 0)' } // 100%位置:#00F2FF 0%不透明
|
|
||||||
// ])
|
|
||||||
// }
|
|
||||||
lineStyle: { color: '#0099ff', width: 2 },
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{ offset: 0, color: 'rgba(0, 153, 255, 0.4)' },
|
|
||||||
{ offset: 1, color: 'rgba(0, 153, 255, 0.05)' }
|
|
||||||
])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// name: '负载功率',
|
|
||||||
type: 'line',
|
|
||||||
// data: [],
|
|
||||||
smooth: true,
|
|
||||||
symbol: 'none',
|
|
||||||
lineStyle: { color: '#00cc66', width: 2 },
|
|
||||||
areaStyle: {
|
|
||||||
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
|
|
||||||
{ offset: 0, color: 'rgba(0, 204, 102, 0.4)' },
|
|
||||||
{ offset: 1, color: 'rgba(0, 204, 102, 0.05)' }
|
|
||||||
])
|
|
||||||
}
|
|
||||||
},
|
|
||||||
]
|
|
||||||
}
|
|
||||||
this.demandChartInstance.setOption(option)
|
|
||||||
},
|
|
||||||
|
|
||||||
// 统一处理窗口缩放(适配两个图表)
|
|
||||||
resizeAllCharts() {
|
|
||||||
if (this.powerChartInstance) this.powerChartInstance.resize()
|
|
||||||
if (this.demandChartInstance) this.demandChartInstance.resize()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style scoped>
|
|
||||||
/* 大屏容器:固定1920x1080尺寸 */
|
|
||||||
.big-screen-container {
|
|
||||||
width: 1920px;
|
|
||||||
height: 1080px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 背景容器:相对路径 ./background.png */
|
|
||||||
.bg-wrapper {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
background-image: url("./background.png");
|
|
||||||
background-size: cover;
|
|
||||||
background-position: center;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 通用图表容器样式 */
|
|
||||||
.chart-box {
|
|
||||||
background-color: transparent;
|
|
||||||
padding: 0;
|
|
||||||
border: none;
|
|
||||||
box-shadow: none;
|
|
||||||
border-radius: 0;
|
|
||||||
z-index: 10;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 右侧功率曲线图表定位+尺寸 */
|
|
||||||
.power-chart {
|
|
||||||
position: absolute;
|
|
||||||
top: 143px;
|
|
||||||
right: 40px;
|
|
||||||
width: 380px;
|
|
||||||
height: 270px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 底部中间电力需求曲线图表(核心修改:width:980px, bottom:26px, height:130px) */
|
|
||||||
.demand-chart {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 26px; /* 修改为26px底部间距 */
|
|
||||||
left: 50%;
|
|
||||||
transform: translateX(-50%);
|
|
||||||
width: 980px; /* 修改为980px宽度 */
|
|
||||||
height: 130px; /* 保持130px高度不变 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 图表内容区:填满容器 */
|
|
||||||
.chart-content {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
Reference in New Issue
Block a user