<template>
  <header :style="{ backgroundColor: `${bgColor}` }">
    <div class="topbar com-margin-auto com-flex com-width-1400">
      <nuxt-link
        :to="{ name: 'index' }"
        style="max-height: 100px">
        <img
          v-show="websitelogo.length"
          :src="`${websitelogo}`"
          alt="Logo"
          id="logo"
      /></nuxt-link>
      <div class="search-input">
        <el-input
          v-model="keyword"
          placeholder="Search item here"
          @focus="focus"
          @blur="blur"
          @keyup.enter.native="goSearchResultPage">
          <i
            slot="suffix"
            class="el-input__icon el-icon-search"
            @click="goSearchResultPage"></i>
        </el-input>
        <div
          v-loading="loading"
          class="search-detail flex column stretch"
          :style="{ display: showType }">
          <div
            class="flex-auto flex center stretch no-result"
            v-if="
              !loading && result.cate.length < 1 && productsList.length < 1
            ">
            No results found for “{{ keyword }}”
          </div>
          <div
            v-else
            class="flex-auto flex stretch"
            style="overflow: hidden">
            <div class="category-list flex column start stretch">
              <p class="autocomplete-title sub">CATEGORIES</p>
              <ul class="stretch">
                <li
                  v-for="item in result.firstCate"
                  :key="item.id"
                  class="flex column stretch">
                  <nuxt-link
                    :to="{
                      name: 'category-firstCategory',
                      params: {
                        firstCategory: item.name
                          .replace(/\s+/g, '-')
                          .replace('-&', '')
                          .toLowerCase(),
                      },
                    }">
                    <p>{{ item.name }}</p>
                  </nuxt-link>
                </li>

                <p
                  v-if="result.subCate.length"
                  class="autocomplete-title">
                  SUB CATEGORIES
                </p>
                <li
                  v-for="item in result.subCate"
                  :key="item.id"
                  class="flex column stretch">
                  <nuxt-link
                    v-if="item.lev === 2"
                    :to="{
                      name: 'category-firstCategory-secondCategory',
                      params: {
                        firstCategory: item.parentName
                          .replace(/\s+/g, '-')
                          .replace('-&', '')
                          .toLowerCase(),
                        secondCategory: item.name
                          .replace(/\s+/g, '-')
                          .replace('-&', '')
                          .toLowerCase(),
                      },
                    }">
                    <p>{{ item.name }}</p>
                  </nuxt-link>
                  <nuxt-link
                    v-else
                    :to="{
                      name: 'category-firstCategory-secondCategory-thirdCategory',
                      params: {
                        firstCategory: item.grandName
                          .replace(/\s+/g, '-')
                          .replace('-&', '')
                          .toLowerCase(),
                        secondCategory: item.parentName
                          .replace(/\s+/g, '-')
                          .replace('-&', '')
                          .toLowerCase(),
                        thirdCategory: item.name
                          .replace(/\s+/g, '-')
                          .replace('-&', '')
                          .toLowerCase(),
                      },
                    }">
                    <p>{{ item.name }}</p>
                  </nuxt-link>
                </li>
              </ul>
            </div>
            <div class="product-list flex-auto flex column stretch">
              <div class="flex between start">
                <p class="autocomplete-title">PRODUCTS</p>
                <nuxt-link
                  v-if="result.total"
                  :to="{
                    name: 'category-searchResult',
                    query: { keyword: keyword },
                  }">
                  <div class="seeAllResult">
                    Show all {{ result.total }} Results
                  </div>
                </nuxt-link>
              </div>
              <ul
                class="flex-auto flex column stretch"
                style="overflow-y: auto">
                <li
                  v-for="item in productsList"
                  :key="item.id">
                  <nuxt-link
                    :to="{
                      name: 'product-code',
                      params: { code: item.product_code },
                    }">
                    <img
                      :src="
                        item.image && !$mediaRegExp.test(item.image)
                          ? $OSS_PREFIX + item.image
                          : $utils.generateResizedImageUrl(item.image, 100)
                      "
                      alt="" />
                    <div class="product-info">
                      <p>{{ item.product_name }}</p>
                      <p>{{ item.product_code }}</p>
                    </div>
                  </nuxt-link>
                </li>
                <div
                  class="no-result"
                  v-if="!loading && productsList.length < 1">
                  No results found for “{{ keyword }}”
                </div>
              </ul>
            </div>
          </div>
          <!-- <div class="sth-else">
            <span>Can't find what you're looking for?</span>
            <nuxt-link
              :to="{
                name: 'news-newsName',
                params: { newsName: 'indent-ideas', id: indentIdeasArticle.id },
                hash: '#formTag',
              }">
              click here
            </nuxt-link>
          </div> -->
        </div>
      </div>
      <div
        class="topbar-item com-flex"
        style="cursor: default"
        v-if="email">
        <img
          src="@/assets/img/help.png"
          alt="help" />
        <div class="topbar-item-right com-flex-item">
          <!-- <p style="margin-bottom: 8px">Help is here</p> -->
          <p>1300 369 252</p>
        </div>
      </div>
      <div class="topbar-item com-flex">
        <div
          class="topbar-item com-flex"
          v-if="false">
          <img src="@/assets/img/login.png" />
          <p @click="openDialog">Login</p>
        </div>
        <!-- </div> -->
        <div
          class="topbar-item"
          v-if="false">
          <el-popover
            placement="bottom-end"
            width="292"
            trigger="click"
            ref="userPopover">
            <div
              slot="reference"
              class="topbar-item-right-myAccount">
              <div class="flex center">
                <img src="@/assets/img/login.png" />
                <p>Hello, {{ $store.state.userInfo.contacts }}</p>
                <span class="el-icon-caret-bottom"></span>
              </div>
            </div>
            <div
              class="user-menu-panel flex column center"
              @click="closePopoverAndNavigate">
              <div class="user-menu-wrap">
                <div class="user-menu">
                  <div class="menu-title">Client Portal</div>

                  <div class="sub-menu">
                    <nuxt-link
                      :to="{
                        path: '/home/myDetail',
                        query: { type: 'all-orders' },
                      }">
                      <div class="flex">
                        <div class="icon order"></div>
                        <div class="sub-title">My Orders</div>
                      </div>
                    </nuxt-link>
                  </div>
                  <div style="height: 4px; width: 1px"></div>
                  <div class="menu-title">Marketing Resources</div>
                  <!-- <div class="sub-menu">
                    <nuxt-link to="/home/video">
                      <div class="flex">
                        <div class="icon video"></div>
                        <div class="sub-title">Videos</div>
                      </div>
                    </nuxt-link>
                  </div> -->
                  <div class="sub-menu">
                    <a
                      href="https://www.flipsnack.com/promocollection/"
                      target="_blank">
                      <div class="flex">
                        <div class="icon book"></div>
                        <div class="sub-title">Catalogue</div>
                      </div>
                    </a>
                  </div>
                  <div class="sub-menu">
                    <nuxt-link to="/home/EDMS">
                      <div class="flex">
                        <div class="icon book"></div>
                        <div class="sub-title">EDMS</div>
                      </div>
                    </nuxt-link>
                  </div>
                  <div class="sub-menu">
                    <a
                      href="mailto:Info@promocollection.com.au?subject=Sample%20Request">
                      <div class="flex">
                        <div class="icon mail"></div>
                        <div class="sub-title">Sample Request</div>
                      </div>
                    </a>
                  </div>
                  <div class="sub-menu">
                    <a
                      href="mailto:Info@promocollection.com.au?subject=Free%20Mockup%20Request">
                      <div class="flex">
                        <div class="icon mail"></div>
                        <div class="sub-title">Mockup Request</div>
                      </div>
                    </a>
                  </div>
                  <div class="menu-title">
                    <nuxt-link
                      :to="{
                        path: '/home/myDetail',
                        query: { type: 'profile' },
                      }">
                      My Profile
                    </nuxt-link>
                  </div>
                  <div class="menu-title">
                    <div
                      class="btn-logout"
                      @click="logout">
                      Sign Out
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </el-popover>
        </div>
      </div>
    </div>
    <nav>
      <ul class="com-width-1400 com-minwidth-1024 com-margin-auto">
        <li class="nav-list">
          <div class="nav-list-title">
            <span
              class="shopProducts"
              @click.stop="openShopProduct">
              Shop Products
              <i
                :class="
                  isShopBlock ? 'el-icon-arrow-up' : 'el-icon-arrow-down'
                "></i>
            </span>
          </div>
          <Transition name="category">
            <div
              class="nav-menu border-radius"
              v-show="isShopBlock"
              @click="closeAllBlock">
              <div class="nav-menu-content">
                <div
                  class="nav-menu-item"
                  v-for="item1 in categoryList"
                  :key="item1.id">
                  <div class="primary-classification">
                    <nuxt-link
                      :to="{
                        name: 'category-firstCategory',
                        params: {
                          firstCategory: item1.name
                            .replace(/\s+/g, '-')
                            .replace('-&', '')
                            .toLowerCase(),
                        },
                      }">
                      <div class="menu-item-icon">
                        <img
                          :src="
                            item1.style && !$mediaRegExp.test(item1.style)
                              ? $OSS_PREFIX + item1.style
                              : item1.style
                          "
                          alt="" />
                      </div>
                      <div class="menu-item-title">
                        {{ item1.name }}
                      </div>
                    </nuxt-link>
                    <div class="menu-separator"></div>
                  </div>
                  <div
                    class="secondary-classification"
                    v-for="item2 in item1.child"
                    :key="item2.id">
                    <nuxt-link
                      :to="{
                        name: 'category-firstCategory-secondCategory',
                        params: {
                          firstCategory: item1.name
                            .replace(/\s+/g, '-')
                            .replace('-&', '')
                            .toLowerCase(),
                          secondCategory: item2.name
                            .replace(/\s+/g, '-')
                            .replace('-&', '')
                            .toLowerCase(),
                        },
                      }">
                      {{ item2.name }}
                    </nuxt-link>
                  </div>
                </div>
              </div>
            </div>
          </Transition>
        </li>
        <!-- <li class="nav-list">
          <div class="nav-list-title">
            <span
              class="LeadTime"
              @click.stop="openLeadTime">
              By Lead Time
              <i :class="isShopBlock?'el-icon-arrow-up':'el-icon-arrow-down'"></i>
            </span>
          </div>
          <Transition name="leadTime">
            <ul
              class="leadTime-list border-radius"
              v-show="isLeadTimeBlock"
              @click="closeAllBlock">
              <li
                class="leadTime-list-item"
                v-for="item in leadTime"
                :key="item.id">
                <nuxt-link
                  :to="{ name: 'category', query: { lead_time: item.id } }">
                  {{ item.name }}
                </nuxt-link>
              </li>
            </ul>
          </Transition>
        </li>
        <li class="nav-list">
          <div class="nav-list-title">
            <span
              class="Budget"
              @click.stop="openBudget"
              >By Budget
              <i :class="isShopBlock?'el-icon-arrow-up':'el-icon-arrow-down'"></i>
            </span>
          </div>
          <Transition name="budge">
            <ul
              class="budget-list border-radius"
              v-show="isBudgetBlock"
              @click.stop="closeAllBlock">
              <div
                class="budget-list-item"
                v-for="item in budget"
                :key="item.id">
                {{ item.name }}
                <div class="sub-item-wrap border-radius flex column stretch">
                  <div class="budget-list-sub-item-title">QTY Needed</div>
                  <div
                    class="budget-list-item"
                    v-for="(v, i2) in qtyList"
                    :key="`${item.id}-${i2}`">
                    <nuxt-link
                      :to="{
                        name: 'category',
                        query: { pricetype: item.id, qty: v.value },
                      }">
                      {{ v.name }}
                    </nuxt-link>
                  </div>
                </div>
              </div>
            </ul>
          </Transition>
        </li> -->
        <li
          class="nav-list"
          @click="closeAllBlock">
          <!-- <a :href="'/category?feature=54'"> New products</a> -->
          <div class="nav-list-title">
            <nuxt-link
              :to="{ name: 'category', query: { feature: 54 } }"
              target="_self">
              New Products
            </nuxt-link>
          </div>
        </li>
        <!-- <li
          class="nav-list"
          @click="closeAllBlock">
          <div class="nav-list-title">
            <nuxt-link
              :to="{
                name: 'news-newsName',
                params: { newsName: 'compliance', id: complianceArticle.id },
              }"
              target="_self">
              Compliance
            </nuxt-link>
          </div>
        </li> -->
        <!--<li
          class="nav-list"
          @click="closeAllBlock">
          <div class="nav-list-title">
            <nuxt-link
              id="indentLink"
              :to="{
                name: 'news-newsName',
                params: { newsName: 'indent-ideas', id: indentIdeasArticle.id },
              }"
              target="_self">
              Indent Sourcing
            </nuxt-link>
          </div>
        </li>
        <li
          class="nav-list"
          @click="closeAllBlock">
          <div class="nav-list-title">
            <nuxt-link
              to="/category/apparel/socks"
              target="_self">
              Sock Collection
            </nuxt-link>
          </div>
        </li> -->
        <!-- <li
          class="nav-list compare-list"
          @click="closeAllBlock">
          <div class="nav-list-title">
            <el-badge
              :value="compareList.length"
              class="item"
              v-show="compareList.length">
            </el-badge>
            <span>Wishlist</span>
          </div>
          <div class="compare-product">
            <div class="compare-product-title">
              <p>Product to Compare</p>
              <el-button
                class="compare-btn"
                size="mini"
                @click="compareAll">
                Compare All
              </el-button>
            </div>
            <div class="red-line"></div>
            <div
              class="prompt-info"
              v-show="!compareList.length">
              <ul>
                <li>
                  Select products to compare by clicking the "Compare list +"
                  batton on any product listing.
                </li>
                <li>You can compare up to 5 products.</li>
                <li>
                  After selecting products, click on the "Compare All" button to
                  view the comparison chart.
                </li>
              </ul>
            </div>
            <ul>
              <li
                v-for="item in compareList"
                :key="item.id">
                <div class="item-left">
                  <img
                    :src="
                      item.main.image &&
                      item.main.image.indexOf(
                        'http://promocollection.s3.ap-southeast-2.amazonaws.com'
                      ) != -1
                        ? item.main.image
                        : 'https://www.promocollection.com.au/' +
                          item.main.image
                    " />
                  <p>{{ item.product_name }}</p>
                </div>
                <div
                  class="item-right"
                  @click="clearCompare(item.id)">
                  <i class="el-icon-error"></i>
                </div>
              </li>
            </ul>
            <el-button
              class="clear-btn"
              size="mini"
              @click="clearAll"
              v-show="compareList.length">
              Clear All
            </el-button>
          </div>
        </li> -->
      </ul>
    </nav>
    <div class="header-redLine"></div>
  </header>
