"use client" import { useState, useEffect } from "react" import Link from "next/link" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Plus, Search, MoreHorizontal, Edit, Eye, Trash, ChevronLeft, ChevronRight } from "lucide-react" import { toast } from "sonner" interface Project { id: number name: string status: number tenantId: number companyId: number memo: string | null userCount: number createTime: string } export default function ProjectsPage() { const [searchTerm, setSearchTerm] = useState("") const [projects, setProjects] = useState([]) const [isLoading, setIsLoading] = useState(true) const [currentPage, setCurrentPage] = useState(1) const [totalPages, setTotalPages] = useState(1) const [pageSize] = useState(10) // 获取项目列表 useEffect(() => { const fetchProjects = async () => { setIsLoading(true) try { const response = await fetch(`http://yishi.com/company/list?page=${currentPage}&limit=${pageSize}`) const data = await response.json() if (data.code === 200) { setProjects(data.data.list) setTotalPages(Math.ceil(data.data.total / pageSize)) } else { toast.error(data.msg || "获取项目列表失败") } } catch (error) { toast.error("获取项目列表失败") } finally { setIsLoading(false) } } fetchProjects() }, [currentPage, pageSize]) // 切换页码 const handlePageChange = (page: number) => { if (page >= 1 && page <= totalPages) { setCurrentPage(page) } } return (

项目列表

setSearchTerm(e.target.value)} />
项目名称 状态 用户数量 创建时间 操作 {isLoading ? ( 加载中... ) : projects.length > 0 ? ( projects.map((project) => ( {project.name} {project.status === 1 ? '启用' : '禁用'} {project.userCount} {project.createTime} 查看详情 编辑项目 删除项目 )) ) : ( 未找到项目 )}
{/* 分页控件 */} {!isLoading && projects.length > 0 && (
{Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( ))}
)}
) }