'use client'; import { useState, useEffect } from 'react'; import { useParams, useRouter } from 'next/navigation'; import { Book } from '@/lib/types'; import { ArrowLeft, Save } from 'lucide-react'; export default function EditBookPage() { const params = useParams(); const router = useRouter(); const bookId = params.id as string; const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [error, setError] = useState(null); const [formData, setFormData] = useState({ isbn: '', title: '', authors: '', publisher: '', publishDate: '', price: '', classificationNo: '', location: '', totalCopies: '1', availableCopies: '1', status: 'normal', description: '', coverUrl: '', }); useEffect(() => { const fetchBook = async () => { try { const response = await fetch(`/api/books/${bookId}`); if (!response.ok) { throw new Error('Failed to fetch book'); } const book: Book = await response.json(); setFormData({ isbn: book.isbn, title: book.title, authors: book.authors.join(', '), publisher: book.publisher || '', publishDate: book.publishDate || '', price: book.price || '', classificationNo: book.classificationNo || '', location: book.location || '', totalCopies: book.totalCopies.toString(), availableCopies: book.availableCopies.toString(), status: book.status, description: book.description || '', coverUrl: book.coverUrl || '', }); } catch (err) { setError(err instanceof Error ? err.message : 'Unknown error'); } finally { setLoading(false); } }; if (bookId) { fetchBook(); } }, [bookId]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setSaving(true); try { const updateData = { ...formData, authors: formData.authors.split(',').map(author => author.trim()).filter(Boolean), price: formData.price ? parseFloat(formData.price) : null, totalCopies: parseInt(formData.totalCopies), availableCopies: parseInt(formData.availableCopies), publishDate: formData.publishDate || null, publisher: formData.publisher || null, classificationNo: formData.classificationNo || null, location: formData.location || null, description: formData.description || null, coverUrl: formData.coverUrl || null, }; const response = await fetch(`/api/books/${bookId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(updateData), }); if (response.ok) { router.push(`/admin/books/${bookId}`); } else { const errorData = await response.json(); alert(`更新失败: ${errorData.error || 'Unknown error'}`); } } catch (error) { console.error('Update error:', error); alert('更新失败'); } finally { setSaving(false); } }; const handleChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; if (loading) { return (
加载中...
); } if (error) { return (
错误: {error}
); } return (
{/* Header */}

编辑图书

{/* Form */}