"use client" import { useState, useEffect } from "react" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { HelpCircle, MessageSquare, AlertCircle, RefreshCw } from "lucide-react" import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Alert, AlertDescription } from "@/components/ui/alert" import { ChevronsUpDown } from "lucide-react" import { Checkbox } from "@/components/ui/checkbox" import { fetchDeviceList } from "@/api/devices" import type { ServerDevice } from "@/types/device" interface FriendRequestSettingsProps { formData: any onChange: (data: any) => void onNext: () => void onPrev: () => void } // 招呼语模板 const greetingTemplates = [ "你好,请通过", "你好,了解XX,请通过", "你好,我是XX产品的客服请通过", "你好,感谢关注我们的产品", "你好,很高兴为您服务", ] // 备注类型选项 const remarkTypes = [ { value: "phone", label: "手机号" }, { value: "nickname", label: "昵称" }, { value: "source", label: "来源" }, ] export function FriendRequestSettings({ formData, onChange, onNext, onPrev }: FriendRequestSettingsProps) { const [isTemplateDialogOpen, setIsTemplateDialogOpen] = useState(false) const [hasWarnings, setHasWarnings] = useState(false) const [isDeviceSelectorOpen, setIsDeviceSelectorOpen] = useState(false) const [selectedDevices, setSelectedDevices] = useState(formData.selectedDevices || []) const [devices, setDevices] = useState([]) const [loadingDevices, setLoadingDevices] = useState(false) const [deviceError, setDeviceError] = useState(null) const [searchKeyword, setSearchKeyword] = useState("") // 获取场景标题 const getScenarioTitle = () => { switch (formData.scenario) { case "douyin": return "抖音直播" case "xiaohongshu": return "小红书" case "weixinqun": return "微信群" case "gongzhonghao": return "公众号" default: return formData.planName || "获客计划" } } // 加载设备列表 const loadDevices = async () => { try { setLoadingDevices(true) setDeviceError(null) const response = await fetchDeviceList(1, 100, searchKeyword) if (response.code === 200 && response.data?.list) { setDevices(response.data.list) } else { setDeviceError(response.msg || "获取设备列表失败") console.error("获取设备列表失败:", response.msg) } } catch (err) { console.error("获取设备列表失败:", err) setDeviceError("获取设备列表失败,请稍后重试") } finally { setLoadingDevices(false) } } // 初始化时加载设备列表 useEffect(() => { loadDevices() }, []) // 使用useEffect设置默认值 useEffect(() => { if (!formData.greeting) { onChange({ ...formData, greeting: "你好,请通过", remarkType: "phone", // 默认选择手机号 remarkFormat: `手机号+${getScenarioTitle()}`, // 默认备注格式 addFriendInterval: 1, }) } }, [formData, formData.greeting, onChange]) // 检查是否有未完成的必填项 useEffect(() => { const hasIncompleteFields = !formData.greeting?.trim() setHasWarnings(hasIncompleteFields) }, [formData]) const handleTemplateSelect = (template: string) => { onChange({ ...formData, greeting: template }) setIsTemplateDialogOpen(false) } const handleNext = () => { // 即使有警告也允许进入下一步,但会显示提示 onNext() } const toggleDeviceSelection = (device: ServerDevice) => { const isSelected = selectedDevices.some((d) => d.id === device.id) let newSelectedDevices if (isSelected) { newSelectedDevices = selectedDevices.filter((d) => d.id !== device.id) } else { newSelectedDevices = [...selectedDevices, device] } setSelectedDevices(newSelectedDevices) onChange({ ...formData, selectedDevices: newSelectedDevices }) } // 根据关键词搜索设备 const handleSearch = () => { loadDevices() } return (
{isDeviceSelectorOpen && (
setSearchKeyword(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSearch()} />
{loadingDevices ? (
) : deviceError ? (
{deviceError}
) : devices.length === 0 ? (
没有找到设备
) : (
{devices.map((device) => (
toggleDeviceSelection(device)} >
d.id === device.id)} onCheckedChange={() => toggleDeviceSelection(device)} /> {device.memo}
{device.alive === 1 ? "在线" : "离线"}
))}
)}
)}
{selectedDevices.length > 0 && (
{selectedDevices.map((device) => (
{device.memo}
))}
)}

设置添加好友时的备注格式

备注格式预览:

{formData.remarkType === "phone" && `138****1234+${getScenarioTitle()}`}

{formData.remarkType === "nickname" && `小红书用户2851+${getScenarioTitle()}`}

{formData.remarkType === "source" && `抖音直播+${getScenarioTitle()}`}

onChange({ ...formData, greeting: e.target.value })} placeholder="请输入招呼语" className="mt-2" />
onChange({ ...formData, addFriendInterval: Number(e.target.value) })} className="w-32" /> 分钟
onChange({ ...formData, addFriendTimeStart: e.target.value })} className="w-32" /> onChange({ ...formData, addFriendTimeEnd: e.target.value })} className="w-32" />
{hasWarnings && ( 您有未完成的设置项,建议完善后再进入下一步。 )}
招呼语模板
{greetingTemplates.map((template, index) => ( ))}
) }