diff --git a/web/app.js b/web/app.js index 0adf554..fa8d9a6 100644 --- a/web/app.js +++ b/web/app.js @@ -1,6 +1,9 @@ const $ = (selector, scope = document) => scope.querySelector(selector); const $$ = (selector, scope = document) => [...scope.querySelectorAll(selector)]; +function openModal(id) { $("#" + id)?.classList.add("open"); } +function closeModal(id) { $("#" + id)?.classList.remove("open"); } + const portal = document.body.dataset.portal || "entry"; const viewNames = portal === "admin" ? { dashboard: "管理总览", pair: "往来查询", audit: "审核中心", flows: "流水管理", companies: "公司与账号", settings: "结账与期初", reminders: "提醒管理" } @@ -1818,8 +1821,6 @@ function initAdmin() { })); $("#auditCompany")?.addEventListener("change", filterAuditRows); - function openModal(id) { $("#" + id)?.classList.add("open"); } - function closeModal(id) { $("#" + id)?.classList.remove("open"); } document.querySelectorAll("[data-close]").forEach((el) => el.addEventListener("click", () => closeModal(el.dataset.close))); document.querySelectorAll(".modal-backdrop").forEach((bd) => bd.addEventListener("click", (e) => { if (e.target === bd) bd.classList.remove("open"); })); document.addEventListener("keydown", (e) => { if (e.key === "Escape") document.querySelectorAll(".modal-backdrop.open").forEach((m) => m.classList.remove("open")); }); @@ -2003,7 +2004,8 @@ function initAdmin() { $("#openCompanyDialog")?.addEventListener("click", () => openModal("companyDialog")); $("#companyForm")?.addEventListener("submit", async (event) => { event.preventDefault(); - const data = new FormData(event.currentTarget); + const form = event.currentTarget; + const data = new FormData(form); const companyName = String(data.get("companyName") || "").trim(); const loginName = String(data.get("loginName") || "").trim(); const createUser = data.get("createUser") !== null; @@ -2031,7 +2033,7 @@ function initAdmin() { } const accountCreated = Boolean(result.username); closeModal("companyDialog"); - event.currentTarget.reset(); + form.reset(); await loadAdminCompanies(); showToast( accountCreated ? "公司与账号已创建" : "公司已创建", @@ -2246,7 +2248,8 @@ function initAdmin() { $$("[data-close-opening]").forEach((button) => button.addEventListener("click", () => closeModal("openingDialog"))); $("#openingForm")?.addEventListener("submit", async (event) => { event.preventDefault(); - const data = new FormData(event.currentTarget); + const form = event.currentTarget; + const data = new FormData(form); const fromName = data.get("from"); const toName = data.get("to"); if (fromName === toName) { @@ -2280,7 +2283,7 @@ function initAdmin() { return; } closeModal("openingDialog"); - event.currentTarget.reset(); + form.reset(); await loadOpeningBalances(); await loadCalculationChanges(); await loadCalculationSettings(); @@ -3976,8 +3979,6 @@ function initCompany() { loadCompanyAccounts(); loadImportBatches(); - function openModal(id) { $("#" + id)?.classList.add("open"); } - function closeModal(id) { $("#" + id)?.classList.remove("open"); } $$("[data-close]").forEach((el) => el.addEventListener("click", () => closeModal(el.dataset.close))); $$(".modal-backdrop").forEach((bd) => bd.addEventListener("click", (e) => { if (e.target === bd) bd.classList.remove("open"); })); document.addEventListener("keydown", (e) => { if (e.key === "Escape") $$(".modal-backdrop.open").forEach((m) => m.classList.remove("open")); }); @@ -4115,6 +4116,7 @@ function initCompany() { initReconcile(); (async () => { await loadCompanyWorkspace(); + await loadCompanyCoverageGaps(); await renderReconcileMatchStack(); })(); @@ -4133,7 +4135,8 @@ function initCompany() { }); $("#accountForm")?.addEventListener("submit", async (event) => { event.preventDefault(); - const data = new FormData(event.currentTarget); + const form = event.currentTarget; + const data = new FormData(form); const response = await fetch("/api/company/accounts", { method: "POST", headers: { "Content-Type": "application/json" }, @@ -4154,7 +4157,7 @@ function initCompany() { return; } closeModal("accountDialog"); - event.currentTarget.reset(); + form.reset(); await loadCompanyAccounts(); showToast("银行账户已提交登记", "复核通过前不能上传流水,也不参与账户识别和覆盖计算", "success"); });