From 3138d62afc8397a507afa7860fb6802dfc844b76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Thu, 26 Feb 2026 18:03:44 +0800 Subject: [PATCH] feat: create news list page with filtering and search --- src/app/news/page.tsx | 127 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/app/news/page.tsx diff --git a/src/app/news/page.tsx b/src/app/news/page.tsx new file mode 100644 index 0000000..dd87955 --- /dev/null +++ b/src/app/news/page.tsx @@ -0,0 +1,127 @@ +'use client'; + +import { useState, useMemo } from 'react'; +import { NEWS } from '@/lib/constants'; +import { Card, CardContent } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { Search, Calendar, ArrowRight, Filter } from 'lucide-react'; +import Link from 'next/link'; +import { motion } from 'framer-motion'; + +const categories = ['全部', '公司新闻', '产品发布', '合作动态', '行业资讯']; + +export default function NewsListPage() { + const [selectedCategory, setSelectedCategory] = useState('全部'); + const [searchQuery, setSearchQuery] = useState(''); + + const filteredNews = useMemo(() => { + return NEWS.filter((news) => { + const matchesCategory = selectedCategory === '全部' || news.category === selectedCategory; + const matchesSearch = + news.title.toLowerCase().includes(searchQuery.toLowerCase()) || + news.excerpt.toLowerCase().includes(searchQuery.toLowerCase()); + return matchesCategory && matchesSearch; + }); + }, [selectedCategory, searchQuery]); + + return ( +
+
+
+

+ 新闻动态 +

+

+ 了解睿新致远最新动态,把握行业发展脉搏 +

+
+
+ +
+
+
+
+ + 分类筛选: +
+
+ {categories.map((category) => ( + + ))} +
+
+ +
+ + setSearchQuery(e.target.value)} + className="pl-10" + /> +
+
+ + {filteredNews.length === 0 ? ( +
+

没有找到相关新闻

+
+ ) : ( +
+ {filteredNews.map((news, index) => ( + + + + +
+ 📰 +
+
+
+ {news.category} +
+ + {news.date} +
+
+

+ {news.title} +

+

+ {news.excerpt} +

+
+ 阅读更多 + +
+
+
+
+ +
+ ))} +
+ )} +
+
+ ); +}