diff --git a/static/app.js b/static/app.js index fbca030..e101b51 100644 --- a/static/app.js +++ b/static/app.js @@ -171,21 +171,54 @@ window.createProposal = (event) => createResource(event, "proposals"); window.createOperation = (event) => createResource(event, "operations"); window.createProduct = (event) => createResource(event, "products"); -async function createTask(event, projectId) { +window.openTaskForm = (projectId, taskId) => { + const form = document.querySelector(`#task-form-${projectId}`); + form.classList.remove("hidden"); + if (taskId === null) { + // new task + document.querySelector(`#task-id-${projectId}`).value = ""; + document.querySelector(`#task-name-${projectId}`).value = ""; + document.querySelector(`#task-phase-${projectId}`).value = "项目准备"; + document.querySelector(`#task-owner-${projectId}`).value = ""; + document.querySelector(`#task-due-${projectId}`).value = ""; + document.querySelector(`#task-notes-${projectId}`).value = ""; + document.querySelector(`#task-submit-btn-${projectId}`).textContent = "确认新增"; + } else { + // edit task + const task = (state.data.tasks || []).find((t) => t.id === taskId); + if (!task) return; + document.querySelector(`#task-id-${projectId}`).value = task.id; + document.querySelector(`#task-name-${projectId}`).value = task.task || ""; + document.querySelector(`#task-phase-${projectId}`).value = task.phase || "项目准备"; + document.querySelector(`#task-owner-${projectId}`).value = task.owner || ""; + document.querySelector(`#task-due-${projectId}`).value = task.due_date || ""; + document.querySelector(`#task-notes-${projectId}`).value = task.notes || ""; + document.querySelector(`#task-submit-btn-${projectId}`).textContent = "保存修改"; + } + form.scrollIntoView({ behavior: "smooth" }); +}; + +window.submitTaskForm = async (event, projectId) => { event.preventDefault(); const form = event.currentTarget; const data = Object.fromEntries(new FormData(form).entries()); data.project_id = projectId; + const taskId = data.task_id; + delete data.task_id; try { - await api("/api/tasks", { method: "POST", body: JSON.stringify({ data }) }); + if (taskId) { + await api(`/api/tasks/${taskId}`, { method: "PUT", body: JSON.stringify({ data }) }); + } else { + await api("/api/tasks", { method: "POST", body: JSON.stringify({ data }) }); + } form.reset(); form.classList.add("hidden"); await load(); showTaskModal(projectId); } catch (error) { - alert("创建失败:" + error.message); + alert("保存失败:" + error.message); } -} +}; window.createFinance = (event) => createResource(event, "finance"); window.switchTab = switchTab; @@ -224,24 +257,25 @@ function showTaskModal(projectId) { const project = state.data.operations.find((x) => x.id === projectId); const tasks = (state.data.tasks || []).filter((t) => t.project_id === projectId); const phases = ["项目准备", "项目执行", "项目验收", "验收完毕"]; - document.querySelector("#taskModal").innerHTML = `