From e181f04c642204e79749af93fa921875ff6c21ba Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期二, 20 五月 2025 10:46:35 +0800 Subject: [PATCH] refactor(qms): 重构趋势图展示逻辑 --- src/layout/index.vue | 98 ++++++++++++++++++++++++++---------------------- 1 files changed, 53 insertions(+), 45 deletions(-) diff --git a/src/layout/index.vue b/src/layout/index.vue index 1c8f97a..207a470 100644 --- a/src/layout/index.vue +++ b/src/layout/index.vue @@ -3,8 +3,16 @@ <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" /> + </div> + <app-main /> + <settings ref="settingRef" /> + </el-scrollbar> --> <div :class="{ 'fixed-header': fixedHeader }"> - <navbar ref="navbarRef" @setLayout="setLayout" /> + <navbar ref="navbarRef" @set-layout="setLayout" /> <tags-view v-if="needTagsView" /> </div> <app-main /> @@ -14,12 +22,14 @@ </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); @@ -27,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; @@ -111,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