"use client" import { useState, useEffect } from "react" import { ChevronLeft, Filter, Search, RefreshCw, ArrowRightLeft, AlertCircle, Loader2 } from "lucide-react" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { useRouter } from "next/navigation" import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog" import { toast } from "@/components/ui/use-toast" import { Progress } from "@/components/ui/progress" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { fetchWechatAccountList, refreshWechatAccounts, transferWechatFriends, transformWechatAccount } from "@/api/wechat-accounts" import { WechatAccount } from "@/types/wechat-account" export default function WechatAccountsPage() { const router = useRouter() const [accounts, setAccounts] = useState([]) const [searchQuery, setSearchQuery] = useState("") const [currentPage, setCurrentPage] = useState(1) const [isTransferDialogOpen, setIsTransferDialogOpen] = useState(false) const [selectedAccount, setSelectedAccount] = useState(null) const [totalAccounts, setTotalAccounts] = useState(0) const [isLoading, setIsLoading] = useState(true) const [isRefreshing, setIsRefreshing] = useState(false) const accountsPerPage = 10 // 获取微信账号列表 const fetchAccounts = async (page: number = 1, keyword: string = "") => { try { setIsLoading(true); const response = await fetchWechatAccountList({ page, limit: accountsPerPage, keyword, sort: 'id', order: 'desc' }); if (response && response.code === 200 && response.data) { // 转换数据格式 const wechatAccounts = response.data.list.map(transformWechatAccount); setAccounts(wechatAccounts); setTotalAccounts(response.data.total); } else { toast({ title: "获取微信账号失败", description: response?.msg || "请稍后再试", variant: "destructive" }); // 如果API请求失败,设置空数组 setAccounts([]); setTotalAccounts(0); } } catch (error) { console.error("获取微信账号列表失败:", error); toast({ title: "获取微信账号失败", description: "请检查网络连接或稍后再试", variant: "destructive" }); setAccounts([]); setTotalAccounts(0); } finally { setIsLoading(false); } }; // 刷新微信账号状态 const handleRefresh = async () => { try { setIsRefreshing(true); const response = await refreshWechatAccounts(); if (response && response.code === 200) { toast({ title: "刷新成功", description: "微信账号状态已更新" }); // 重新获取数据 await fetchAccounts(currentPage, searchQuery); } else { toast({ title: "刷新失败", description: response?.msg || "请稍后再试", variant: "destructive" }); } } catch (error) { console.error("刷新微信账号状态失败:", error); toast({ title: "刷新失败", description: "请检查网络连接或稍后再试", variant: "destructive" }); } finally { setIsRefreshing(false); } }; // 初始加载和页码变化时获取数据 useEffect(() => { fetchAccounts(currentPage, searchQuery); }, [currentPage]); // 搜索时重置页码并获取数据 const handleSearch = () => { setCurrentPage(1); fetchAccounts(1, searchQuery); }; // 处理搜索框回车事件 const handleSearchKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { handleSearch(); } }; const filteredAccounts = accounts; const totalPages = Math.ceil(totalAccounts / accountsPerPage); const handleTransferFriends = (account: WechatAccount) => { setSelectedAccount(account) setIsTransferDialogOpen(true) } const handleConfirmTransfer = async () => { if (!selectedAccount) return try { // 实际实现好友转移功能,这里需要另一个账号作为目标 // 现在只是模拟效果 toast({ title: "好友转移计划已创建", description: "请在场景获客中查看详情", }) setIsTransferDialogOpen(false) router.push("/scenarios") } catch (error) { console.error("好友转移失败:", error); toast({ title: "好友转移失败", description: "请稍后再试", variant: "destructive" }); } } return (

微信号

setSearchQuery(e.target.value)} onKeyDown={handleSearchKeyDown} />
{isLoading ? (
) : accounts.length === 0 ? (

暂无微信账号数据

) : (
{accounts.map((account) => ( router.push(`/wechat-accounts/${account.id}`)} >
{account.nickname[0]}

{account.nickname}

{account.status === "normal" ? "正常" : "异常"}
微信号:{account.wechatId}
好友数量:{account.friendCount}
今日新增:+{account.todayAdded}
今日可添加: {account.remainingAdds}

每日最多添加 {account.maxDailyAdds} 个好友

{account.todayAdded}/{account.maxDailyAdds}
所属设备:{account.deviceName || '未知设备'}
最后活跃:{account.lastActive}
))}
)} {!isLoading && accounts.length > 0 && totalPages > 1 && (
{ e.preventDefault() if (currentPage > 1) { setCurrentPage((prev) => prev - 1) } }} /> {Array.from({ length: Math.min(totalPages, 5) }, (_, i) => { // 显示当前页附近的页码 let pageToShow = i + 1; if (currentPage > 3 && totalPages > 5) { pageToShow = Math.min(currentPage - 2 + i, totalPages); if (pageToShow > totalPages - 4) { pageToShow = totalPages - 4 + i; } } return ( { e.preventDefault() setCurrentPage(pageToShow) }} > {pageToShow} ); })} { e.preventDefault() if (currentPage < totalPages) { setCurrentPage((prev) => prev + 1) } }} />
)}
好友转移确认

确认要将 {selectedAccount?.nickname} 的 {selectedAccount?.friendCount}{" "} 个好友转移到场景获客吗?系统将自动创建一个获客计划。

) }