Menu.vue 1.8 KB

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