Files
cunkebao_v3/SuperAdmin/components/projects/project-list.tsx

139 lines
4.1 KiB
TypeScript

"use client"
import { useState, useEffect } from "react"
import { apiRequest } from '@/lib/api-utils'
import { toast } from "sonner"
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table"
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
import { useRouter } from "next/navigation"
interface Project {
id: number
name: string
account: string
phone: string
status: number
createTime: string
}
export default function ProjectList() {
const [projects, setProjects] = useState<Project[]>([])
const [isLoading, setIsLoading] = useState(false)
const router = useRouter()
const fetchProjects = async () => {
try {
setIsLoading(true)
const params = new URLSearchParams()
params.append('page', '1')
params.append('limit', '10')
const result = await apiRequest(`/company/list?${params.toString()}`)
if (result.code === 200 && result.data) {
setProjects(result.data)
} else {
toast.error(result.msg || "获取项目列表失败")
}
} catch (error) {
console.error("获取项目列表失败:", error)
toast.error("网络错误,请稍后再试")
} finally {
setIsLoading(false)
}
}
const handleDelete = async (id: number) => {
try {
setIsLoading(true)
const result = await apiRequest('/company/delete', 'POST', { id })
if (result.code === 200) {
toast.success("删除成功")
fetchProjects()
} else {
toast.error(result.msg || "删除失败")
}
} catch (error) {
console.error("删除项目失败:", error)
toast.error("网络错误,请稍后再试")
} finally {
setIsLoading(false)
}
}
useEffect(() => {
fetchProjects()
}, [])
return (
<div className="space-y-4">
<div className="flex justify-between items-center">
<h2 className="text-2xl font-bold"></h2>
<Button onClick={() => router.push('/dashboard/projects/create')}>
</Button>
</div>
<div className="rounded-md border">
<Table>
<TableHeader>
<TableRow>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
<TableHead></TableHead>
</TableRow>
</TableHeader>
<TableBody>
{projects.map((project) => (
<TableRow key={project.id}>
<TableCell>{project.name}</TableCell>
<TableCell>{project.account}</TableCell>
<TableCell>{project.phone || '-'}</TableCell>
<TableCell>
<Badge variant={project.status === 1 ? "success" : "destructive"}>
{project.status === 1 ? "正常" : "禁用"}
</Badge>
</TableCell>
<TableCell>{project.createTime}</TableCell>
<TableCell>
<div className="space-x-2">
<Button
variant="outline"
size="sm"
onClick={() => router.push(`/dashboard/projects/${project.id}`)}
>
</Button>
<Button
variant="outline"
size="sm"
onClick={() => router.push(`/dashboard/projects/${project.id}/edit`)}
>
</Button>
<Button
variant="destructive"
size="sm"
onClick={() => handleDelete(project.id)}
>
</Button>
</div>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</div>
</div>
)
}