"use client" import { useState, useEffect } from "react" import { ChevronLeft, Plus, Filter, Search, RefreshCw, MoreVertical, Clock, Edit, Trash2, Eye, Copy, ChevronDown, ChevronUp, Settings, Calendar, Users, ThumbsUp, } from "lucide-react" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import Link from "next/link" import { Badge } from "@/components/ui/badge" import { useRouter } from "next/navigation" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { Switch } from "@/components/ui/switch" import { Progress } from "@/components/ui/progress" import { api } from "@/lib/api" import { showToast } from "@/lib/toast" interface TaskConfig { id: number workbenchId: number interval: number maxLikes: number startTime: string endTime: string contentTypes: string[] devices: number[] targetGroups: string[] tagOperator: number createTime: string updateTime: string } interface Task { id: number name: string type: number status: number autoStart: number createTime: string updateTime: string config: TaskConfig } interface TaskListResponse { code: number msg: string data: { list: Task[] total: number } } interface ApiResponse { code: number msg: string } export default function AutoLikePage() { const router = useRouter() const [expandedTaskId, setExpandedTaskId] = useState(null) const [tasks, setTasks] = useState([]) const [loading, setLoading] = useState(false) const [searchName, setSearchName] = useState("") const [currentPage, setCurrentPage] = useState(1) const [total, setTotal] = useState(0) const pageSize = 10 const fetchTasks = async (page: number, name?: string) => { const loadingToast = showToast("正在加载任务列表...", "loading", true); try { setLoading(true) const queryParams = new URLSearchParams({ type: '1', page: page.toString(), limit: pageSize.toString(), }) if (name) { queryParams.append('name', name) } const response = await api.get(`/v1/workbench/list?${queryParams.toString()}`) if (response.code === 200) { setTasks(response.data.list) setTotal(response.data.total) } else { showToast(response.msg || "请稍后再试", "error") } } catch (error: any) { console.error("获取任务列表失败:", error) showToast(error?.message || "请检查网络连接", "error") } finally { loadingToast.remove(); setLoading(false) } } useEffect(() => { fetchTasks(currentPage, searchName) }, [currentPage]) const handleSearch = () => { setCurrentPage(1) fetchTasks(1, searchName) } const handleRefresh = () => { fetchTasks(currentPage, searchName) } const toggleExpand = (taskId: number) => { setExpandedTaskId(expandedTaskId === taskId ? null : taskId) } const handleDelete = async (taskId: number) => { const loadingToast = showToast("正在删除任务...", "loading", true); try { const response = await api.delete(`/v1/workbench/delete?id=${taskId}`) if (response.code === 200) { // 删除成功后刷新列表 loadingToast.remove(); fetchTasks(currentPage, searchName) showToast(response.msg || "已成功删除点赞任务", "success") } else { loadingToast.remove(); showToast(response.msg || "请稍后再试", "error") } } catch (error: any) { console.error("删除任务失败:", error) loadingToast.remove(); showToast(error?.message || "请检查网络连接", "error") } } const handleEdit = (taskId: number) => { router.push(`/workspace/auto-like/${taskId}/edit`) } const handleView = (taskId: number) => { router.push(`/workspace/auto-like/${taskId}`) } const handleCopy = async (taskId: number) => { const loadingToast = showToast("正在复制任务...", "loading", true); try { const response = await api.post('/v1/workbench/copy', { id: taskId }) if (response.code === 200) { // 复制成功后刷新列表 loadingToast.remove(); fetchTasks(currentPage, searchName) showToast(response.msg || "已成功复制点赞任务", "success") } else { loadingToast.remove(); showToast(response.msg || "请稍后再试", "error") } } catch (error: any) { console.error("复制任务失败:", error) loadingToast.remove(); showToast(error?.message || "请检查网络连接", "error") } } const toggleTaskStatus = async (taskId: number, currentStatus: number) => { const loadingToast = showToast("正在更新任务状态...", "loading", true); try { const response = await api.post('/v1/workbench/update-status', { id: taskId, status: currentStatus === 1 ? 2 : 1 }) if (response.code === 200) { // 更新本地状态 setTasks(tasks.map(task => task.id === taskId ? { ...task, status: currentStatus === 1 ? 2 : 1 } : task )) const newStatus = currentStatus === 1 ? 2 : 1 loadingToast.remove(); showToast(response.msg || `任务${newStatus === 1 ? "已启动" : "已暂停"}`, "success") } else { loadingToast.remove(); showToast(response.msg || "请稍后再试", "error") } } catch (error: any) { console.error("更新任务状态失败:", error) loadingToast.remove(); showToast(error?.message || "请检查网络连接", "error") } } return (

自动点赞

setSearchName(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSearch()} />
{tasks.map((task) => (

{task.name}

{task.status === 1 ? "进行中" : "已暂停"}
toggleTaskStatus(task.id, task.status)} /> handleView(task.id)}> 查看 handleEdit(task.id)}> 编辑 handleCopy(task.id)}> 复制 handleDelete(task.id)}> 删除
执行设备:{task.config.devices.length} 个
目标人群:{ task.config.targetGroups.length > 2 ? `${task.config.targetGroups[0]} 等${task.config.targetGroups.length - 1}个标签` : task.config.targetGroups.join(', ') }
点赞间隔:{task.config.interval} 秒
每日上限:{task.config.maxLikes} 次
更新时间:{task.updateTime}
创建时间:{task.createTime}
{expandedTaskId === task.id && (

基本设置

点赞间隔: {task.config.interval} 秒
每日最大点赞数: {task.config.maxLikes} 次
执行时间段: {task.config.startTime} - {task.config.endTime}

目标人群

{task.config.targetGroups.map((tag) => ( {tag} ))}
匹配方式:{task.config.tagOperator === 1 ? "满足所有标签" : "满足任一标签"}

点赞内容类型

{task.config.contentTypes.map((type) => ( {type === "text" ? "文字" : type === "image" ? "图片" : "视频"} ))}
)}
))}
{/* 分页 */} {total > pageSize && (
第 {currentPage} 页 共 {Math.ceil(total / pageSize)} 页
)}
) }