Use lunar calendar input for birth date with solar conversion display.

Add LunarBirthPicker for bazi and combined forms, converting lunar input to solar for chart calculation.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-13 09:06:37 +08:00
parent 1cde9ffc9c
commit abf78cbbb5
5 changed files with 250 additions and 10 deletions
+8 -5
View File
@@ -9,6 +9,9 @@ import { ModeWorkspace } from "@/components/layout/mode-workspace";
import Result from "@/components/result";
import ResultAI from "@/components/result-ai";
import BaziChartDisplay from "@/components/modes/bazi-chart";
import LunarBirthPicker, {
todaySolarYmd,
} from "@/components/shared/lunar-birth-picker";
import DateTimePicker, {
nowDateString,
nowTimeString,
@@ -22,7 +25,7 @@ import type { GuaResult } from "@/lib/calc/hexagram";
import { streamAiCompletion } from "@/lib/ai/client-stream";
export default function CombinedForm() {
const [birthDate, setBirthDate] = useState("1990-01-01");
const [birthDate, setBirthDate] = useState(todaySolarYmd());
const [birthTime, setBirthTime] = useState("12:00");
const [unknownHour, setUnknownHour] = useState(false);
const [gender, setGender] = useState<"male" | "female">("male");
@@ -163,12 +166,12 @@ export default function CombinedForm() {
}
>
<ZenCard title="人和 · 生辰" subtitle="出生时空与地域" className="flex h-full min-h-0 flex-col">
<DateTimePicker
label="出生日期 / 时间"
date={birthDate}
<LunarBirthPicker
label="出生日期 / 时间(农历)"
solarDate={birthDate}
time={birthTime}
timeDisabled={unknownHour}
onDateChange={setBirthDate}
onSolarDateChange={setBirthDate}
onTimeChange={setBirthTime}
/>
<label className="flex items-center gap-2 text-xs text-muted-foreground">