Files
screen/src/layout/index.vue

84 lines
1.7 KiB
Vue
Raw Normal View History

<template>
<div class="app-wrapper">
2026-05-19 17:56:44 +08:00
<sidebar v-show="!isFullscreen" />
<div class="main-wrapper" :class="{ 'fullscreen': isFullscreen }">
<navbar v-show="!isFullscreen" />
<app-main />
</div>
</div>
</template>
<script setup>
2026-05-19 17:56:44 +08:00
import { ref, onMounted, onUnmounted } from 'vue'
import Sidebar from './components/Sidebar/index.vue'
import Navbar from './components/Navbar/index.vue'
import AppMain from './components/AppMain.vue'
2026-05-19 17:56:44 +08:00
const isFullscreen = ref(false)
const handleFullscreenChange = () => {
isFullscreen.value = !!document.fullscreenElement
}
const handleToggleFullscreen = () => {
if (!document.fullscreenElement) {
document.documentElement.requestFullscreen().catch(err => {
console.error('全屏请求失败:', err)
})
} else {
document.exitFullscreen().catch(err => {
console.error('退出全屏失败:', err)
})
}
}
onMounted(() => {
document.addEventListener('fullscreenchange', handleFullscreenChange)
window.addEventListener('toggle-fullscreen', handleToggleFullscreen)
})
onUnmounted(() => {
document.removeEventListener('fullscreenchange', handleFullscreenChange)
window.removeEventListener('toggle-fullscreen', handleToggleFullscreen)
})
</script>
<style lang="scss" scoped>
.app-wrapper {
display: flex;
width: 100vw;
height: 100vh;
overflow: hidden;
}
.main-wrapper {
flex: 1;
display: flex;
flex-direction: column;
height: 100vh;
overflow: hidden;
min-width: 0;
2026-05-19 17:56:44 +08:00
&.fullscreen {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
z-index: 9999;
}
}
:deep(.sidebar-container) {
flex-shrink: 0;
width: 200px;
transition: width 0.28s ease;
&.is-collapse {
width: 54px;
}
}
2026-05-19 17:56:44 +08:00
</style>