"use client" import type React from "react" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Alert, AlertDescription } from "@/components/ui/alert" import { AlertCircle, Info, Plus, Minus, User, Users, X, Search, Loader2 } from "lucide-react" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group" import { Badge } from "@/components/ui/badge" import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { ScrollArea } from "@/components/ui/scroll-area" import { Checkbox } from "@/components/ui/checkbox" import { useMobile } from "@/hooks/use-mobile" interface WechatAccount { id: string nickname: string wechatId: string avatar: string tags: string[] } // 模拟从"我的"页面获取微信账号列表 const mockWechatAccounts: WechatAccount[] = [ { id: "account-1", nickname: "微信号1", wechatId: "wxid_abc123", avatar: "/placeholder.svg?height=40&width=40&text=1", tags: ["主要账号", "活跃"], }, { id: "account-2", nickname: "微信号2", wechatId: "wxid_def456", avatar: "/placeholder.svg?height=40&width=40&text=2", tags: ["主要账号", "业务"], }, { id: "account-3", nickname: "微信号3", wechatId: "wxid_ghi789", avatar: "/placeholder.svg?height=40&width=40&text=3", tags: ["备用账号"], }, { id: "account-4", nickname: "微信号4", wechatId: "wxid_jkl012", avatar: "/placeholder.svg?height=40&width=40&text=4", tags: ["新账号"], }, { id: "account-5", nickname: "微信号5", wechatId: "wxid_mno345", avatar: "/placeholder.svg?height=40&width=40&text=5", tags: ["测试账号"], }, ] interface GroupSettingsProps { onNextStep?: () => void // 修改为可选参数 initialValues?: { name: string fixedWechatIds: string[] groupingOption: "all" | "fixed" fixedGroupCount: number } onValuesChange: (values: { name: string fixedWechatIds: string[] groupingOption: "all" | "fixed" fixedGroupCount: number }) => void } export function GroupSettings({ onNextStep, initialValues, onValuesChange }: GroupSettingsProps) { const isMobile = useMobile() const [name, setName] = useState(initialValues?.name || "新建群计划") const [fixedWechatIds, setFixedWechatIds] = useState(initialValues?.fixedWechatIds || []) const [newWechatId, setNewWechatId] = useState("") const [groupingOption, setGroupingOption] = useState<"all" | "fixed">(initialValues?.groupingOption || "all") const [fixedGroupCount, setFixedGroupCount] = useState(initialValues?.fixedGroupCount || 5) const [error, setError] = useState(null) const [warning, setWarning] = useState(null) const [friendSelectorOpen, setFriendSelectorOpen] = useState(false) const [searchQuery, setSearchQuery] = useState("") const [wechatAccounts, setWechatAccounts] = useState([]) const [loading, setLoading] = useState(true) const [selectedFriends, setSelectedFriends] = useState([]) const [autoAddingAccounts, setAutoAddingAccounts] = useState(false) // 微信群人数固定为38人 const GROUP_SIZE = 38 // 系统建议的最大群组数 const RECOMMENDED_MAX_GROUPS = 20 // 最多可选择的微信号数量 const MAX_WECHAT_IDS = 5 // 组件挂载时获取微信账号并自动选择前三个 useEffect(() => { const fetchWechatAccounts = async () => { setLoading(true) try { // 模拟API调用延迟 await new Promise((resolve) => setTimeout(resolve, 1000)) // 实际项目中应该从API获取微信账号列表 // const response = await fetch('/api/wechat-accounts'); // const data = await response.json(); // setWechatAccounts(data); // 使用模拟数据 setWechatAccounts(mockWechatAccounts) // 自动选择前三个微信账号 const defaultAccounts = mockWechatAccounts.slice(0, 3) const defaultWechatIds = defaultAccounts.map((account) => account.wechatId) // 如果没有初始值或初始值为空,则使用默认选择 if (!initialValues?.fixedWechatIds || initialValues.fixedWechatIds.length === 0) { setFixedWechatIds(defaultWechatIds) } } catch (error) { console.error("获取微信账号失败:", error) setError("获取微信账号失败,请稍后重试") } finally { setLoading(false) } } fetchWechatAccounts() }, [initialValues?.fixedWechatIds]) // 当值变化时,通知父组件 useEffect(() => { const timer = setTimeout(() => { onValuesChange({ name, fixedWechatIds, groupingOption, fixedGroupCount, }) }, 300) return () => clearTimeout(timer) }, [name, fixedWechatIds, groupingOption, fixedGroupCount, onValuesChange]) // 验证设置 useEffect(() => { validateSettings() }, [name, fixedWechatIds, groupingOption, fixedGroupCount]) // 模拟自动添加缺失的微信账号 useEffect(() => { // 检查是否需要自动添加微信账号 const checkAndAddMissingAccounts = async () => { // 获取默认应该选择的前三个微信账号ID const defaultAccountIds = mockWechatAccounts.slice(0, 3).map((acc) => acc.wechatId) // 检查是否有缺失的账号 const missingAccountIds = defaultAccountIds.filter((id) => !fixedWechatIds.includes(id)) if (missingAccountIds.length > 0) { setAutoAddingAccounts(true) setWarning(`正在自动添加 ${missingAccountIds.length} 个缺失的微信账号...`) // 模拟添加过程 await new Promise((resolve) => setTimeout(resolve, 2000)) // 添加缺失的账号 setFixedWechatIds((prev) => [...prev, ...missingAccountIds]) setWarning(null) setAutoAddingAccounts(false) } } if (!loading && fixedWechatIds.length < 3) { checkAndAddMissingAccounts() } }, [loading, fixedWechatIds]) const validateSettings = () => { setError(null) setWarning(null) if (!name.trim()) { setError("计划名称不能为空") return false } if (fixedWechatIds.length === 0) { setError("请至少添加一个固定微信号") return false } if (groupingOption === "fixed") { if (fixedGroupCount <= 0) { setError("群组数必须大于0") return false } if (fixedGroupCount > RECOMMENDED_MAX_GROUPS) { setWarning(`创建${fixedGroupCount}个群可能会消耗较多资源,建议减少群组数量`) } } return true } const handleNext = () => { if (validateSettings() && onNextStep) { onNextStep() } } const adjustGroupCount = (delta: number) => { setFixedGroupCount((prev) => { const newValue = Math.max(1, prev + delta) return newValue }) } const handleNameChange = (e: React.ChangeEvent) => { setName(e.target.value) } const handleNewWechatIdChange = (e: React.ChangeEvent) => { setNewWechatId(e.target.value) } const handleGroupCountChange = (e: React.ChangeEvent) => { const value = Number.parseInt(e.target.value) || 0 setFixedGroupCount(value) } const handleGroupingOptionChange = (value: string) => { setGroupingOption(value as "all" | "fixed") } const addWechatId = () => { if (!newWechatId.trim()) return if (fixedWechatIds.includes(newWechatId.trim())) { setError("该微信号已添加") return } if (fixedWechatIds.length >= MAX_WECHAT_IDS) { setError(`最多只能添加${MAX_WECHAT_IDS}个微信号`) return } setFixedWechatIds((prev) => [...prev, newWechatId.trim()]) setNewWechatId("") setError(null) } const removeWechatId = (id: string) => { setFixedWechatIds((prev) => prev.filter((wid) => wid !== id)) } const openFriendSelector = () => { if (fixedWechatIds.length >= MAX_WECHAT_IDS) { setError(`最多只能添加${MAX_WECHAT_IDS}个微信号`) return } setFriendSelectorOpen(true) } const handleFriendSelection = () => { const newIds = selectedFriends.map((f) => f.wechatId).filter((id) => !fixedWechatIds.includes(id)) const combinedIds = [...fixedWechatIds, ...newIds] if (combinedIds.length > MAX_WECHAT_IDS) { setError(`最多只能添加${MAX_WECHAT_IDS}个微信号,已自动截取前${MAX_WECHAT_IDS}个`) setFixedWechatIds(combinedIds.slice(0, MAX_WECHAT_IDS)) } else { setFixedWechatIds(combinedIds) } setFriendSelectorOpen(false) setSelectedFriends([]) } const toggleFriendSelection = (friend: WechatAccount) => { setSelectedFriends((prev) => { const isSelected = prev.some((f) => f.id === friend.id) if (isSelected) { return prev.filter((f) => f.id !== friend.id) } else { return [...prev, friend] } }) } const filteredAccounts = wechatAccounts.filter( (account) => account.nickname.toLowerCase().includes(searchQuery.toLowerCase()) || account.wechatId.toLowerCase().includes(searchQuery.toLowerCase()), ) // 计算总人数 const totalMembers = groupingOption === "fixed" ? fixedGroupCount * GROUP_SIZE : "根据好友总数自动计算" return (
{loading ? (
正在加载微信账号...
) : ( <>
{fixedWechatIds.map((id) => { const account = wechatAccounts.find((acc) => acc.wechatId === id) return ( {account ? account.nickname : id} ) })}
{ if (e.key === "Enter") { e.preventDefault() addWechatId() } }} />
已添加 {fixedWechatIds.length}/{MAX_WECHAT_IDS} 个微信号
)}

系统将根据好友总数自动计算需要创建的群数量

手动指定需要创建的群数量

{groupingOption === "fixed" && (
)}
群配置信息
每个群人数: {GROUP_SIZE} 人
预计总人数: {totalMembers}
{autoAddingAccounts && ( 正在自动添加默认微信号,请稍候... )} {error && ( {error} )} {warning && !autoAddingAccounts && ( {warning} )}
选择微信账号
setSearchQuery(e.target.value)} className="pl-9" />
{loading ? (
加载中...
) : filteredAccounts.length === 0 ? (
未找到匹配的微信账号
) : ( filteredAccounts.map((account) => (
toggleFriendSelection(account)} > f.id === account.id)} onCheckedChange={() => toggleFriendSelection(account)} /> {account.nickname[0]}
{account.nickname}
{account.wechatId}
{account.tags.map((tag) => ( {tag} ))}
)) )}
) }