"use client"; import { useEffect, useState } from "react"; import ModalVideo from "@/components/common/ModalVideo"; import Link from "next/link"; import axios from "axios"; import { Autoplay, Navigation, Pagination } from "swiper/modules"; import { Swiper, SwiperSlide } from "swiper/react"; export default function Hero({ showNavButtons = false }) { const [isOpen, setIsOpen] = useState(""); const [heroData, setHeroData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { async function fetchHeroData() { try { setLoading(true); const res = await axios.get("/api/get-component-data", { params: { component_name: "Hero" } }); setHeroData(res.data.data); } catch (err) { setError("获取Hero数据失败"); } finally { setLoading(false); } } fetchHeroData(); }, []); if (loading) return
Loading...
; if (error) return
{error}
; if (!heroData) return null; // 处理items const items = heroData.items || []; // 处理图片 const bgImages = [heroData.image, heroData.image_1, heroData.image_2].filter(Boolean); // 处理标题和副标题 const titles = [heroData.title, ...(items.map(i => i.item_title))].filter(Boolean); const subtitles = [heroData.subtitle, ...(items.map(i => i.item_subtitle))].filter(Boolean); const descs = [heroData.description, ...(items.map(i => i.item_description))].filter(Boolean); return ( <>
{items.map((item, idx) => { let alignClass = ""; switch ((item.content_align || "").toLowerCase()) { case "center": alignClass = "md:w-11/12 lg:w-8/12 xl:w-7/12 xxl:w-6/12 w-full !mx-auto text-center"; break; case "right": alignClass = "md:w-10/12 lg:w-7/12 xl:w-6/12 w-full max-w-full text-center lg:text-right xl:text-right lg:!ml-[41.666667%] xl:!ml-[50%] xxl:!ml-[50%]"; break; case "left": default: alignClass = "md:w-10/12 md:!ml-[8.33333333%] lg:w-7/12 lg:!ml-0 xl:w-6/12 xxl:w-5/12 w-full max-w-full text-center lg:text-left xl:text-left"; break; } return (

{item.item_title || heroData.title}

{item.item_subtitle || heroData.subtitle}

{item.item_video_src ? ( setIsOpen(item.item_video_src)} className="btn btn-circle btn-white btn-play ripple !mx-auto !mb-5 !relative z-[2] xl:!text-[2.3rem] !w-[3.5rem] !h-[3.5rem] !text-[calc(1.355rem_+_1.26vw)] hover:translate-y-0 inline-flex items-center justify-center leading-none p-0 !rounded-[100%] before:content-[''] before:block before:absolute before:opacity-80 before:animate-[ripple-1_2s_infinite_ease-in-out] before:z-[-1] before:rounded-[50%] before:inset-0 before:bg-[#ffffff] after:content-[''] after:block after:absolute after:opacity-60 after:animate-[ripple-2_2s_infinite_ease-in-out] after:z-[-1] after:rounded-[50%] after:inset-0 after:bg-[#ffffff]" style={{ cursor: "pointer" }} > ) : ( item.item_button_text && item.item_button_link && ( item.item_button_link.startsWith("http") ? ( {item.item_button_text} ) : ( {item.item_button_text} ) ) )}
); })}
{showNavButtons && (
)}
setIsOpen("")} src={isOpen} /> ); }