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 (