diff --git a/static/app.js b/static/app.js index d2b9426..b9a33c7 100644 --- a/static/app.js +++ b/static/app.js @@ -242,12 +242,21 @@ window.createFinance = async (event) => { data["rev_"+k] = parseFloat(data["rev_"+k]) || 0; data["gross_"+k] = parseFloat(data["gross_"+k]) || 0; } + const pfId = data.pf_id; + delete data.pf_id; try { - await api("/api/projectFinances", { method: "POST", body: JSON.stringify({ data }) }); + if (pfId) { + await api("/api/projectFinances/" + pfId, { method: "PUT", body: JSON.stringify({ data }) }); + } else { + await api("/api/projectFinances", { method: "POST", body: JSON.stringify({ data }) }); + } form.reset(); + document.querySelector("#pf-id-input").value = ""; + document.querySelector("#financeModalTitle").textContent = "新增项目财务"; + closeFinanceModal(); await load(); } catch (error) { - alert("新增失败:" + error.message); + alert("保存失败:" + error.message); } }; window.switchTab = switchTab; @@ -445,7 +454,7 @@ function renderFinance() { const gross = pf["gross_"+m.replace("-","_")] || 0; return `${rev ? money(rev) : '—'}
${gross ? money(gross) : '—'}`; }).join(""); - return `${pf.customer_name}${pf.business_type}${pf.status === "已签单" ? badge("已签") : badge(pf.status,"amber")}${money(pf.sign_amount)}${mCols}${pf.sales_person || ""}`; + return `${pf.customer_name}${pf.business_type}${pf.status === "已签单" ? badge("已签") : badge(pf.status,"amber")}${money(pf.sign_amount)}${mCols}${pf.sales_person || ""}`; }; document.querySelector("#finance").innerHTML = `
@@ -455,7 +464,7 @@ function renderFinance() { ${card(`

月度趋势

`, "p-5")}
- + ${card(`

项目明细 (${pfs.length})

${[["已签单","已签"],["待签","待签"]].map(([k,v]) => ``).join("")}
${monthLabels.map(l => ``).join("")}${pfs.filter(x => x.status === state.finFilter).map(renderPfRow).join("")}
客户类型状态签约金额${l}
确收/毛利
销售
`, "p-4")}
`; @@ -470,6 +479,24 @@ window.closeFinanceModal = () => { const modal = document.querySelector("#financeModal"); modal.classList.add("hidden"); }; +window.openPfEditModal = (pfId) => { + const pf = (state.data.projectFinances || []).find(x => x.id === pfId); + if (!pf) return; + document.querySelector("#pf-id-input").value = pf.id; + document.querySelector("#financeModalTitle").textContent = "编辑项目财务"; + const form = document.querySelector("#financeModal form"); + form.querySelector('[name="project_id"]').value = pf.project_id || ""; + form.querySelector('[name="business_type"]').value = pf.business_type || ""; + form.querySelector('[name="customer_name"]').value = pf.customer_name || ""; + form.querySelector('[name="sign_amount"]').value = pf.sign_amount || ""; + form.querySelector('[name="sign_month"]').value = pf.sign_month || ""; + form.querySelector('[name="status"]').value = pf.status || "已签单"; + for (const m of ["06","07","08","09"]) { + form.querySelector('[name="rev_2026_' + m + '"]').value = pf["rev_2026_" + m] || ""; + form.querySelector('[name="gross_2026_' + m + '"]').value = pf["gross_2026_" + m] || ""; + } + openFinanceModal(); +}; window.toggleFinanceChart = () => { const wrap = document.querySelector("#financeChartWrap"); const icon = document.querySelector("#financeChartIcon");