MainHeader.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <nav class="nav is-info">
  3. <div class="nav-left">
  4. <a class="nav-item is-brand" href="#" v-link="{ path: '/' }">
  5. Musare
  6. </a>
  7. </div>
  8. <!--<span class="nav-toggle" :class="{ 'is-active': isActive }" @click="toggleMobileMenu()">
  9. <span></span>
  10. <span></span>
  11. <span></span>
  12. </span>-->
  13. <div class="nav-right">
  14. <a class="nav-item is-tab admin" href="#" v-link="{ path: '/admin' }" v-if="isAdmin">
  15. Admin
  16. </a>
  17. <a class="nav-item is-tab" href="#">
  18. About
  19. </a>
  20. <a class="nav-item is-tab" href="#" v-link="{ path: '/news' }">
  21. News
  22. </a>
  23. <span class="grouped" v-if="$parent.$parent.loggedIn">
  24. <a class="nav-item is-tab" href="#" v-link="{ path: '/settings' }">
  25. Settings
  26. </a>
  27. <a class="nav-item is-tab" href="#" @click="$parent.$parent.logout()">
  28. Logout
  29. </a>
  30. </span>
  31. <span class="grouped" v-else>
  32. <a class="nav-item" href="#" @click="toggleModal('login')">
  33. Login
  34. </a>
  35. <a class="nav-item" href="#" @click="toggleModal('register')">
  36. Register
  37. </a>
  38. </span>
  39. </div>
  40. </nav>
  41. </template>
  42. <script>
  43. export default {
  44. data() {
  45. return {
  46. isAdmin: false
  47. }
  48. },
  49. ready: function() {
  50. let _this = this;
  51. let socketInterval = setInterval(() => {
  52. if (!!_this.$parent.socket) {
  53. _this.socket = _this.$parent.socket;
  54. _this.socket.emit('users.findBySession', res => {
  55. if (res.status == 'success') _this.isAdmin = (res.data.role === 'admin');
  56. });
  57. clearInterval(socketInterval);
  58. }
  59. }, 100);
  60. },
  61. methods: {
  62. toggleModal: function (type) {
  63. this.$dispatch('toggleModal', type);
  64. }
  65. }
  66. }
  67. </script>
  68. <style lang="scss" scoped>
  69. @import 'theme.scss';
  70. .nav {
  71. background-color: $grey-darker;
  72. .is-brand {
  73. font-size: 26px !important;
  74. }
  75. .nav-item {
  76. font-size: 15px;
  77. color: $white;
  78. &:hover {
  79. color: $white;
  80. }
  81. }
  82. .admin {
  83. color: $blue;
  84. }
  85. }
  86. .grouped {
  87. margin: 0;
  88. display: flex;
  89. text-decoration: none;
  90. }
  91. </style>