</template>

<script>
import { mapMutations } from 'vuex'
import cloneDeep from 'lodash.clonedeep'
import algoliasearch from 'algoliasearch'

export default {
  data() {
    return {
      // loaded: false,
      loading: false,
      timer: '',
      keyword: '',
      result: { cate: [], subCate: [], firstCate: [] },
      showType: 'none',
      matchingList: [],
      categoryList: [],
      leadTime: [],
      budget: [],
      compareList: [],
      indentIdeasArticle: {},
      complianceArticle: {},
      isShopBlock: false,
      isLeadTimeBlock: false,
      isBudgetBlock: false,
      qtyList: [
        {
          value: 50,
          name: 50,
        },
        {
          value: 100,
          name: 100,
        },
        {
          value: 250,
          name: 250,
        },
        {
          value: 500,
          name: 500,
        },
        {
          value: 1000,
          name: '1,000',
        },
        {
          value: 2500,
          name: '2,500',
        },
        {
          value: 5000,
          name: '5,000',
        },
        {
          value: 10000,
          name: '10,000',
        },
      ],
      index: null,
      websitelogo: '',
      bgColor: '#fff',
      favicon: '',
    }
  },
  async fetch() {
    const p1 = this.$axios.post('/common/shopProductList').then(res => {
      if (res.code === 1) {
        this.categoryList = res.result
      }
    })
    const p2 = this.$axios.get('/home/lead_time').then(res => {
      if (res.code === 1) {
        this.leadTime = res.result.sort((a, b) => a.rank - b.rank)
      }
    })
    const p3 = this.$axios
      .post('/common/goodsFilterList', { pid: 2 })
      .then(res => {
        if (res.code === 1) {
          this.budget = res.result
        }
      })
    const p4 = this.$axios
      .post('/home/articleLists', { state: 'au', keyword: 'Indent Ideas' })
      .then(res => {
        this.indentIdeasArticle = res.result.data[0] || {}
      })
    const p5 = this.$axios
      .post('/home/articleLists', { state: 'au', keyword: 'Compliance' })
      .then(res => {
        this.complianceArticle = res.result.data[0] || {}
      })
    // 并联异步操作,总耗时===耗时最长的单个请求。之前的逻辑是串联,总耗时为所有请求耗时的累加
    await Promise.all([p1, p2, p3, p4, p5])
  },
  computed: {
    email() {
      return this.$store.state.userInfo?.email
    },
    compareLists() {
      return this.$store.state.compareList
    },
    productsList() {
      if (this.result?.goods) {
        return this.result.goods.map(item => {
          const temp = {
            ...item,
          }
          if (item.img) {
            temp.image = !this.$mediaRegExp.test(item.img)
              ? this.$OSS_PREFIX + item.img
              : item.img
          }
          return temp
        })
      } else {
        return []
      }
    },
  },
  watch: {
    keyword: {
      handler(newValue, oldValue) {
        // if (newValue.length > 2 && this.loaded) {
        if (newValue.length > 2) {
          this.debounce(this.search, 700)
        } else {
          setTimeout(() => {
            this.showType = 'none'
          }, 501)
        }
      },
      deep: true,
    },
    compareLists: {
      handler(newValue, oldValue) {
        if (newValue) {
          this.compareList = cloneDeep(newValue)
        }
      },
      deep: true,
      immediate: true,
    },
    $route(to, from) {
      if (to.path == from.path && to.query.keyword != from.query.keyword) {
        location.reload()
      }
      if (!to.query.keyword) {
        this.keyword = ''
      }
      if (this.favicon?.length) {
        this.setFavicon(this.favicon)
      }
    },
  },
  beforeMount() {
    this.$store.dispatch('getShopInfo').then(res => {
      document.title = (res.title || '').toUpperCase()
      this.websitelogo = !this.$mediaRegExp.test(res.logo)
        ? this.$OSS_PREFIX +
          (/^\/.+/.test(res.logo) ? res.logo : `/${res.logo}`)
        : res.logo
      this.bgColor = res.theme_color || '#fff'
      // res.logo_icon = 'uploads/catalog/image/20241031/7b2eeca1add8e56a5b831f7ad4ea354af92e9db4.png'
      if (res.logo_icon?.length) {
        this.favicon = !this.$mediaRegExp.test(res.logo_icon)
          ? this.$OSS_PREFIX +
            (/^\/.+/.test(res.logo_icon) ? res.logo_icon : `/${res.logo_icon}`)
          : res.logo_icon
        console.log(this.favicon, 'favicon')
        this.setFavicon(this.favicon)
      }
    })
  },
  created() {
    // this.$store.dispatch('getCompareList')
  },
  mounted() {
    // if (this.$route.query.keyword && this.$route.query.keyword.length) {
    //   this.keyword = this.$route.query.keyword
    // }
    // setTimeout(() => {
    //   this.loaded = true
    // }, 0)
    window.addEventListener('click', this.closeLeadtimeAndBudget)

    const client = algoliasearch(
      'OGR0RAPKVN',
      '19f480c6a3000b14705a78beadf19ab6'
    )
    this.index = client.initIndex('product_ca')
  },
  beforeDestroy() {
    window.removeEventListener('click', this.closeLeadtimeAndBudget)
  },
  methods: {
    ...mapMutations([
      'openDialog',
      'clearUserInfo',
      'clearCompareList',
      'getCompareList',
    ]),

    debounce(fn, wait) {
      if (this.timer !== null) {
        clearTimeout(this.timer)
      }
      this.timer = setTimeout(fn, wait)
    },
    setFavicon (str) {
      const link = document.getElementById('favicon')
      link.href = str
    },
    search() {
      this.result = { cate: [], subCate: [], firstCate: [] }
      this.showType = 'flex'
      this.loading = true

      const key = this.keyword ? this.keyword.trim() : ''
      if (this.index) {
        this.index
          .search(key, {
            hitsPerPage: 1000,
          })
          .then(({ nbHits, hits }) => {
            const temp = {
              goods: [],
              total: nbHits || hits.length || 0,
              cate: [],
              firstCate: [],
              subCate: [],
            }
            const t1 = []
            const t2 = []
            hits
              .filter(i => i.status === 1 || i.status === '1' || i.status)
              .forEach(item => {
                let colorImg = ''
                item.colour_imgs = JSON.parse(item.colour_imgs)
                item.colour_imgs.sort((a, b) => a.name.length - b.name.length)
                if (
                  Array.isArray(item.colour_imgs) &&
                  item.colour_imgs.length
                ) {
                  item.colour_imgs.forEach(colorItem => {
                    if (colorItem.name && colorItem.name.length) {
                      if (
                        new RegExp(colorItem.name.toLowerCase(), 'i').test(key)
                      ) {
                        console.log(
                          item.product_code,
                          colorItem.name,
                          'replace'
                        )
                        colorImg = colorItem.img
                      } else if (
                        /\s/.test(colorItem.name) &&
                        colorItem.name
                          .split(' ')
                          .filter(a => a.length > 0)
                          .some(b => new RegExp(b.toLowerCase(), 'i').test(key))
                      ) {
                        console.log(
                          item.product_code,
                          colorItem.name,
                          'advance replace'
                        )
                        colorImg = colorItem.img
                      }
                    }
                  })
                  item.colour_imgs.forEach(i => {
                    if (i.name && i.name.length) {
                      if (key.toLowerCase().includes(i.name.toLowerCase())) {
                        console.log(
                          item.product_code,
                          i.name,
                          'complete replace'
                        )
                        colorImg = i.img
                      }
                    }
                  })
                  console.log('---')
                }
                temp.goods.push({
                  ...item,
                  img: colorImg || item.image || item.img,
                  product_name: item.product_name || item.name,
                })
                if (!item.category_id) return
                const id = parseInt(item.category_id)
                const categoryResult = this.getCategoryFromTree(
                  id,
                  this.categoryList
                )
                switch (categoryResult.lev) {
                  case 1:
                    if (!t1.includes(id)) {
                      t1.push(id)
                      temp.firstCate.push(categoryResult)
                    }
                    break
                  case 2:
                  case 3:
                    if (!t2.includes(id)) {
                      t2.push(id)
                      temp.subCate.push(categoryResult)
                    }
                    // 当前商品在2 3 级, 搜索出来的分类里面应同时展示1级.
                    if (!t1.includes(categoryResult.root.id)) {
                      t1.push(categoryResult.root.id)
                      temp.firstCate.push(categoryResult.root)
                    }
                  // no default
                }
              })

            this.result = temp
          })
          .finally(() => {
            this.loading = false
          })
      }
    },
    focus() {
      clearTimeout(this.timer)
      if (this.keyword) {
        this.showType = 'flex'
      }
    },
    blur() {
      this.timer = setTimeout(() => {
        this.showType = 'none'
      }, 200)
    },
    goSearchResultPage() {
      // 匹配同组件的路由更改query时, 页面不会被刷新
      // this.$router.push({
      //   name: 'category-searchResult',
      //   query: { keyword: this.keyword },
      // })
      location.href =
        location.origin +
        `/category/searchResult?keyword=${encodeURIComponent(this.keyword)}`
    },
    logout() {
      this.$store.dispatch('logout').then(() => {
        this.$router.push('/')
      })
    },
    compareAll() {
      if (this.compareList.length) {
        this.$router.push('/home/compareList')
      }
    },
    clearCompare(id) {
      this.$axios
        .post('home/compare_clear', {
          id,
          compare_keys: 'keys',
        })
        .then(res => {
          if (res.code === 1) {
            this.compareList.splice(
              this.compareList.findIndex(item => item.id === id),
              1
            )
          }
        })
    },
    clearAll() {
      if (this.compareList.length) {
        this.$axios
          .post('home/compare_clear', {
            id: 0,
            compare_keys: 'keys',
          })
          .then(res => {
            if (res.code === 1) {
              this.clearCompareList()
            }
          })
      }
    },
    openShopProduct() {
      this.isShopBlock = !this.isShopBlock
      this.isLeadTimeBlock = false
      this.isBudgetBlock = false
    },
    openLeadTime() {
      this.isLeadTimeBlock = !this.isLeadTimeBlock
      this.isShopBlock = false
      this.isBudgetBlock = false
    },
    openBudget() {
      this.isBudgetBlock = !this.isBudgetBlock
      this.isLeadTimeBlock = false
      this.isShopBlock = false
    },
    closeAllBlock() {
      this.isShopBlock = false
      this.isLeadTimeBlock = false
      this.isBudgetBlock = false
    },
    closeLeadtimeAndBudget(e) {
      const className = e.target?.className
      if (!['shopProducts', 'LeadTime', 'Budget'].includes(className)) {
        this.isShopBlock = false
        this.isLeadTimeBlock = false
        this.isBudgetBlock = false
      }
    },
    closePopoverAndNavigate() {
      this.$refs.userPopover.doClose()
    },
    // 从分类树数据里面找到对应分类
    getCategoryFromTree(id, tree) {
      let result = {}
      if (!tree.length) return result
      tree.forEach(i => {
        if (i.id === id) {
          result = cloneDeep(i)
          result.lev = 1
        }

        if (!Array.isArray(i.child)) return
        i.child.forEach(secondCate => {
          if (secondCate.id === id) {
            result = cloneDeep(secondCate)
            result.parentName = i.name
            result.lev = 2
            result.root = {
              name: i.name,
              id: i.id,
              pid: 0,
            }
          }

          if (!Array.isArray(secondCate.child)) return
          secondCate.child.forEach(thirdCate => {
            if (thirdCate.id === id) {
              result = cloneDeep(thirdCate)
              result.parentName = secondCate.name
              result.grandName = i.name
              result.lev = 3
              result.root = {
                name: i.name,
                id: i.id,
                pid: 0,
              }
            }
          })
        })
      })
      return result
    },
  },
}
</script>

