The frontend for the project formerly known as signet, now known as beignet.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

168 line
3.5 KiB

  1. <template>
  2. <nav class="navbar has-background-grey-dark" role="navigation" aria-label="main navigation">
  3. <div class="navbar-brand">
  4. <RouterLink to="/" class="navbar-item">
  5. <span class="signet-logo title is-3-desktop is-4-mobile">
  6. <template v-for="(element, i) in logoElements" v-bind:key="i">
  7. <span :style="`color: #${element.color}`">{{ element.letter }}</span>
  8. </template>
  9. </span>
  10. </RouterLink>
  11. </div>
  12. <div class="navbar-end">
  13. <div class="navbar-item">
  14. <div class="buttons is-hidden-mobile is-hidden-tablet-only">
  15. <div class="authentication" v-if="!hasToken">
  16. <RouterLink to="/login" class="button is-primary">
  17. Log in
  18. </RouterLink>
  19. </div>
  20. <div v-else>
  21. <RouterLink to="/admin/dashboard" class="button is-primary">
  22. Admin
  23. </RouterLink>
  24. <RouterLink to="/register" class="button is-white">
  25. Register
  26. </RouterLink>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. </nav>
  32. <div id="content">
  33. <RouterView v-slot="{ Component }">
  34. <Suspense>
  35. <Component :is="Component"/>
  36. <template #fallback>
  37. <div class="is-flex is-flex-direction-row is-justify-content-center"
  38. style="height: 90vh">
  39. <span style="font-size: 1.25em; color: greenyellow; margin: auto 0">Loading...</span>
  40. </div>
  41. </template>
  42. </Suspense>
  43. </RouterView>
  44. </div>
  45. <footer>
  46. <div>
  47. Proudly made in Michigan
  48. <div class="michigan-icon"></div>
  49. </div>
  50. </footer>
  51. </template>
  52. <script setup lang="ts">
  53. import { useSessionStorage } from '@vueuse/core';
  54. import store from '@/store';
  55. import {
  56. computed,
  57. ref,
  58. } from 'vue';
  59. import jwtDecode from 'jwt-decode';
  60. import { Claims } from '@/api/types';
  61. const userData = ref({
  62. username: '',
  63. privileges: -1,
  64. exp: -1,
  65. } as Claims);
  66. const state = useSessionStorage('jwt', { token: '' });
  67. if (state.value.token) {
  68. store.commit('setToken', state.value.token);
  69. userData.value = jwtDecode<Claims>(state.value.token);
  70. }
  71. const hasToken = computed(() => !!store.getters.getToken);
  72. interface LogoElement {
  73. letter: string;
  74. color: string;
  75. }
  76. const logoElements: LogoElement[] = [
  77. {
  78. color: '9fe82c',
  79. letter: 'B',
  80. },
  81. {
  82. color: '8ee045',
  83. letter: 'e',
  84. },
  85. {
  86. color: '7dd95c',
  87. letter: 'i',
  88. },
  89. {
  90. color: '6dd373',
  91. letter: 'g',
  92. },
  93. {
  94. color: '5dcb8a',
  95. letter: 'n',
  96. },
  97. {
  98. color: '4cc4a2',
  99. letter: 'e',
  100. },
  101. {
  102. color: '3dbeb8',
  103. letter: 't',
  104. },
  105. ];
  106. </script>
  107. <style lang="stylus">
  108. @import "../node_modules/bulma/css/bulma.min.css"
  109. #content
  110. min-height 80vh
  111. #app
  112. font-family Avenir, Helvetica, Arial, sans-serif
  113. -webkit-font-smoothing antialiased
  114. -moz-osx-font-smoothing grayscale
  115. html, body
  116. padding 0
  117. margin 0
  118. body
  119. min-height 100vh
  120. color #e8dbca
  121. background-color #313538
  122. footer
  123. color #707070
  124. padding 12px
  125. margin-top 10px
  126. & *
  127. vertical-align middle
  128. text-align center
  129. .signet-logo
  130. font-family Paytone
  131. letter-spacing 1px
  132. .michigan-icon
  133. display inline-block
  134. width 28px
  135. height 28px
  136. background-image url("./assets/icons8-michigan-50.png")
  137. background-repeat no-repeat
  138. background-position center
  139. background-size 28px
  140. margin-left 4px
  141. .navbar-burger > *
  142. background-color #fff !important
  143. @font-face
  144. font-family Paytone
  145. src url("./assets/PaytoneOne-Regular.ttf")
  146. </style>