From 6b988bd582bfcd17fee48c476a5a6e5cc172b0d5 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 12 三月 2025 10:08:33 +0800 Subject: [PATCH] dev-2 --- src/layout/index.vue | 108 ++++++++++++++++++++++++++++------------------------- 1 files changed, 57 insertions(+), 51 deletions(-) diff --git a/src/layout/index.vue b/src/layout/index.vue index 4c6ab94..207a470 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -1,27 +1,35 @@ <template> <div :class="classObj" class="app-wrapper" :style="{ '--current-color': theme }"> - <el-scrollbar> - <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside"/> - <side-bar v-if="!sidebar.hide" class="sidebar-container" /> - <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container"> + <div v-if="device === 'mobile' && sidebar.opened" class="drawer-bg" @click="handleClickOutside" /> + <side-bar v-if="!sidebar.hide" class="sidebar-container" /> + <div :class="{ hasTagsView: needTagsView, sidebarHide: sidebar.hide }" class="main-container"> + <!-- <el-scrollbar> <div :class="{ 'fixed-header': fixedHeader }"> - <navbar ref="navbarRef" @setLayout="setLayout" /> - <tags-view v-if="needTagsView" /> + <navbar ref="navbarRef" @setLayout="setLayout" /> + <tags-view v-if="needTagsView" /> </div> <app-main /> <settings ref="settingRef" /> + </el-scrollbar> --> + <div :class="{ 'fixed-header': fixedHeader }"> + <navbar ref="navbarRef" @set-layout="setLayout" /> + <tags-view v-if="needTagsView" /> </div> - </el-scrollbar> + <app-main /> + <settings ref="settingRef" /> + </div> </div> </template> <script setup lang="ts"> -import SideBar from './components/Sidebar/index.vue' -import { AppMain, Navbar, Settings, TagsView } from './components' -import useAppStore from '@/store/modules/app' -import useSettingsStore from '@/store/modules/settings' +import SideBar from './components/Sidebar/index.vue'; +import { AppMain, Navbar, Settings, TagsView } from './components'; +import useAppStore from '@/store/modules/app'; +import useSettingsStore from '@/store/modules/settings'; +import { initWebSocket } from '@/utils/websocket'; +import { initSSE } from '@/utils/sse'; -const settingsStore = useSettingsStore() +const settingsStore = useSettingsStore(); const theme = computed(() => settingsStore.theme); const sidebar = computed(() => useAppStore().sidebar); const device = computed(() => useAppStore().device); @@ -29,66 +37,63 @@ const fixedHeader = computed(() => settingsStore.fixedHeader); const classObj = computed(() => ({ - hideSidebar: !sidebar.value.opened, - openSidebar: sidebar.value.opened, - withoutAnimation: sidebar.value.withoutAnimation, - mobile: device.value === 'mobile' -})) + hideSidebar: !sidebar.value.opened, + openSidebar: sidebar.value.opened, + withoutAnimation: sidebar.value.withoutAnimation, + mobile: device.value === 'mobile' +})); const { width } = useWindowSize(); const WIDTH = 992; // refer to Bootstrap's responsive design watchEffect(() => { - if (device.value === 'mobile' && sidebar.value.opened) { - useAppStore().closeSideBar({ withoutAnimation: false }) - } - if (width.value - 1 < WIDTH) { - useAppStore().toggleDevice('mobile') - useAppStore().closeSideBar({ withoutAnimation: true }) - } else { - useAppStore().toggleDevice('desktop') - } -}) + if (device.value === 'mobile') { + useAppStore().closeSideBar({ withoutAnimation: false }); + } + if (width.value - 1 < WIDTH) { + useAppStore().toggleDevice('mobile'); + useAppStore().closeSideBar({ withoutAnimation: true }); + } else { + useAppStore().toggleDevice('desktop'); + } +}); -const navbarRef = ref(Navbar); -const settingRef = ref(Settings); +const navbarRef = ref<InstanceType<typeof Navbar>>(); +const settingRef = ref<InstanceType<typeof Settings>>(); onMounted(() => { - nextTick(() => { - navbarRef.value.initTenantList(); - }) -}) + nextTick(() => { + navbarRef.value?.initTenantList(); + }); +}); + +onMounted(() => { + let protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://'; + initWebSocket(protocol + window.location.host + import.meta.env.VITE_APP_BASE_API + '/resource/websocket'); +}); + +onMounted(() => { + initSSE(import.meta.env.VITE_APP_BASE_API + '/resource/sse'); +}); const handleClickOutside = () => { - useAppStore().closeSideBar({ withoutAnimation: false }) -} + useAppStore().closeSideBar({ withoutAnimation: false }); +}; const setLayout = () => { - settingRef.value.openSetting(); -} + settingRef.value?.openSetting(); +}; </script> <style lang="scss" scoped> - @import "@/assets/styles/mixin.scss"; - @import "@/assets/styles/variables.module.scss"; +@import '@/assets/styles/mixin.scss'; +@import '@/assets/styles/variables.module.scss'; .app-wrapper { @include clearfix; position: relative; height: 100%; width: 100%; - - .el-scrollbar { - height: 100%; - } - - :deep(.el-scrollbar__bar).is-vertical { - z-index: 10; - } - - :deep(.el-scrollbar__wrap) { - overflow-x: hidden; - } &.mobile.openSidebar { position: fixed; @@ -113,6 +118,7 @@ z-index: 9; width: calc(100% - #{$base-sidebar-width}); transition: width 0.28s; + background: $fixed-header-bg; } .hideSidebar .fixed-header { -- Gitblit v1.9.3