【操盘手】 自动点赞处理选择好友功能

This commit is contained in:
wong
2025-05-14 17:27:18 +08:00
parent 8b98ff3992
commit 57a3caa4d5

View File

@@ -2,7 +2,7 @@
import { useState } from "react" import { useState } from "react"
import { useRouter } from "next/navigation" 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 { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input" import { Input } from "@/components/ui/input"
import { StepIndicator } from "../components/step-indicator" import { StepIndicator } from "../components/step-indicator"
@@ -11,11 +11,14 @@ import { DeviceSelectionDialog } from "../components/device-selection-dialog"
import { TagSelector } from "../components/tag-selector" import { TagSelector } from "../components/tag-selector"
import { api, ApiResponse } from "@/lib/api" import { api, ApiResponse } from "@/lib/api"
import { showToast } from "@/lib/toast" import { showToast } from "@/lib/toast"
import { WechatFriendSelector, WechatFriend } from "@/components/WechatFriendSelector"
export default function NewAutoLikePage() { export default function NewAutoLikePage() {
const router = useRouter() const router = useRouter()
const [currentStep, setCurrentStep] = useState(1) const [currentStep, setCurrentStep] = useState(1)
const [deviceDialogOpen, setDeviceDialogOpen] = useState(false) const [deviceDialogOpen, setDeviceDialogOpen] = useState(false)
const [isFriendSelectorOpen, setIsFriendSelectorOpen] = useState(false)
const [selectedFriends, setSelectedFriends] = useState<WechatFriend[]>([])
const [formData, setFormData] = useState({ const [formData, setFormData] = useState({
taskName: "", taskName: "",
likeInterval: 5, // 默认5秒 likeInterval: 5, // 默认5秒
@@ -26,6 +29,7 @@ export default function NewAutoLikePage() {
selectedDevices: [] as number[], selectedDevices: [] as number[],
selectedTags: [] as string[], selectedTags: [] as string[],
tagOperator: "and" as "and" | "or", tagOperator: "and" as "and" | "or",
friends: [] as string[],
}) })
const handleUpdateFormData = (data: Partial<typeof formData>) => { const handleUpdateFormData = (data: Partial<typeof formData>) => {
@@ -40,6 +44,21 @@ export default function NewAutoLikePage() {
setCurrentStep((prev) => Math.max(prev - 1, 1)) setCurrentStep((prev) => Math.max(prev - 1, 1))
} }
const handleSelectFriends = () => {
if (formData.selectedDevices.length === 0) {
showToast("请先选择设备", "error")
return
}
setIsFriendSelectorOpen(true)
}
const handleSaveSelectedFriends = (friends: WechatFriend[]) => {
const ids = friends.map(f => f.id)
setSelectedFriends(friends)
handleUpdateFormData({ friends: ids })
setIsFriendSelectorOpen(false)
}
const handleComplete = async () => { const handleComplete = async () => {
try { try {
const response = await api.post<ApiResponse>('/v1/workbench/create', { const response = await api.post<ApiResponse>('/v1/workbench/create', {
@@ -52,8 +71,7 @@ export default function NewAutoLikePage() {
contentTypes: formData.contentTypes, contentTypes: formData.contentTypes,
enabled: formData.enabled, enabled: formData.enabled,
devices: formData.selectedDevices, devices: formData.selectedDevices,
targetGroups: formData.selectedTags, friends: formData.friends,
tagOperator: formData.tagOperator === 'and' ? 1 : 2
}); });
if (response.code === 200) { if (response.code === 200) {
@@ -131,15 +149,19 @@ export default function NewAutoLikePage() {
{currentStep === 3 && ( {currentStep === 3 && (
<div className="px-6"> <div className="px-6">
<TagSelector <div className="relative">
selectedTags={formData.selectedTags} <Users className="absolute left-3 top-4 h-5 w-5 text-gray-400" />
tagOperator={formData.tagOperator} <Input
onTagsChange={(tags) => handleUpdateFormData({ selectedTags: tags })} placeholder="选择微信好友"
onOperatorChange={(operator) => handleUpdateFormData({ tagOperator: operator })} className="h-12 pl-11 rounded-xl border-gray-200 text-base"
onBack={handlePrev} onClick={handleSelectFriends}
onComplete={handleComplete} 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"> <div className="flex space-x-4 pt-4">
<Button variant="outline" onClick={handlePrev} className="flex-1 h-12 rounded-xl text-base"> <Button variant="outline" onClick={handlePrev} className="flex-1 h-12 rounded-xl text-base">
@@ -151,6 +173,13 @@ export default function NewAutoLikePage() {
</Button> </Button>
</div> </div>
<WechatFriendSelector
open={isFriendSelectorOpen}
onOpenChange={setIsFriendSelectorOpen}
selectedFriends={selectedFriends}
onSelect={handleSaveSelectedFriends}
devices={formData.selectedDevices}
/>
</div> </div>
)} )}
</div> </div>