index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <div class="header-layout">
  3. <div class="logo-layout">
  4. <router-link :to="{name: 'home'}" class="logo">
  5. <vcenter>
  6. <img src="@/assets/images/logo.png" alt="">
  7. </vcenter>
  8. </router-link>
  9. </div>
  10. <div class="menu">
  11. <div class="lang">
  12. <vcenter>
  13. <a :class="{active: language === 'en'}" @click="$store.commit('change_language', 'en')">En</a>
  14. <a :class="{active: language === 'cn'}" @click="$store.commit('change_language', 'cn')">Cn</a>
  15. </vcenter>
  16. </div>
  17. <div class="list" ref="list" @mouseleave="hoverCp !== 'isearch' && hideCp()">
  18. <a
  19. v-for="nav in navs"
  20. :key="nav.text"
  21. @mouseenter="hoverCp !== 'isearch' && showCp(nav.cp, 135)"
  22. @click="clickHandle(nav)"
  23. :class="{active: hoverCp === nav.cp}">
  24. {{nav.text}}
  25. </a>
  26. <div class="child-layout" :style="{maxHeight: height + 'px'}" ref="navLayout">
  27. <i class="silp" :style="{left: split + 'px'}"></i>
  28. <slot :cp="hoverCp" />
  29. </div>
  30. </div>
  31. </div>
  32. <div class="ctrl">
  33. <a class="search" @click="searchHandle" :class="{active: hoverCp === 'isearch'}">
  34. <vcenter>
  35. <i class="iconfont icon-sousuo open"></i>
  36. <i class="iconfont icon-cuowu hide"></i>
  37. </vcenter>
  38. </a>
  39. <a class="user">
  40. <vcenter>
  41. <i class="iconfont icon-geren"></i>
  42. <span>登入</span>
  43. </vcenter>
  44. </a>
  45. </div>
  46. </div>
  47. </template>
  48. <script>
  49. import {mapState} from 'vuex'
  50. import vcenter from '@/components/vcenter'
  51. import { getPosition } from '@/util'
  52. export default {
  53. data () {
  54. return {
  55. height: 0,
  56. hoverCp: 'product',
  57. overb: false,
  58. active: true,
  59. navs: [
  60. {text: '产品购买', cp: 'product'},
  61. {text: '核心技术', cp: 'technology'},
  62. {text: '行业应用', cp: 'case'},
  63. {text: '服务支持', cp: 'service'},
  64. {text: '关于我们', cp: 'about'}
  65. ]
  66. }
  67. },
  68. methods: {
  69. clickHandle (nav) {
  70. this.$router.push({name: nav.cp})
  71. },
  72. showCp (cp, height) {
  73. clearTimeout(this.timeout)
  74. this.$bus.$emit('showMask')
  75. this.hoverCp = cp
  76. this.height = height
  77. },
  78. hideCp () {
  79. clearTimeout(this.timeout)
  80. this.$bus.$emit('hideMask')
  81. this.height = 0
  82. this.timeout = setTimeout(() => {
  83. this.hoverCp = null
  84. }, 700)
  85. },
  86. searchHandle () {
  87. if (this.hoverCp === 'isearch') {
  88. this.hideCp()
  89. } else {
  90. this.showCp('isearch', window.innerHeight - 68)
  91. }
  92. }
  93. },
  94. computed: {
  95. ...mapState({
  96. language: state => state.language.current,
  97. split: state => state.ui.navDivision
  98. })
  99. },
  100. mounted () {
  101. this.sizeHandle = () => {
  102. this.$store.commit('change_nav_division', getPosition(this.$refs.list).x)
  103. }
  104. window.addEventListener('resize', this.sizeHandle)
  105. setTimeout(this.sizeHandle, 300)
  106. },
  107. destroyed () {
  108. window.removeEventListener('resize', this.sizeHandle)
  109. },
  110. components: {vcenter}
  111. }
  112. </script>
  113. <style lang="scss" scoped>
  114. @import './istyle.scss';
  115. </style>