diff --git a/static/app.js b/static/app.js index 8f02565..675ad03 100644 --- a/static/app.js +++ b/static/app.js @@ -220,6 +220,50 @@ function renderProjects() { `; } +function renderProposals() { + const proposalRows = state.data.proposals.map((p) => [p.customer_or_project_name, p.version, badge(p.status), p.files.length + " 个"]); + const proposalClicks = state.data.proposals.map((p) => ({ resource: "proposals", id: p.id })); + document.querySelector("#proposals").innerHTML = `
+ ${card(formHtml([ + { label: "客户/项目", input: `` }, + { label: "版本号", input: `` }, + { label: "状态", input: `` }, + ], { handler: "createProposal", text: "新增版本" }), "p-4")} + ${renderTable(["客户/项目", "版本号", "状态", "文件数"], proposalRows, proposalClicks)} +
`; +} + +function fileGroup(module, ownerId, version, category, files) { + return `
+

${category}

+
${files.length ? files.map(fileItem).join("") : `

暂无文件

`}
+
`; +} + +function fileItem(file) { + return `

${file.file_name}

`; +} + +window.deleteFile = async (fileId) => { + if (!confirm("确认删除此文件?")) return; + await api(`/api/files/${fileId}`, { method: "DELETE" }); + await load(); + closeDrawer(); +}; + +window.uploadFile = async (event, module, ownerId, version, category) => { + const file = event.target.files[0]; + if (!file) return; + const form = new FormData(); + form.append("module", module); + form.append("owner_id", ownerId); + form.append("owner_version", version); + form.append("file_category", category); + form.append("file", file); + await api("/api/files/upload", { method: "POST", body: form }); + await load(); +}; + function renderProducts() { const items = state.productPlatform === "all" ? state.data.products : state.data.products.filter((x) => (x.platform || "") === state.productPlatform); document.querySelector("#products").innerHTML = `