diff --git a/nkebao/src/App.tsx b/nkebao/src/App.tsx index d1725282..d1548173 100644 --- a/nkebao/src/App.tsx +++ b/nkebao/src/App.tsx @@ -60,6 +60,7 @@ function App() { } /> } /> } /> + } /> } /> } /> } /> diff --git a/nkebao/src/api/autoLike.ts b/nkebao/src/api/autoLike.ts index e163692d..d9b9056c 100644 --- a/nkebao/src/api/autoLike.ts +++ b/nkebao/src/api/autoLike.ts @@ -26,10 +26,28 @@ export async function fetchAutoLikeTasks(): Promise { // 获取单个任务详情 export async function fetchAutoLikeTaskDetail(id: string): Promise { try { - const res = await get>(`/v1/workbench/detail/${id}`); - if (res.code === 200 && res.data) { - return res.data; + console.log(`Fetching task detail for id: ${id}`); + // 使用any类型来处理可能的不同响应结构 + const res = await get(`/v1/workbench/detail?id=${id}`); + console.log('Task detail API response:', res); + + if (res.code === 200) { + // 检查响应中的data字段 + if (res.data) { + // 如果data是对象,直接返回 + if (typeof res.data === 'object') { + return res.data; + } else { + console.error('Task detail API response data is not an object:', res.data); + return null; + } + } else { + console.error('Task detail API response missing data field:', res); + return null; + } } + + console.error('Task detail API error:', res.msg || 'Unknown error'); return null; } catch (error) { console.error('获取任务详情失败:', error); diff --git a/nkebao/src/pages/workspace/auto-like/NewAutoLike.tsx b/nkebao/src/pages/workspace/auto-like/NewAutoLike.tsx index 2374a735..ac6f0edf 100644 --- a/nkebao/src/pages/workspace/auto-like/NewAutoLike.tsx +++ b/nkebao/src/pages/workspace/auto-like/NewAutoLike.tsx @@ -1,5 +1,5 @@ -import React, { useState } from 'react'; -import { useNavigate } from 'react-router-dom'; +import React, { useState, useEffect } from 'react'; +import { useNavigate, useParams } from 'react-router-dom'; import { ChevronLeft, Search, Plus, Minus, Check, X, Tag as TagIcon } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; @@ -13,13 +13,12 @@ import { Checkbox } from '@/components/ui/checkbox'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; -import { createAutoLikeTask } from '@/api/autoLike'; +import { createAutoLikeTask, updateAutoLikeTask, fetchAutoLikeTaskDetail } from '@/api/autoLike'; import { ContentType } from '@/types/auto-like'; import { useToast } from '@/components/ui/toast'; import Layout from '@/components/Layout'; import { fetchDeviceList } from '@/api/devices'; import type { Device } from '@/types/device'; -import { useEffect } from 'react'; import { get } from '@/api/request'; interface TagGroup { @@ -101,11 +100,14 @@ interface CreateLikeTaskDataLocal { export default function NewAutoLike() { const navigate = useNavigate(); + const { id } = useParams<{ id: string }>(); + const isEditMode = !!id; const { toast } = useToast(); const [currentStep, setCurrentStep] = useState(1); const [deviceDialogOpen, setDeviceDialogOpen] = useState(false); const [friendDialogOpen, setFriendDialogOpen] = useState(false); const [isSubmitting, setIsSubmitting] = useState(false); + const [isLoading, setIsLoading] = useState(isEditMode); const [formData, setFormData] = useState({ name: '', interval: 5, @@ -124,6 +126,7 @@ export default function NewAutoLike() { const [autoEnabled, setAutoEnabled] = useState(false); const [devices, setDevices] = useState([]); + // 获取设备列表 useEffect(() => { fetchDeviceList(1, 100).then(res => { if (res && res.data && Array.isArray(res.data.list)) { @@ -138,6 +141,64 @@ export default function NewAutoLike() { }); }, []); + // 如果是编辑模式,获取任务详情 + useEffect(() => { + if (isEditMode && id) { + fetchTaskDetail(); + } + }, [id, isEditMode]); + + // 获取任务详情 + const fetchTaskDetail = async () => { + try { + const taskDetail = await fetchAutoLikeTaskDetail(id!); + console.log('Task detail response:', taskDetail); // 添加日志用于调试 + + if (taskDetail) { + // 使用类型断言处理可能的字段名称差异 + const taskAny = taskDetail as any; + // 处理可能的嵌套结构 + const config = taskAny.config || taskAny; + + setFormData({ + name: taskDetail.name || '', + interval: config.likeInterval || config.interval || 5, + maxLikes: config.maxLikesPerDay || config.maxLikes || 200, + startTime: config.timeRange?.start || config.startTime || '08:00', + endTime: config.timeRange?.end || config.endTime || '22:00', + contentTypes: config.contentTypes || ['text', 'image', 'video'], + devices: config.devices || [], + friends: config.friends || [], + targetTags: config.targetTags || [], + friendMaxLikes: config.friendMaxLikes || 10, + enableFriendTags: config.enableFriendTags || false, + friendTags: config.friendTags || '', + }); + + // 处理状态字段,使用双等号允许类型自动转换 + const status = taskAny.status; + setAutoEnabled(status == 1 || status == 'running'); + } else { + toast({ + title: '获取任务详情失败', + description: '无法找到该任务', + variant: 'destructive', + }); + navigate('/workspace/auto-like'); + } + } catch (error) { + console.error('获取任务详情出错:', error); // 添加错误日志 + toast({ + title: '获取任务详情失败', + description: '请检查网络连接后重试', + variant: 'destructive', + }); + navigate('/workspace/auto-like'); + } finally { + setIsLoading(false); + } + }; + // 标签组数据 const [tagGroups] = useState([ { @@ -209,23 +270,34 @@ export default function NewAutoLike() { // 如果API需要其他转换,可以在这里添加 }; - const response = await createAutoLikeTask(apiFormData); + let response; + if (isEditMode) { + // 编辑模式,调用更新API + response = await updateAutoLikeTask({ + ...apiFormData, + id: id! + }); + } else { + // 新建模式,调用创建API + response = await createAutoLikeTask(apiFormData); + } + if (response.code === 200) { toast({ - title: '创建成功', - description: '自动点赞任务已创建并开始执行', + title: isEditMode ? '更新成功' : '创建成功', + description: isEditMode ? '自动点赞任务已更新' : '自动点赞任务已创建并开始执行', }); navigate('/workspace/auto-like'); } else { toast({ - title: '创建失败', + title: isEditMode ? '更新失败' : '创建失败', description: response.msg || '请稍后重试', variant: 'destructive', }); } } catch (error) { toast({ - title: '创建失败', + title: isEditMode ? '更新失败' : '创建失败', description: '请检查网络连接后重试', variant: 'destructive', }); @@ -240,12 +312,25 @@ export default function NewAutoLike() { -

新建自动点赞

+

{isEditMode ? '编辑自动点赞' : '新建自动点赞'}

); + if (isLoading) { + return ( + +
+
+
+

加载中...

+
+
+
+ ); + } + return (