From 4264a64ecfc25bbdfae65c654fe6f946c2f6380a Mon Sep 17 00:00:00 2001 From: jingrow Date: Wed, 18 Jun 2025 03:42:39 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A1=88=E4=BE=8B=E7=BB=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/[...slug]/page.jsx | 6 +- app/applications/[...slug]/page.jsx | 6 +- app/page.jsx | 8 +- app/products/[...slug]/page.jsx | 6 +- components/blogs/BlogSingle.jsx | 262 +++++++++++++++++++++ components/blogs/Blogs.jsx | 157 ++++++++++++ components/blogs/Comment.jsx | 260 ++++++++++++++++++++ components/blogs/CommentBox.jsx | 69 ++++++ components/blogs/Gallery.jsx | 82 +++++++ components/blogs/RelatedBlogs.jsx | 98 ++++++++ components/blogs/Sidebar.jsx | 247 +++++++++++++++++++ components/blogs/Sidebar2.jsx | 247 +++++++++++++++++++ components/footers/Footer.jsx | 4 +- components/footers/MenuList.jsx | 4 +- components/homes/home-15/CategoryItems.jsx | 231 ++++++++++++++++++ components/homes/home-15/Hero.jsx | 8 +- public/files/1695105857795607.jpg | Bin 0 -> 24155 bytes 17 files changed, 1671 insertions(+), 24 deletions(-) create mode 100644 components/blogs/BlogSingle.jsx create mode 100644 components/blogs/Blogs.jsx create mode 100644 components/blogs/Comment.jsx create mode 100644 components/blogs/CommentBox.jsx create mode 100644 components/blogs/Gallery.jsx create mode 100644 components/blogs/RelatedBlogs.jsx create mode 100644 components/blogs/Sidebar.jsx create mode 100644 components/blogs/Sidebar2.jsx create mode 100644 components/homes/home-15/CategoryItems.jsx create mode 100644 public/files/1695105857795607.jpg diff --git a/app/[...slug]/page.jsx b/app/[...slug]/page.jsx index 0bb9df0..812e47d 100644 --- a/app/[...slug]/page.jsx +++ b/app/[...slug]/page.jsx @@ -110,7 +110,7 @@ export default async function DynamicPage({ params, searchParams }) {
{/* 图片和附加信息并排显示,响应式优化 */} - {(data.image || data.additional_info) && ( + {(data.image || data.subtitle) && (
{data.image && (
@@ -121,9 +121,9 @@ export default async function DynamicPage({ params, searchParams }) { />
)} - {data.additional_info && ( + {data.subtitle && (
- {data.additional_info} + {data.subtitle}
)}
diff --git a/app/applications/[...slug]/page.jsx b/app/applications/[...slug]/page.jsx index 28555ad..747a8ea 100644 --- a/app/applications/[...slug]/page.jsx +++ b/app/applications/[...slug]/page.jsx @@ -95,7 +95,7 @@ export default async function Page({ params, searchParams }) {
{/* 图片和附加信息并排显示,响应式优化 */} - {(data.image || data.additional_info) && ( + {(data.image || data.subtitle) && (
{data.image && (
@@ -106,9 +106,9 @@ export default async function Page({ params, searchParams }) { />
)} - {data.additional_info && ( + {data.subtitle && (
- {data.additional_info} + {data.subtitle}
)}
diff --git a/app/page.jsx b/app/page.jsx index 93c7a50..6be8ba1 100644 --- a/app/page.jsx +++ b/app/page.jsx @@ -2,7 +2,7 @@ import Faqs from "@/components/homes/home-15/Faqs"; import Gallery from "@/components/homes/home-15/Gallery"; import Features from "@/components/homes/home-15/Features"; import Hero from "@/components/homes/home-15/Hero"; -import Process from "@/components/homes/home-15/Process"; +import CategoryItems from "@/components/homes/home-15/CategoryItems"; import React from "react"; import { getSiteSettings } from "@/utlis/siteSettings"; @@ -34,13 +34,13 @@ export default function Page() { <>
<> -
+
{/* /.swiper-container */}
-
- +
+
diff --git a/app/products/[...slug]/page.jsx b/app/products/[...slug]/page.jsx index 08679a7..3f5dd4b 100644 --- a/app/products/[...slug]/page.jsx +++ b/app/products/[...slug]/page.jsx @@ -95,7 +95,7 @@ export default async function Page({ params, searchParams }) {
{/* 图片和附加信息并排显示,响应式优化 */} - {(data.image || data.additional_info) && ( + {(data.image || data.subtitle) && (
{data.image && (
@@ -106,9 +106,9 @@ export default async function Page({ params, searchParams }) { />
)} - {data.additional_info && ( + {data.subtitle && (
- {data.additional_info} + {data.subtitle}
)}
diff --git a/components/blogs/BlogSingle.jsx b/components/blogs/BlogSingle.jsx new file mode 100644 index 0000000..50f3d63 --- /dev/null +++ b/components/blogs/BlogSingle.jsx @@ -0,0 +1,262 @@ +import React from "react"; +import RelatedBlogs from "./RelatedBlogs"; +import Gallery from "./Gallery"; +import Comment from "./Comment"; +import CommentBox from "./CommentBox"; +import Image from "next/image"; + +export default function BlogSingle({ marginTop = true }) { + return ( +
+
+
+ image +
+
+
+
+
+

+ Cras mattis consectetur purus fermentum +

+

+ Fusce dapibus, tellus ac cursus commodo, tortor mauris + condimentum nibh, ut fermentum massa justo sit amet. Vivamus + sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. + Cras mattis consectetur purus sit amet fermentum. Aenean + lacinia bibendum nulla sed consectetur. Curabitur blandit + tempus porttitor. Vivamus sagittis lacus vel augue laoreet + rutrum faucibus dolor auctor. Nullam quis risus eget porta ac + consectetur vestibulum. +

+

+ Donec sed odio dui consectetur adipiscing elit. Etiam + adipiscing tincidunt elit, eu convallis felis suscipit ut. + Phasellus rhoncus tincidunt auctor. Nullam eu sagittis mauris. + Donec non dolor ac elit aliquam tincidunt at at sapien. Aenean + tortor libero, condimentum ac laoreet vitae, varius tempor + nisi. Duis non arcu vel lectus urna mollis ornare vel eu leo. +

+ + + + {/* /.row */} +

+ Maecenas sed diam eget risus varius blandit sit amet non + magna. Cum sociis natoque penatibus et magnis dis parturient + montes, nascetur ridiculus mus. Donec sed odio dui. Nulla + vitae elit libero, a pharetra augue. Maecenas faucibus mollis + interdum. Donec id elit non mi porta gravida at eget metus. + Nullam quis risus eget urna mollis ornare vel eu leo. Lorem + ipsum dolor sit amet, consectetur adipiscing elit. Sed posuere + consectetur est at lobortis. Cras mattis consectetur purus sit + amet fermentum. Praesent commodo cursus magna. +

+
+

+ Sed posuere consectetur est at lobortis. Lorem ipsum dolor + sit amet, consectetur adipiscing elit. Duis mollis, est non + commodo luctus, nisi erat porttitor ligula lacinia odio sem + nec elit purus. +

+
+ Very important person +
+
+

Sit Vulputate Bibendum Purus

+

+ Fusce dapibus, tellus ac cursus commodo, tortor mauris + condimentum nibh, ut fermentum massa justo sit amet risus. + Aenean lacinia bibendum nulla sed consectetur. Cras mattis + consectetur purus sit amet fermentum. Praesent commodo cursus + magna, vel scelerisque nisl consectetur et. Vestibulum id + ligula porta felis euismod semper. +

+

+ Fusce dapibus, tellus ac cursus commodo, tortor mauris + condimentum nibh, ut fermentum massa justo sit amet risus. + Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, + egestas eget quam. Fusce dapibus, tellus ac cursus commodo, + tortor mauris condimentum nibh, ut fermentum massa justo sit + amet risus. Sed posuere consectetur est at lobortis. Donec id + elit non mi porta gravida at eget metus. Nulla vitae elit + libero, a pharetra augue. Cum sociis natoque penatibus et + magnis dis parturient montes, nascetur ridiculus mus. Fusce + dapibus, tellus ac cursus commodo, tortor mauris condimentum + nibh. +

+
+ {/* /.post-content */} +
+ +
+
+ + + {/*/.dropdown-menu */} +
+ {/*/.share-dropdown */} +
+
+ {/* /.post-footer */} +
+ {/* /.post */} +
+ {/* /.classic-view */} +
+
+
+
+ image +
+
+
+ + Nikolas Brooten + +
+ + Sales Manager + +
+
+ +
+ {/* /.author-info */} +

+ Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum + nibh, ut fermentum massa justo sit amet risus. Maecenas faucibus + mollis interdum. Fusce dapibus, tellus ac. Maecenas faucibus mollis + interdum. +

+ + {/* /.social */} +
+

You Might Also Like

+ + {/* /.swiper-container */} +
+ + {/* /#comments */} +
+

Would you like to share your thoughts?

+

+ Your email address will not be published. Required fields are marked + * +

+ + {/* /.comment-form */} +
+ {/* /.card-body */} +
+ {/* /.card */} +
+ ); +} diff --git a/components/blogs/Blogs.jsx b/components/blogs/Blogs.jsx new file mode 100644 index 0000000..7987579 --- /dev/null +++ b/components/blogs/Blogs.jsx @@ -0,0 +1,157 @@ +"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"; + +const PAGE_SIZE = 8; // 每页8条,4列2行 +const PAGE_SLUG = "case"; // 博客slug常量 + +export default function Blogs({ + parentClass = "xl:w-10/12 lg:w-10/12 w-full flex-[0_0_auto] !px-[15px] max-w-full !mx-auto", + marginTop = true, +}) { + const [posts, setPosts] = useState([]); + const [currentPage, setCurrentPage] = useState(1); + const [totalPages, setTotalPages] = useState(1); + const [loading, setLoading] = useState(false); + + useEffect(() => { + async function fetchData() { + setLoading(true); + try { + const res = await fetch("/api/get-page-data", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ slug_list: [PAGE_SLUG], page: currentPage, page_size: PAGE_SIZE }), + }); + const json = await res.json(); + if (Array.isArray(json.data)) { + setPosts(json.data); + setTotalPages(Math.ceil((json.total || 0) / PAGE_SIZE)); + } else { + setPosts([]); + setTotalPages(1); + } + } catch (e) { + setPosts([]); + setTotalPages(1); + } + setLoading(false); + } + fetchData(); + }, [currentPage]); + + // 分页控件 + function PaginationComp() { + if (totalPages <= 1) return null; + return ( + + ); + } + + // 渲染卡片内容 + function renderCard(post, idx) { + // 多图轮播 + if (Array.isArray(post.images) && post.images.length > 1) { + return ( + + {post.images.map((img, i) => ( + + {post.title + + ))} + + ); + } + // 视频 + if (post.video_src || post.videoId) { + // 支持YouTube或本地视频 + if (post.video_src && (post.video_src.endsWith('.mp4') || post.video_src.startsWith('/files/'))) { + return ( + + ); + } + // YouTube + const vid = post.videoId || (post.video_src && post.video_src.includes('youtube') ? post.video_src.split('embed/')[1] : null); + if (vid) { + return ( +