Navbar.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <nav class="navbar is-active" role="navigation" aria-label="main navigation">
  3. <div class="navbar-brand">
  4. <nuxt-link class="navbar-item" to="/">
  5. <h1 class="brand-title">Promo-Yourself</h1>
  6. </nuxt-link>
  7. <!-- Adds click to open -->
  8. <!-- Adds active class -->
  9. <a @click="() => {}"
  10. role="button"
  11. class="navbar-burger burger"
  12. aria-label="menu"
  13. aria-expanded="false"
  14. data-target="navbarBasicExample">
  15. <span aria-hidden="true"></span>
  16. <span aria-hidden="true"></span>
  17. <span aria-hidden="true"></span>
  18. </a>
  19. </div>
  20. <!-- Adds active class -->
  21. <div id="navbarBasicExample"
  22. class="navbar-menu">
  23. <div class="navbar-start">
  24. <nuxt-link to="/" class="navbar-item">
  25. Home
  26. </nuxt-link>
  27. <nuxt-link to="#" class="navbar-item">
  28. Courses
  29. </nuxt-link>
  30. <nuxt-link to="/blogs" class="navbar-item">
  31. Blogs
  32. </nuxt-link>
  33. <nuxt-link to="#" class="navbar-item">
  34. About
  35. </nuxt-link>
  36. <nuxt-link to="#" class="navbar-item">
  37. Cv
  38. </nuxt-link>
  39. <!-- <nuxt-link to="/instructor" class="navbar-item">
  40. Instructor
  41. </nuxt-link>
  42. <nuxt-link to="/secret" class="navbar-item">
  43. Secret
  44. </nuxt-link> -->
  45. </div>
  46. <div class="navbar-end">
  47. <div class="navbar-item">
  48. <div class="buttons">
  49. <!-- If Authenticated -->
  50. <template v-if="isAuth">
  51. <figure class="image avatar is-48x48 m-r-sm">
  52. <img class="is-rounded" :src="user.avatar">
  53. </figure>
  54. <div class="m-r-sm m-b-sm">
  55. Welcome {{user.username}}!
  56. </div>
  57. <!-- If Admin -->
  58. <button
  59. v-if="isAdmin" class="button is-link is-outlined"
  60. @click="() => $router.push('/instructor')">
  61. Instructor
  62. </button>
  63. <a class="button is-primary" @click="logout">
  64. Logout
  65. </a>
  66. </template>
  67. <template v-else>
  68. <nuxt-link to="/register" class="button is-primary">
  69. Sign up
  70. </nuxt-link>
  71. <nuxt-link to="/login" class="button is-light">
  72. Log in
  73. </nuxt-link>
  74. </template>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79. </nav>
  80. </template>
  81. <script>
  82. import { mapGetters } from 'vuex'
  83. export default {
  84. computed : {
  85. ...mapGetters({
  86. 'user': 'auth/authUser',
  87. 'isAuth': 'auth/isAuthenticated',
  88. 'isAdmin': 'auth/isAdmin'
  89. })
  90. },
  91. methods : {
  92. async logout() {
  93. console.log('Navbar.vue call await this.$store.dispatch(auth/logout)')
  94. const result = await this.$store.dispatch('auth/logout')
  95. console.log('Navbar.vue done await this.$store.dispatch(auth/logout)', result)
  96. this.$router.push('/login')
  97. }
  98. }
  99. }
  100. </script>
  101. <style lang="scss" scoped>
  102. .brand-title {
  103. font-size: 35px;
  104. font-weight: bold;
  105. }
  106. .navbar-brand {
  107. padding-right: 30px;
  108. }
  109. .avatar {
  110. margin-right: 5px;
  111. }
  112. </style>