PcoreProducts.tsx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. 'use client'
  2. import React from 'react';
  3. import Link from 'next/link';
  4. import Image from 'next/image';
  5. interface ProductMenuProps {
  6. products: ProductItem[]
  7. }
  8. export default function CoreProducts({products}: ProductMenuProps) {
  9. const BASE_URL = process.env.NEXT_PUBLIC_BASE_URL as string
  10. return (
  11. <section className="w-full max-w-7xl mx-auto">
  12. {/* 标题区域 */}
  13. <div className="flex flex-col items-center mb-8 relative">
  14. <Link
  15. href="/products"
  16. className="absolute right-0 top-0 text-sm text-blue-600 hover:underline flex items-center gap-1"
  17. >更多
  18. </Link>
  19. </div>
  20. {/* 产品列表 */}
  21. <div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
  22. {products.map((product) => (
  23. <div
  24. className="border border-gray-200 rounded-sm p-6 flex flex-col items-center text-center hover:shadow-md transition-shadow duration-300"
  25. >
  26. <h3 className="font-bold text-lg mb-1 text-gray-800">{product.productName}</h3>
  27. <p className="text-sm mb-4 text-gray-500">
  28. <span className="text-red-600 line-clamp-1">{product.productIntroduction}</span>
  29. </p>
  30. {/* 产品图片 */}
  31. <div className="w-40 h-40 flex items-center justify-center mb-6">
  32. <Image
  33. src={product.productUrl ? BASE_URL + product.productUrl : "/assets/productions/2.png"}
  34. alt={product.productType}
  35. width={160}
  36. height={160}
  37. className="object-contain"
  38. />
  39. </div>
  40. <p className="text-sm text-gray-600">{product.productType}</p>
  41. <p className="text-xs text-gray-400 mt-1">{product.productModel}</p>
  42. </div>
  43. ))}
  44. </div>
  45. </section>
  46. );
  47. };