HeaderMenu.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <template>
  2. <v-menu offset-y left max-height="300">
  3. <template v-slot:activator="{ on, attrs }">
  4. <v-avatar v-if="avatar"
  5. size="30"
  6. v-bind="attrs"
  7. v-on="on"
  8. >
  9. <img
  10. src="https://cdn.vuetifyjs.com/images/john.jpg"
  11. alt="John"
  12. >
  13. </v-avatar>
  14. <v-btn v-else
  15. icon
  16. v-bind="attrs"
  17. v-on="on"
  18. color=""
  19. >
  20. <v-icon class="ot_white--text" small>{{menu.icon}}</v-icon>
  21. </v-btn>
  22. </template>
  23. <v-list dense :subheader="true">
  24. <v-list-item dense class="ot_light_grey">
  25. <v-list-item-title v-text="$t(menu.title)"></v-list-item-title>
  26. </v-list-item>
  27. <template v-for="(item, index) in menu.children">
  28. <v-list-item
  29. :key="item.title"
  30. :href="item.isExternalLink ? item.to : undefined"
  31. :to="!item.isExternalLink ? item.to : undefined"
  32. router
  33. exact
  34. >
  35. <v-list-item-title v-text="$t(item.title)"></v-list-item-title>
  36. </v-list-item>
  37. <v-divider
  38. v-if="index < menu.length - 1"
  39. :key="index"
  40. ></v-divider>
  41. </template>
  42. </v-list>
  43. </v-menu>
  44. </template>
  45. <script lang="ts">
  46. import {defineComponent} from '@nuxtjs/composition-api'
  47. export default defineComponent({
  48. props: {
  49. menu: {
  50. type: Object,
  51. required: true
  52. },
  53. avatar: {
  54. type: Boolean,
  55. required: false
  56. }
  57. }
  58. })
  59. </script>