自动点赞

This commit is contained in:
wong
2025-05-09 09:22:31 +08:00
parent 3ff8b5a95c
commit 998b795df4
9 changed files with 648 additions and 55 deletions

View File

@@ -2,15 +2,19 @@
import { useState, useEffect, use } from "react"
import { useRouter } from "next/navigation"
import { ChevronLeft, Search } from "lucide-react"
import { ChevronLeft, Search, Users } from "lucide-react"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { StepIndicator } from "../../components/step-indicator"
import { BasicSettings } from "../../components/basic-settings"
import { DeviceSelectionDialog } from "../../components/device-selection-dialog"
import { TagSelector } from "../../components/tag-selector"
import { WechatGroupMemberSelector } from "@/components/WechatGroupMemberSelector"
import { WechatFriendSelector } from "@/components/WechatFriendSelector"
import { api, ApiResponse } from "@/lib/api"
import { showToast } from "@/lib/toast"
import { WechatGroupMember } from "@/types/wechat"
import { WechatFriend } from "@/components/WechatFriendSelector"
interface TaskConfig {
id: number
@@ -43,6 +47,11 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
const router = useRouter()
const [currentStep, setCurrentStep] = useState(1)
const [deviceDialogOpen, setDeviceDialogOpen] = useState(false)
const [isGroupMemberSelectorOpen, setIsGroupMemberSelectorOpen] = useState(false)
const [currentGroupId, setCurrentGroupId] = useState<string>("")
const [selectedGroupMembers, setSelectedGroupMembers] = useState<WechatGroupMember[]>([])
const [isFriendSelectorOpen, setIsFriendSelectorOpen] = useState(false)
const [selectedFriends, setSelectedFriends] = useState<WechatFriend[]>([])
const [loading, setLoading] = useState(true)
const [formData, setFormData] = useState({
taskName: "",
@@ -52,8 +61,7 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
contentTypes: ["text", "image", "video"],
enabled: true,
selectedDevices: [] as number[],
selectedTags: [] as string[],
tagOperator: "and" as "and" | "or",
friends: [] as string[],
})
useEffect(() => {
@@ -78,8 +86,7 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
contentTypes: task.config.contentTypes,
enabled: task.status === 1,
selectedDevices: task.config.devices,
selectedTags: task.config.targetGroups,
tagOperator: task.config.tagOperator === 1 ? "and" : "or"
friends: Array.isArray(task.config.friends) ? task.config.friends : [],
})
} else {
showToast(response.msg || "获取任务信息失败", "error")
@@ -121,8 +128,7 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
contentTypes: formData.contentTypes,
enabled: formData.enabled,
devices: formData.selectedDevices,
targetGroups: formData.selectedTags,
tagOperator: formData.tagOperator === 'and' ? 1 : 2
friends: formData.friends,
});
if (response.code === 200) {
@@ -140,6 +146,17 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
}
};
const handleSelectFriends = () => {
setIsFriendSelectorOpen(true)
}
const handleSaveSelectedFriends = (friends: WechatFriend[]) => {
const ids = friends.map(f => f.id)
setSelectedFriends(friends)
handleUpdateFormData({ friends: ids })
setIsFriendSelectorOpen(false)
}
if (loading) {
return null;
}
@@ -207,15 +224,19 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
{currentStep === 3 && (
<div className="px-6">
<TagSelector
selectedTags={formData.selectedTags}
tagOperator={formData.tagOperator}
onTagsChange={(tags) => handleUpdateFormData({ selectedTags: tags })}
onOperatorChange={(operator) => handleUpdateFormData({ tagOperator: operator })}
onBack={handlePrev}
onComplete={handleComplete}
/>
<div className="relative">
<Users className="absolute left-3 top-4 h-5 w-5 text-gray-400" />
<Input
placeholder="选择微信好友"
className="h-12 pl-11 rounded-xl border-gray-200 text-base"
onClick={handleSelectFriends}
readOnly
value={formData.friends.length > 0 ? `已选择 ${formData.friends.length} 个好友` : ""}
/>
</div>
{formData.friends.length > 0 && (
<div className="text-base text-gray-500">{formData.friends.length} </div>
)}
<div className="flex space-x-4 pt-4">
<Button variant="outline" onClick={handlePrev} className="flex-1 h-12 rounded-xl text-base">
@@ -227,6 +248,12 @@ export default function EditAutoLikePage({ params }: { params: Promise<{ id: str
</Button>
</div>
<WechatFriendSelector
open={isFriendSelectorOpen}
onOpenChange={setIsFriendSelectorOpen}
selectedFriends={selectedFriends}
onSelect={handleSaveSelectedFriends}
/>
</div>
)}
</div>

View File

@@ -10,7 +10,7 @@ import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
import { api } from "@/lib/api"
import { showToast } from "@/lib/toast"
interface WechatFriend {
export interface WechatFriend {
id: string
nickname: string
wechatId: string