import React, { useState, useEffect, useRef, useCallback } from 'react'; import { useNavigate } from 'react-router-dom'; import { Search, RefreshCw, Loader2 } from 'lucide-react'; import { fetchWechatAccountList, transformWechatAccount } from '@/api/wechat-accounts'; import { useToast } from '@/components/ui/toast'; import { useWechatAccount } from '@/contexts/WechatAccountContext'; import PageHeader from '@/components/PageHeader'; import Layout from '@/components/Layout'; import '@/components/Layout.css'; interface WechatAccount { id: string; wechatId: string; wechatAccount: string; nickname: string; avatar: string; remainingAdds: number; todayAdded: number; status: "normal" | "abnormal"; friendCount: number; deviceName: string; lastActive: string; maxDailyAdds: number; deviceId: string; } export default function WechatAccounts() { const navigate = useNavigate(); const { toast } = useToast(); const { setCurrentAccount } = useWechatAccount(); 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 mounted = useRef(false); // 获取微信账号列表 const fetchAccounts = useCallback(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((item: any) => transformWechatAccount(item)); setAccounts(wechatAccounts); setTotalAccounts(response.data.total); } else { toast({ title: "获取微信账号失败", description: response?.message || "请稍后再试", variant: "destructive" }); setAccounts([]); setTotalAccounts(0); } } catch (error) { console.error("获取微信账号列表失败:", error); toast({ title: "获取微信账号失败", description: "请检查网络连接或稍后再试", variant: "destructive" }); setAccounts([]); setTotalAccounts(0); } finally { setIsLoading(false); } }, [accountsPerPage, toast]); // 初始化数据加载 useEffect(() => { if (!mounted.current) { mounted.current = true; fetchAccounts(currentPage, searchQuery); } }, []); // 处理页码和搜索变化 useEffect(() => { if (mounted.current) { fetchAccounts(currentPage, searchQuery); } }, [currentPage, searchQuery, fetchAccounts]); // 搜索处理 const handleSearch = () => { setCurrentPage(1); }; // 刷新处理 const handleRefresh = async () => { try { setIsRefreshing(true); // 重新获取微信账号列表数据 await fetchAccounts(currentPage, searchQuery); toast({ title: "刷新成功", description: "微信账号列表已更新" }); } catch (error) { console.error("刷新微信账号状态失败:", error); toast({ title: "刷新失败", description: "请检查网络连接或稍后再试", variant: "destructive" }); } finally { setIsRefreshing(false); } }; 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); navigate("/scenarios"); } catch (error) { console.error("好友转移失败:", error); toast({ title: "好友转移失败", description: "请稍后再试", variant: "destructive" }); } }; return ( } >
{/* 搜索和操作栏 */}
setSearchQuery(e.target.value)} onKeyPress={(e) => e.key === 'Enter' && handleSearch()} />
{/* 账号列表 */} {isLoading ? (
) : accounts.length === 0 ? (

暂无微信账号数据

) : (
{accounts.map((account) => (
{ // 使用Context存储数据,而不是URL参数 setCurrentAccount({ id: account.id, avatar: account.avatar, nickname: account.nickname, status: account.status, wechatId: account.wechatId, wechatAccount: account.wechatAccount, deviceName: account.deviceName, deviceId: account.deviceId, }); navigate(`/wechat-accounts/${account.id}`); }} >
{account.nickname}

{account.nickname}

{account.status === "normal" ? "正常" : "异常"}
微信号:{account.wechatAccount}
好友数量:{account.friendCount}
今日新增:+{account.todayAdded}
今日可添加: {account.remainingAdds}
{/* AlertCircle className="h-4 w-4 text-gray-400" */}
每日最多添加 {account.maxDailyAdds} 个好友
{account.todayAdded}/{account.maxDailyAdds}
所属设备:{account.deviceName || '未知设备'}
最后活跃:{account.lastActive}
))}
)} {/* 分页 */} {!isLoading && accounts.length > 0 && totalPages > 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 ( ); })}
)}
{/* 好友转移确认对话框 */} {isTransferDialogOpen && (

好友转移确认

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

)}
); }