NavBar.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <template>
  2. <header class="nav-bar">
  3. <ToggleSideBarButton @toggle="$emit('toggle')" />
  4. <NavBarTitle />
  5. <div class="flex-grow" />
  6. <div class="nav">
  7. <NavLinks />
  8. </div>
  9. <div class="nav-icons">
  10. <div class="item">
  11. <dark-mode-switch />
  12. </div>
  13. <div v-if="repo" class="item">
  14. <a
  15. class="nav-btn"
  16. href="https://github.com/kailong321200875/vue-element-plus-admin"
  17. target="_blank"
  18. aria-label="View GitHub Repo"
  19. >
  20. <ri-github-line />
  21. </a>
  22. </div>
  23. </div>
  24. <slot name="search" />
  25. </header>
  26. </template>
  27. <script setup lang="ts">
  28. import { defineEmit } from 'vue';
  29. import NavBarTitle from './NavBarTitle.vue';
  30. import NavLinks from './NavLinks.vue';
  31. import ToggleSideBarButton from './ToggleSideBarButton.vue';
  32. import DarkModeSwitch from './DarkModeSwitch.vue';
  33. import { useRepo } from '../composables/repo';
  34. defineEmit(['toggle']);
  35. const repo = useRepo();
  36. </script>
  37. <style scoped>
  38. .nav-bar {
  39. position: fixed;
  40. top: 0;
  41. right: 0;
  42. left: 0;
  43. z-index: var(--z-index-navbar);
  44. display: flex;
  45. justify-content: space-between;
  46. align-items: center;
  47. border-bottom: 1px solid var(--c-divider);
  48. padding: 0.7rem 1.5rem 0.7rem 4rem;
  49. height: var(--header-height);
  50. background-color: var(--c-bg);
  51. }
  52. @media (min-width: 720px) {
  53. .nav-bar {
  54. padding: 0.7rem 1.5rem;
  55. }
  56. }
  57. .flex-grow {
  58. flex-grow: 1;
  59. }
  60. .nav {
  61. display: none;
  62. }
  63. @media (min-width: 720px) {
  64. .nav {
  65. display: flex;
  66. }
  67. .navbar__dark-mode {
  68. display: none;
  69. }
  70. }
  71. .nav-icons {
  72. display: flex;
  73. padding: 2px 0 0;
  74. align-items: center;
  75. border-bottom: 0;
  76. margin-left: 12px;
  77. }
  78. .nav-icons .item {
  79. padding-left: 12px;
  80. }
  81. </style>