Files
cunkebao_v3/Cunkebao/app/workspace/group-sync/components/basic-settings.tsx

208 lines
7.0 KiB
TypeScript
Raw Normal View History

2025-03-29 16:50:39 +08:00
"use client"
import { useState } from "react"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Switch } from "@/components/ui/switch"
import { Button } from "@/components/ui/button"
import { Minus, Plus } from "lucide-react"
interface BasicSettingsProps {
defaultValues?: {
name: string
pushTimeStart: string
pushTimeEnd: string
dailyPushCount: number
pushOrder: "earliest" | "latest"
isLoopPush: boolean
isImmediatePush: boolean
isEnabled: boolean
}
onNext: (values: any) => void
onSave: (values: any) => void
onCancel: () => void
}
export function BasicSettings({
defaultValues = {
name: "",
pushTimeStart: "06:00",
pushTimeEnd: "23:59",
dailyPushCount: 20,
pushOrder: "latest",
isLoopPush: false,
isImmediatePush: false,
isEnabled: false,
},
onNext,
onSave,
onCancel,
}: BasicSettingsProps) {
const [values, setValues] = useState(defaultValues)
const handleChange = (field: string, value: any) => {
setValues((prev) => ({ ...prev, [field]: value }))
}
const handleCountChange = (increment: boolean) => {
setValues((prev) => ({
...prev,
dailyPushCount: increment ? prev.dailyPushCount + 1 : Math.max(1, prev.dailyPushCount - 1),
}))
}
return (
<div className="space-y-6">
<div className="space-y-4">
<div className="grid gap-2">
<Label htmlFor="taskName" className="flex items-center">
<span className="text-red-500 mr-1">*</span>:
</Label>
<Input
id="taskName"
value={values.name}
onChange={(e) => handleChange("name", e.target.value)}
placeholder="请输入任务名称"
className="max-w-md"
/>
</div>
<div className="grid gap-2">
<Label className="flex items-center">:</Label>
<div className="flex items-center space-x-2 max-w-md">
<Input
type="time"
value={values.pushTimeStart}
onChange={(e) => handleChange("pushTimeStart", e.target.value)}
className="w-32"
/>
<span></span>
<Input
type="time"
value={values.pushTimeEnd}
onChange={(e) => handleChange("pushTimeEnd", e.target.value)}
className="w-32"
/>
</div>
</div>
<div className="grid gap-2">
<Label className="flex items-center">:</Label>
<div className="flex items-center space-x-2 max-w-md">
2025-04-10 16:40:30 +08:00
<Button
variant="outline"
size="icon"
type="button"
onClick={() => handleCountChange(false)}
className="bg-white border-gray-200"
>
2025-03-29 16:50:39 +08:00
<Minus className="h-4 w-4" />
</Button>
<Input
type="number"
value={values.dailyPushCount}
onChange={(e) => handleChange("dailyPushCount", Number.parseInt(e.target.value) || 1)}
className="w-20 text-center"
min="1"
/>
2025-04-10 16:40:30 +08:00
<Button
variant="outline"
size="icon"
type="button"
onClick={() => handleCountChange(true)}
className="bg-white border-gray-200"
>
2025-03-29 16:50:39 +08:00
<Plus className="h-4 w-4" />
</Button>
<span></span>
</div>
</div>
<div className="grid gap-2">
<Label className="flex items-center">:</Label>
<div className="flex items-center space-x-2 max-w-md">
<div className="flex">
<Button
type="button"
variant={values.pushOrder === "earliest" ? "default" : "outline"}
className={`rounded-r-none ${values.pushOrder === "earliest" ? "" : "text-gray-500"}`}
onClick={() => handleChange("pushOrder", "earliest")}
>
</Button>
<Button
type="button"
variant={values.pushOrder === "latest" ? "default" : "outline"}
className={`rounded-l-none ${values.pushOrder === "latest" ? "" : "text-gray-500"}`}
onClick={() => handleChange("pushOrder", "latest")}
>
</Button>
</div>
</div>
</div>
<div className="grid gap-2">
<Label htmlFor="isLoopPush" className="flex items-center">
<span className="text-red-500 mr-1">*</span>:
</Label>
<div className="flex items-center space-x-2">
<span className={values.isLoopPush ? "text-gray-400" : "text-gray-900"}></span>
<Switch
id="isLoopPush"
checked={values.isLoopPush}
onCheckedChange={(checked) => handleChange("isLoopPush", checked)}
/>
<span className={values.isLoopPush ? "text-gray-900" : "text-gray-400"}></span>
</div>
</div>
<div className="grid gap-2">
<Label htmlFor="isImmediatePush" className="flex items-center">
<span className="text-red-500 mr-1">*</span>:
</Label>
<div className="flex items-center space-x-2">
<span className={values.isImmediatePush ? "text-gray-400" : "text-gray-900"}></span>
<Switch
id="isImmediatePush"
checked={values.isImmediatePush}
onCheckedChange={(checked) => handleChange("isImmediatePush", checked)}
/>
<span className={values.isImmediatePush ? "text-gray-900" : "text-gray-400"}></span>
</div>
{values.isImmediatePush && (
<p className="text-sm text-gray-500"></p>
)}
</div>
<div className="grid gap-2">
<Label htmlFor="isEnabled" className="flex items-center">
<span className="text-red-500 mr-1">*</span>:
</Label>
<div className="flex items-center space-x-2">
<span className={values.isEnabled ? "text-gray-400" : "text-gray-900"}></span>
<Switch
id="isEnabled"
checked={values.isEnabled}
onCheckedChange={(checked) => handleChange("isEnabled", checked)}
/>
<span className={values.isEnabled ? "text-gray-900" : "text-gray-400"}></span>
</div>
</div>
</div>
<div className="flex space-x-2">
<Button type="button" onClick={() => onNext(values)}>
</Button>
<Button type="button" variant="outline" onClick={() => onSave(values)}>
</Button>
<Button type="button" variant="outline" onClick={onCancel}>
</Button>
</div>
</div>
)
}