'use client'; import { Search } from 'lucide-react'; import { useRouter, useSearchParams } from 'next/navigation'; import { useEffect, useRef, useState } from 'react'; import PageLayout from '@/components/PageLayout'; import VideoCard from '@/components/VideoCard'; // 模拟搜索历史数据 const mockSearchHistory = ['流浪地球', '三体', '狂飙', '满江红']; // 定义搜索结果类型 type SearchResult = { id: string; title: string; poster: string; source: string; source_name: string; episodes?: number; }; export default function SearchPage() { const router = useRouter(); const searchParams = useSearchParams(); const [searchQuery, setSearchQuery] = useState(''); const [isLoading, setIsLoading] = useState(false); const [showResults, setShowResults] = useState(false); const [searchResults, setSearchResults] = useState([]); const searchInputRef = useRef(null); useEffect(() => { // 自动聚焦搜索框 searchInputRef.current?.focus(); }, []); useEffect(() => { // 当搜索参数变化时更新搜索状态 const query = searchParams.get('q'); if (query) { setSearchQuery(query); fetchSearchResults(query); } else { setShowResults(false); } }, [searchParams]); const fetchSearchResults = async (query: string) => { try { setIsLoading(true); const response = await fetch( `/api/search?q=${encodeURIComponent(query)}` ); const data = await response.json(); setSearchResults(data.results); setShowResults(true); } catch (error) { setSearchResults([]); } finally { setIsLoading(false); } }; const handleSearch = (e: React.FormEvent) => { e.preventDefault(); if (!searchQuery.trim()) return; setIsLoading(true); setShowResults(true); // 模拟搜索延迟 setTimeout(() => { fetchSearchResults(searchQuery); }, 1000); }; return (
{/* 搜索框 */}
setSearchQuery(e.target.value)} placeholder='搜索电影、电视剧...' className='w-full h-12 rounded-lg bg-gray-50/80 py-3 pl-10 pr-4 text-sm text-gray-700 placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-green-400 focus:bg-white border border-gray-200/50 shadow-sm' />
{/* 搜索结果或搜索历史 */}
{isLoading ? (
) : showResults ? ( // 搜索结果
{searchResults.map((item) => (
))} {searchResults.length === 0 && (
未找到相关结果
)}
) : mockSearchHistory.length > 0 ? ( // 搜索历史

搜索历史

{mockSearchHistory.map((item, index) => ( ))}
) : null}
); }