"use client" import { useState, useEffect } from "react" import { useParams, useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Skeleton } from "@/components/ui/skeleton" import { ArrowLeft, Edit, Phone, MessageSquare, FileText } from "lucide-react" import { Switch } from "@/components/ui/switch" import { toast } from "@/components/ui/use-toast" import { LineChart, Line, XAxis, YAxis, CartesianGrid, ResponsiveContainer } from "recharts" import { ChartContainer, ChartTooltip, ChartTooltipContent } from "@/components/ui/chart" interface ScenarioDetail { id: string name: string type: string status: "active" | "inactive" | "draft" createdAt: string description: string devices: { total: number online: number } stats: { total: number today: number conversion: number history: Array<{ date: string value: number }> } settings: { [key: string]: any } } export default function ScenarioDetailPage() { const params = useParams() const router = useRouter() const { channel, id } = params const [isLoading, setIsLoading] = useState(true) const [scenario, setScenario] = useState(null) useEffect(() => { // 模拟API请求 const fetchScenarioDetail = async () => { setIsLoading(true) await new Promise((resolve) => setTimeout(resolve, 1000)) // 生成过去30天的数据 const historyData = Array.from({ length: 30 }, (_, i) => { const date = new Date() date.setDate(date.getDate() - (29 - i)) return { date: date.toISOString().split("T")[0], value: Math.floor(Math.random() * 20) + 1, } }) const mockScenario: ScenarioDetail = { id: id as string, name: `${channel === "haibao" ? "海报" : channel === "douyin" ? "抖音" : channel === "phone" ? "电话" : "其他"}获客计划`, type: channel as string, status: "active", createdAt: "2023-05-15", description: "这是一个用于获取新客户的场景获客计划", devices: { total: 12, online: 8, }, stats: { total: 342, today: 18, conversion: 0.32, history: historyData, }, settings: { greeting: "你好,请通过我的好友请求", remarkType: "phone", addFriendInterval: 60, enableMessage: true, message: "您好,很高兴认识您!", delayTime: 5, }, } setScenario(mockScenario) setIsLoading(false) } fetchScenarioDetail() }, [id, channel]) const handleToggleStatus = () => { if (!scenario) return const newStatus = scenario.status === "active" ? "inactive" : "active" setScenario({ ...scenario, status: newStatus as "active" | "inactive" | "draft" }) toast({ title: `${newStatus === "active" ? "启用" : "停用"}成功`, description: `场景获客计划已${newStatus === "active" ? "启用" : "停用"}`, }) } const handleEdit = () => { router.push(`/scenarios/${channel}/edit/${id}`) } const getScenarioTypeIcon = () => { switch (channel) { case "phone": return case "order": return case "douyin": return default: return } } const getScenarioTypeName = () => { switch (channel) { case "haibao": return "海报获客" case "douyin": return "抖音获客" case "phone": return "电话获客" case "xiaohongshu": return "小红书获客" case "order": return "订单获客" case "weixinqun": return "微信群获客" case "gongzhonghao": return "公众号获客" default: return "其他获客" } } const getStatusBadge = (status: string) => { switch (status) { case "active": return 运行中 case "inactive": return 已停用 case "draft": return 草稿 default: return null } } if (isLoading) { return (
) } if (!scenario) { return (

场景详情

未找到场景获客计划

) } return (

{scenario.name}

{getScenarioTypeIcon()} {getScenarioTypeName()}
创建于 {scenario.createdAt} {getStatusBadge(scenario.status)}
获客数据

总获客

{scenario.stats.total}

今日

{scenario.stats.today}

转化率

{(scenario.stats.conversion * 100).toFixed(1)}%

获客趋势 过去30天的获客数量
} />
设备信息
总设备数 {scenario.devices.total}
在线设备 {scenario.devices.online}
设备在线率 {((scenario.devices.online / scenario.devices.total) * 100).toFixed(1)}%
场景设置
{scenario.settings.greeting && (
招呼语 {scenario.settings.greeting}
)} {scenario.settings.remarkType && (
备注类型 {scenario.settings.remarkType === "phone" ? "手机号" : scenario.settings.remarkType === "nickname" ? "昵称" : "来源"}
)} {scenario.settings.addFriendInterval && (
添加频率 {scenario.settings.addFriendInterval} 秒/次
)} {scenario.settings.enableMessage && ( <>
自动消息 已启用
消息内容 {scenario.settings.message}
发送延迟 {scenario.settings.delayTime} 分钟
)}
) }