LayoutView.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <script lang="ts" setup>
  2. import { ref, onMounted } from 'vue'
  3. import Header from './components/Header/HeaderView.vue'
  4. import Menu from './components/Menu/MenuView.vue'
  5. import Logo from './images/logo.png'
  6. import ScoringGrade from '@/components/ScoringGrade'
  7. import LogoMenu from './images/logo_menu.png'
  8. const leftAsideWidth = ref('232px')
  9. const isCollapse = ref(false)
  10. const handleMenuCollapse = (val: boolean) => {
  11. isCollapse.value = val
  12. val ? (leftAsideWidth.value = '64px') : (leftAsideWidth.value = '232px')
  13. }
  14. </script>
  15. <template>
  16. <el-container class="layout-container">
  17. <!-- 页面左侧导航栏 -->
  18. <el-aside :width="leftAsideWidth" class="left-nav">
  19. <div class="logo-bd">
  20. <el-image
  21. v-if="isCollapse"
  22. style="width: 40px; height: 40px"
  23. :src="LogoMenu"
  24. fit="cover"
  25. ></el-image>
  26. <el-image v-else style="width: 110px" :src="Logo"></el-image>
  27. </div>
  28. <Menu v-model="isCollapse" @update:modelValue="handleMenuCollapse"></Menu>
  29. </el-aside>
  30. <!-- 右侧整体布局 -->
  31. <el-container style="min-width: 900px">
  32. <!-- 顶部Header -->
  33. <el-header class="layout-header">
  34. <Header></Header>
  35. </el-header>
  36. <!-- 主体内容 -->
  37. <el-main class="layout-content">
  38. <router-view />
  39. </el-main>
  40. </el-container>
  41. <ScoringGrade></ScoringGrade>
  42. </el-container>
  43. </template>
  44. <style scoped lang="scss">
  45. .layout-container {
  46. height: 100%;
  47. .logo-bd {
  48. display: flex;
  49. justify-content: center;
  50. align-items: center;
  51. height: 64px;
  52. }
  53. .left-nav {
  54. border-right: 1px solid var(--color-border);
  55. overflow: hidden;
  56. transition: all 0.3s;
  57. // :deep(.el-scrollbar__view) {
  58. // height: 100%;
  59. // }
  60. // .el-menu {
  61. // height: calc(100% - 120px);
  62. // }
  63. }
  64. .layout-header {
  65. position: relative;
  66. height: 48px;
  67. border-bottom: 1px solid var(--color-border);
  68. color: var(--el-text-color-primary);
  69. }
  70. .layout-content {
  71. padding: 0;
  72. & > .el-scrollbar {
  73. :deep(.el-scrollbar__wrap--hidden-default) {
  74. border-radius: 0;
  75. & > .el-scrollbar__view {
  76. height: 100%;
  77. }
  78. }
  79. }
  80. }
  81. }
  82. </style>