The frontend for the project formerly known as signet, now known as beignet.
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

124 行
2.9 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 has-text-white-ter">
  6. Beignet
  7. </span>
  8. </RouterLink>
  9. <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false">
  10. <span aria-hidden="true"></span>
  11. <span aria-hidden="true"></span>
  12. <span aria-hidden="true"></span>
  13. </a>
  14. </div>
  15. <div class="navbar-end">
  16. <div class="navbar-item">
  17. <div class="buttons is-hidden-mobile is-hidden-tablet-only">
  18. <div class="authentication" v-if="!hasToken">
  19. <RouterLink to="/login" class="button is-primary">
  20. Log in
  21. </RouterLink>
  22. </div>
  23. <div v-else>
  24. <RouterLink to="/addfund" class="button is-primary">
  25. Add Fund
  26. </RouterLink>
  27. <RouterLink to="/register" class="button is-white">
  28. Register
  29. </RouterLink>
  30. </div>
  31. </div>
  32. </div>
  33. </div>
  34. </nav>
  35. <div id="content">
  36. <RouterView v-slot="{ Component }">
  37. <Suspense>
  38. <Component :is="Component" />
  39. <template #fallback>
  40. <span style="font-size: 4em; color: saddlebrown">Loading</span>
  41. </template>
  42. </Suspense>
  43. </RouterView>
  44. </div>
  45. <footer>
  46. <div>
  47. Proudly made in Michigan <div class="michigan-icon"></div>
  48. </div>
  49. </footer>
  50. </template>
  51. <script setup lang="ts">
  52. import { useSessionStorage } from '@vueuse/core';
  53. import store from '@/store';
  54. import {
  55. computed,
  56. ref,
  57. } from 'vue';
  58. import jwtDecode from 'jwt-decode';
  59. import { Claims } from '@/api/types';
  60. const userData = ref({ username: '', privileges: -1, exp: -1 } as Claims);
  61. const state = useSessionStorage('jwt', { token: '' });
  62. if (state.value.token) {
  63. store.commit('setToken', state.value.token);
  64. userData.value = jwtDecode<Claims>(state.value.token);
  65. }
  66. const hasToken = computed(() => !!store.getters.getToken);
  67. </script>
  68. <style lang="stylus">
  69. @import "../node_modules/bulma/css/bulma.min.css"
  70. #content
  71. min-height 80vh
  72. #app
  73. font-family Avenir, Helvetica, Arial, sans-serif
  74. -webkit-font-smoothing antialiased
  75. -moz-osx-font-smoothing grayscale
  76. html, body
  77. padding 0
  78. margin 0
  79. body
  80. min-height 100vh
  81. color #e8dbca
  82. background-color #313538
  83. footer
  84. color #707070
  85. padding 12px
  86. margin-top 10px
  87. & *
  88. vertical-align middle
  89. text-align center
  90. .signet-logo
  91. font-family Paytone
  92. letter-spacing 1px
  93. .michigan-icon
  94. display inline-block
  95. width 28px
  96. height 28px
  97. background-image url("./assets/icons8-michigan-50.png")
  98. background-repeat no-repeat
  99. background-position center
  100. background-size 28px
  101. margin-left 4px
  102. @font-face
  103. font-family Paytone
  104. src url("./assets/PaytoneOne-Regular.ttf")
  105. </style>