From 4e3fb172027a8d075fc58a30469d5fab7c67053f Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 26 Apr 2026 19:55:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E6=96=B0=E4=B8=BB=E9=A2=98=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E7=9A=84=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(frontend)/[locale]/about/page.tsx | 95 +- src/app/(frontend)/[locale]/contact/page.tsx | 291 +++++ .../dealers/dealer-partnership-forms.tsx | 25 +- src/app/(frontend)/[locale]/dealers/page.tsx | 130 +- .../[locale]/downloads/[slug]/page.tsx | 6 +- .../(frontend)/[locale]/downloads/page.tsx | 16 +- .../(frontend)/[locale]/news/[slug]/page.tsx | 20 +- src/app/(frontend)/[locale]/news/page.tsx | 146 ++- src/app/(frontend)/[locale]/page.tsx | 221 ++-- .../[locale]/products/[slug]/page.tsx | 155 ++- .../products/[slug]/product-content-tabs.tsx | 28 +- .../[slug]/product-gallery-section.tsx | 202 +-- src/app/(frontend)/[locale]/products/page.tsx | 60 +- .../[locale]/support/contact/page.tsx | 126 +- .../[locale]/support/faq/faq-browser.tsx | 143 ++- .../(frontend)/[locale]/support/faq/page.tsx | 62 +- src/app/(frontend)/[locale]/support/page.tsx | 57 +- .../[locale]/support/warranty/page.tsx | 100 +- src/app/(payload)/admin-theme.css | 104 ++ src/app/(payload)/admin/importMap.js | 2 + src/app/globals.css | 33 + .../home/home-featured-products.tsx | 263 ++-- src/components/home/home-hero-banners.tsx | 101 ++ src/components/home/home-hero.tsx | 107 +- src/components/home/home-news.tsx | 25 +- src/components/home/home-recognition.tsx | 243 ++-- src/components/home/home-statement.tsx | 84 +- src/components/site/about-contact-tabs.tsx | 49 + src/components/site/page-hero.tsx | 38 +- src/components/site/site-footer.tsx | 8 +- src/components/site/site-header.tsx | 47 +- .../site/site-product-mega-menu.tsx | 184 +++ src/lib/blog-api.ts | 16 +- src/lib/global-settings.ts | 2 + src/lib/home-recognition-defaults.ts | 12 + src/lib/site-product-menu.ts | 123 ++ ...423_150500_add_homepage_featured_layout.ts | 15 + ...0260423_160500_add_products_page_global.ts | 71 ++ ...260424_101500_add_homepage_hero_banners.ts | 59 + ...60424_120500_add_contact_us_page_global.ts | 135 ++ ...0260424_131500_add_homepage_news_source.ts | 27 + ...424_143000_add_news_page_and_categories.ts | 187 +++ ...20260424_151500_add_dealers_page_global.ts | 92 ++ src/migrations/index.ts | 42 + src/payload-types.ts | 354 +++++- src/payload.config.ts | 19 +- src/payload/admin/CompactArrayRowLabel.tsx | 55 + src/payload/admin/compact-array-admin.ts | 20 + src/payload/collections/Media.ts | 2 + src/payload/collections/News.ts | 18 +- src/payload/collections/NewsCategories.ts | 49 + src/payload/collections/Products.ts | 57 +- src/payload/collections/Videos.ts | 2 + src/payload/doc-locale-hook.ts | 19 +- src/payload/globals/AboutPage.ts | 9 +- src/payload/globals/ContactPage.ts | 3 + src/payload/globals/ContactUsPage.ts | 59 + src/payload/globals/DealersPage.ts | 44 + src/payload/globals/GlobalSettings.ts | 9 +- src/payload/globals/Homepage.ts | 82 +- src/payload/globals/NewsPage.ts | 27 + src/payload/globals/ProductsPage.ts | 25 + src/payload/globals/SupportPage.ts | 2 + src/payload/globals/WarrantyPage.ts | 3 + src/scripts/smoke-check.mjs | 2 + src/seed/import-seed.mjs | 1092 ++++++++++++----- src/seed/normalized/import-result.json | 57 +- 67 files changed, 4552 insertions(+), 1409 deletions(-) create mode 100644 src/app/(frontend)/[locale]/contact/page.tsx create mode 100644 src/components/home/home-hero-banners.tsx create mode 100644 src/components/site/about-contact-tabs.tsx create mode 100644 src/components/site/site-product-mega-menu.tsx create mode 100644 src/lib/site-product-menu.ts create mode 100644 src/migrations/20260423_150500_add_homepage_featured_layout.ts create mode 100644 src/migrations/20260423_160500_add_products_page_global.ts create mode 100644 src/migrations/20260424_101500_add_homepage_hero_banners.ts create mode 100644 src/migrations/20260424_120500_add_contact_us_page_global.ts create mode 100644 src/migrations/20260424_131500_add_homepage_news_source.ts create mode 100644 src/migrations/20260424_143000_add_news_page_and_categories.ts create mode 100644 src/migrations/20260424_151500_add_dealers_page_global.ts create mode 100644 src/payload/admin/CompactArrayRowLabel.tsx create mode 100644 src/payload/admin/compact-array-admin.ts create mode 100644 src/payload/collections/NewsCategories.ts create mode 100644 src/payload/globals/ContactUsPage.ts create mode 100644 src/payload/globals/DealersPage.ts create mode 100644 src/payload/globals/NewsPage.ts create mode 100644 src/payload/globals/ProductsPage.ts diff --git a/src/app/(frontend)/[locale]/about/page.tsx b/src/app/(frontend)/[locale]/about/page.tsx index 3aec195..85cd789 100644 --- a/src/app/(frontend)/[locale]/about/page.tsx +++ b/src/app/(frontend)/[locale]/about/page.tsx @@ -1,6 +1,7 @@ import type { Metadata } from 'next' import { setRequestLocale } from 'next-intl/server' import type { Locale } from '@/i18n/config' +import { AboutContactTabs } from '@/components/site/about-contact-tabs' import { PageHero } from '@/components/site/page-hero' import { getPayloadClient } from '@/lib/payload' import { buildAbsoluteUrl, buildLocaleAlternates, extractRichTextPlainText, trimDescription } from '@/lib/seo' @@ -9,60 +10,12 @@ import { normalizeUploadUrl } from '@/lib/upload-url' export const dynamic = 'force-dynamic' export const revalidate = 0 -function getAboutPageTitle(rawTitle: string | null | undefined, locale: Locale) { +function getAboutPageTitle(rawTitle: string | null | undefined) { const normalized = rawTitle?.trim() - if (!normalized) return locale === 'zh' ? '关于 Eversolo' : 'About Eversolo' + if (!normalized) return '' return normalized } -function getAboutFallbackDescription(locale: Locale) { - return locale === 'zh' - ? '了解 Eversolo 的品牌背景、产品理念,以及围绕数字音频体验建立的设计方向。' - : 'Learn about Eversolo, its brand perspective, and the design direction behind its digital audio experience.' -} - -function getFallbackHtml(locale: Locale) { - return locale === 'zh' - ? ` -

深圳市艾索洛声学科技有限公司(简称艾索洛声学),由深圳市深智电科技有限公司投资成立。公司核心创始团队成员均在高保真音频行业从事多年技术开发与管理工作,研发团队涵盖音频解码、模拟音频、声学调校、放大器、系统集成、用户体验等领域。主营音频播放设备、Hi-Fi 解码与放大器等业务。

-

艾索洛(Eversolo)是艾索洛声学旗下品牌商标。Eversolo 专注于把数字音频系统做得更完整、更顺手,也更适合真正长期使用的听音空间。

-

感受 HIFI 的魅力

-

感受 HIFI 的魅力

-

使用 Eversolo,体验全新的 HIFI。每一个音符都经过精细调校,每一个细节都由智能技术呈现。沉浸在纯净的音乐中,享受非凡的声音体验。

-

包揽全球大奖

-

包揽全球大奖

-

艾索洛凭借卓越的音频设计与精密工程美学,屡获国际肯定。从海内外专业媒体的一致好评,到多次荣获欧洲 EISA 最佳流媒体播放器大奖,以实力赢得了全球发烧友的信赖与赞誉。

-

纯粹声音体验

-

认识 Eversolo

-

艾索洛声学科技有限公司拥有一支在 HiFi 行业拥有丰富经验的团队。研发专长包括音频解码、模拟音频、声学调音、功放和系统集成。艾索洛专注于音频播放设备、HiFi DAC 以及音频功放。

-

追求 HiFi 卓越

-

Eversolo 致力于提供卓越的 HiFi 音频体验,专注于从技术创新到真实音质再现的每一个细节。每款产品都经过精心设计,旨在捕捉音乐的纯粹和真实,为 HiFi 爱好者带来非凡的听觉体验。

-

硬件与软件开发的承诺

-

我们不断投资于先进的硬件和软件开发,设计高性能、可靠的音频设备。Eversolo 的研发团队专注于音频解码、系统集成和用户体验,确保我们每款产品在各个方面都达到专业级品质。

-

精准的音质调校

-

Eversolo 非常重视音质调校,优化频率响应、解析度和声场,追求最佳音质。我们的音频专家团队进行无数次测试和调整,确保每款设备都能呈现丰富、细腻的音质,让用户能够欣赏到他们喜爱的每一段音乐的细节。

-` - : ` -

Eversolo Audio Technology Co., Ltd. is backed by Zidoo Technology Co., Ltd. The founding team has spent years in HiFi product development and management, with expertise spanning audio decoding, analog audio, acoustic tuning, amplifiers, system integration, and user experience.

-

Eversolo is the registered trademark of Eversolo Audio. The brand is focused on building a more complete, more intuitive digital listening system for long-term daily use.

-

Feel the charm of HIFI

-

Feel the charm of HIFI

-

With Eversolo, experience a new level of HIFI. Each note is finely tuned, every detail brought to life by smart technology. Dive into pure music and enjoy an extraordinary sound experience.

-

Winning Global Awards

-

Winning Global Awards

-

With its exceptional audio design and refined engineering aesthetics, Eversolo has gained international recognition. From praise by professional media worldwide to multiple EISA wins, Eversolo has earned the trust of audiophiles across the globe.

-

Pure sound experience

-

Getting to know Eversolo

-

Eversolo Audio Technology Co., Ltd. is led by a team with deep HiFi industry experience. The company specializes in audio playback devices, HiFi DACs, and amplifiers while combining hardware engineering, software systems, and user experience into one product direction.

-

Pursuit of HiFi Excellence

-

Eversolo is dedicated to delivering an exceptional HiFi audio experience, focusing on every detail from technological innovation to authentic sound reproduction. Each product is crafted to capture the purity and realism of music.

-

Commitment to Hardware and Software Development

-

We invest continuously in advanced hardware and software development to design high-performance, reliable audio equipment. Eversolo’s R&D team specializes in audio decoding, system integration, and user experience.

-

Precision Sound Tuning

-

Eversolo places great emphasis on sound tuning, optimizing frequency response, resolution, and soundstage for the best possible audio quality. Our team conducts countless tests and refinements to deliver rich, detailed sound.

-` -} - async function getAboutPageData(locale: Locale) { const payload = await getPayloadClient() return payload.findGlobal({ @@ -78,13 +31,13 @@ export async function generateMetadata({ }): Promise { const { locale } = await params const page = await getAboutPageData(locale) - const pageTitle = getAboutPageTitle(page.intro?.title, locale) + const pageTitle = getAboutPageTitle(page.intro?.title) const introText = extractRichTextPlainText(page.intro?.body) return { alternates: buildLocaleAlternates('/about', locale), - description: trimDescription(introText) || getAboutFallbackDescription(locale), - title: pageTitle, + description: trimDescription(introText) || undefined, + title: pageTitle || undefined, } } @@ -97,7 +50,7 @@ export default async function AboutPage({ setRequestLocale(locale) const page = await getAboutPageData(locale) - const pageTitle = getAboutPageTitle(page.intro?.title, locale) + const pageTitle = getAboutPageTitle(page.intro?.title) const introText = extractRichTextPlainText(page.intro?.body) const introWithHero = page.intro as typeof page.intro & { heroImage?: { thumbnailURL?: string | null; url?: string | null } | number | null @@ -107,10 +60,10 @@ export default async function AboutPage({ ? normalizeUploadUrl(introWithHero.heroImage.url ?? introWithHero.heroImage.thumbnailURL ?? null) : null const contentHtml = - (page as typeof page & { contentHtml?: string | null }).contentHtml?.trim() || getFallbackHtml(locale) + (page as typeof page & { contentHtml?: string | null }).contentHtml?.trim() || '' return ( -
+