224 lines
7.1 KiB
Vue
224 lines
7.1 KiB
Vue
<!--
|
||
PowerStation/index.vue
|
||
电站设备管理系统主页面
|
||
使用网格布局展示3D模型视图、数据图表和属性面板
|
||
-->
|
||
<template>
|
||
<div
|
||
class="w-full h-screen flex flex-col overflow-hidden bg-[#0B1120] font-sans powerstation-scrollbar"
|
||
>
|
||
<!-- ============================================================
|
||
头部导航
|
||
============================================================ -->
|
||
<HeaderNavigation />
|
||
|
||
<!-- ============================================================
|
||
主要内容区域
|
||
============================================================ -->
|
||
<div class="flex-1 flex justify-start relative min-h-0">
|
||
<!-- 左侧面板:模型结构树 -->
|
||
<ModelTreePanel class="w-[280px] h-full z-50 self-stretch flex-shrink-0" />
|
||
|
||
<!-- 右侧面板:主内容区 -->
|
||
<div class="flex-1 transition-all duration-300">
|
||
<div
|
||
class="h-full bg-[#020617] p-2 gap-2 overflow-hidden grid transition-all duration-300 min-h-0"
|
||
:class="[
|
||
maximizedComponent
|
||
? 'grid-cols-1 grid-rows-1'
|
||
: 'grid-cols-[1fr_30%] grid-rows-[70%_30%]',
|
||
]"
|
||
>
|
||
<!-- 3D视图 - 左上区域 -->
|
||
<Model3DView
|
||
class="bg-[#0b1120] border border-cyan-500/20 rounded shadow-[0_0_10px_rgba(6,182,212,0.05)] transition-all duration-300 min-h-0"
|
||
:class="[
|
||
maximizedComponent === '3d'
|
||
? 'col-span-full row-span-full'
|
||
: maximizedComponent
|
||
? 'hidden'
|
||
: 'col-start-1 row-start-1',
|
||
]"
|
||
:is-maximized="maximizedComponent === '3d'"
|
||
@toggle-maximize="toggleMaximize('3d')"
|
||
/>
|
||
|
||
<!-- 数据图表 - 左下区域 -->
|
||
<DataChartsSection
|
||
class="bg-[#0b1120] border border-cyan-500/20 rounded shadow-[0_0_10px_rgba(6,182,212,0.05)] overflow-hidden transition-all duration-300 min-h-0"
|
||
:class="[
|
||
maximizedComponent === 'charts'
|
||
? 'col-span-full row-span-full'
|
||
: maximizedComponent
|
||
? 'hidden'
|
||
: 'col-start-1 row-start-2',
|
||
]"
|
||
:is-maximized="maximizedComponent === 'charts'"
|
||
@toggle-maximize="toggleMaximize('charts')"
|
||
/>
|
||
|
||
<!-- 属性面板 - 右侧区域(跨两行) -->
|
||
<ModelPropertiesPanel
|
||
class="bg-[#0b1120] border border-cyan-500/20 rounded shadow-[0_0_10px_rgba(6,182,212,0.05)] overflow-hidden relative transition-all duration-300 border-l border-cyan-500/20"
|
||
:class="[
|
||
maximizedComponent === 'props'
|
||
? 'col-span-full row-span-full'
|
||
: maximizedComponent
|
||
? 'hidden'
|
||
: 'col-start-2 row-span-2',
|
||
]"
|
||
:is-maximized="maximizedComponent === 'props'"
|
||
@toggle-maximize="toggleMaximize('props')"
|
||
/>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script setup lang="ts">
|
||
/**
|
||
* PowerStation 主页面
|
||
* 电站设备管理系统的核心页面
|
||
* 集成3D视图、数据图表和属性面板
|
||
*/
|
||
import DataChartsSection from '~/components/PowerStation/DataChartsSection.vue'
|
||
import HeaderNavigation from '~/components/PowerStation/HeaderNavigation.vue'
|
||
import Model3DView from '~/components/PowerStation/Model3DView.vue'
|
||
import ModelPropertiesPanel from '~/components/PowerStation/ModelPropertiesPanel.vue'
|
||
import ModelTreePanel from '~/components/PowerStation/ModelTreePanel.vue'
|
||
|
||
// ============================================================
|
||
// 页面配置
|
||
// ============================================================
|
||
|
||
definePageMeta({
|
||
layout: false, // 使用全屏自定义布局
|
||
})
|
||
|
||
// ============================================================
|
||
// 状态和引用
|
||
// ============================================================
|
||
|
||
const route = useRoute()
|
||
const store = usePowerStationStore()
|
||
|
||
/** 当前最大化的组件 */
|
||
const maximizedComponent = ref<string | null>(null)
|
||
|
||
// ============================================================
|
||
// 方法
|
||
// ============================================================
|
||
|
||
/**
|
||
* 切换组件最大化状态
|
||
* @param component - 组件标识('3d' | 'charts' | 'props')
|
||
*/
|
||
const toggleMaximize = (component: string) => {
|
||
if (maximizedComponent.value === component) {
|
||
maximizedComponent.value = null // 还原
|
||
} else {
|
||
maximizedComponent.value = component // 最大化指定组件
|
||
}
|
||
}
|
||
|
||
// ============================================================
|
||
// 路由同步
|
||
// ============================================================
|
||
|
||
// 监听路由变化,确保store与路由参数同步
|
||
watch(
|
||
() => route.query.currentNodeId,
|
||
newId => {
|
||
if (newId && typeof newId === 'string') {
|
||
// 只在完整模式下同步
|
||
if (store.loadMode && store.currentNodeId !== newId) {
|
||
console.log('PowerStation页面:同步路由currentNodeId到store:', newId)
|
||
store.currentNodeId = newId
|
||
}
|
||
}
|
||
},
|
||
{ immediate: true }
|
||
)
|
||
|
||
// ============================================================
|
||
// 生命周期
|
||
// ============================================================
|
||
|
||
onMounted(() => {
|
||
// 保留路由参数检查,供后续扩展使用
|
||
const currentNodeId = route.query.currentNodeId as string
|
||
if (currentNodeId) {
|
||
// 节点选择逻辑由子组件处理
|
||
}
|
||
})
|
||
</script>
|
||
|
||
<style>
|
||
/* ============================================================
|
||
页面全局样式
|
||
============================================================ */
|
||
|
||
body {
|
||
margin: 0;
|
||
overflow: hidden;
|
||
}
|
||
|
||
/* ============================================================
|
||
全局滚动条样式
|
||
============================================================ */
|
||
|
||
::-webkit-scrollbar {
|
||
width: 8px;
|
||
height: 8px;
|
||
}
|
||
|
||
::-webkit-scrollbar-track {
|
||
background: rgba(15, 23, 42, 0.3);
|
||
border-radius: 4px;
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb {
|
||
background: rgba(34, 211, 238, 0.3);
|
||
border-radius: 4px;
|
||
border: 1px solid rgba(34, 211, 238, 0.1);
|
||
}
|
||
|
||
::-webkit-scrollbar-thumb:hover {
|
||
background: rgba(34, 211, 238, 0.5);
|
||
box-shadow: 0 0 8px rgba(34, 211, 238, 0.3);
|
||
}
|
||
|
||
::-webkit-scrollbar-corner {
|
||
background: rgba(15, 23, 42, 0.3);
|
||
}
|
||
|
||
/* Firefox滚动条样式 */
|
||
* {
|
||
scrollbar-width: thin;
|
||
scrollbar-color: rgba(34, 211, 238, 0.3) rgba(15, 23, 42, 0.3);
|
||
}
|
||
|
||
/* ============================================================
|
||
PowerStation页面特殊滚动条样式
|
||
============================================================ */
|
||
|
||
.powerstation-scrollbar ::-webkit-scrollbar {
|
||
width: 6px;
|
||
height: 6px;
|
||
}
|
||
|
||
.powerstation-scrollbar ::-webkit-scrollbar-track {
|
||
background: rgba(11, 17, 32, 0.5);
|
||
}
|
||
|
||
.powerstation-scrollbar ::-webkit-scrollbar-thumb {
|
||
background: rgba(6, 182, 212, 0.4);
|
||
border-radius: 3px;
|
||
}
|
||
|
||
.powerstation-scrollbar ::-webkit-scrollbar-thumb:hover {
|
||
background: rgba(6, 182, 212, 0.6);
|
||
}
|
||
</style>
|