Header.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <!--
  2. Header de l'application, contient entre autres le nom de l'organisation, l'accès à l'aide
  3. et aux préférences de l'utilisateur
  4. -->
  5. <template>
  6. <v-app-bar
  7. clipped-left
  8. elevate-on-scroll
  9. dense
  10. fixed
  11. app
  12. class="ot_green ot_white--text"
  13. >
  14. <v-btn
  15. v-if="displayedMiniVariant"
  16. class="menu-btn d-none d-sm-none d-md-flex" icon @click.stop="displayedMiniMenu()"
  17. >
  18. <v-icon class="ot_white--text">
  19. mdi-menu{{ `${properties.miniVariant ? '' : '-open'}` }}
  20. </v-icon>
  21. </v-btn>
  22. <v-btn class="menu-btn d-sm-flex d-md-none" icon @click.stop="displayedMenu()">
  23. <v-icon class="ot_white--text">
  24. mdi-menu
  25. </v-icon>
  26. </v-btn>
  27. <v-toolbar-title v-text="title" />
  28. <v-spacer />
  29. <LayoutHeaderUniversalCreationCreateButton v-if="showUniversalButton" />
  30. <v-tooltip bottom>
  31. <template #activator="{ on, attrs }">
  32. <v-btn
  33. icon
  34. class="ml-2"
  35. v-bind="attrs"
  36. v-on="on"
  37. >
  38. <a class="no-decoration" :href="properties.homeUrl + '/'"><v-icon class="ot_white--text" small>fa-home</v-icon></a>
  39. </v-btn>
  40. </template>
  41. <span>{{ $t('welcome') }}</span>
  42. </v-tooltip>
  43. <LayoutHeaderMenu :menu="webSiteMenu" />
  44. <LayoutHeaderMenu v-if="hasAccessesMenu" :menu="myAccessesMenu" />
  45. <LayoutHeaderMenu v-if="hasFamilyMenu" :menu="myFamilyMenu" />
  46. <LayoutHeaderNotification />
  47. <LayoutHeaderMenu v-if="hasConfigurationMenu" :menu="configurationMenu" />
  48. <LayoutHeaderMenu :menu="accountMenu" :avatar="true" />
  49. <a class="text-body pa-3 ml-2 ot_dark_grey ot_white--text text-decoration-none" href="https://support.opentalent.fr/" target="_blank">
  50. <span class="d-none d-sm-none d-md-flex">{{ $t('help_access') }}</span>
  51. <v-icon class="d-sm-flex d-md-none" color="white">fas fa-question-circle</v-icon>
  52. </a>
  53. </v-app-bar>
  54. </template>
  55. <script lang="ts">
  56. import {
  57. defineComponent, reactive, useContext, computed, ComputedRef, Ref, UnwrapRef
  58. } from '@nuxtjs/composition-api'
  59. import { $useMenu } from '~/composables/layout/menu'
  60. import { AnyJson } from '~/types/interfaces'
  61. export default defineComponent({
  62. setup (_props, { emit }) {
  63. const { store, $config,$ability } = useContext()
  64. const properties:UnwrapRef<AnyJson> = reactive({
  65. miniVariant: false,
  66. openMenu: false,
  67. homeUrl: $config.baseURL_adminLegacy
  68. })
  69. const displayedMiniVariant:ComputedRef<boolean> = computed(() => store.state.profile.access.hasLateralMenu)
  70. const hasConfigurationMenu:ComputedRef<boolean> = computed(() => store.state.profile.access.hasConfigurationMenu)
  71. const hasAccessesMenu:ComputedRef<boolean> = computed(() => store.state.profile.access.hasAccessesMenu)
  72. const hasFamilyMenu:ComputedRef<boolean> = computed(() => store.state.profile.access.hasFamilyMenu)
  73. const title:ComputedRef<string> = computed(() => store.state.profile.organization.name)
  74. const webSiteMenu:Ref<any> = $useMenu.setupContext().useWebSiteMenuConstruct()
  75. const myAccessesMenu:Ref<any> = $useMenu.setupContext().useMyAccessesMenuConstruct()
  76. const myFamilyMenu:Ref<any> = $useMenu.setupContext().useMyFamilyMenuConstruct()
  77. const configurationMenu:Ref<any> = $useMenu.setupContext().useConfigurationMenuConstruct()
  78. const accountMenu:Ref<any> = $useMenu.setupContext().useAccountMenuConstruct()
  79. const displayedMiniMenu = () => {
  80. properties.miniVariant = !properties.miniVariant
  81. emit('handle-open-mini-menu-click', properties.miniVariant)
  82. }
  83. const displayedMenu = () => {
  84. properties.openMenu = !properties.openMenu
  85. emit('handle-open-menu-click', properties.openMenu )
  86. }
  87. const showUniversalButton =
  88. $ability.can('manage', 'users')
  89. || $ability.can('manage', 'courses')
  90. || $ability.can('manage', 'examens')
  91. || $ability.can('manage', 'educationalprojects')
  92. || $ability.can('manage', 'events')
  93. || $ability.can('manage', 'emails')
  94. || $ability.can('manage', 'mails')
  95. || $ability.can('manage', 'texto')
  96. || $ability.can('display', 'message_send_page')
  97. || $ability.can('manage', 'equipments') ;
  98. return {
  99. properties,
  100. displayedMiniVariant,
  101. hasConfigurationMenu,
  102. hasAccessesMenu,
  103. hasFamilyMenu,
  104. title,
  105. displayedMiniMenu,
  106. displayedMenu,
  107. webSiteMenu,
  108. myAccessesMenu,
  109. myFamilyMenu,
  110. configurationMenu,
  111. accountMenu,
  112. showUniversalButton
  113. }
  114. }
  115. })
  116. </script>
  117. <style scoped>
  118. .help {
  119. padding: 14px 14px 13px;
  120. font-size: 14px;
  121. text-decoration: none;
  122. }
  123. </style>