nav-header.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template lang='pug'>
  2. v-toolbar(color='black', dark, app, clipped-left, fixed, flat, dense)
  3. v-menu(open-on-hover, offset-y, bottom, left, nudge-top='-18', min-width='250')
  4. v-toolbar-side-icon(slot='activator')
  5. v-icon view_module
  6. v-list(dense)
  7. v-list-tile(avatar, href='/')
  8. v-list-tile-avatar: v-icon(color='blue') home
  9. v-list-tile-content Home
  10. v-list-tile(avatar, @click='')
  11. v-list-tile-avatar: v-icon(color='green') add_box
  12. v-list-tile-content New Page
  13. v-divider.my-0
  14. v-subheader Current Page
  15. v-list-tile(avatar, @click='')
  16. v-list-tile-avatar: v-icon(color='indigo') edit
  17. v-list-tile-content Edit
  18. v-list-tile(avatar, @click='')
  19. v-list-tile-avatar: v-icon(color='indigo') history
  20. v-list-tile-content History
  21. v-list-tile(avatar, @click='')
  22. v-list-tile-avatar: v-icon(color='indigo') code
  23. v-list-tile-content View Source
  24. v-list-tile(avatar, @click='')
  25. v-list-tile-avatar: v-icon(color='indigo') forward
  26. v-list-tile-content Move / Rename
  27. v-list-tile(avatar, @click='')
  28. v-list-tile-avatar: v-icon(color='red darken-2') delete
  29. v-list-tile-content Delete
  30. v-divider.my-0
  31. v-subheader Assets
  32. v-list-tile(avatar, @click='')
  33. v-list-tile-avatar: v-icon(color='blue-grey') burst_mode
  34. v-list-tile-content Images
  35. v-list-tile(avatar, @click='')
  36. v-list-tile-avatar: v-icon(color='blue-grey') description
  37. v-list-tile-content Files
  38. v-toolbar-title
  39. span.subheading Wiki.js
  40. v-spacer
  41. transition(name='navHeaderSearch')
  42. v-text-field(
  43. ref='searchField',
  44. v-if='searchIsShown',
  45. v-model='search',
  46. clearable,
  47. color='blue',
  48. label='Search...',
  49. single-line,
  50. hide-details,
  51. append-icon='search',
  52. :append-icon-cb='searchEnter',
  53. :loading='searchIsLoading',
  54. @keyup.enter='searchEnter',
  55. @keyup.esc='searchToggle'
  56. )
  57. v-progress-linear(
  58. indeterminate,
  59. slot='progress',
  60. height='2',
  61. color='blue'
  62. )
  63. v-spacer
  64. v-progress-circular.mr-3(indeterminate, color='blue', v-show='isLoading')
  65. slot(name='actions')
  66. transition(name='navHeaderSearch')
  67. v-btn(icon, @click='searchToggle', v-if='!searchIsShown')
  68. v-icon(color='grey') search
  69. v-btn(icon, href='/a')
  70. v-icon(color='grey') settings
  71. v-menu(offset-y, min-width='300')
  72. v-btn(icon, slot='activator')
  73. v-icon(color='grey') account_circle
  74. v-list.py-0
  75. v-list-tile.py-3(avatar)
  76. v-list-tile-avatar
  77. v-avatar.red(:size='40'): span.white--text.subheading JD
  78. v-list-tile-content
  79. v-list-tile-title John Doe
  80. v-list-tile-sub-title john.doe@example.com
  81. v-divider.my-0
  82. v-list-tile(href='/p')
  83. v-list-tile-action: v-icon(color='red') person
  84. v-list-tile-title Profile
  85. v-list-tile(href='/logout')
  86. v-list-tile-action: v-icon(color='red') exit_to_app
  87. v-list-tile-title Logout
  88. </template>
  89. <script>
  90. import { mapGetters } from 'vuex'
  91. export default {
  92. data() {
  93. return {
  94. menuIsShown: true,
  95. searchIsLoading: false,
  96. searchIsShown: false,
  97. search: ''
  98. }
  99. },
  100. computed: {
  101. ...mapGetters(['isLoading'])
  102. },
  103. methods: {
  104. searchToggle() {
  105. this.searchIsLoading = false
  106. this.searchIsShown = !this.searchIsShown
  107. if (this.searchIsShown) {
  108. this.$nextTick(() => {
  109. this.$refs.searchField.focus()
  110. })
  111. }
  112. },
  113. searchEnter() {
  114. this.searchIsLoading = true
  115. }
  116. }
  117. }
  118. </script>
  119. <style lang='scss'>
  120. .navHeaderSearch {
  121. &-enter-active, &-leave-active {
  122. transition: opacity .25s ease, transform .25s ease;
  123. opacity: 1;
  124. }
  125. &-enter-active {
  126. transition-delay: .25s;
  127. }
  128. &-enter, &-leave-to {
  129. opacity: 0;
  130. transform: translateY(-25px);
  131. }
  132. }
  133. </style>