Header.vue 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <!--
  2. Header de l'application
  3. Contient entre autres le nom de l'organisation, l'accès à l'aide et aux préférences de l'utilisateur
  4. -->
  5. <template>
  6. <v-app-bar
  7. order="0"
  8. density="compact"
  9. class="bg-ot-green text-ot-white"
  10. >
  11. <template #prepend>
  12. <v-app-bar-nav-icon
  13. v-if="hasMainMenu"
  14. :icon="isMainMenuOpened ? 'mdi:mdi-menu-open' : 'mdi:mdi-menu'"
  15. class="text-ot-white"
  16. @click="toggleMainMenu"
  17. >
  18. </v-app-bar-nav-icon>
  19. </template>
  20. <v-toolbar-title v-text="title" />
  21. <!-- <v-spacer />-->
  22. <LayoutHeaderUniversalCreationCreateButton v-if="showUniversalButton" />
  23. <LayoutHeaderHomeBtn />
  24. <LayoutHeaderMenu name="WebsiteList" />
  25. <LayoutHeaderMenu name="MyAccesses" />
  26. <LayoutHeaderMenu name="MyFamily" />
  27. <LayoutHeaderNotification />
  28. <LayoutHeaderMenu name="Configuration" />
  29. <LayoutHeaderMenu name="Account" />
  30. <a
  31. href="https://support.opentalent.fr/"
  32. class="text-body pa-3 ml-2 bg-ot-dark-grey text-ot-white text-decoration-none"
  33. target="_blank"
  34. >
  35. <!-- TODO: mettre le lien vers le support dans les .env ou dans la conf -->
  36. <span class="d-none d-sm-none d-md-flex">{{ $t('help_access') }}</span>
  37. <v-icon icon="fas fa-question-circle" class="d-sm-flex d-md-none" color="white"></v-icon>
  38. </a>
  39. </v-app-bar>
  40. </template>
  41. <script setup lang="ts">
  42. import {computed, ComputedRef} from "@vue/reactivity";
  43. import {useMenu} from "~/composables/layout/useMenu";
  44. import {useAbility} from "@casl/vue";
  45. import {useOrganizationProfileStore} from "~/stores/organizationProfile";
  46. import {useRuntimeConfig} from "#app";
  47. const organizationProfile = useOrganizationProfileStore()
  48. const title: ComputedRef<string> = computed(() => organizationProfile.name ?? 'Opentalent')
  49. const { hasMenu, isMenuOpened, toggleMenu } = useMenu()
  50. const hasMainMenu = computed(() => hasMenu('Main'))
  51. const isMainMenuOpened = computed(() => isMenuOpened('Main'))
  52. const toggleMainMenu = () => toggleMenu('Main')
  53. const { can } = useAbility()
  54. const showUniversalButton =
  55. can('manage', 'users')
  56. || can('manage', 'courses')
  57. || can('manage', 'examens')
  58. || can('manage', 'educationalprojects')
  59. || can('manage', 'events')
  60. || can('manage', 'emails')
  61. || can('manage', 'mails')
  62. || can('manage', 'texto')
  63. || can('display', 'message_send_page')
  64. || can('manage', 'equipments') ;
  65. </script>
  66. <style scoped>
  67. .help {
  68. padding: 14px 14px 13px;
  69. font-size: 14px;
  70. text-decoration: none;
  71. }
  72. </style>