"use client"; import { useState, useEffect } from "react"; import { useRouter, useParams } from "next/navigation"; import type { Post, Category, Tag } from "@/lib/store"; export default function EditPostPage() { const router = useRouter(); const params = useParams(); const id = params.id as string; const [post, setPost] = useState(null); const [categories, setCategories] = useState([]); const [allTags, setAllTags] = useState([]); const [loading, setLoading] = useState(true); const [form, setForm] = useState({ title: "", slug: "", excerpt: "", content: "", category: "", tags: [] as string[], readingTime: 5, featured: false, status: "draft" as "draft" | "published", date: "", }); useEffect(() => { Promise.all([ fetch(`/api/posts/${id}`).then((r) => r.json()), fetch("/api/categories").then((r) => r.json()), fetch("/api/tags").then((r) => r.json()), ]).then(([p, c, t]) => { setPost(p); setCategories(c); setAllTags(t); setForm({ title: p.title, slug: p.slug, excerpt: p.excerpt, content: p.content, category: p.category, tags: p.tags, readingTime: p.readingTime, featured: p.featured, status: p.status, date: p.date, }); setLoading(false); }); }, [id]); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); const res = await fetch(`/api/posts/${id}`, { method: "PUT", headers: { "Content-Type": "application/json" }, body: JSON.stringify(form), }); if (res.ok) router.push("/admin/posts"); } function toggleTag(tagName: string) { setForm((prev) => ({ ...prev, tags: prev.tags.includes(tagName) ? prev.tags.filter((t) => t !== tagName) : [...prev.tags, tagName], })); } if (loading) return
加载中...
; if (!post) return
文章未找到
; return (

编辑文章

setForm({ ...form, title: e.target.value })} className="w-full px-4 py-3 rounded-xl border border-warm-gray/20 bg-cream font-display text-lg text-ink focus:outline-none focus:border-terracotta/40 transition-colors" required />
setForm({ ...form, slug: e.target.value })} className="w-full px-4 py-2.5 rounded-xl border border-warm-gray/20 bg-cream font-sans text-sm text-ink focus:outline-none focus:border-terracotta/40 transition-colors" />
setForm({ ...form, date: e.target.value })} className="w-full px-4 py-2.5 rounded-xl border border-warm-gray/20 bg-cream font-sans text-sm text-ink focus:outline-none focus:border-terracotta/40 transition-colors" />