function addLine() { const tbody = document.querySelector("#lines-table tbody"); const tr = document.createElement("tr"); tr.innerHTML = ` `; tbody.appendChild(tr); } async function submitJournal() { const date = document.getElementById("journal-date").value; const desc = document.getElementById("description").value; if (!date) { alert("日付を入力してください"); return; } const lines = []; document.querySelectorAll("#lines-table tbody tr").forEach((tr) => { const accountId = tr.querySelector(".account-id").value; const debit = tr.querySelector(".debit").value || 0; const credit = tr.querySelector(".credit").value || 0; if (!accountId) return; lines.push({ account_id: Number(accountId), debit: Number(debit), credit: Number(credit), }); }); if (lines.length < 2) { alert("仕訳明細は2行以上必要です"); return; } try { await fetch(`/journals`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ journal_date: date, description: desc, lines: lines, }), }).then(async (res) => { if (!res.ok) { const data = await res.json(); throw new Error(data.detail || "登録失敗"); } }); alert("仕訳を登録しました"); location.href = "index.html"; } catch (e) { alert(e.message); } }