Files
cunkebao_v3/Cunkebao/app/workspace/auto-like/components/time-settings.tsx
2025-04-09 09:31:09 +08:00

244 lines
9.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use client"
import { useState } from "react"
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
import { Label } from "@/components/ui/label"
import { Switch } from "@/components/ui/switch"
import { Slider } from "@/components/ui/slider"
import { Input } from "@/components/ui/input"
import { Button } from "@/components/ui/button"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
import { Info, Plus, Trash2 } from "lucide-react"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
export interface TimeRange {
id: string
start: string
end: string
}
export interface TimeSettingsData {
enableAutoLike: boolean
timeRanges: TimeRange[]
likeInterval: number
randomizeInterval: boolean
minInterval?: number
maxInterval?: number
}
interface TimeSettingsProps {
initialData?: Partial<TimeSettingsData>
onSave: (data: TimeSettingsData) => void
}
export function TimeSettings({ initialData, onSave }: TimeSettingsProps) {
const [formData, setFormData] = useState<TimeSettingsData>({
enableAutoLike: initialData?.enableAutoLike ?? true,
timeRanges: initialData?.timeRanges ?? [{ id: "1", start: "06:00", end: "08:00" }],
likeInterval: initialData?.likeInterval ?? 15,
randomizeInterval: initialData?.randomizeInterval ?? false,
minInterval: initialData?.minInterval ?? 5,
maxInterval: initialData?.maxInterval ?? 30,
})
// 添加时间范围
const addTimeRange = () => {
const newId = String(formData.timeRanges.length + 1)
setFormData({
...formData,
timeRanges: [...formData.timeRanges, { id: newId, start: "12:00", end: "14:00" }],
})
}
// 删除时间范围
const removeTimeRange = (id: string) => {
setFormData({
...formData,
timeRanges: formData.timeRanges.filter((range) => range.id !== id),
})
}
// 更新时间范围
const updateTimeRange = (id: string, field: "start" | "end", value: string) => {
setFormData({
...formData,
timeRanges: formData.timeRanges.map((range) => (range.id === id ? { ...range, [field]: value } : range)),
})
}
// 处理表单提交
const handleSubmit = () => {
onSave(formData)
}
return (
<div className="space-y-6">
<Card>
<CardHeader>
<CardTitle></CardTitle>
<CardDescription></CardDescription>
</CardHeader>
<CardContent className="space-y-6">
{/* 基本设置 */}
<div className="space-y-4">
<div className="flex items-center justify-between">
<div className="flex items-center space-x-2">
<Label htmlFor="enableAutoLike" className="font-medium">
</Label>
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Info className="h-4 w-4 text-muted-foreground" />
</TooltipTrigger>
<TooltipContent>
<p></p>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</div>
<Switch
id="enableAutoLike"
checked={formData.enableAutoLike}
onCheckedChange={(checked) => setFormData({ ...formData, enableAutoLike: checked })}
/>
</div>
{/* 时间范围设置 */}
<div className="space-y-3 pt-4">
<div className="flex items-center justify-between">
<Label className="font-medium"></Label>
<Button
variant="outline"
size="sm"
onClick={addTimeRange}
disabled={!formData.enableAutoLike || formData.timeRanges.length >= 5}
>
<Plus className="h-4 w-4 mr-1" />
</Button>
</div>
<div className="space-y-3">
{formData.timeRanges.map((range) => (
<div key={range.id} className="flex items-center space-x-2">
<Input
type="time"
value={range.start}
onChange={(e) => updateTimeRange(range.id, "start", e.target.value)}
className="w-32"
disabled={!formData.enableAutoLike}
/>
<span></span>
<Input
type="time"
value={range.end}
onChange={(e) => updateTimeRange(range.id, "end", e.target.value)}
className="w-32"
disabled={!formData.enableAutoLike}
/>
{formData.timeRanges.length > 1 && (
<Button
variant="ghost"
size="icon"
onClick={() => removeTimeRange(range.id)}
disabled={!formData.enableAutoLike}
>
<Trash2 className="h-4 w-4 text-destructive" />
</Button>
)}
</div>
))}
</div>
<p className="text-xs text-muted-foreground"></p>
</div>
<div className="space-y-2 pt-4">
<div className="flex items-center justify-between">
<Label htmlFor="intervalType" className="font-medium">
</Label>
<Select
value={formData.randomizeInterval ? "random" : "fixed"}
onValueChange={(value) => setFormData({ ...formData, randomizeInterval: value === "random" })}
disabled={!formData.enableAutoLike}
>
<SelectTrigger className="w-[180px]">
<SelectValue placeholder="选择间隔类型" />
</SelectTrigger>
<SelectContent>
<SelectItem value="fixed"></SelectItem>
<SelectItem value="random"></SelectItem>
</SelectContent>
</Select>
</div>
{formData.randomizeInterval ? (
<div className="space-y-4">
<div className="space-y-2">
<div className="flex items-center justify-between">
<Label htmlFor="minInterval" className="text-sm">
</Label>
<span className="text-sm text-muted-foreground">{formData.minInterval}</span>
</div>
<Slider
id="minInterval"
min={1}
max={30}
step={1}
value={[formData.minInterval || 5]}
onValueChange={(value) => setFormData({ ...formData, minInterval: value[0] })}
disabled={!formData.enableAutoLike}
/>
</div>
<div className="space-y-2">
<div className="flex items-center justify-between">
<Label htmlFor="maxInterval" className="text-sm">
</Label>
<span className="text-sm text-muted-foreground">{formData.maxInterval}</span>
</div>
<Slider
id="maxInterval"
min={formData.minInterval || 5}
max={120}
step={1}
value={[formData.maxInterval || 30]}
onValueChange={(value) => setFormData({ ...formData, maxInterval: value[0] })}
disabled={!formData.enableAutoLike}
/>
</div>
</div>
) : (
<div className="space-y-2">
<div className="flex items-center justify-between">
<Label htmlFor="likeInterval" className="text-sm">
</Label>
<span className="text-sm text-muted-foreground">{formData.likeInterval}</span>
</div>
<Slider
id="likeInterval"
min={1}
max={60}
step={1}
value={[formData.likeInterval]}
onValueChange={(value) => setFormData({ ...formData, likeInterval: value[0] })}
disabled={!formData.enableAutoLike}
/>
</div>
)}
</div>
</div>
</CardContent>
</Card>
<div className="flex justify-end">
<Button onClick={handleSubmit}></Button>
</div>
</div>
)
}