|
|
@@ -109,7 +109,6 @@ |
|
|
|
<div |
|
|
|
class="w-full h-full flex-col justify-center hidden md:flex absolute top-0 left-0 z-10" |
|
|
|
> |
|
|
|
|
|
|
|
<div class="justify-center"> |
|
|
|
<span class="text-white text-6xl font-normal leading-[78px]">{{ |
|
|
|
t("home.carousel.three.title") |
|
|
@@ -162,6 +161,218 @@ |
|
|
|
</Swiper> |
|
|
|
</section> |
|
|
|
|
|
|
|
<!-- 按分类栏目展示 --> |
|
|
|
<section class="max-w-full mb-12 md:mb-32 xl:px-8 lg:px-6 md:px-4 px-4"> |
|
|
|
<div class="max-w-screen-2xl mx-auto relative"> |
|
|
|
<div |
|
|
|
class="justify-center text-cyan-400 text-base font-normal leading-tight mb-4" |
|
|
|
> |
|
|
|
{{ t("home.useCategoryTitle") }} |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="justify-center text-white font-normal mb-8 md:mb-16 text-xl sm:text-2xl md:text-4xl lg:text-6xl" |
|
|
|
> |
|
|
|
{{ t("home.useCategoryDescription") }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="max-w-screen-2xl mx-auto relative"> |
|
|
|
<!-- 企业产品 --> |
|
|
|
<div |
|
|
|
class="flex w-full relative mb-10 xl:mb-40 gap-6 flex-col xl:flex-row" |
|
|
|
> |
|
|
|
<div |
|
|
|
class="select-none relative w-full xl:w-[65%] h-[280px] md:h-[320px] xl:h-[520px] animate-gradient-bg [background:linear-gradient(180deg,#444B55_0%,#98A3B4_95%)] from-zinc-900 to-zinc-800" |
|
|
|
> |
|
|
|
<img |
|
|
|
src="@/assets/images/business.webp" |
|
|
|
alt="business" |
|
|
|
class="max-h-full pl-0 md:pl-4 pt-0 md:pt-4 relative z-10" |
|
|
|
/> |
|
|
|
<span |
|
|
|
class="absolute hidden xl:block z-0 top-[35%] left-[60%] translate-y-[-50%] translate-x-[-50%] opacity-5 text-white text-[160px] font-bold select-none" |
|
|
|
>Hanye</span |
|
|
|
> |
|
|
|
|
|
|
|
<div |
|
|
|
class="w-full absolute xl:hidden top-0 left-0 right-0 bottom-0 z-10 flex flex-col justify-center items-end p-4 md:p-8" |
|
|
|
> |
|
|
|
<div |
|
|
|
class="opacity-10 text-white text-4xl md:text-7xl font-bold mb-2 select-none" |
|
|
|
> |
|
|
|
Business |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-4xl font-medium mb-4"> |
|
|
|
{{ t("home.business.title") }} |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-xl font-normal mb-8"> |
|
|
|
{{ t("home.business.description") }} |
|
|
|
</div> |
|
|
|
<nuxt-link |
|
|
|
:to="`${homepagePath}/products?audiences=1`" |
|
|
|
class="h-14 px-8 py-3.5 bg-white/10 hover:bg-white/15 rounded-[10px] outline outline-1 outline-white/20 backdrop-blur-md inline-flex flex-col justify-start items-start gap-3.5" |
|
|
|
> |
|
|
|
<div class="inline-flex justify-start items-center gap-2.5"> |
|
|
|
{{ t("home.business.view_details") }} |
|
|
|
<i class="icon-arrow-right text-xs ml-2"></i> |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="relative hidden xl:flex flex-1 flex-col gap-10"> |
|
|
|
<div class="w-full"> |
|
|
|
<div |
|
|
|
class="opacity-20 text-white text-7xl font-bold mb-2 select-none" |
|
|
|
> |
|
|
|
Business |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-4xl font-medium mb-4"> |
|
|
|
{{ t("home.business.title") }} |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-xl font-normal mb-8"> |
|
|
|
{{ t("home.business.description") }} |
|
|
|
</div> |
|
|
|
<nuxt-link |
|
|
|
:to="`${homepagePath}/products?audiences=1`" |
|
|
|
class="h-14 px-8 py-3.5 bg-white/10 hover:bg-white/15 rounded-[10px] outline outline-1 outline-white/20 backdrop-blur-md inline-flex flex-col justify-start items-start gap-3.5" |
|
|
|
> |
|
|
|
<div class="inline-flex justify-start items-center gap-2.5"> |
|
|
|
{{ t("home.business.view_details") }} |
|
|
|
<i class="icon-arrow-right text-xs ml-2"></i> |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div |
|
|
|
class="bg-zinc-900/60 backdrop-blur-[120px] right-0 bottom-[-20%] static xl:absolute" |
|
|
|
> |
|
|
|
<div class="w-full h-full grid grid-cols-2"> |
|
|
|
<nuxt-link |
|
|
|
v-for="category in categoryList" |
|
|
|
:key="category.id" |
|
|
|
class="flex flex-col gap-4 items-center p-4 md:p-12 hover:bg-zinc-900/50 hover:scale-95 transition-all duration-300" |
|
|
|
v-show="category.audiences === 1" |
|
|
|
:to="`${homepagePath}${category.link}`" |
|
|
|
> |
|
|
|
<img class="w-2/1" :src="category.image" /> |
|
|
|
<div |
|
|
|
class="text-center flex justify-center text-white text-base font-bold" |
|
|
|
> |
|
|
|
{{ category.title }} |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="text-center flex justify-center text-white/50 text-sm" |
|
|
|
> |
|
|
|
{{ category.description }} |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 个人产品 --> |
|
|
|
<div |
|
|
|
class="flex w-full gap-8 relative mb-0 xl:mb-60 flex-col xl:flex-row" |
|
|
|
> |
|
|
|
<div |
|
|
|
class="flex-1 hidden xl:flex flex-col gap-10 relative top-[-80px]" |
|
|
|
> |
|
|
|
<div class="w-full"> |
|
|
|
<div |
|
|
|
class="opacity-20 justify-center text-white text-7xl font-bold mb-2 select-none" |
|
|
|
> |
|
|
|
Personal |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-4xl font-medium mb-4"> |
|
|
|
{{ t("home.personal.title") }} |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-xl font-normal mb-8"> |
|
|
|
{{ t("home.personal.description") }} |
|
|
|
</div> |
|
|
|
<nuxt-link |
|
|
|
:to="`${homepagePath}/products?audiences=0`" |
|
|
|
class="h-14 px-8 py-3.5 bg-white/10 hover:bg-white/15 rounded-[10px] outline outline-1 outline-white/20 backdrop-blur-md inline-flex flex-col justify-start items-start gap-3.5" |
|
|
|
> |
|
|
|
<div class="inline-flex justify-start items-center gap-2.5"> |
|
|
|
{{ t("home.personal.view_details") }} |
|
|
|
<i class="icon-arrow-right text-xs ml-2"></i> |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div |
|
|
|
class="w-full xl:w-[75%] h-[280px] md:h-[320px] xl:h-[480px] select-none relative z-0 flex justify-end items-end animate-gradient-bg [background:linear-gradient(180deg,#0086f4_0%,#88d5fa_80%)]" |
|
|
|
> |
|
|
|
<img |
|
|
|
src="@/assets/images/personal.webp" |
|
|
|
alt="personal" |
|
|
|
class="pt-0 md:pt-20 max-h-full relative z-10" |
|
|
|
/> |
|
|
|
<span |
|
|
|
class="absolute hidden xl:block z-0 top-[25%] left-[35%] translate-y-[-50%] translate-x-[-50%] opacity-5 text-white text-[160px] font-bold select-none" |
|
|
|
>Hanye</span |
|
|
|
> |
|
|
|
|
|
|
|
<div |
|
|
|
class="flex xl:hidden flex-col gap-10 absolute top-0 left-0 right-0 bottom-0 z-10 justify-center p-4 md:p-8" |
|
|
|
> |
|
|
|
<div class="w-full"> |
|
|
|
<div |
|
|
|
class="opacity-10 justify-center text-white text-4xl md:text-7xl font-bold mb-2 select-none" |
|
|
|
> |
|
|
|
Personal |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="justify-center text-white text-4xl font-medium mb-4" |
|
|
|
> |
|
|
|
{{ t("home.personal.title") }} |
|
|
|
</div> |
|
|
|
<div class="justify-center text-white text-xl font-normal mb-8"> |
|
|
|
{{ t("home.personal.description") }} |
|
|
|
</div> |
|
|
|
<nuxt-link |
|
|
|
:to="`${homepagePath}/products?audiences=0`" |
|
|
|
class="h-14 px-8 py-3.5 bg-white/10 hover:bg-white/15 rounded-[10px] outline outline-1 outline-white/20 backdrop-blur-md inline-flex flex-col justify-start items-start gap-3.5" |
|
|
|
> |
|
|
|
<div class="inline-flex justify-start items-center gap-2.5"> |
|
|
|
{{ t("home.personal.view_details") }} |
|
|
|
<i class="icon-arrow-right text-xs ml-2"></i> |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div |
|
|
|
class="bg-zinc-900/60 backdrop-blur-[120px] static left-0 bottom-[-15%] xl:absolute z-2" |
|
|
|
> |
|
|
|
<div class="w-full h-full grid grid-cols-2 lg:grid-cols-3"> |
|
|
|
<nuxt-link |
|
|
|
v-for="category in categoryList" |
|
|
|
:key="category.id" |
|
|
|
class="flex flex-col gap-4 items-center py-4 px-4 md:py-12 md:px-6 hover:bg-zinc-900/50 hover:scale-95 transition-all duration-300" |
|
|
|
v-show="category.audiences === 0" |
|
|
|
:to="`${homepagePath}${category.link}`" |
|
|
|
> |
|
|
|
<img class="w-2/1" :src="category.image" /> |
|
|
|
<div |
|
|
|
class="text-center flex justify-center text-white text-base font-bold" |
|
|
|
> |
|
|
|
{{ category.title }} |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="text-center flex justify-center text-white/50 text-sm" |
|
|
|
> |
|
|
|
{{ category.description }} |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</section> |
|
|
|
|
|
|
|
<!-- 按用途产品展示 --> |
|
|
|
<section class="max-w-full mb-12 md:mb-32 xl:px-8 lg:px-6 md:px-4 px-4"> |
|
|
|
<div class="max-w-screen-2xl mx-auto relative"> |
|
|
@@ -325,67 +536,6 @@ |
|
|
|
</div> |
|
|
|
</section> |
|
|
|
|
|
|
|
<!-- 按分类栏目展示 --> |
|
|
|
<section class="max-w-full mb-12 md:mb-32 xl:px-8 lg:px-6 md:px-4 px-4"> |
|
|
|
<div class="max-w-screen-2xl mx-auto relative"> |
|
|
|
<div |
|
|
|
class="justify-center text-cyan-400 text-base font-normal leading-tight mb-4" |
|
|
|
> |
|
|
|
{{ t("home.useCategoryTitle") }} |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="justify-center text-white font-normal mb-8 md:mb-16 text-xl sm:text-2xl md:text-4xl lg:text-6xl" |
|
|
|
> |
|
|
|
{{ t("home.useCategoryDescription") }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="max-w-screen-2xl mx-auto"> |
|
|
|
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"> |
|
|
|
<nuxt-link |
|
|
|
v-for="category in typedCategoryList" |
|
|
|
:key="category.id" |
|
|
|
:to="category.link" |
|
|
|
class="bg-zinc-950/10 backdrop-blur-[50px] border border-white/10 rounded-lg flex gap-8 p-4 sm:p-8 justify-between category-item group hover:border-cyan-400/30 transition-all duration-300" |
|
|
|
> |
|
|
|
<div class="col-span-1 flex flex-col gap-4"> |
|
|
|
<div |
|
|
|
class="flex flex-col gap-2 opacity-80 group-hover:opacity-100 transition-opacity duration-300" |
|
|
|
> |
|
|
|
<div |
|
|
|
v-for="capacitie in category.capacities" |
|
|
|
:key="capacitie" |
|
|
|
class="text-white text-sm md:text-base font-normal leading-tight flex gap-2 items-center group-hover:text-cyan-400 transition-colors duration-300" |
|
|
|
> |
|
|
|
<i |
|
|
|
class="icon-star text-sm group-hover:scale-110 transition-transform duration-300" |
|
|
|
></i> |
|
|
|
<span>{{ capacitie }}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="p-2 sm:p-4 mt-auto bg-zinc-500/20 rounded-lg outline outline-1 outline-offset-[-1px] outline-white/10 backdrop-blur-xl inline-flex justify-center items-center gap-3 overflow-hidden group-hover:bg-cyan-400/10 group-hover:outline-cyan-400/30 transition-all duration-300" |
|
|
|
> |
|
|
|
<div |
|
|
|
class="justify-start text-neutral-200 text-xs md:text-sm font-medium uppercase leading-relaxed group-hover:text-cyan-400 transition-colors duration-300" |
|
|
|
> |
|
|
|
{{ category.title }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="w-32 h-32 md:w-44 md:h-44 relative overflow-hidden rounded-lg" |
|
|
|
> |
|
|
|
<img |
|
|
|
:src="category.image" |
|
|
|
:alt="category.title" |
|
|
|
class="w-full h-full object-contain transition-transform duration-500 group-hover:scale-110" |
|
|
|
/> |
|
|
|
</div> |
|
|
|
</nuxt-link> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</section> |
|
|
|
|
|
|
|
<!-- 核心展示 --> |
|
|
|
<section class="max-w-full mb-12 md:mb-32 xl:px-8 lg:px-6 md:px-4 px-4"> |
|
|
|
<div |
|
|
@@ -603,6 +753,7 @@ interface Product { |
|
|
|
image: string; |
|
|
|
link: string; |
|
|
|
description?: string; |
|
|
|
name?: string; |
|
|
|
} |
|
|
|
|
|
|
|
interface Usage { |
|
|
@@ -621,6 +772,7 @@ interface Category { |
|
|
|
sort: number; |
|
|
|
image: string; |
|
|
|
link: string; |
|
|
|
audiences: number; |
|
|
|
} |
|
|
|
|
|
|
|
// 使用i18n |
|
|
@@ -704,7 +856,7 @@ const loadUsageData = async () => { |
|
|
|
id: product.id, |
|
|
|
title: product.title, |
|
|
|
image: product.image, |
|
|
|
link: `${homepagePath.value}/products/${product.id}`, |
|
|
|
link: `${homepagePath.value}/products/${product.name}`, |
|
|
|
description: product.summary, |
|
|
|
}); |
|
|
|
}); |
|
|
@@ -766,10 +918,11 @@ const loadCategoryData = async () => { |
|
|
|
image: category.image || "", |
|
|
|
link: `${homepagePath.value}/products?category=${encodeURIComponent( |
|
|
|
category.title |
|
|
|
)}`, |
|
|
|
)}&audiences=${category.audiences}`, |
|
|
|
capacities: category.capacities || [], |
|
|
|
summary: category.summary || "", |
|
|
|
sort: category.sort || 0, |
|
|
|
audiences: category.audiences, |
|
|
|
}; |
|
|
|
}) |
|
|
|
.sort((a: any, b: any) => a.id - b.id); |
|
|
@@ -894,35 +1047,19 @@ useHead({ |
|
|
|
:deep(.swiper-pagination-bullet-active) { |
|
|
|
background-color: var(--color-text); /* Example color */ |
|
|
|
} |
|
|
|
.category-item { |
|
|
|
background-image: url("@/assets/images/home-b-1.webp"); |
|
|
|
background-size: cover; |
|
|
|
background-position: center; |
|
|
|
background-repeat: no-repeat; |
|
|
|
opacity: 0.8; |
|
|
|
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); |
|
|
|
position: relative; |
|
|
|
overflow: hidden; |
|
|
|
|
|
|
|
&:hover { |
|
|
|
opacity: 1; |
|
|
|
transform: translateY(-2px); |
|
|
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2); |
|
|
|
|
|
|
|
&::before { |
|
|
|
opacity: 1; |
|
|
|
} |
|
|
|
} |
|
|
|
.use-business { |
|
|
|
background-image: url("@/assets/images/business.webp"); |
|
|
|
background-size: auto 548px; |
|
|
|
background-position: left top; |
|
|
|
background-repeat: no-repeat; |
|
|
|
} |
|
|
|
|
|
|
|
&::before { |
|
|
|
content: ""; |
|
|
|
position: absolute; |
|
|
|
inset: 0; |
|
|
|
background: linear-gradient(45deg, rgba(6, 182, 212, 0.1), transparent); |
|
|
|
opacity: 0; |
|
|
|
transition: opacity 0.3s ease; |
|
|
|
pointer-events: none; |
|
|
|
} |
|
|
|
.use-personal { |
|
|
|
background-image: url("@/assets/images/personal.webp"); |
|
|
|
background-size: auto 480px; |
|
|
|
background-position: right bottom; |
|
|
|
background-repeat: no-repeat; |
|
|
|
} |
|
|
|
|
|
|
|
// 优化过渡动画 |
|
|
@@ -1036,7 +1173,6 @@ useHead({ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 优化图片加载动画 |
|
|
|
@keyframes fadeIn { |
|
|
|
from { |
|
|
@@ -1089,4 +1225,22 @@ useHead({ |
|
|
|
transform: translateY(-2px); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 添加渐变背景动画 |
|
|
|
@keyframes gradient-bg { |
|
|
|
0% { |
|
|
|
background-position: 0% 50%; |
|
|
|
} |
|
|
|
50% { |
|
|
|
background-position: 100% 50%; |
|
|
|
} |
|
|
|
100% { |
|
|
|
background-position: 0% 50%; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.animate-gradient-bg { |
|
|
|
background-size: 200% 200%; |
|
|
|
animation: gradient-bg 15s ease infinite; |
|
|
|
} |
|
|
|
</style> |