"use client"; import { useState } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Edit3, Trash2 } from 'lucide-react'; import { Account, StatsOverview } from '@/lib/types'; import { toast } from 'sonner'; import { PlatformSelector, OwnerSelector, StatusSelector } from '@/components/shared'; interface BatchOperationsProps { selectedCount: number; selectedAccounts: Account[]; stats: StatsOverview | null; onBatchUpdate: (payload: Partial>) => Promise; onBatchDelete: () => Promise; } export function BatchOperations({ selectedCount, selectedAccounts, stats, onBatchUpdate, onBatchDelete }: BatchOperationsProps) { const [updateDialog, setUpdateDialog] = useState(false); const [updateData, setUpdateData] = useState({ status: '', platform: '', ownerId: '', notes: '' }); const [loading, setLoading] = useState(false); // 计算选中账户的统计信息 const getSelectedStats = () => { const platforms = new Set(selectedAccounts.map(account => account.platform)); const owners = new Set(selectedAccounts.map(account => account.ownerId)); return { platformCount: platforms.size, ownerCount: owners.size, platforms: Array.from(platforms).slice(0, 3), // 只显示前3个 owners: Array.from(owners).slice(0, 3) // 只显示前3个 }; }; const selectedStats = getSelectedStats(); const handleBatchUpdate = async () => { const payload: Partial> = {}; if (updateData.status) payload.status = updateData.status; if (updateData.platform) payload.platform = updateData.platform; if (updateData.ownerId) payload.ownerId = updateData.ownerId; if (updateData.notes) payload.notes = updateData.notes; if (Object.keys(payload).length === 0) { toast.warning('请至少选择一个字段进行更新'); return; } setLoading(true); try { await onBatchUpdate(payload); setUpdateDialog(false); setUpdateData({ status: '', platform: '', ownerId: '', notes: '' }); } finally { setLoading(false); } }; const handleBatchDelete = async () => { setLoading(true); try { await onBatchDelete(); } finally { setLoading(false); } }; if (selectedCount === 0) { return null; } return ( <>
已选择 {selectedCount} 个账户
{selectedStats.ownerCount} 个用户 {selectedStats.ownerCount > 0 && ( ({selectedStats.owners.join(', ')} {selectedStats.ownerCount > 3 && ` 等${selectedStats.ownerCount}个`}) )} {selectedStats.platformCount} 个平台 {selectedStats.platformCount > 0 && ( ({selectedStats.platforms.join(', ')} {selectedStats.platformCount > 3 && ` 等${selectedStats.platformCount}个`}) )}
批量更新账户 将对 {selectedCount} 个账户进行批量更新操作
setUpdateData({...updateData, platform: value})} stats={stats} showNoneOption={true} placeholder="选择新平台(可选)" />
setUpdateData({...updateData, status: value})} stats={stats} showNoneOption={true} placeholder="选择新状态(可选)" />
setUpdateData({...updateData, ownerId: value})} stats={stats} showNoneOption={true} placeholder="选择所有者(可选)" />
setUpdateData({...updateData, notes: e.target.value})} />
); }