<template>
  <!-- 使用transition包裹header元素，实现动画效果 -->
  <transition name="showHeader">
    <div v-if="visible" class="header-animat">
      <!-- 使用a-layout-header布局头部 -->
      <a-layout-header
        v-if="visible"
        :class="[fixedHeader && 'ant-header-fixedHeader', sidebarOpened ? 'ant-header-side-opened' : 'ant-header-side-closed', ]"
        :style="{ padding: '0' }">
        <!-- 根据设备类型显示不同的图标 -->
        <div v-if="mode === 'sidemenu'" class="header">
          <a-icon v-if="device==='mobile'" class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle"/>
          <a-icon v-else class="trigger" :type="collapsed ? 'menu-unfold' : 'menu-fold'" @click="toggle"/>
          <user-menu></user-menu>
        </div>
        <!-- 非侧边栏模式显示 -->
        <div v-else :class="['top-nav-header-index', theme]">
          <div class="header-index-wide">
            <div class="header-index-left">
              <logo class="top-nav-header" :show-title="device !== 'mobile'"/>
              <s-menu v-if="device !== 'mobile'" mode="horizontal" :menu="menus" :theme="theme" />
              <a-icon v-else class="trigger" :type="collapsed ? 'menu-fold' : 'menu-unfold'" @click="toggle" />
            </div>
            <user-menu class="header-index-right"></user-menu>
          </div>
        </div>
      </a-layout-header>
    </div>
  </transition>
</template>

<script>
import UserMenu from '../tools/UserMenu' // 导入用户菜单组件
import SMenu from '../Menu/' // 导入菜单组件
import Logo from '../tools/Logo' // 导入Logo组件
import { mixin } from '../../utils/mixin' // 导入混入

export default {
  name: 'GlobalHeader', // 组件名称
  components: {
    UserMenu, // 注册用户菜单组件
    SMenu, // 注册菜单组件
    Logo // 注册Logo组件
  },
  mixins: [mixin], // 使用混入
  props: {
    mode: { // 定义props类型
      type: String,
      default: 'sidemenu' // 默认值为'sidemenu'
    },
    menus: { // 菜单数组
      type: Array,
      required: true
    },
    theme: { // 主题
      type: String,
      required: false,
      default: 'dark'
    },
    collapsed: { // 侧边栏是否折叠
      type: Boolean,
      required: false,
      default: false
    },
    device: { // 设备类型
      type: String,
      required: false,
      default: 'desktop'
    }
  },
  data () {
    return {
      visible: true, // 头部是否可见
      oldScroll: 0 // 滚动前的位置
    }
  },
  mounted () {
    document.body.addEventListener('scroll', this.handleScroll, { passive: true }) // 监听滚动事件
  },
  methods: {
    handleScroll () { // 处理滚动事件
      // ...（方法实现省略，具体见上文）...
    },
    toggle () { // 切换侧边栏
      this.$emit('toggle')
    }
  },
  beforeDestroy () {
    document.body.removeEventListener('scroll', this.handle, true) // 移除滚动事件监听器
  }
}
</script>

<style lang="less" scoped>
.header-animat{
  position: relative; // 相对定位
  z-index: 2; // z轴层级+2
}
.showHeader-enter-active { // 进入过渡活动状态
  transition: all 0.25s ease; // 动画时长和缓动函数
}
.showHeader-leave-active { // 离开过渡活动状态
  transition: all 0.5s ease; // 动画时长和缓动函数
}
.showHeader-enter, .showHeader-leave-to { // 进入和离开过渡状态
  opacity: 0; // 透明度为0
}
</style>