"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import Link from "next/link"; import { ChevronRight } from "lucide-react"; import { fetchPostDetail, apiMe, apiUpdatePost, type Post, type User } from "@/lib/api"; import { canModerateBoard } from "@/lib/roles"; interface EditPageProps { params: Promise<{ id: string }>; } export default function EditPostPage({ params }: EditPageProps) { const router = useRouter(); const [post, setPost] = useState(null); const [user, setUser] = useState(null); const [title, setTitle] = useState(""); const [content, setContent] = useState(""); const [tags, setTags] = useState(""); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [checking, setChecking] = useState(true); const [id, setId] = useState(""); useEffect(() => { params.then((p) => setId(p.id)); }, [params]); useEffect(() => { if (!id) return; Promise.all([fetchPostDetail(id), apiMe()]) .then(([postData, meData]) => { setPost(postData.post); setTitle(postData.post.title); setContent(postData.post.content); setTags(postData.post.tags || ""); const u = meData.user; setUser(u || null); if ( !u || (u.id !== postData.post.user.id && !canModerateBoard(u, postData.post.board_id)) ) { router.push(`/post/${id}`); } }) .catch(() => router.push(`/post/${id}`)) .finally(() => setChecking(false)); }, [id, router]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!post) return; setLoading(true); setError(""); try { const res = await apiUpdatePost(String(post.id), { title, content, tags }); if (res.post) { router.push(`/post/${post.id}`); } else { setError(res.error || "更新失败"); } } finally { setLoading(false); } }; if (checking) { return (

正在加载帖子…

); } if (!post) return null; return (

编辑帖子

{error &&
{error}
}
setTitle(e.target.value)} required maxLength={256} className="field" />
setTags(e.target.value)} placeholder="Go, PostgreSQL, 架构" className="field" />