Header.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <template>
  2. <v-app-bar
  3. clipped-left
  4. elevate-on-scroll
  5. dense
  6. fixed
  7. app
  8. class="ot_green ot_white--text"
  9. >
  10. <v-btn
  11. v-if="displayedMiniVariant"
  12. class="menu-btn"
  13. icon
  14. @click.stop="displayedMenu()"
  15. >
  16. <v-icon class="ot_white--text">mdi-menu{{ `${properties.miniVariant ? '' : '-open'}` }}</v-icon>
  17. </v-btn>
  18. <v-toolbar-title v-text="title"/>
  19. <v-spacer/>
  20. <v-btn
  21. elevation="2"
  22. color="ot_warning ot_white--text"
  23. >{{ $t('create') }}</v-btn>
  24. <v-tooltip bottom>
  25. <template v-slot:activator="{ on, attrs }">
  26. <v-btn
  27. icon
  28. v-bind="attrs"
  29. v-on="on"
  30. >
  31. <a class="no-decoration" :href="properties.homeUrl + '/'"><v-icon class="ot_white--text" small>fa-home</v-icon></a>
  32. </v-btn>
  33. </template>
  34. <span>{{ $t('welcome') }}</span>
  35. </v-tooltip>
  36. <LayoutHeaderMenu :menu="webSiteMenu"></LayoutHeaderMenu>
  37. <LayoutHeaderMenu :menu="myAccessesMenu" v-if="hasAccessesMenu"></LayoutHeaderMenu>
  38. <LayoutHeaderMenu :menu="myFamilyMenu" v-if="hasFamilyMenu"></LayoutHeaderMenu>
  39. <LayoutHeaderNotification></LayoutHeaderNotification>
  40. <LayoutHeaderMenu :menu="configurationMenu" v-if="hasConfigurationMenu"></LayoutHeaderMenu>
  41. <LayoutHeaderMenu :menu="accountMenu" :avatar="true"></LayoutHeaderMenu>
  42. <a class="text-body pa-3 ml-2 ot_dark_grey ot_white--text text-decoration-none" href="https://support.opentalent.fr/" target="_blank">
  43. <span class="d-none d-sm-none d-md-flex">{{ $t('help_access') }}</span>
  44. <v-icon class="d-sm-flex d-md-none" color="white">fas fa-question-circle</v-icon>
  45. </a>
  46. </v-app-bar>
  47. </template>
  48. <script lang="ts">
  49. import {defineComponent, reactive, useContext, computed, ComputedRef, Ref} from '@nuxtjs/composition-api'
  50. import {$useMenu} from "~/use/layout/menu";
  51. import {UnwrapRef} from "@vue/composition-api";
  52. import {AnyJson} from "~/types/interfaces";
  53. export default defineComponent({
  54. setup(props, {emit}) {
  55. const {store, $config} = useContext();
  56. const properties:UnwrapRef<AnyJson> = reactive({
  57. miniVariant: false,
  58. homeUrl : $config.baseURL_adminLegacy
  59. })
  60. const displayedMiniVariant:ComputedRef<boolean> = computed(()=>store.state.profile.access.hasLateralMenu)
  61. const hasConfigurationMenu:ComputedRef<boolean> = computed(()=>store.state.profile.access.hasConfigurationMenu)
  62. const hasAccessesMenu:ComputedRef<boolean> = computed(()=>store.state.profile.access.hasAccessesMenu)
  63. const hasFamilyMenu:ComputedRef<boolean> = computed(()=>store.state.profile.access.hasFamilyMenu)
  64. const title:ComputedRef<string> = computed(()=>store.state.profile.organization.name)
  65. const webSiteMenu:Ref<any> = $useMenu.setUpContext().useWebSiteMenuConstruct()
  66. const myAccessesMenu:Ref<any> = $useMenu.setUpContext().useMyAccessesMenuConstruct()
  67. const myFamilyMenu:Ref<any> = $useMenu.setUpContext().useMyFamilyMenuConstruct()
  68. const configurationMenu:Ref<any> = $useMenu.setUpContext().useConfigurationMenuConstruct()
  69. const accountMenu:Ref<any> = $useMenu.setUpContext().useAccountMenuConstruct()
  70. const displayedMenu = () => {
  71. properties.miniVariant = !properties.miniVariant
  72. emit('handle-open-menu-click', properties.miniVariant)
  73. }
  74. return {
  75. properties,
  76. displayedMiniVariant,
  77. hasConfigurationMenu,
  78. hasAccessesMenu,
  79. hasFamilyMenu,
  80. title,
  81. displayedMenu,
  82. webSiteMenu,
  83. myAccessesMenu,
  84. myFamilyMenu,
  85. configurationMenu,
  86. accountMenu
  87. }
  88. }
  89. })
  90. </script>
  91. <style scoped>
  92. .help {
  93. padding: 14px;
  94. padding-bottom: 13px;
  95. font-size: 14px;
  96. text-decoration: none;
  97. }
  98. </style>