diff --git a/app/(website)/[...slug]/page.jsx b/app/(website)/[...slug]/page.jsx index 76b71b8..e1dc2bd 100644 --- a/app/(website)/[...slug]/page.jsx +++ b/app/(website)/[...slug]/page.jsx @@ -4,7 +4,8 @@ import { getSiteSettings } from "@/utils/data"; import { notFound } from 'next/navigation'; import DynamicListPage from "@/components/common/DynamicListPage"; import { Suspense } from 'react'; -import { getPageData, getAllSlugs } from "@/utils/data"; +import { getPageData } from "@/utils/data"; +import ProductImageGallery from "@/components/products/ProductImageGallery"; const LoadingSpinner = () => (
@@ -12,29 +13,13 @@ const LoadingSpinner = () => (
); -// Using a static value to comply with Next.js 15 build requirements. -// On-demand revalidation will be handled via the API route. export const revalidate = 3600; -export async function generateStaticParams() { - try { - const slugs = await getAllSlugs(); - return slugs.map(slug => ({ - slug: slug, - })); - } catch (error) { - console.error("Failed to generate static params:", error); - return []; - } -} - export async function generateMetadata({ params }) { const resolvedParams = await params; - const slugArr = resolvedParams.slug; - const { data, error, page_info } = await getPageData({ - slug_list: slugArr, - downloadFiles: false // Do not download files for metadata - }); + const slug = resolvedParams.slug || []; + const slugArr = Array.isArray(slug) ? slug : [slug]; + const { data, error, page_info } = await getPageData({ slug_list: slugArr }); const siteSettings = await getSiteSettings(); const siteTitle = siteSettings.site_title || ''; const siteName = siteSettings.site_name || ''; @@ -76,31 +61,30 @@ export async function generateMetadata({ params }) { }; } -export default async function DynamicPage({ params, searchParams }) { +export default async function Page({ params, searchParams }) { const resolvedParams = await params; - const slugArr = resolvedParams.slug; + const slug = resolvedParams.slug || []; + const slugArr = Array.isArray(slug) ? slug : [slug]; + const siteSettings = await getSiteSettings(); const pageSize = Number(siteSettings.page_size) || 12; - // 始终获取第一页的数据用于静态生成 const { data, error, total } = await getPageData({ slug_list: slugArr, page: 1, page_size: pageSize, - downloadFiles: true // Download files for page rendering + downloadFiles: true, }); if (error) { notFound(); } - - const bannerComponentName = 'Banner-' + (slugArr[0] || 'home'); - const categoryComponentName = 'Category-' + (slugArr[0] || 'home'); - + const pageSlugBase = slugArr.length ? slugArr[slugArr.length - 1] : ''; + const bannerComponentName = `Banner-${pageSlugBase}`; + const categoryComponentName = `Category-${pageSlugBase}`; if (Array.isArray(data)) { - const currentPath = '/' + (Array.isArray(slugArr) ? slugArr.join('/') : ''); - const listColumns = 4; - + const currentPath = '/' + slugArr.join('/'); + const listColumns = 4; return ( <> @@ -138,31 +122,30 @@ export default async function DynamicPage({ params, searchParams }) {
{/* 图片和附加信息并排显示,响应式优化 */} {(data.image || data.subtitle) && ( -
- {data.image && ( -
- {data.title} -
- )} - {data.subtitle && ( -
- {data.subtitle} -
- )} +
+ {/* 图片轮播区块 */} + + +
+ {/* 产品标题 */} + {data.title && ( +

+ {data.title} +

+ )} + {/* 产品副标题 */} + {data.subtitle && ( +
+ {data.subtitle} +
+ )} +
)} - {/* Product Description 标题 */} -
- {data.additional_content && ( - <> - {/* Testing Report 标题 */} -
- - )} + {/* 内容区域 */} +
+
+
@@ -173,4 +156,4 @@ export default async function DynamicPage({ params, searchParams }) { } else { notFound(); } -} +} diff --git a/public/files/aidc6054er_d92979cb.png b/public/files/aidc6054er_d92979cb.png new file mode 100644 index 0000000..03827d0 Binary files /dev/null and b/public/files/aidc6054er_d92979cb.png differ diff --git a/public/files/alv6ce8dj3_33b57c55.png b/public/files/alv6ce8dj3_33b57c55.png new file mode 100644 index 0000000..ef9ba0e Binary files /dev/null and b/public/files/alv6ce8dj3_33b57c55.png differ diff --git a/public/files/aohums8vsl_3bd3733b.png b/public/files/aohums8vsl_3bd3733b.png new file mode 100644 index 0000000..5b86caa Binary files /dev/null and b/public/files/aohums8vsl_3bd3733b.png differ diff --git a/public/files/aohums8vsl_ba6de487.png b/public/files/aohums8vsl_ba6de487.png new file mode 100644 index 0000000..2da81f4 Binary files /dev/null and b/public/files/aohums8vsl_ba6de487.png differ diff --git a/public/files/at05gkd37k_c02c70ce.png b/public/files/at05gkd37k_c02c70ce.png new file mode 100644 index 0000000..7f3ea7e Binary files /dev/null and b/public/files/at05gkd37k_c02c70ce.png differ diff --git a/public/files/e7hkd4aq3m_17f58530.png b/public/files/e7hkd4aq3m_17f58530.png new file mode 100644 index 0000000..df7b38b Binary files /dev/null and b/public/files/e7hkd4aq3m_17f58530.png differ diff --git a/public/files/e7shufki1s_12f8024e.png b/public/files/e7shufki1s_12f8024e.png new file mode 100644 index 0000000..650e0dc Binary files /dev/null and b/public/files/e7shufki1s_12f8024e.png differ diff --git a/public/files/ef0g85canc_afd8ca27.png b/public/files/ef0g85canc_afd8ca27.png new file mode 100644 index 0000000..d2bc33c Binary files /dev/null and b/public/files/ef0g85canc_afd8ca27.png differ diff --git a/public/files/ehng0ni35f_a6847c82.png b/public/files/ehng0ni35f_a6847c82.png new file mode 100644 index 0000000..836a7b8 Binary files /dev/null and b/public/files/ehng0ni35f_a6847c82.png differ diff --git a/public/files/ek5pp8snc0_cf17fef5.png b/public/files/ek5pp8snc0_cf17fef5.png new file mode 100644 index 0000000..47005b6 Binary files /dev/null and b/public/files/ek5pp8snc0_cf17fef5.png differ diff --git a/public/files/o2gnd8a1io_ce51fbd5.png b/public/files/o2gnd8a1io_ce51fbd5.png new file mode 100644 index 0000000..bb16bbb Binary files /dev/null and b/public/files/o2gnd8a1io_ce51fbd5.png differ