"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, DropdownMenuSeparator, } from "@/components/ui/dropdown-menu" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Search, MoreHorizontal, Eye, UserPlus, Filter, ChevronLeft, ChevronRight } from "lucide-react" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Badge } from "@/components/ui/badge" import { getTrafficPoolList } from "@/lib/traffic-pool-api" import { Customer } from "@/lib/traffic-pool-api" // Sample customer data const customersData = [ { id: "1", name: "张三", avatar: "/placeholder.svg?height=40&width=40", wechatId: "zhangsan123", gender: "男", region: "北京", source: "微信搜索", tags: ["潜在客户", "高消费"], projectName: "电商平台项目", addedDate: "2023-06-10", }, { id: "2", name: "李四", avatar: "/placeholder.svg?height=40&width=40", wechatId: "lisi456", gender: "男", region: "上海", source: "朋友推荐", tags: ["活跃用户"], projectName: "社交媒体营销", addedDate: "2023-06-12", }, { id: "3", name: "王五", avatar: "/placeholder.svg?height=40&width=40", wechatId: "wangwu789", gender: "男", region: "广州", source: "广告点击", tags: ["新用户"], projectName: "企业官网推广", addedDate: "2023-06-15", }, { id: "4", name: "赵六", avatar: "/placeholder.svg?height=40&width=40", wechatId: "zhaoliu321", gender: "男", region: "深圳", source: "线下活动", tags: ["高消费", "忠诚客户"], projectName: "教育平台项目", addedDate: "2023-06-18", }, { id: "5", name: "钱七", avatar: "/placeholder.svg?height=40&width=40", wechatId: "qianqi654", gender: "女", region: "成都", source: "微信群", tags: ["潜在客户"], projectName: "金融服务推广", addedDate: "2023-06-20", }, { id: "6", name: "孙八", avatar: "/placeholder.svg?height=40&width=40", wechatId: "sunba987", gender: "女", region: "武汉", source: "微信搜索", tags: ["活跃用户", "高消费"], projectName: "电商平台项目", addedDate: "2023-06-22", }, { id: "7", name: "周九", avatar: "/placeholder.svg?height=40&width=40", wechatId: "zhoujiu135", gender: "女", region: "杭州", source: "朋友推荐", tags: ["新用户"], projectName: "社交媒体营销", addedDate: "2023-06-25", }, ] export default function CustomersPage() { const [searchTerm, setSearchTerm] = useState("") const [selectedRegion, setSelectedRegion] = useState("") const [selectedGender, setSelectedGender] = useState("") const [selectedSource, setSelectedSource] = useState("") const [selectedProject, setSelectedProject] = useState("") // 客户列表状态 const [customers, setCustomers] = useState([]) const [isLoading, setIsLoading] = useState(true) const [error, setError] = useState(null) // 分页状态 const [currentPage, setCurrentPage] = useState(1) const [totalPages, setTotalPages] = useState(1) const [totalItems, setTotalItems] = useState(0) const [pageSize, setPageSize] = useState(10) const [jumpToPage, setJumpToPage] = useState("") // 获取客户列表数据 useEffect(() => { const fetchCustomers = async () => { setIsLoading(true); try { const response = await getTrafficPoolList(currentPage, pageSize, searchTerm); if (response.code === 200 && response.data) { setCustomers(response.data.list); setTotalItems(response.data.total); setTotalPages(Math.ceil(response.data.total / pageSize)); setError(null); } else { setError(response.msg || "获取客户列表失败"); setCustomers([]); } } catch (err: any) { setError(err.message || "获取客户列表失败"); setCustomers([]); } finally { setIsLoading(false); } }; fetchCustomers(); }, [currentPage, pageSize, searchTerm]); // 切换页码 const goToPage = (page: number) => { if (page >= 1 && page <= totalPages) { setCurrentPage(page); } }; // 处理页码跳转 const handleJumpToPage = () => { const page = parseInt(jumpToPage); if (!isNaN(page) && page >= 1 && page <= totalPages) { setCurrentPage(page); setJumpToPage(""); } }; // 处理每页显示条数变化 const handlePageSizeChange = (size: string) => { const newSize = parseInt(size); setPageSize(newSize); setCurrentPage(1); // 重置为第一页 }; // Filter customers based on search and filters (兼容示例数据) const filteredCustomers = customersData.filter((customer) => { const matchesSearch = customer.name.toLowerCase().includes(searchTerm.toLowerCase()) || customer.wechatId.toLowerCase().includes(searchTerm.toLowerCase()) const matchesRegion = selectedRegion ? customer.region === selectedRegion : true const matchesGender = selectedGender ? customer.gender === selectedGender : true const matchesSource = selectedSource ? customer.source === selectedSource : true const matchesProject = selectedProject ? customer.projectName === selectedProject : true return matchesSearch && matchesRegion && matchesGender && matchesSource && matchesProject }) // Get unique values for filters const regions = [...new Set(customersData.map((c) => c.region))] const sources = [...new Set(customersData.map((c) => c.source))] const projects = [...new Set(customersData.map((c) => c.projectName))] return (

客户池

setSearchTerm(e.target.value)} />

地区

性别

来源

所属项目

客户昵称 微信ID 性别 地区 来源 公司名称 添加时间 操作 {isLoading ? ( 正在加载... ) : error ? ( {error} ) : customers.length > 0 ? ( customers.map((customer) => (
{ // 图片加载失败时使用默认图片 const target = e.target as HTMLImageElement; target.src = "/placeholder.svg?height=40&width=40"; }} /> {(customer.nickname || "未知").slice(0, 2)}
{customer.nickname || "未知"}
{customer.gender}
{customer.wechatId} {customer.gender} {customer.region} {customer.source} {customer.projectName} {customer.addTime} 查看详情 分发客户
)) ) : ( 未找到客户 )}
{/* 分页控件 */} {!isLoading && !error && customers.length > 0 && (
共 {totalItems} 条记录,当前第 {currentPage}/{totalPages} 页
每页显示:
{/* 数字分页按钮 */} {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => { // 显示当前页码前后2页,以及第一页和最后一页 const shouldShow = page === 1 || page === totalPages || (page >= currentPage - 2 && page <= currentPage + 2); if (!shouldShow) { // 显示省略号 if (page === currentPage - 3 || page === currentPage + 3) { return ( ... ); } return null; } return ( ); })} {/* 页码跳转 */}
跳转到 setJumpToPage(e.target.value)} onKeyDown={(e) => e.key === "Enter" && handleJumpToPage()} className="h-8 w-16 text-center" min={1} max={totalPages} />
)}
) }