const form = document.getElementById('fortune-form'); const statusEl = document.getElementById('status'); const aiTextEl = document.getElementById('ai-text'); const warningsEl = document.getElementById('warnings'); const submitBtn = document.getElementById('submit-btn'); const fillDemoBtn = document.getElementById('fill-demo'); const STATUS_CLASS = ['idle', 'info', 'success', 'error']; function setStatus(text, variant = 'idle') { statusEl.textContent = text; STATUS_CLASS.forEach((cls) => statusEl.classList.remove(cls)); statusEl.classList.add(variant); } function buildPayload() { const formData = new FormData(form); return { type: formData.get('type') || 'bazi', name: (formData.get('name') || '').trim(), birth_date: formData.get('birth_date'), birth_time: formData.get('birth_time'), gender: formData.get('gender'), is_lunar: formData.get('is_lunar') === 'on', question: (formData.get('question') || '').trim(), extra_options: {}, }; } async function submitForm(event) { event.preventDefault(); const payload = buildPayload(); setStatus('⏳ 正在分析 ...', 'info'); submitBtn.disabled = true; try { const response = await fetch('/api/fortune', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }); const data = await response.json(); if (!response.ok || !data.success) { throw new Error(data.error?.message || '后端服务异常'); } renderResult(data.data); setStatus('✅ 分析完成', 'success'); } catch (error) { console.error(error); setStatus(`❌ ${error.message}`, 'error'); } finally { submitBtn.disabled = false; } } function renderResult(result) { aiTextEl.textContent = (result.ai_text || '').trim(); const warnings = result.meta?.warnings?.filter(Boolean) || []; if (warnings.length) { warningsEl.classList.remove('hidden'); warningsEl.innerHTML = warnings.map((w) => `

⚠️ ${w}

`).join(''); } else { warningsEl.classList.add('hidden'); warningsEl.textContent = ''; } } function fillDemo() { const now = new Date(); const date = now.toISOString().slice(0, 10); const time = '08:30'; form.type.value = 'bazi'; form.name.value = '李清扬'; form.gender.value = 'female'; form.birth_date.value = date; form.birth_time.value = time; form.is_lunar.checked = false; form.question.value = '想了解未来三个月的事业机会和财务规划建议。'; setStatus('示例数据已填充,可直接提交。', 'info'); } function init() { const defaultDate = '1990-01-01'; const defaultTime = '12:00'; if (!form.birth_date.value) { form.birth_date.value = defaultDate; } if (!form.birth_time.value) { form.birth_time.value = defaultTime; } form.addEventListener('submit', submitForm); fillDemoBtn.addEventListener('click', fillDemo); } init();