GlobalHeader.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <template>
  2. <!-- , width: fixedHeader ? `calc(100% - ${sidebarOpened ? 256 : 80}px)` : '100%' -->
  3. <a-layout-header v-if="!headerBarFixed" :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]" :style="{ padding: '0' }">
  4. <div v-if="mode === 'sidemenu'" class="header">
  5. <a-icon
  6. v-if="device==='mobile'"
  7. class="trigger"
  8. :type="collapsed ? 'menu-fold' : 'menu-unfold'"
  9. @click="toggle"></a-icon>
  10. <a-icon
  11. v-else
  12. class="trigger"
  13. :type="collapsed ? 'menu-unfold' : 'menu-fold'"
  14. @click="toggle"/>
  15. <user-menu></user-menu>
  16. </div>
  17. <div v-else :class="['top-nav-header-index', theme]">
  18. <div class="header-index-wide">
  19. <div class="header-index-left">
  20. <logo class="top-nav-header" :show-title="device !== 'mobile'" />
  21. <s-menu
  22. v-if="device !== 'mobile'"
  23. mode="horizontal"
  24. :menu="menus"
  25. :theme="theme"
  26. ></s-menu>
  27. <a-icon
  28. v-else
  29. class="trigger"
  30. :type="collapsed ? 'menu-fold' : 'menu-unfold'"
  31. @click="toggle"></a-icon>
  32. </div>
  33. <user-menu class="header-index-right"></user-menu>
  34. </div>
  35. </div>
  36. </a-layout-header>
  37. </template>
  38. <script>
  39. import UserMenu from '../tools/UserMenu'
  40. import SMenu from '../menu/'
  41. import Logo from '../tools/Logo'
  42. import { mixin } from '@/utils/mixin.js'
  43. export default {
  44. name: 'GlobalHeader',
  45. components: {
  46. UserMenu,
  47. SMenu,
  48. Logo
  49. },
  50. mixins: [mixin],
  51. props: {
  52. mode: {
  53. type: String,
  54. // sidemenu, topmenu
  55. default: 'sidemenu'
  56. },
  57. menus: {
  58. type: Array,
  59. required: true
  60. },
  61. theme: {
  62. type: String,
  63. required: false,
  64. default: 'dark'
  65. },
  66. collapsed: {
  67. type: Boolean,
  68. required: false,
  69. default: false
  70. },
  71. device: {
  72. type: String,
  73. required: false,
  74. default: 'desktop'
  75. }
  76. },
  77. data () {
  78. return {
  79. headerBarFixed: false
  80. }
  81. },
  82. mounted () {
  83. window.addEventListener('scroll', this.handleScroll)
  84. },
  85. methods: {
  86. handleScroll () {
  87. if (this.autoHideHeader) {
  88. const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  89. if (scrollTop > 100) {
  90. this.headerBarFixed = true
  91. } else {
  92. this.headerBarFixed = false
  93. }
  94. } else {
  95. this.headerBarFixed = false
  96. }
  97. },
  98. toggle () {
  99. this.$emit('toggle')
  100. }
  101. }
  102. }
  103. </script>
  104. <style lang="less" scoped>
  105. </style>