index.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <script setup lang="ts">
  2. import { useRoute } from "vue-router";
  3. import SidebarItem from "./SidebarItem.vue";
  4. import Logo from "./Logo.vue";
  5. import { useSettingsStore } from "@/store/modules/settings";
  6. import { usePermissionStore } from "@/store/modules/permission";
  7. import { useAppStore } from "@/store/modules/app";
  8. import { storeToRefs } from "pinia";
  9. import variables from "@/styles/variables.module.scss";
  10. const settingsStore = useSettingsStore();
  11. const permissionStore = usePermissionStore();
  12. const appStore = useAppStore();
  13. const currRoute = useRoute();
  14. const { sidebarLogo } = storeToRefs(settingsStore);
  15. </script>
  16. <template>
  17. <div :class="{ 'has-logo': sidebarLogo }">
  18. <logo v-if="sidebarLogo" :collapse="!appStore.sidebar.opened" />
  19. <el-scrollbar>
  20. <el-menu size="large"
  21. :default-active="currRoute.path"
  22. :collapse="!appStore.sidebar.opened"
  23. :background-color="variables.menuBg"
  24. :text-color="variables.menuText"
  25. :active-text-color="variables.menuActiveText"
  26. :unique-opened="false"
  27. :collapse-transition="false"
  28. mode="vertical"
  29. >
  30. <sidebar-item
  31. v-for="route in permissionStore.routes"
  32. :key="route.path"
  33. :item="route"
  34. :base-path="route.path"
  35. :is-collapse="!appStore.sidebar.opened"
  36. />
  37. </el-menu>
  38. </el-scrollbar>
  39. </div>
  40. </template>