MainHeader.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <template>
  2. <nav class="nav is-info">
  3. <div class="nav-left">
  4. <router-link class="nav-item is-brand" to="/">Musare</router-link>
  5. </div>
  6. <span class="nav-toggle" :class="{ 'is-active': isMobile }" v-on:click="isMobile = !isMobile">
  7. <span></span>
  8. <span></span>
  9. <span></span>
  10. </span>
  11. <div class="nav-right nav-menu" :class="{ 'is-active': isMobile }">
  12. <router-link
  13. class="nav-item is-tab admin"
  14. to="/admin"
  15. v-if="$parent.$parent.role === 'admin'"
  16. >
  17. <strong>Admin</strong>
  18. </router-link>
  19. <router-link class="nav-item is-tab admin" to="/team">Team</router-link>
  20. <router-link class="nav-item is-tab admin" to="/about">About</router-link>
  21. <router-link class="nav-item is-tab admin" to="/news">News</router-link>
  22. <span class="grouped" v-if="$parent.$parent.loggedIn">
  23. <router-link
  24. class="nav-item is-tab admin"
  25. :to="{ name: 'profile', params: { username: $parent.$parent.username } }"
  26. >Profile</router-link>
  27. <router-link class="nav-item is-tab admin" to="/settings">Settings</router-link>
  28. <a class="nav-item is-tab" href="#" v-on:click="$parent.$parent.logout()">Logout</a>
  29. </span>
  30. <span class="grouped" v-else>
  31. <a
  32. class="nav-item"
  33. href="#"
  34. v-on:click="toggleModal({
  35. sector: 'header',
  36. modal: 'login'
  37. })"
  38. >Login</a>
  39. <a
  40. class="nav-item"
  41. href="#"
  42. v-on:click="toggleModal({
  43. sector: 'header',
  44. modal: 'register'
  45. })"
  46. >Register</a>
  47. </span>
  48. </div>
  49. </nav>
  50. </template>
  51. <script>
  52. import { mapState, mapActions } from "vuex";
  53. export default {
  54. data() {
  55. return {
  56. isMobile: false
  57. };
  58. },
  59. computed: mapState("modals", {
  60. modals: state => state.modals.header
  61. }),
  62. methods: {
  63. ...mapActions("modals", ["toggleModal"])
  64. }
  65. };
  66. </script>
  67. <style lang="scss" scoped>
  68. .nav {
  69. background-color: #03a9f4;
  70. height: 64px;
  71. .nav-menu.is-active {
  72. .nav-item {
  73. color: #333;
  74. &:hover {
  75. color: #333;
  76. }
  77. }
  78. }
  79. .nav-toggle {
  80. height: 64px;
  81. &.is-active span {
  82. background-color: #333;
  83. }
  84. }
  85. .is-brand {
  86. font-size: 2.1rem !important;
  87. line-height: 64px !important;
  88. padding: 0 20px;
  89. }
  90. .nav-item {
  91. font-size: 15px;
  92. color: hsl(0, 0%, 100%);
  93. &:hover {
  94. color: hsl(0, 0%, 100%);
  95. }
  96. }
  97. .admin {
  98. color: #424242;
  99. }
  100. }
  101. .grouped {
  102. margin: 0;
  103. display: flex;
  104. text-decoration: none;
  105. }
  106. .nightMode {
  107. .nav {
  108. background-color: #012332;
  109. height: 64px;
  110. .nav-menu.is-active {
  111. .nav-item {
  112. color: #333;
  113. &:hover {
  114. color: #333;
  115. }
  116. }
  117. }
  118. .nav-toggle {
  119. height: 64px;
  120. &.is-active span {
  121. background-color: #333;
  122. }
  123. }
  124. .is-brand {
  125. font-size: 2.1rem !important;
  126. line-height: 64px !important;
  127. padding: 0 20px;
  128. }
  129. .nav-item {
  130. font-size: 15px;
  131. color: hsl(0, 0%, 100%);
  132. &:hover {
  133. color: hsl(0, 0%, 100%);
  134. }
  135. }
  136. .admin strong {
  137. color: #03a9f4;
  138. }
  139. }
  140. }
  141. </style>