From 53621e41e79f25d317fff981146039df5fab2306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=AC=94=E8=AE=B0=E6=9C=AC=E9=87=8C=E7=9A=84=E6=B0=B8?= =?UTF-8?q?=E5=B9=B3?= Date: Tue, 8 Jul 2025 14:32:01 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9C=AC=E6=AC=A1=E6=8F=90=E4=BA=A4?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=86=85=E5=AE=B9=E5=A6=82=E4=B8=8B=20?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E8=BF=81=E7=A7=BB=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/workspace/auto-like/AutoLike.tsx | 177 +++++++----------- .../workspace/auto-like/AutoLikeDetail.tsx | 14 +- 2 files changed, 74 insertions(+), 117 deletions(-) diff --git a/nkebao/src/pages/workspace/auto-like/AutoLike.tsx b/nkebao/src/pages/workspace/auto-like/AutoLike.tsx index 81b4f650..2db1b551 100644 --- a/nkebao/src/pages/workspace/auto-like/AutoLike.tsx +++ b/nkebao/src/pages/workspace/auto-like/AutoLike.tsx @@ -1,7 +1,5 @@ import React, { useState } from "react"; import { - ChevronDown, - ChevronUp, MoreVertical, Eye, Edit, @@ -10,10 +8,8 @@ import { Plus, Search, RefreshCw, - Settings, - Calendar, - Users, ThumbsUp, + ChevronDown, } from "lucide-react"; import { Card } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; @@ -22,7 +18,7 @@ import { Badge } from "@/components/ui/badge"; import { useNavigate } from "react-router-dom"; import { Switch } from "@/components/ui/switch"; import { useToast } from "@/components/ui/toast"; -import { Progress } from "@/components/ui/progress"; + import { fetchAutoLikeTasks, deleteAutoLikeTask, toggleAutoLikeTask, copyAutoLikeTask, LikeTask } from '@/api/autoLike'; type CardMenuProps = { @@ -87,7 +83,6 @@ function CardMenu({ onView, onEdit, onCopy, onDelete }: CardMenuProps) { export default function AutoLike() { const navigate = useNavigate(); const { toast } = useToast(); - const [expandedTaskId, setExpandedTaskId] = useState(null); const [tasks, setTasks] = React.useState([]); const [searchTerm, setSearchTerm] = useState(""); const [loading, setLoading] = useState(false); @@ -127,10 +122,7 @@ export default function AutoLike() { fetchTasks(); }, []); // eslint-disable-line react-hooks/exhaustive-deps - // eslint-disable-next-line @typescript-eslint/no-unused-vars - const toggleExpand = (taskId: string) => { - setExpandedTaskId(expandedTaskId === taskId ? null : taskId); - }; + const handleDelete = async (id: string) => { if (!window.confirm("确定要删除该任务吗?")) return; @@ -170,17 +162,35 @@ export default function AutoLike() { }; const toggleTaskStatus = async (id: string, status: number) => { + // 先更新本地状态 + const newStatus = (status === 1 ? 2 : 1) as 1 | 2; + setTasks(prevTasks => + prevTasks.map(task => + task.id === id ? { ...task, status: newStatus } : task + ) + ); + try { - // status: 1(开启)-> 2(要关闭),2(关闭)-> 1(要开启) - const newStatus = status === 1 ? 2 : 1; const response = await toggleAutoLikeTask(id, String(newStatus)); if (response.code === 200) { toast({ title: "操作成功" }); - fetchTasks(); + // 成功时不刷新列表,保持本地状态 } else { + // 请求失败,回退本地状态 + setTasks(prevTasks => + prevTasks.map(task => + task.id === id ? { ...task, status: status as 1 | 2 } : task + ) + ); toast({ title: "操作失败", description: response.msg || "请稍后重试", variant: "destructive" }); } } catch (error) { + // 请求异常,回退本地状态 + setTasks(prevTasks => + prevTasks.map(task => + task.id === id ? { ...task, status: status as 1 | 2 } : task + ) + ); toast({ title: "操作失败", description: "请稍后重试", variant: "destructive" }); } }; @@ -244,107 +254,48 @@ export default function AutoLike() { /> -
-
-
执行设备:{task.deviceCount} 个
-
目标人群:{task.targetGroup}
-
更新时间:{task.updateTime}
- -
-
-
点赞间隔:{task.likeInterval} 秒
-
每日上限:{task.maxLikesPerDay} 次
-
创建时间:{task.createTime}
-
-
-
-
- 今日点赞:{task.lastLikeTime} -
-
- - 总点赞数:{task.createTime} - -
-
- {expandedTaskId === task.id && ( -
-
-
-
- -

基本设置

-
-
-
- 点赞间隔: - {task.likeInterval} 秒 -
-
- 每日最大点赞数: - {task.maxLikesPerDay} 次 -
-
- 执行时间段: - - {task.timeRange.start} - {task.timeRange.end} - -
-
-
-
-
- -

目标人群

-
-
-
- {task.targetTags.map((tag) => ( - - {tag} - - ))} -
-
-
-
-
- -

点赞内容类型

-
-
-
- {task.contentTypes.map((type) => ( - - {type === "text" ? "文字" : type === "image" ? "图片" : "视频"} - - ))} -
-
-
-
-
- -

执行进度

-
-
-
- 今日已点赞: - - {task.likeCount} / {task.maxLikesPerDay} - -
- -
-
+
+
+
+ 执行设备 + {task.deviceCount} 个 +
+
+ 目标人群 + {task.targetGroup} +
+
+ 更新时间 + {task.updateTime}
- )} +
+
+ 点赞间隔 + {task.likeInterval} 秒 +
+
+ 每日上限 + {task.maxLikesPerDay} 次 +
+
+ 创建时间 + {task.createTime} +
+
+
+
+
+ + 今日点赞: + {task.lastLikeTime} +
+
+ + 总点赞数: + {task.totalLikeCount || 0} +
+
))}
diff --git a/nkebao/src/pages/workspace/auto-like/AutoLikeDetail.tsx b/nkebao/src/pages/workspace/auto-like/AutoLikeDetail.tsx index 7c9b478f..994038ec 100644 --- a/nkebao/src/pages/workspace/auto-like/AutoLikeDetail.tsx +++ b/nkebao/src/pages/workspace/auto-like/AutoLikeDetail.tsx @@ -96,15 +96,20 @@ export default function AutoLikeDetail() { const handleToggleStatus = async () => { if (!task) return; + // 先更新本地状态 + const newStatus = (Number(task.status) === 1 ? 2 : 1) as 1 | 2; + const originalStatus = Number(task.status) as 1 | 2; + setTask(prev => prev ? { ...prev, status: newStatus } : null); + try { - // status: 1(开启)-> 2(要关闭),2(关闭)-> 1(要开启) - const newStatus = task.status === 1 ? 2 : 1; const response = await toggleAutoLikeTask(task.id, String(newStatus)); if (response.code === 200) { - setTask(prev => prev ? { ...prev, status: newStatus } : null); toast({ title: '操作成功' }); + // 成功时保持本地状态,不重新获取数据 } else { + // 请求失败,回退本地状态 + setTask(prev => prev ? { ...prev, status: originalStatus } : null); toast({ title: '操作失败', description: response.msg || '请稍后重试', @@ -113,6 +118,8 @@ export default function AutoLikeDetail() { } } catch (error) { console.error('操作失败:', error); + // 请求异常,回退本地状态 + setTask(prev => prev ? { ...prev, status: originalStatus } : null); toast({ title: '操作失败', description: '请稍后重试', @@ -267,7 +274,6 @@ export default function AutoLikeDetail() {