'use client'; import { useEffect, useState } from 'react'; import { useRouter, useParams } from 'next/navigation'; import { API_BASE } from '@/lib/config'; import { Skeleton } from '@/components/ui/skeleton'; import { toast } from 'sonner'; export default function EditPractice() { const router = useRouter(); const params = useParams(); const [form, setForm] = useState({ title: '', description: '', difficulty: 'BEGINNER', category: '', sortOrder: 0, isActive: true }); const [loading, setLoading] = useState(true); useEffect(() => { load(); }, []); async function load() { try { const token = localStorage.getItem('adminToken'); const res = await fetch(`${API_BASE}/admin/practices/${params.id}`, { headers: { Authorization: `Bearer ${token}` }, }); if (res.ok) { const data = await res.json(); setForm({ title: data.title, description: data.description || '', difficulty: data.difficulty || 'BEGINNER', category: data.category || '', sortOrder: data.sortOrder || 0, isActive: data.isActive ?? true }); } } catch {} setLoading(false); } async function submit(e: React.FormEvent) { e.preventDefault(); try { const token = localStorage.getItem('adminToken'); const res = await fetch(`${API_BASE}/admin/practices/${params.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` }, body: JSON.stringify(form), }); if (res.ok) { toast.success('更新成功'); router.push('/admin/practices'); } else { const err = await res.json(); toast.error(err.message || '更新失败'); } } catch { toast.error('网络错误'); } } if (loading) return
; return (

编辑练习

setForm({ ...form, title: e.target.value })} />