Files
cunkebao_v3/Cunkebao/components/ui/date-picker.tsx
笔记本里的永平 dedf6be5a6 feat: 本次提交更新内容如下
更新了旧项目的代码和样式
2025-07-11 11:40:24 +08:00

88 lines
2.5 KiB
TypeScript

"use client"
import { CalendarIcon } from "lucide-react"
import { format } from "date-fns"
import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Calendar } from "@/components/ui/calendar"
import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"
import type { DateRange } from "react-day-picker"
export interface DatePickerProps {
date: Date | undefined
setDate: (date: Date | undefined) => void
className?: string
placeholder?: string
disabled?: boolean
}
export function DatePicker({ date, setDate, className, placeholder = "选择日期", disabled = false }: DatePickerProps) {
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant={"outline"}
className={cn("w-full justify-start text-left font-normal", !date && "text-muted-foreground", className)}
disabled={disabled}
>
<CalendarIcon className="mr-2 h-4 w-4" />
{date ? format(date, "yyyy-MM-dd") : <span>{placeholder}</span>}
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0" align="start">
<Calendar mode="single" selected={date} onSelect={setDate} initialFocus />
</PopoverContent>
</Popover>
)
}
export interface DatePickerWithRangeProps {
date: DateRange | undefined
setDate: (date: DateRange | undefined) => void
className?: string
placeholder?: string
disabled?: boolean
}
export function DatePickerWithRange({
date,
setDate,
className,
placeholder = "选择日期范围",
disabled = false,
}: DatePickerWithRangeProps) {
return (
<Popover>
<PopoverTrigger asChild>
<Button
variant={"outline"}
className={cn("w-full justify-start text-left font-normal", !date && "text-muted-foreground", className)}
disabled={disabled}
>
<CalendarIcon className="mr-2 h-4 w-4" />
{date?.from ? (
date.to ? (
<>
{format(date.from, "yyyy-MM-dd")} - {format(date.to, "yyyy-MM-dd")}
</>
) : (
format(date.from, "yyyy-MM-dd")
)
) : (
<span>{placeholder}</span>
)}
</Button>
</PopoverTrigger>
<PopoverContent className="w-auto p-0" align="start">
<Calendar
initialFocus
mode="range"
defaultMonth={date?.from}
selected={date}
onSelect={setDate}
numberOfMonths={2}
/>
</PopoverContent>
</Popover>
)
}