// purchase.js — 采购管理模块 function renderPurchase() { const records = state.data.purchase || []; const money = (v) => `¥ ${(Number(v || 0)).toLocaleString("zh-CN", { minimumFractionDigits: 0, maximumFractionDigits: 2 })}`; const badge = (s) => { const m = { "已审批": "green", "已采购": "blue", "已完成": "slate", "待审批": "amber" }; const c = m[s] || "amber"; return `${s}`; }; const esc = (s) => (s || "").replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); const totalAmount = records.reduce((s, r) => s + (r.amount || 0), 0); document.querySelector("#purchase").innerHTML = `
采购记录${records.length}
采购金额${money(totalAmount)}
待审批${records.filter(r => r.status === '待审批').length}

采购列表 (${records.length})

${records.length ? records.map(r => ``).join("") : ''}
项目名称采购内容供应商金额采购日期状态分类备注
${esc(r.project_name)}${esc(r.purchase_item)}${esc(r.supplier)}${money(r.amount)}${r.purchase_date || '—'}${badge(r.status)}${esc(r.category)}${esc(r.notes) || '—'}
暂无采购记录
合计(${records.length} 条)${money(totalAmount)}
`; if (window.lucide) window.lucide.createIcons(); } window.openPurchaseModal = () => { const form = document.querySelector("#purchaseModal form"); form.reset(); form.querySelector('[name="purchase_id"]').value = ""; document.querySelector("#purchaseModalTitle").textContent = "新增采购"; document.querySelector("#purchaseDeleteBtn").classList.add("hidden"); document.querySelector("#purchaseModal").classList.remove("hidden"); }; window.closePurchaseModal = () => { document.querySelector("#purchaseModal").classList.add("hidden"); }; window.openPurchaseEdit = (id) => { const r = (state.data.purchase || []).find(x => x.id === id); if (!r) return; const form = document.querySelector("#purchaseModal form"); form.reset(); const setVal = (name, val) => { const el = form.querySelector(`[name="${name}"]`); if (el) el.value = val || ""; }; setVal("purchase_id", r.id); setVal("project_name", r.project_name); setVal("purchase_item", r.purchase_item); setVal("supplier", r.supplier); setVal("amount", r.amount); setVal("purchase_date", r.purchase_date); setVal("status", r.status); setVal("category", r.category); setVal("notes", r.notes); document.querySelector("#purchaseModalTitle").textContent = "编辑采购"; document.querySelector("#purchaseDeleteBtn").classList.remove("hidden"); document.querySelector("#purchaseModal").classList.remove("hidden"); }; window.savePurchase = async (event) => { event.preventDefault(); const form = event.target; const data = Object.fromEntries(new FormData(form).entries()); const isEdit = !!data.purchase_id; delete data.purchase_id; const url = isEdit ? `/api/purchase/${form.querySelector('[name="purchase_id"]').value}` : "/api/purchase"; const method = isEdit ? "PUT" : "POST"; const resp = await fetch(url, { method, headers: { "Content-Type": "application/json" }, body: JSON.stringify({ data: { ...data, tenant: state.tenant } }) }); if (!resp.ok) { alert("保存失败"); return; } // Refresh data const bResp = await fetch(`/api/bootstrap?tenant=${encodeURIComponent(state.tenant)}`); if (bResp.ok) { const bd = await bResp.json(); state.data = bd; applyUserTenants(); renderPurchase(); } closePurchaseModal(); }; window.deletePurchaseItem = async () => { const id = document.querySelector("#purchaseModal form [name='purchase_id']").value; if (!id || !confirm("确定删除?")) return; const resp = await fetch(`/api/purchase/${id}`, { method: "DELETE" }); if (!resp.ok) { alert("删除失败"); return; } const bResp = await fetch(`/api/bootstrap?tenant=${encodeURIComponent(state.tenant)}`); if (bResp.ok) { const bd = await bResp.json(); state.data = bd; applyUserTenants(); renderPurchase(); } closePurchaseModal(); };