'use client'; import { useEffect, useState } from 'react'; import { useParams, useRouter } from 'next/navigation'; import Link from 'next/link'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Card } from '@/components/ui/card'; import { Skeleton } from '@/components/ui/skeleton'; import { API_BASE } from '@/lib/config'; export default function EditToolPage() { const params = useParams(); const router = useRouter(); const [form, setForm] = useState({ name: '', description: '', url: '', icon: '', affiliateLink: '', tags: '' }); const [loading, setLoading] = useState(true); const [submitting, setSubmitting] = useState(false); const [error, setError] = useState(''); useEffect(() => { loadTool(); }, [params.id]); function token() { return localStorage.getItem('adminToken'); } function authHeaders(): Record { const t = token(); return { 'Content-Type': 'application/json', ...(t ? { Authorization: `Bearer ${t}` } : {}) }; } async function loadTool() { try { const res = await fetch(`${API_BASE}/admin/tools/${params.id}`, { headers: authHeaders() }); if (res.ok) { const tool = await res.json(); setForm({ name: tool.name || '', description: tool.description || '', url: tool.url || '', icon: tool.icon || '', affiliateLink: tool.affiliateLink || '', tags: tool.tags || '', }); } else { setError('加载工具信息失败'); } } catch { setError('网络错误'); } setLoading(false); } async function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!form.name.trim() || !form.url.trim()) return; setSubmitting(true); setError(''); try { const res = await fetch(`${API_BASE}/admin/tools/${params.id}`, { method: 'PUT', headers: authHeaders(), body: JSON.stringify(form), }); if (res.ok) { router.push('/admin/tools'); } else { const data = await res.json().catch(() => ({})); setError(data.message || '保存失败'); setSubmitting(false); } } catch { setError('网络错误'); setSubmitting(false); } } if (loading) return (
); return ( <>

编辑工具

{error && (
{error}
)}
setForm(f => ({ ...f, name: e.target.value }))} placeholder="工具名称" required />