"use client" import { useState, useEffect } from "react" import type React from "react" import { TrendingUp, Users, ChevronLeft, Bot, Sparkles, Plus, Phone } from "lucide-react" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { useRouter } from "next/navigation" import { Skeleton } from "@/components/ui/skeleton" import { fetchScenes, transformSceneItem } from "@/api/scenarios" interface Channel { id: string name: string icon: string stats: { daily: number growth: number } link?: string plans?: Plan[] } interface Plan { id: string name: string isNew?: boolean status: "active" | "paused" | "completed" acquisitionCount: number } // AI场景列表(服务端暂未提供) const aiScenarios = [ { id: "ai-friend", name: "AI智能加友", icon: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-azCH8EgGfidWXOqiM2D1jLH0VFRUtW.png", description: "智能分析目标用户画像,自动筛选优质客户", stats: { daily: 245, growth: 18.5, }, link: "/scenarios/ai-friend", plans: [ { id: "ai-plan-1", name: "AI智能筛选计划", isNew: true, status: "active", acquisitionCount: 78, }, ], }, { id: "ai-group", name: "AI群引流", icon: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-azCH8EgGfidWXOqiM2D1jLH0VFRUtW.png", description: "智能群聊互动,提高群活跃度和转化率", stats: { daily: 178, growth: 15.2, }, link: "/scenarios/ai-group", plans: [ { id: "ai-plan-2", name: "AI群聊互动计划", status: "active", acquisitionCount: 56, }, ], }, { id: "ai-conversion", name: "AI场景转化", icon: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-m4ENUaZon82EPFHod2dP1dajlrRdVG.png", description: "多场景智能营销,提升获客转化效果", stats: { daily: 134, growth: 12.8, }, link: "/scenarios/ai-conversion", plans: [ { id: "ai-plan-3", name: "AI多场景营销", isNew: true, status: "active", acquisitionCount: 43, }, ], }, ] export default function ScenariosPage() { const router = useRouter() const [channels, setChannels] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) useEffect(() => { const loadScenes = async () => { try { setLoading(true) const response = await fetchScenes({ limit: 50 }) if (response.code === 200 && response.data?.list) { // 转换场景数据为前端展示格式 const transformedScenes = response.data.list.map((scene) => { const transformedScene = transformSceneItem(scene) // 添加link属性(用于导航) return { ...transformedScene, link: `/scenarios/${scene.id}` } }) setChannels(transformedScenes) } else { setError(response.msg || "获取场景列表失败") } } catch (err) { console.error("Failed to fetch scenes:", err) setError("获取场景列表失败") } finally { setLoading(false) } } loadScenes() }, []) const handleChannelClick = (channelId: string, event: React.MouseEvent) => { router.push(`/scenarios/${channelId}`) } const getStatusColor = (status: string) => { switch (status) { case "active": return "bg-green-100 text-green-700" case "paused": return "bg-amber-100 text-amber-700" case "completed": return "bg-blue-100 text-blue-700" default: return "bg-gray-100 text-gray-700" } } const getStatusText = (status: string) => { switch (status) { case "active": return "执行中" case "paused": return "已暂停" case "completed": return "已完成" default: return "未知状态" } } // 展示场景骨架屏 const renderSkeletons = () => { return Array(8) .fill(0) .map((_, index) => (
)) } return (

场景获客

{/* 错误提示 */} {error && (

{error}

)} {/* Traditional channels */}
{loading ? ( renderSkeletons() ) : ( channels.map((channel) => (
router.push(channel.link || "")} >
{channel.name} { // 图片加载失败时,使用默认图标 const target = e.target as HTMLImageElement target.src = "/assets/icons/poster-icon.svg" }} />

{channel.name}

今日: {channel.stats.daily}
{channel.stats.growth > 0 ? "+" : ""}{channel.stats.growth}%
)) )}
{/* AI scenarios */}

AI智能获客

Beta
{aiScenarios.map((scenario) => (
router.push(scenario.link || "")} >

{scenario.name}

{scenario.description}

今日: {scenario.stats.daily}
+{scenario.stats.growth}%
))}
) }