import React, { useState, useEffect } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { Button, Input, Switch, message, Spin } from "antd"; import { ArrowLeftOutlined, PlusOutlined, MinusOutlined, CheckOutlined, } from "@ant-design/icons"; import { NavBar } from "antd-mobile"; import Layout from "@/components/Layout/Layout"; import { createAutoLikeTask, updateAutoLikeTask, fetchAutoLikeTaskDetail, } from "./api"; import { ContentType } from "@/types/auto-like"; import style from "./new.module.scss"; const contentTypeLabels: Record = { text: "文字", image: "图片", video: "视频", link: "链接", }; const steps = ["基础设置", "设备选择", "人群选择"]; const defaultForm = { name: "", interval: 5, maxLikes: 200, startTime: "08:00", endTime: "22:00", contentTypes: ["text", "image", "video"] as ContentType[], devices: [] as string[], friends: [] as string[], targetTags: [] as string[], friendMaxLikes: 10, enableFriendTags: false, friendTags: "", }; const NewAutoLike: React.FC = () => { const navigate = useNavigate(); const { id } = useParams<{ id: string }>(); const isEditMode = !!id; const [currentStep, setCurrentStep] = useState(0); const [isSubmitting, setIsSubmitting] = useState(false); const [isLoading, setIsLoading] = useState(isEditMode); const [autoEnabled, setAutoEnabled] = useState(false); const [formData, setFormData] = useState({ ...defaultForm }); useEffect(() => { if (isEditMode && id) { fetchTaskDetail(); } }, [id, isEditMode]); const fetchTaskDetail = async () => { setIsLoading(true); try { const taskDetail = await fetchAutoLikeTaskDetail(id!); if (taskDetail) { const config = (taskDetail as any).config || taskDetail; 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 || "", }); setAutoEnabled( (taskDetail as any).status === 1 || (taskDetail as any).status === "running" ); } } catch (error) { message.error("获取任务详情失败"); navigate("/workspace/auto-like"); } finally { setIsLoading(false); } }; const handleUpdateFormData = (data: Partial) => { setFormData((prev) => ({ ...prev, ...data })); }; const handleNext = () => setCurrentStep((prev) => Math.min(prev + 1, 2)); const handlePrev = () => setCurrentStep((prev) => Math.max(prev - 1, 0)); const handleComplete = async () => { if (!formData.name.trim()) { message.warning("请输入任务名称"); return; } if (!formData.devices || formData.devices.length === 0) { message.warning("请选择执行设备"); return; } setIsSubmitting(true); try { if (isEditMode && id) { await updateAutoLikeTask({ ...formData, id }); message.success("更新成功"); } else { await createAutoLikeTask(formData); message.success("创建成功"); } navigate("/workspace/auto-like"); } catch (error) { message.error(isEditMode ? "更新失败" : "创建失败"); } finally { setIsSubmitting(false); } }; // 步骤1:基础设置 const renderBasicSettings = () => (
任务名称
handleUpdateFormData({ name: e.target.value })} className={style.input} />
点赞间隔
{formData.interval} 秒
设置两次点赞之间的最小时间间隔
每日最大点赞数
{formData.maxLikes} 次
设置每天最多点赞的次数
点赞时间范围
handleUpdateFormData({ startTime: e.target.value }) } className={style.inputTime} /> handleUpdateFormData({ endTime: e.target.value })} className={style.inputTime} />
点赞内容类型
{(["text", "image", "video"] as ContentType[]).map((type) => ( { const newTypes = formData.contentTypes.includes(type) ? formData.contentTypes.filter((t) => t !== type) : [...formData.contentTypes, type]; handleUpdateFormData({ contentTypes: newTypes }); }} > {contentTypeLabels[type]} ))}
启用好友标签 handleUpdateFormData({ enableFriendTags: checked }) } className={style.switch} />
{formData.enableFriendTags && (
好友标签
handleUpdateFormData({ friendTags: e.target.value }) } className={style.input} />
只给有此标签的好友点赞
)}
自动开启
); // 步骤2:设备选择 const renderDeviceSelection = () => (
选择设备
message.info("这里应弹出设备选择器")} className={style.input} /> {formData.devices.length > 0 && (
已选设备: {formData.devices.length}个
)}
); // 步骤3:人群选择 const renderFriendSelection = () => (
选择微信好友
message.info("这里应弹出好友选择器")} className={style.input} /> {formData.friends.length > 0 && (
已选好友: {formData.friends.length}个
)}
); return ( navigate(-1)} /> } > {isEditMode ? "编辑自动点赞" : "新建自动点赞"} } >
{steps.map((s, i) => (
{i < currentStep ? : i + 1} {s}
))}
{isLoading ? (
) : ( <> {currentStep === 0 && renderBasicSettings()} {currentStep === 1 && renderDeviceSelection()} {currentStep === 2 && renderFriendSelection()} )}
); }; export default NewAutoLike;