<style lang="scss" scoped>
header {
  width: 100%;
  position: fixed;
  top: 0px;
  left: 0px;
  z-index: 100;
  background-color: #fff;
  .topbar {
    min-width: 800px;
    min-height: 92px;
    display: flex;
    align-items: center;

    #logo {
      cursor: pointer;
      // max-width: 120px;
      max-height: 100px;
    }
    .search-input {
      flex: 1;
      padding: 0 26px 0 50px;
      position: relative;

      .search-detail {
        z-index: 101;
        padding: 12px 0 8px;
        box-sizing: border-box;
        width: calc(100% - 76px);
        height: 320px;
        position: absolute;
        top: 52px;
        background: #ffffff;
        border: 1px solid #bebebe;
        border-radius: 4px;
        font-size: 12px;
        font-weight: 400;
        color: #333333;
        .autocomplete-title {
          height: 36px;
          line-height: 36px;
          margin-bottom: 8px;
          font-size: 14px;
          font-weight: bold;
          color: #000000;
        }
        .category-list {
          box-sizing: border-box;
          padding: 0 12px;
          height: 100%;
          width: 35%;
          min-width: 35%;
          border-right: 1px solid #7f7f7f;
          position: relative;
          ul {
            overflow-y: auto;
            li {
              width: 100%;
              position: relative;
              p {
                box-sizing: border-box;
                padding: 0 8px;
                width: 100%;
                height: 50px;
                line-height: 50px;
                color: #333;
                font-size: 14px;
                cursor: pointer;
                &:hover {
                  background-color: #f5f5f5;
                  color: #0b6dc9;
                }
              }
            }
          }
        }
        .product-list {
          padding: 0 16px;
          ul li {
            margin-bottom: 10px;
            a {
              display: flex;
              justify-content: flex-start;
              align-items: center;
              img {
                width: 43px;
                height: 43px;
              }
              p {
                height: 24px;
                line-height: 24px;
                margin-left: 5px;
              }
            }
            &:hover {
              background: #f5f5f5;
              p {
                color: #0b6dc9;
              }
            }
          }
          .seeAllResult {
            text-align: center;
            font-size: 14px;
            font-weight: bold;
            background-color: #00213b;
            color: #fff;
            padding: 0 12px;
            line-height: 26px;
            height: 26px;
            border-radius: 4px;
          }
        }
        .sth-else {
          margin-top: 4px;
          text-align: center;
          height: 24px;
          line-height: 24px;
          font-size: 18px;
          font-weight: 600;
          color: #00213b;
          a {
            display: inline-block;
            padding: 0 6px;
            border-radius: 4px;
            background-color: #00213b;
            color: #fff;
            box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.2);
          }
          a:hover {
            background-color: #000;
          }
        }
      }
    }
    .topbar-item {
      font-weight: bold;
      white-space: nowrap;
      cursor: pointer;
      .topbar-item-right {
        padding: 0 30px 0 12px;
      }
      .topbar-item-right-myAccount {
        // display: flex;
        // align-items: center;

        position: relative;
        p {
          margin-left: 10px;
        }
        .greeting {
          position: absolute;
          top: -20px;
          left: 30px;
        }
      }
    }
  }
  nav {
    background-color: #00213b;
    height: 52px;
    // font-family: ProximaNova-Regular;
    ul {
      display: flex;
      // justify-content: space-between;
      align-items: center;
      li.nav-list {
        width: 170px;
        height: 52px;
        font-size: 16px;
        font-weight: 400;
        color: #ffffff;
        text-align: center;
        line-height: 52px;
        .nav-list-title {
          font-weight: 600;
        }
        a {
          display: block;
          width: 100%;
          color: #ffffff;
        }
        span {
          display: inline-block;
          cursor: pointer;
          .el-icon-arrow-up,
          .el-icon-arrow-down {
            margin-left: 5px;
            text-align: center;
          }
        }
        .nav-menu {
          width: 1400px;
          height: 395px;
          color: #fff;
          background-color: RGB(56 54 55);
          overflow: hidden;
          .nav-menu-content {
            box-sizing: border-box;
            padding: 20px 0 0 20px;
            margin: 0 auto;
            display: flex;
            justify-content: space-between;
            .nav-menu-item {
              position: relative;
              width: 130px;
            }
            .primary-classification {
              $width: 85px;
              .menu-item-icon {
                width: $width;
                height: $width;
                img {
                  width: 100%;
                  height: 100%;
                }
              }
              &:hover {
                .menu-item-title {
                  color: #0b6dc9;
                }
              }
              .menu-item-title {
                margin-top: 5px;
                height: 24px;
                font-size: 15px;
                // font-size: 1.1rem;
                font-weight: bold;
                text-align: left;
                line-height: 24px;
                cursor: pointer;
                white-space: normal;
                word-break: keep-all;
                overflow: hidden;
              }
              .menu-separator {
                width: $width;
                height: 1px;
                background-color: #666;
                margin: 12px 0;
              }
            }
            .secondary-classification {
              width: 100%;
              font-size: 13px;
              font-weight: 400;
              line-height: 24px;
              text-align: left;
              cursor: pointer;
              white-space: normal;
              word-break: keep-all;
              overflow: hidden;
            }
          }
        }
        .leadTime-list,
        .budget-list {
          display: flex;
          flex-direction: column;
          justify-content: flex-start;
          color: #fff;
          background-color: RGB(56 54 55);
          text-align: center;
          font-size: 14px;
          width: 171px;
          box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
          .budget-list-item,
          .leadTime-list-item {
            width: 171px;
            height: 40px;
            line-height: 40px;
            min-height: 40px;
            a {
              display: block;
              width: 100%;
              height: 100%;
            }
          }
        }
        .sub-item-wrap {
          display: none;
          z-index: 1;
          background-color: rgb(56 54 55);
          position: absolute;
          top: 0;
          left: 170px;

          .budget-list-item {
            cursor: pointer;
          }
          .budget-list-sub-item-title {
            width: 171px;
            height: 40px;
            line-height: 40px;
            min-height: 40px;
          }
          // color: red;
        }
        .budget-list-item {
          position: relative;
          overflow: visible;
          &:hover {
            .sub-item-wrap {
              display: flex;
            }
          }
        }
        .leadTime-list {
          height: 280px;
        }
        .budget-list {
          height: 360px;
        }
        .compare-product {
          width: 543px;
          background: #fff;
          color: #333333;
          box-shadow: 0px 1px 10px 0px rgba(7, 5, 5, 0.13);
          margin-left: -372px;
          padding: 31px 13px 14px 29px;
          box-sizing: border-box;
          visibility: hidden;
          opacity: 0;
          .compare-product-title {
            display: flex;
            justify-content: space-between;
            align-items: center;
            p {
              font-size: 24px;
              font-weight: bold;
            }
            .compare-btn {
              width: 136px;
              height: 38px;
              background: #00213b;
              border-radius: 4px;
              color: #ffffff;
              font-size: 14px;
            }
          }
          .red-line {
            width: 27px;
            height: 7px;
            background: #e90000;
          }
          .prompt-info {
            font-size: 14px;
            text-align: left;
            line-height: 24px;
          }
          ul {
            display: flex;
            flex-direction: column;
            justify-content: flex-start;
            margin-top: 10px;
            li {
              display: flex;
              justify-content: space-between;
              align-items: center;
              width: 500px;
              .item-left {
                display: flex;
                justify-content: flex-start;
                align-items: center;
                img {
                  width: 30px;
                  height: 30px;
                  margin-right: 10px;
                }
              }
              .el-icon-error {
                color: #e90000;
                font-size: 21px;
              }
            }
          }
          .clear-btn {
            background: #e90000;
            color: #fff;
            font-size: 14px;
            padding: 10px 20px;
          }
        }

        &:hover {
          div.nav-list-title {
            color: #333333;
            background-color: #e3e3e3;
            a {
              color: #333333;
              background-color: #e3e3e3;
            }
            .el-icon-arrow-down {
              color: #333333;
            }
          }

          .compare-product {
            opacity: 1;
            visibility: visible;
            transition: all 0.5s;
          }
        }
        .menu-item-title:hover,
        .secondary-classification:hover a {
          color: #0b6dc9;
        }
        .leadTime-list-item:hover,
        .budget-list-item:hover {
          background: #0b6dc9;
          color: #f5f5f5;
          & > a {
            background: #0b6dc9;
            color: #f5f5f5;
            width: 100%;
            height: 100%;
          }
        }
      }
    }
  }
  :deep(.el-badge.item .el-badge__content) {
    background-color: #e90000;
  }
  .header-redLine {
    height: 4px;
    background: #e90000;
  }
}
:deep(.el-input) {
  .el-input__inner {
    border-radius: 18px;
  }
}
:deep(.el-menu-item-group__title) {
  padding: 0;
}
:deep(.el-submenu__title) {
  font-family: Proxima Nova;
  font-size: 14px;
  color: #333333;
  height: 40px;
  line-height: 40px;
  font-weight: bold;
  &:hover {
    color: #1a72b7;
  }
}
:deep(.el-menu-item) {
  font-family: Proxima Nova;
  height: 40px;
  line-height: 40px;
  font-weight: bold;
  color: #333333;
  a {
    display: inline-block;
    width: 100%;
  }
  &:hover a {
    color: #1a72b7;
  }
}
:deep(.el-menu-item.is-active) {
  a {
    color: #1a72b7;
  }
}
:deep(.el-menu-item-group) {
  font-family: Proxima Nova;
  .el-menu-item {
    font-size: 12px;
    font-weight: 400;
    color: #333333;
    &:hover a {
      color: #1a72b7;
    }
  }
  .is-active a {
    color: #1a72b7;
    font-size: 12px;
    font-weight: 400;
  }
}
@keyframes fade {
  0% {
    height: 0;
  }
}
.category-enter-active,
.leadTime-enter-active,
.budge-enter-active {
  overflow: hidden;
  animation: fade 0.3s ease-in-out;
}
.category-leave-active,
.leadTime-leave-active,
.budge-leave-active {
  overflow: hidden;
  animation: fade 0.3s ease-in-out reverse;
}
.border-radius {
  border-radius: 6px;
}
.no-result {
  margin-top: 120px;
  font-size: 34px;
  font-family: Proxima Nova;
  font-weight: 600;
  color: #797979;
}
.user-menu-panel {
  width: 292px;
  box-sizing: border-box;
  padding: 0 0 20px;
  font-size: 15px;
  font-family: ProximaNova-Semibold, sans-serif;
  color: #333;
  & div {
    box-sizing: border-box;
  }
  & > div {
    padding-left: 27px;
    padding-right: 27px;
  }
  .greeting {
    width: 270px;
    font-weight: 600;
    padding-top: 18px;
    padding-bottom: 18px;
    padding-left: 11px;
    padding-right: 11px;
    border-bottom: 1px solid rgba(#002369, 0.3);
  }
  .btn-logout {
    display: inline-block;
    cursor: pointer;
  }
}
.user-menu-wrap {
  width: 100%;
  padding-top: 6px;
  padding-bottom: 24px;
}
.user-menu {
  margin-top: 8px;
  .menu-title {
    font-weight: 600;
    line-height: 36px;
  }
  .sub-menu {
    font-family: Proxima Nova, sans-serif;
    padding-left: 14px;
    display: flex;
    align-items: center;
    .icon {
      display: inline-block;
      width: 20px;
      height: 20px;
      margin-right: 8px;
      background-position: center;
      background-repeat: no-repeat;
      background-size: contain;
      &.book {
        background-image: url(~@/assets/img/header/book.png);
      }
      &.folder {
        background-image: url(~@/assets/img/header/folder.png);
      }
      &.mail {
        background-image: url(~@/assets/img/header/mail.png);
      }
      &.order {
        background-image: url(~@/assets/img/header/order.png);
      }
      &.video {
        background-image: url(~@/assets/img/header/video.png);
      }
    }
    .sub-title {
      display: inline-block;
      line-height: 36px;
      font-size: 14px;
    }
    &:hover {
      .sub-title {
        color: #409eff;
      }
    }
  }
}
</style>