"use client" import { useState, useEffect } from "react" import { Calendar as CalendarIcon } from "lucide-react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { solar2lunar, formatDate } from "@/lib/lunar-calendar" import dynamic from 'next/dynamic' // 动态导入 Ant Design 日历组件(避免 SSR 问题) const AntdLunarCalendar = dynamic( () => import('@/components/antd-lunar-calendar').then(mod => ({ default: mod.AntdLunarCalendar })), { ssr: false, loading: () =>
加载中...
} ) interface CalendarDialogProps { open: boolean onOpenChange: (open: boolean) => void } export function CalendarDialog({ open, onOpenChange }: CalendarDialogProps) { const [selectedDate, setSelectedDate] = useState(new Date()) // 获取农历信息 const lunarInfo = solar2lunar(selectedDate) // 格式化显示 const solarStr = formatDate(selectedDate) const [year, monthNum, day] = solarStr.split('-') const weekDay = ['日', '一', '二', '三', '四', '五', '六'][selectedDate.getDay()] // 当对话框打开时,重置为当前日期 useEffect(() => { if (open) { const now = new Date() setSelectedDate(now) } }, [open]) return ( 公历农历查询
{/* Ant Design 日历 */}
setSelectedDate(date)} />
{/* 日期信息卡片 - 美化版 */}
{/* 公历信息 */}
{/* 装饰性背景 */}

公历 SOLAR

{year}年
{parseInt(monthNum)}月{parseInt(day)}日
星期{weekDay}
{/* 农历信息 */} {lunarInfo ? (
{/* 装饰性背景 */}

农历 LUNAR

{lunarInfo.ganZhiYear}年
{lunarInfo.monthName}{lunarInfo.dayName}
{lunarInfo.animal}年 {lunarInfo.isLeap && ( 闰月 )}
) : (
📅
农历信息不可用
日期超出范围 (1900-2100)
)}
{/* 今天按钮 */}
) }