"use client" import { useState } from "react" import { ChevronLeft, MoreVertical, Copy, Pencil, Trash2, Phone, Mic, Clock, Settings } from "lucide-react" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer } from "recharts" import { useRouter } from "next/navigation" import { Badge } from "@/components/ui/badge" import { toast } from "@/components/ui/use-toast" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Switch } from "@/components/ui/switch" import { Label } from "@/components/ui/label" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell } from "@/components/ui/table" interface Task { id: string name: string status: "running" | "paused" | "completed" stats: { calls: number acquired: number added: number } lastUpdated: string trend: { date: string; calls: number }[] } interface CallRecord { id: string phoneNumber: string duration: string time: string status: "已添加" | "未添加" | "处理中" question: string } export default function PhoneAcquisitionPage() { const router = useRouter() const [tasks, setTasks] = useState([ { id: "1", name: "招商电话获客", status: "running", stats: { calls: 42, acquired: 38, added: 31, }, lastUpdated: "2024-03-18 15:30", trend: Array.from({ length: 7 }, (_, i) => ({ date: `3月${String(i + 12)}日`, calls: Math.floor(Math.random() * 10) + 5, })), }, ]) const [callRecords, setCallRecords] = useState([ { id: "call-1", phoneNumber: "138****1234", duration: "3分42秒", time: "2024-03-18 15:30", status: "已添加", question: "请问贵公司的产品有什么特点?", }, { id: "call-2", phoneNumber: "139****5678", duration: "5分18秒", time: "2024-03-18 14:15", status: "已添加", question: "你们的合作方式是怎样的?", }, { id: "call-3", phoneNumber: "137****9012", duration: "2分55秒", time: "2024-03-18 11:22", status: "已添加", question: "能详细介绍一下你们的服务吗?", }, { id: "call-4", phoneNumber: "135****3456", duration: "4分10秒", time: "2024-03-17 16:45", status: "已添加", question: "你们有什么优惠政策?", }, { id: "call-5", phoneNumber: "136****7890", duration: "1分30秒", time: "2024-03-17 10:20", status: "未添加", question: "未识别到有效问题", }, ]) const [isSettingsOpen, setIsSettingsOpen] = useState(false) const [autoAddEnabled, setAutoAddEnabled] = useState(true) const [speechToTextEnabled, setSpeechToTextEnabled] = useState(true) const [questionExtractionEnabled, setQuestionExtractionEnabled] = useState(true) const [isCallDetailOpen, setIsCallDetailOpen] = useState(false) const [selectedCall, setSelectedCall] = useState(null) const toggleTaskStatus = (taskId: string) => { setTasks( tasks.map((task) => { if (task.id === taskId) { const newStatus = task.status === "running" ? "paused" : "running" return { ...task, status: newStatus } } return task }), ) } const handleEditPlan = (taskId: string) => { router.push(`/scenarios/phone/edit/${taskId}`) } const handleCopyPlan = (taskId: string) => { const taskToCopy = tasks.find((task) => task.id === taskId) if (taskToCopy) { const newTask = { ...taskToCopy, id: `${Date.now()}`, name: `${taskToCopy.name} (副本)`, status: "paused" as const, } setTasks([...tasks, newTask]) toast({ title: "计划已复制", description: `已成功复制"${taskToCopy.name}"`, }) } } const handleDeletePlan = (taskId: string) => { const taskToDelete = tasks.find((t) => t.id === taskId) if (taskToDelete) { setTasks(tasks.filter((t) => t.id !== taskId)) toast({ title: "计划已删除", description: `已成功删除"${taskToDelete.name}"`, }) } } const handleViewCallDetail = (call: CallRecord) => { setSelectedCall(call) setIsCallDetailOpen(true) } // 计算通过率 const calculatePassRate = (acquired: number, added: number) => { if (acquired === 0) return 0 return Math.round((added / acquired) * 100) } return (

电话获客

{tasks.map((task) => { const { calls: callCount, acquired: acquiredCount, added: addedCount } = task.stats const passRate = calculatePassRate(acquiredCount, addedCount) return (

{task.name}

toggleTaskStatus(task.id)} > {task.status === "running" ? "进行中" : "已暂停"}
{ e.stopPropagation() handleEditPlan(task.id) }} className="cursor-pointer hover:bg-blue-50" > 编辑计划 { e.stopPropagation() handleCopyPlan(task.id) }} className="cursor-pointer hover:bg-blue-50" > 复制计划 { e.stopPropagation() handleDeletePlan(task.id) }} className="text-red-600 cursor-pointer hover:bg-red-50" > 删除计划
来电数
{callCount}
已获客
{acquiredCount}
已添加
{addedCount}
通过率
{passRate}%
全部来电 已添加 未添加
电话号码 通话时长 来电时间 状态 首句问题 {callRecords.map((record) => ( handleViewCallDetail(record)} > {record.phoneNumber} {record.duration} {record.time} {record.status} {record.question || "未识别到问题"} ))}
电话号码 通话时长 来电时间 状态 首句问题 {callRecords .filter((record) => record.status === "已添加") .map((record) => ( handleViewCallDetail(record)} > {record.phoneNumber} {record.duration} {record.time} {record.status} {record.question || "未识别到问题"} ))}
电话号码 通话时长 来电时间 状态 首句问题 {callRecords .filter((record) => record.status !== "已添加") .map((record) => ( handleViewCallDetail(record)} > {record.phoneNumber} {record.duration} {record.time} {record.status} {record.question || "未识别到问题"} ))}
) })}
{/* 设置对话框 */} 电话获客设置

来电后自动将客户添加为微信好友

自动将通话内容转换为文字记录

自动从通话中提取客户的首句问题

{/* 通话详情对话框 */} 通话详情 {selectedCall && (
{selectedCall.phoneNumber}
{selectedCall.status}

通话时长

{selectedCall.duration}

来电时间

{selectedCall.time}

首句问题

{selectedCall.question || "未识别到问题"}

通话记录

AI转写

客服:{" "} 您好,这里是XX公司客服,请问有什么可以帮到您?

客户: {selectedCall.question || "..."}

客服:{" "} 好的,关于这个问题,我们的产品确实有这方面的优势...

客户: 那你们的价格是怎么样的?

客服: 我们有多种套餐可以选择,基础版每月只需...

{selectedCall.status !== "已添加" && ( )}
)}
) }