index.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <n-layout-sider
  3. class="go-project-sider"
  4. bordered
  5. collapse-mode="width"
  6. show-trigger="bar"
  7. :collapsed="collapsed"
  8. :native-scrollbar="false"
  9. :collapsed-width="getAsideCollapsedWidth"
  10. :width="asideWidth"
  11. @collapse="collapsed = true"
  12. @expand="collapsed = false"
  13. >
  14. <div class="go-project-sider-flex">
  15. <aside>
  16. <n-space vertical class="go-project-sider-top">
  17. <Create :collapsed="collapsed" />
  18. </n-space>
  19. <n-menu
  20. :value="menuValue"
  21. :options="menuOptions"
  22. :collapsed-width="getAsideCollapsedWidth"
  23. :collapsed-icon-size="22"
  24. :default-expanded-keys="defaultExpandedKeys"
  25. @update:value="handleUpdateValue"
  26. />
  27. </aside>
  28. <!-- 底部提示 -->
  29. <div class="sider-bottom">
  30. <AsideFooter :collapsed="collapsed" />
  31. </div>
  32. </div>
  33. </n-layout-sider>
  34. </template>
  35. <script setup lang="ts">
  36. import { ref, computed, onMounted, toRefs } from 'vue'
  37. import { Create } from '../Create/index'
  38. import { AsideFooter } from '../AsideFooter/index'
  39. import { asideWidth, asideCollapsedWidth } from '@/settings/designSetting'
  40. import { useRoute } from 'vue-router'
  41. import { useDesignStore } from '@/store/modules/designStore/designStore'
  42. import { menuOptionsInit, expandedKeys } from './menu'
  43. const collapsed = ref<boolean>(false)
  44. const { getAsideCollapsedWidth } = toRefs(useDesignStore())
  45. const route = useRoute()
  46. const routeRame = computed(() => route.name)
  47. const menuValue = ref(routeRame)
  48. const menuOptions = menuOptionsInit()
  49. const defaultExpandedKeys = expandedKeys()
  50. const watchWidth = () => {
  51. const Width = document.body.clientWidth
  52. if (Width <= 950) {
  53. collapsed.value = true
  54. } else collapsed.value = false
  55. }
  56. onMounted(() => {
  57. window.addEventListener('resize', watchWidth)
  58. })
  59. </script>
  60. <style lang="scss" scoped>
  61. $siderHeight: 100vh;
  62. @include go(project) {
  63. &-sider {
  64. @include filter-bg-color('aside-background-color');
  65. &-top {
  66. display: flex;
  67. align-items: center;
  68. justify-content: space-between;
  69. flex-direction: column;
  70. margin-top: 30px;
  71. margin-bottom: 20px;
  72. }
  73. &-flex {
  74. display: flex;
  75. flex-direction: column;
  76. justify-content: space-between;
  77. height: $siderHeight;
  78. }
  79. }
  80. &-layout-sider {
  81. height: $siderHeight;
  82. }
  83. .content-top {
  84. top: $--header-height;
  85. margin-top: 1px;
  86. }
  87. }
  88. </style>