From f25989b88f118849e3b1b34d9a04b722f3de1087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Tue, 27 Jan 2026 12:57:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E4=BA=A7=E5=93=81?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=92=8C=E5=86=85=E5=AE=B9=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E4=BA=A7=E5=93=81=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构产品类型定义,新增desc、models、content字段 - 更新所有语言的产品内容,包括详细规格和化学/机械性能 - 修改产品展示组件,支持MDX内容渲染和模型列表展示 - 调整产品详情页布局,优化信息展示方式 - 更新i18n翻译文件,同步产品名称变更 - 修改默认主题配置为light模式 - 修复公司简介中的格式问题 --- app/[locale]/product/[slug]/page.tsx | 18 +++++++-- components/ProductTabsClient.tsx | 9 +++-- config/site.ts | 2 +- content/about/company/zh.mdx | 4 +- content/product/en/1.mdx | 36 +++++++++++++---- content/product/en/2.mdx | 49 +++++++++++++++++++---- content/product/en/3.mdx | 51 +++++++++++++++++++----- content/product/en/4.mdx | 46 ++++++++++++++++++++++ content/product/en/5.mdx | 31 +++++++++++++++ content/product/en/6.mdx | 25 ++++++++++++ content/product/en/7.mdx | 56 +++++++++++++++++++++++++++ content/product/vi/1.mdx | 38 ++++++++++++++---- content/product/vi/2.mdx | 49 +++++++++++++++++++---- content/product/vi/3.mdx | 51 +++++++++++++++++++----- content/product/vi/4.mdx | 46 ++++++++++++++++++++++ content/product/vi/5.mdx | 31 +++++++++++++++ content/product/vi/6.mdx | 25 ++++++++++++ content/product/vi/7.mdx | 56 +++++++++++++++++++++++++++ content/product/zh/1.mdx | 36 +++++++++++++---- content/product/zh/2.mdx | 49 +++++++++++++++++++---- content/product/zh/3.mdx | 51 +++++++++++++++++++----- content/product/zh/4.mdx | 47 ++++++++++++++++++---- content/product/zh/5.mdx | 31 +++++++++++++++ content/product/zh/6.mdx | 25 ++++++++++++ content/product/zh/7.mdx | 58 ++++++++++++++++++++++++++++ i18n/messages/zh.json | 26 ++++++------- lib/getProducts.ts | 5 ++- types/product.ts | 4 +- 28 files changed, 851 insertions(+), 104 deletions(-) create mode 100644 content/product/en/4.mdx create mode 100644 content/product/en/5.mdx create mode 100644 content/product/en/6.mdx create mode 100644 content/product/en/7.mdx create mode 100644 content/product/vi/4.mdx create mode 100644 content/product/vi/5.mdx create mode 100644 content/product/vi/6.mdx create mode 100644 content/product/vi/7.mdx create mode 100644 content/product/zh/5.mdx create mode 100644 content/product/zh/6.mdx create mode 100644 content/product/zh/7.mdx diff --git a/app/[locale]/product/[slug]/page.tsx b/app/[locale]/product/[slug]/page.tsx index c9aff38..5f861ac 100644 --- a/app/[locale]/product/[slug]/page.tsx +++ b/app/[locale]/product/[slug]/page.tsx @@ -1,3 +1,4 @@ +import MDXComponents from "@/components/mdx/MDXComponents"; import ProductTabsClient from "@/components/ProductTabsClient"; import { Locale, LOCALES } from "@/i18n/routing"; import { getProducts } from "@/lib/getProducts"; @@ -5,7 +6,9 @@ import { constructMetadata } from "@/lib/metadata"; import { Product } from "@/types/product"; import { Metadata } from "next"; import { getTranslations } from "next-intl/server"; +import { MDXRemote } from "next-mdx-remote-client/rsc"; import { notFound } from "next/navigation"; +import remarkGfm from "remark-gfm"; // 引入表格解析插件 type Params = { locale: string; @@ -23,7 +26,7 @@ export async function generateMetadata({ try { const { products }: { products: Product[] } = await getProducts(locale); - const product = products.find((product) => product.slug === slug); + const product = products.find((product) => product.slug == slug); if (!product) { return constructMetadata({ @@ -117,8 +120,8 @@ export default async function ProductPage({ params }: { params: Promise

{product.title || "未命名产品"}

- {t("productModel")}: - {product.model || "暂无"} + {t('productDetail')}: + {product.desc || "暂无"}
{t("productPlace")}: @@ -155,10 +158,17 @@ export default async function ProductPage({ params }: { params: Promise + +
diff --git a/components/ProductTabsClient.tsx b/components/ProductTabsClient.tsx index 33620e1..5e18088 100644 --- a/components/ProductTabsClient.tsx +++ b/components/ProductTabsClient.tsx @@ -8,10 +8,11 @@ type ProductTabsClientProps = { spec: string[]; packaging: string; locale: string; + models: string[]; }; // 纯客户端交互组件(仅处理标签页切换) -export default function ProductTabsClient({ detail, spec, packaging, locale }: ProductTabsClientProps) { +export default function ProductTabsClient({ detail, models, spec, packaging, locale }: ProductTabsClientProps) { const [activeTab, setActiveTab] = useState('spec'); // 仅客户端使用状态 const t = useTranslations("Product"); @@ -23,7 +24,7 @@ export default function ProductTabsClient({ detail, spec, packaging, locale }: P className={`px-4 py-2 border-r transition-colors ${activeTab === 'detail' ? 'bg-orange-50 text-orange-600 font-medium' : 'hover:bg-gray-50'}`} onClick={() => setActiveTab('detail')} > - {t('productDetail')} + {t('productModel')}