Header.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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="hasMenu('Main')"
  14. :icon="isMenuOpened('Main') ? 'mdi:mdi-menu-open' : 'mdi:mdi-menu'"
  15. class="text-ot-white"
  16. @click="toggleMenu('Main')"
  17. >
  18. </v-app-bar-nav-icon>
  19. <!-- :icon="isMenuOpened('Main') ? 'fas fa-angle-left' : 'fas fa-bars'"-->
  20. </template>
  21. <v-toolbar-title v-text="title" />
  22. <v-spacer />
  23. <!-- <LayoutHeaderUniversalCreationCreateButton v-if="showUniversalButton" />-->
  24. <v-tooltip text="$t('welcome')" bottom>
  25. <v-btn
  26. icon="far fa-home"
  27. :href="homeUrl"
  28. class="ml-2 text-ot-white"
  29. ></v-btn>
  30. </v-tooltip>
  31. <!-- <LayoutHeaderMenu :menu="webSiteMenu" />-->
  32. <!-- <LayoutHeaderMenu v-if="hasAccessesMenu" :menu="myAccessesMenu" />-->
  33. <!-- <LayoutHeaderMenu v-if="hasFamilyMenu" :menu="myFamilyMenu" />-->
  34. <!-- <LayoutHeaderNotification />-->
  35. <!-- <LayoutHeaderMenu v-if="hasConfigurationMenu" :menu="configurationMenu" />-->
  36. <!-- <LayoutHeaderMenu :menu="accountMenu"/>-->
  37. <a
  38. href="https://support.opentalent.fr/"
  39. class="text-body pa-3 ml-2 ot-dark-grey text-ot-white text-decoration-none"
  40. target="_blank"
  41. >
  42. <!-- TODO: mettre le lien vers le support dans les .env ou dans la conf -->
  43. <span class="d-none d-sm-none d-md-flex">{{ $t('help_access') }}</span>
  44. <v-icon icon="fas fa-question-circle" class="d-sm-flex d-md-none" color="white"></v-icon>
  45. </a>
  46. </v-app-bar>
  47. </template>
  48. <script setup lang="ts">
  49. import {computed, ComputedRef, Ref} from "@vue/reactivity";
  50. import {useMenuBuilder} from "~/composables/layout/useMenuBuilder";
  51. import {useAbility} from "@casl/vue";
  52. import {usePageStore} from "~/store/page";
  53. import {useOrganizationProfileStore} from "~/store/profile/organization";
  54. import {useRuntimeConfig} from "#app";
  55. const organizationProfile = useOrganizationProfileStore()
  56. const title: ComputedRef<string> = computed(() => organizationProfile.name ?? 'Opentalent')
  57. const { buildAccountMenu, buildWebsiteListMenu, buildMyFamilyMenu, buildConfigurationMenu, buildMyAccessesMenu, hasMenu } = useMenuBuilder()
  58. const webSiteMenu: Ref<any> = buildWebsiteListMenu()
  59. const myAccessesMenu: Ref<any> = buildMyAccessesMenu()
  60. const myFamilyMenu: Ref<any> = buildMyFamilyMenu()
  61. const configurationMenu: Ref<any> = buildConfigurationMenu()
  62. const accountMenu: Ref<any> = buildAccountMenu()
  63. const pageState = usePageStore()
  64. const isMenuOpened = (name: string): boolean => {
  65. return pageState.menusOpened[name]
  66. }
  67. const toggleMenu = (name: string) => {
  68. console.log('toggle menu ' + name)
  69. pageState.menusOpened[name] = !pageState.menusOpened[name]
  70. }
  71. const runtimeConfig = useRuntimeConfig()
  72. const homeUrl = runtimeConfig.baseUrlAdminLegacy
  73. const { can } = useAbility()
  74. const showUniversalButton =
  75. can('manage', 'users')
  76. || can('manage', 'courses')
  77. || can('manage', 'examens')
  78. || can('manage', 'educationalprojects')
  79. || can('manage', 'events')
  80. || can('manage', 'emails')
  81. || can('manage', 'mails')
  82. || can('manage', 'texto')
  83. || can('display', 'message_send_page')
  84. || can('manage', 'equipments') ;
  85. </script>
  86. <style scoped>
  87. .help {
  88. padding: 14px 14px 13px;
  89. font-size: 14px;
  90. text-decoration: none;
  91. }
  92. </style>