diff --git a/app/page.jsx b/app/page.jsx index 5de8d45..eec91d9 100644 --- a/app/page.jsx +++ b/app/page.jsx @@ -1,5 +1,6 @@ import Hero from "@/components/homes/home-15/Hero"; import SwiperItems from "@/components/homes/home-15/SwiperItems"; +import CategoryItems from "@/components/homes/home-15/CategoryItems"; import React from "react"; import { getSiteSettings } from "@/utils/siteSettings"; @@ -35,7 +36,7 @@ export default function Page() {
- +
{" "} diff --git a/components/homes/home-15/CategoryItems.jsx b/components/homes/home-15/CategoryItems.jsx index 1b7010a..8bff923 100644 --- a/components/homes/home-15/CategoryItems.jsx +++ b/components/homes/home-15/CategoryItems.jsx @@ -1,172 +1,83 @@ -"use client"; -import { useEffect, useState } from "react"; -import { Swiper, SwiperSlide } from "swiper/react"; -import { Navigation, Pagination } from "swiper/modules"; import Link from "next/link"; import Image from "next/image"; -import axios from "axios"; +import { fetchComponentData, fetchListViewData } from "@/utils/data"; -export default function CategoryItems() { - const [data, setData] = useState(null); - const [posts, setPosts] = useState([]); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); - - // 统一字段映射,便于团队查阅和维护 - const title = data?.title; - const subtitle = data?.subtitle; - const pagetype = data?.t1; - const category = data?.t2; - const category_slug = data?.t3; - const count = data?.t4; - const columns = data?.t5; - const button_text = data?.button_text; - - useEffect(() => { - async function fetchComponentData() { - try { - setLoading(true); - const res = await axios.get("/api/get-component-data", { - params: { component_name: "CategoryItems" }, - }); - setData(res.data.data); - } catch (err) { - setError("获取CategoryItems数据失败"); - } finally { - setLoading(false); - } - } - fetchComponentData(); - }, []); - - useEffect(() => { - async function fetchPosts() { - if (!data) return; - setLoading(true); - try { - // 使用统一映射变量 - const params = new URLSearchParams({ pagetype: pagetype || "" }); - if (category) params.append("category", category); - if (count !== undefined && count !== null) params.append("count", count); - const res = await fetch(`/api/get-listview-data?${params.toString()}`); - const json = await res.json(); - if (Array.isArray(json.data)) { - setPosts(json.data); - } else { - setPosts([]); - } - } catch (e) { - setPosts([]); - } - setLoading(false); - } - fetchPosts(); - }, [data, pagetype, category, count]); - - if (!data) return null; - // 渲染卡片内容 - function renderCardImage(post, idx) { - // 多图轮播 - if (Array.isArray(post.images) && post.images.length > 1) { +// 渲染卡片内容 +function renderCardImage(post) { + // 视频 + if (post.video_src || post.videoId) { + if (post.video_src && (post.video_src.endsWith('.mp4') || post.video_src.startsWith('/files/'))) { return ( - - {post.images.map((img, i) => ( - - {post.title - - ))} - + ); } - // 视频 - if (post.video_src || post.videoId) { - if (post.video_src && (post.video_src.endsWith('.mp4') || post.video_src.startsWith('/files/'))) { - return ( - - ); - } - const vid = post.videoId || (post.video_src && post.video_src.includes('youtube') ? post.video_src.split('embed/')[1] : null); - if (vid) { - return ( -