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 => `${l} 确收/毛利 | `).join("")}销售 |
${pfs.filter(x => x.status === state.finFilter).map(renderPfRow).join("")}
`, "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");