<!-- @format --> <script lang="ts" setup> import { ArrowDown } from '@element-plus/icons-vue' import IconGroup from './icon-group.vue' import { useCommonStore } from '@/stores/modules/common' import { ConstKeys } from '~/enums/const-enums' import { Api } from '@/api/model/url' const router = useRouter() const commonStore = useCommonStore() const { navigateTextColor, navigateBgColor } = storeToRefs(commonStore) const catalogsVisible = ref<boolean>(false) const resourceVisible = ref<boolean>(false) const aboutVisible = ref<boolean>(false) const list = ref<any>([]) const TrendList = ref<any>([]) const requestUrl = `${ConstKeys.DOMAINDEV}${Api.CategoryList}` const { data: res } = await useAsyncData( 'category-catalogue', () => $fetch(`${requestUrl}`, { params: { all: true } }), ) const params = { pageNo: 1, pageSize: 3, state: true, trend: 0, order: 'desc' } const { data: res2 } = await useAsyncData( 'catalogue-list', () => $fetch(`${ConstKeys.DOMAINDEV}${Api.CatalogueList}`, { params }), ) list.value = res.value?.result || [] TrendList.value = res2.value?.result?.records || [] function toCategories() { router.push('/categories') } </script> <template> <div class="flex gap-80px"> <NuxtLink to="/solutions" class="!hover:text-#9B6CFF cursor-pointer" :style="{ color: navigateTextColor, }" > Solutions </NuxtLink> <el-dropdown popper-class="custom-navigate-dropdown2" @visible-change="(visible) => (catalogsVisible = visible)" > <span class="el-dropdown-link text-16px flex items-center" :class="[{ '!text-#9B6CFF': catalogsVisible }]" :style="{ color: navigateTextColor, }" @click.stop="toCategories" > Catalogs <el-icon class="el-icon--right custom-arrow" :class="catalogsVisible ? 'custom-arrow-up' : 'custom-arrow-down'" > <ArrowDown class="text-14px" /> </el-icon> </span> <template #dropdown> <div class="w-1200px p-30px flex justify-center"> <div class="pr-10px"> <div class="mb-20px text-16px fw-800 text-#333"> By Category </div> <div class="grid grid-cols-2 grid-gap-x-15px grid-gap-y-10px"> <div v-for="(item, index) in list" :key="item.id" class="a-link-out hover:text-#9B6CFF hover:bg-#F3F4FB py-8px pl-10px b-rd-6px flex items-center cursor-pointer text-#999"> <IconGroup :icon="`${index}`" /> <NuxtLink :to="`/categories/${item.slug}`" class="text-#333 ml-10px text-14px" > {{ item.title }} </NuxtLink> </div> </div> </div> <div v-if="TrendList.length" class="pl-30px b-l-1px b-l-solid b-l-#E0E4EA"> <div class="mb-20px text-16px fw-800 text-#333"> By Category </div> <div class="grid grid-cols-3 grid-gap-x-20px"> <div v-for="(item, index) in TrendList" :key="index" class="cursor-pointer" > <NuxtLink :to="`/blog/${item.blogSlug}`" > <img :src="item.coverImg" :alt="item.coverAlt" class="w-220px h-136px object-cover mb-10px b-rd-4px" > <div class="text-14px fw-800 custom-title-font text-#333 line-clamp-1"> {{ item.title }} </div> </NuxtLink> </div> </div> </div> </div> </template> </el-dropdown> <el-dropdown popper-class="custom-navigate-dropdown" @visible-change="(visible) => (resourceVisible = visible)" > <span class="el-dropdown-link text-16px flex items-center" :class="[{ '!text-#9B6CFF': resourceVisible }]" :style="{ color: navigateTextColor, }" > Resources <el-icon class="el-icon--right custom-arrow" :class="resourceVisible ? 'custom-arrow-up' : 'custom-arrow-down'" > <ArrowDown class="text-14px" /> </el-icon> </span> <template #dropdown> <el-dropdown-menu> <el-dropdown-item> <NuxtLink to="/blog"> Blog </NuxtLink> </el-dropdown-item> <el-dropdown-item> <NuxtLink to="/faq"> FAQ </NuxtLink> </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> <el-dropdown popper-class="custom-navigate-dropdown" @visible-change="(visible) => (aboutVisible = visible)" > <span class="el-dropdown-link text-16px flex items-center" :class="[{ '!text-#9B6CFF': aboutVisible }]" :style="{ color: navigateTextColor, }" > About <el-icon class="el-icon--right custom-arrow" :class="aboutVisible ? 'custom-arrow-up' : 'custom-arrow-down'" > <ArrowDown class="text-14px" /> </el-icon> </span> <template #dropdown> <el-dropdown-menu> <el-dropdown-item> <NuxtLink to="/about-us"> About Us </NuxtLink> </el-dropdown-item> <el-dropdown-item> <NuxtLink to="/contact"> Contact Us </NuxtLink> </el-dropdown-item> </el-dropdown-menu> </template> </el-dropdown> </div> </template> <style lang="less" scoped> .custom-arrow { transition: all 0.3s ease-in-out; } .custom-arrow-up { transform: rotate(180deg); } .custom-arrow-down { transform: rotate(0deg); } .a-link-out:hover a{ color: #9B6CFF; } </style> <style lang="less"> .custom-navigate-color { color: #fff; } .custom-navigate-dropdown2{ margin-top: 14px; padding:0px!important; border-width: 0px!important; background-color: #fff!important; opacity: 0.9; border-radius: 6px!important; inset: unset!important; left: calc(50vw - 600px) !important; top:58px!important; backdrop-filter: blur(5px)!important; box-shadow: 0px 4px 10px 0px rgba(0, 0, 0, 0.1)!important; .el-popper__arrow { display: none; } } </style>