'use client' export const runtime = 'edge' import { useState, useEffect } from 'react' import { useParams, useRouter } from 'next/navigation' import { Button } from "@/registry/new-york/ui/button" import { useToast } from "@/registry/new-york/hooks/use-toast" import { NavigationItem } from '@/types/navigation' import { Icons } from '@/components/icons' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/registry/new-york/ui/table" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/registry/new-york/ui/dropdown-menu" import { Skeleton } from "@/registry/new-york/ui/skeleton" import { MoreHorizontal, Search, Inbox, FolderTree, Edit, Trash2 } from "lucide-react" export default function NavigationPage() { const params = useParams() const router = useRouter() const { toast } = useToast() const [items, setItems] = useState([]) const [isLoading, setIsLoading] = useState(true) const [searchQuery, setSearchQuery] = useState("") useEffect(() => { if (!params?.id) { router.push('/admin/navigation') return } fetchItems() }, [params?.id, router]) const fetchItems = async () => { try { setIsLoading(true) const response = await fetch(`/api/navigation/${params!.id}/items`) if (!response.ok) throw new Error('Failed to fetch') const data = await response.json() setItems(data) } catch (error) { toast({ title: "错误", description: "加载数据失败", variant: "destructive" }) } finally { setIsLoading(false) } } const handleItemsManage = (itemId: string) => { router.push(`/admin/navigation/${params!.id}/items/${itemId}`) } const handleCategoryManage = (itemId: string) => { router.push(`/admin/navigation/${params!.id}/categories/${itemId}`) } const handleEdit = async (item: NavigationItem) => { try { const response = await fetch(`/api/navigation/${params!.id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(item) }) if (!response.ok) throw new Error('Failed to update') await fetchItems() toast({ title: "成功", description: "更新成功" }) } catch (error) { toast({ title: "错误", description: "更新失败", variant: "destructive" }) } } const handleDelete = async (itemId: string) => { if (!confirm('确定要删除这个导航吗?')) return try { const response = await fetch(`/api/navigation/${params!.id}`, { method: 'DELETE', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ id: itemId }) }) if (!response.ok) throw new Error('Failed to delete') await fetchItems() toast({ title: "成功", description: "删除成功" }) } catch (error) { toast({ title: "错误", description: "删除失败", variant: "destructive" }) } } const filteredItems = items.filter(item => item.title.toLowerCase().includes(searchQuery.toLowerCase()) ) return (
ID 标题 子分类数 操作 {filteredItems.length === 0 ? ( {searchQuery ? (

没有找到匹配的导航

) : (

暂无导航数据

)}
) : ( filteredItems.map((item, index) => ( {index + 1} {item.title} {item.subCategories?.length || 0} handleItemsManage(item.id)} > 子项目管理 handleCategoryManage(item.id)} > 分类管理 handleEdit(item)} > 编辑导航 handleDelete(item.id)} className="text-destructive focus:text-destructive" > 删除导航 )) )}
) }