Compare commits

...

2 Commits

Author SHA1 Message Date
mac
c4aacd5096 v1.7.6 — 项目抽屉增加红色删除按钮+确认对话框 2026-06-16 14:16:32 +08:00
mac
4f7db75a7f v1.7.5 — 任务页工具栏与卡片对齐 2026-06-16 11:26:17 +08:00

View File

@@ -263,7 +263,7 @@ function renderProjectTasks(projectId) {
const tasks = (state.data.tasks || []).filter((t) => t.project_id === projectId);
const phases = ["商务洽谈", "系统上线", "团队分工", "项目交付", "上线推广", "结项验收"];
document.querySelector("#projects").innerHTML = `<div class="grid gap-4">
<div class="flex items-center justify-between">
<div class="flex items-center justify-between px-5">
<button class="btn btn-ghost btn-sm" onclick="state.projectView=null;renderProjects()"><i data-lucide="arrow-left"></i>返回项目列表</button>
<div class="flex items-center gap-3">
<span class="text-sm font-semibold text-slate-700">${project.project_name}</span>
@@ -466,7 +466,7 @@ function openDrawer(resource, id) {
const multilineFields = ["customer_need", "current_deliverable", "risks", "next_action", "version_goal", "feature_list", "notes"];
const followupTarget = resource === "sales" ? "sales" : resource === "proposals" ? "proposal" : resource === "operations" ? "operation" : resource === "products" ? "product" : "";
const title = item.target_customer || item.project_name || item.customer_or_project_name || item.product_name;
drawer.innerHTML = `<div class="drawer-panel"><div class="sticky top-0 z-10 flex items-center justify-between border-b border-slate-200 bg-white/95 px-5 py-3 backdrop-blur"><div><p class="text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-400">Detail Drawer</p><div class="flex items-center gap-2"><h2 class="drawer-title text-[17px] font-semibold leading-6 text-slate-900">${title}</h2><span id="drawerSaveStatus" class="save-status"></span></div></div><button class="btn btn-ghost btn-sm" onclick="closeDrawer()">关闭</button></div><div class="grid gap-5 p-5">
drawer.innerHTML = `<div class="drawer-panel"><div class="sticky top-0 z-10 flex items-center justify-between border-b border-slate-200 bg-white/95 px-5 py-3 backdrop-blur"><div><p class="text-[10px] font-semibold uppercase tracking-[0.18em] text-slate-400">Detail Drawer</p><div class="flex items-center gap-2"><h2 class="drawer-title text-[17px] font-semibold leading-6 text-slate-900">${title}</h2><span id="drawerSaveStatus" class="save-status"></span></div></div><div class="flex items-center gap-2"><button class="btn btn-ghost btn-sm text-red-600 hover:bg-red-50" onclick="deleteOperation(${id})"><i data-lucide="trash-2"></i>删除</button><button class="btn btn-ghost btn-sm" onclick="closeDrawer()">关闭</button></div></div><div class="grid gap-5 p-5">
<section>
<h3 class="drawer-section-title">属性</h3>
<form id="drawerForm" class="drawer-fields">
@@ -568,6 +568,16 @@ function bindDrawerAutosave(resource, id, item) {
window.openDrawer = openDrawer;
window.deleteOperation = async (id) => {
if (!confirm("确认删除该项目?此操作不可撤销。")) return;
try {
await api(`/api/operations/${id}`, { method: "DELETE" });
closeDrawer();
await load();
} catch (error) {
alert("删除失败:" + error.message);
}
};
window.closeDrawer = () => document.querySelector("#drawer").classList.remove("open");
window.squireInstances = {};
window.squireCmd = (cmd) => {