|
|
|
@@ -193,6 +193,7 @@ window.openTaskForm = (projectId, taskId) => {
|
|
|
|
document.querySelector(`#task-owner-${projectId}`).value = task.owner || "";
|
|
|
|
document.querySelector(`#task-owner-${projectId}`).value = task.owner || "";
|
|
|
|
document.querySelector(`#task-due-${projectId}`).value = task.due_date || "";
|
|
|
|
document.querySelector(`#task-due-${projectId}`).value = task.due_date || "";
|
|
|
|
document.querySelector(`#task-notes-${projectId}`).value = task.notes || "";
|
|
|
|
document.querySelector(`#task-notes-${projectId}`).value = task.notes || "";
|
|
|
|
|
|
|
|
document.querySelector(`#task-blockers-${projectId}`).value = task.blockers || "";
|
|
|
|
document.querySelector(`#task-submit-btn-${projectId}`).textContent = "保存修改";
|
|
|
|
document.querySelector(`#task-submit-btn-${projectId}`).textContent = "保存修改";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
form.scrollIntoView({ behavior: "smooth" });
|
|
|
|
form.scrollIntoView({ behavior: "smooth" });
|
|
|
|
@@ -266,6 +267,7 @@ function showTaskModal(projectId) {
|
|
|
|
<label class="task-field"><span>负责人</span><input name="owner" id="task-owner-${projectId}"></label>
|
|
|
|
<label class="task-field"><span>负责人</span><input name="owner" id="task-owner-${projectId}"></label>
|
|
|
|
<label class="task-field"><span>截止时间</span><input name="due_date" type="date" id="task-due-${projectId}"></label>
|
|
|
|
<label class="task-field"><span>截止时间</span><input name="due_date" type="date" id="task-due-${projectId}"></label>
|
|
|
|
<label class="task-field col-span-2"><span>任务说明</span><textarea name="notes" rows="2" id="task-notes-${projectId}"></textarea></label>
|
|
|
|
<label class="task-field col-span-2"><span>任务说明</span><textarea name="notes" rows="2" id="task-notes-${projectId}"></textarea></label>
|
|
|
|
|
|
|
|
<label class="task-field col-span-2"><span>卡点&备注</span><textarea name="blockers" rows="2" id="task-blockers-${projectId}" placeholder="风险卡点、依赖项等"></textarea></label>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="flex justify-end gap-2 mt-3">
|
|
|
|
<div class="flex justify-end gap-2 mt-3">
|
|
|
|
<button type="button" class="btn btn-ghost btn-sm" onclick="document.querySelector('#task-form-${projectId}').classList.add('hidden')">取消</button>
|
|
|
|
<button type="button" class="btn btn-ghost btn-sm" onclick="document.querySelector('#task-form-${projectId}').classList.add('hidden')">取消</button>
|
|
|
|
@@ -275,7 +277,7 @@ function showTaskModal(projectId) {
|
|
|
|
${phases.map((phase) => {
|
|
|
|
${phases.map((phase) => {
|
|
|
|
const pt = tasks.filter((t) => t.phase === phase);
|
|
|
|
const pt = tasks.filter((t) => t.phase === phase);
|
|
|
|
if (!pt.length) return "";
|
|
|
|
if (!pt.length) return "";
|
|
|
|
return `<div class="task-group"><div class="task-group-hd"><span class="task-group-icon"><i data-lucide="layers"></i></span><span class="task-group-label">${phase}</span><span class="task-group-n">${pt.length}</span></div><div class="task-group-list">${pt.map((t) => `<div class="task-row" data-id="${t.id}" onclick="event.stopPropagation(); openTaskForm(${projectId}, ${t.id})"><span class="task-dot"><i data-lucide="${t.status === 'done' ? 'check-circle' : 'circle'}"></i></span><div class="task-main"><span class="task-name">${t.task}</span>${t.notes ? `<span class="task-desc">${t.notes}</span>` : ""}</div><span class="task-col">${t.owner || ""}</span><span class="task-col-badge">${t.due_date || ""}</span></div>`).join("")}</div></div>`;
|
|
|
|
return `<div class="task-group"><div class="task-group-hd"><span class="task-group-icon"><i data-lucide="layers"></i></span><span class="task-group-label">${phase}</span><span class="task-group-n">${pt.length}</span></div><div class="task-group-list">${pt.map((t) => `<div class="task-row" data-id="${t.id}" onclick="event.stopPropagation(); openTaskForm(${projectId}, ${t.id})"><span class="task-dot"><i data-lucide="${t.status === 'done' ? 'check-circle' : 'circle'}"></i></span><div class="task-main"><span class="task-name">${t.task}</span>${t.notes ? `<span class="task-desc">${t.notes}</span>` : ""}${t.blockers ? `<span class="task-blocker">⚠ ${t.blockers}</span>` : ""}</div><span class="task-col">${t.owner || ""}</span><span class="task-col-badge">${t.due_date || ""}</span></div>`).join("")}</div></div>`;
|
|
|
|
}).join("")}</div></div></div>`;
|
|
|
|
}).join("")}</div></div></div>`;
|
|
|
|
document.querySelector("#taskModal").classList.add("active");
|
|
|
|
document.querySelector("#taskModal").classList.add("active");
|
|
|
|
if (window.lucide) window.lucide.createIcons();
|
|
|
|
if (window.lucide) window.lucide.createIcons();
|
|
|
|
|