"use client" import { useState, useEffect } from "react" import { ChevronLeft, Plus, Filter, Search, RefreshCw, MoreVertical, Clock, Edit, Trash2, Eye, Copy } 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 { api, ApiResponse } from "@/lib/api" import { showToast } from "@/lib/toast" import { DeviceSelectionDialog } from "../auto-like/components/device-selection-dialog" import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog" interface SyncTask { id: string name: string status: number // 修改为数字类型:1-运行中,0-暂停 deviceCount: number contentLib: string syncCount: number lastSyncTime: string createTime: string creator: string libraries?: string[] devices?: string[] } export default function MomentsSyncPage() { const router = useRouter() const [tasks, setTasks] = useState([]) const [isLoading, setIsLoading] = useState(true) const [searchQuery, setSearchQuery] = useState("") const [showDeleteAlert, setShowDeleteAlert] = useState(false) const [taskToDelete, setTaskToDelete] = useState(null) const [currentPage, setCurrentPage] = useState(1) const [pageSize, setPageSize] = useState(10) const [total, setTotal] = useState(0) const [deviceDialogOpen, setDeviceDialogOpen] = useState(false) const [selectedDevices, setSelectedDevices] = useState([]) // 获取任务列表 const fetchTasks = async () => { const loadingToast = showToast("正在加载任务列表...", "loading", true); setIsLoading(true) try { const response = await api.get(`/v1/workbench/list?type=2&page=${currentPage}&pageSize=${pageSize}`) if (response.code === 200 && response.data) { setTasks(response.data.list || []) setTotal(response.data.total || 0) } else { showToast(response.msg || "获取任务列表失败", "error") } } catch (error: any) { console.error("获取朋友圈同步任务列表失败:", error) showToast(error?.message || "请检查网络连接", "error") } finally { loadingToast.remove(); setIsLoading(false) } } // 组件加载时获取任务列表 useEffect(() => { fetchTasks() }, [currentPage, pageSize]) // 处理页码变化 const handlePageChange = (page: number) => { setCurrentPage(page) } // 处理每页条数变化 const handlePageSizeChange = (size: number) => { setPageSize(size) setCurrentPage(1) // 重置到第一页 } // 搜索任务 const handleSearch = () => { fetchTasks() } // 切换任务状态 const toggleTaskStatus = async (taskId: string, currentStatus: number) => { const loadingToast = showToast("正在更新任务状态...", "loading", true); try { const newStatus = currentStatus === 1 ? 0 : 1 const response = await api.post('/v1/workbench/update-status', { id: taskId, status: newStatus }) if (response.code === 200) { setTasks( tasks.map((task) => task.id === taskId ? { ...task, status: newStatus } : task ) ) loadingToast.remove(); showToast(`任务已${newStatus === 1 ? "启用" : "暂停"}`, "success") } else { loadingToast.remove(); showToast(response.msg || "操作失败", "error") } } catch (error: any) { console.error("更新任务状态失败:", error) loadingToast.remove(); showToast(error?.message || "更新任务状态失败", "error") } } // 确认删除 const confirmDelete = (taskId: string) => { setTaskToDelete(taskId) setShowDeleteAlert(true) } // 执行删除 const handleDelete = async () => { if (!taskToDelete) return const loadingToast = showToast("正在删除任务...", "loading", true); try { const response = await api.delete(`/v1/workbench/delete?id=${taskToDelete}`) if (response.code === 200) { setTasks(tasks.filter((task) => task.id !== taskToDelete)) loadingToast.remove(); showToast("删除成功", "success") } else { loadingToast.remove(); showToast(response.msg || "删除失败", "error") } } catch (error: any) { console.error("删除任务失败:", error) loadingToast.remove(); showToast(error?.message || "删除任务失败", "error") } finally { setTaskToDelete(null) setShowDeleteAlert(false) } } // 编辑任务 const handleEdit = (taskId: string) => { router.push(`/workspace/moments-sync/${taskId}/edit`) } // 查看任务详情 const handleView = (taskId: string) => { router.push(`/workspace/moments-sync/${taskId}`) } // 复制任务 const handleCopy = async (taskId: string) => { const loadingToast = showToast("正在复制任务...", "loading", true); try { const response = await api.post('/v1/workbench/copy', { id: taskId }) if (response.code === 200) { loadingToast.remove(); showToast("复制成功", "success") fetchTasks() // 重新获取列表 } else { loadingToast.remove(); showToast(response.msg || "复制失败", "error") } } catch (error: any) { console.error("复制任务失败:", error) loadingToast.remove(); showToast(error?.message || "复制任务失败", "error") } } // 处理设备选择 const handleDeviceSelect = (devices: number[]) => { setSelectedDevices(devices) } // 过滤任务 const filteredTasks = tasks.filter( (task) => task.name.toLowerCase().includes(searchQuery.toLowerCase()) ) return (

朋友圈同步

setSearchQuery(e.target.value)} onKeyDown={(e) => e.key === 'Enter' && handleSearch()} />
{isLoading ? (

加载中...

) : filteredTasks.length === 0 ? (

暂无数据

) : ( <>
{filteredTasks.map((task) => (

{task.name}

{task.status === 1 ? "进行中" : "已暂停"}
toggleTaskStatus(task.id, task.status)} /> handleView(task.id)}> 查看 handleEdit(task.id)}> 编辑 handleCopy(task.id)}> 复制 confirmDelete(task.id)}> 删除
推送设备:{task.devices?.length || 0} 个
内容库:{task.contentLib}
已同步:{task.syncCount} 条
创建人:{task.creator}
上次同步:{task.lastSyncTime}
创建时间:{task.createTime}
))}
{/* 分页组件 */}
第 {currentPage} 页 共 {Math.ceil(total / pageSize)} 页
)}
{/* 删除确认对话框 */} 确认删除 删除后,此任务将无法恢复。确定要删除吗? 取消 删除
) }