From 25e785fdd727efa9ef2421010668e6d3ff451afb Mon Sep 17 00:00:00 2001 From: hailin Date: Thu, 3 Apr 2025 09:23:20 +0800 Subject: [PATCH] . --- apps/blogai/components/header.tsx | 56 ++++++++++++++++++++++++++++--- 1 file changed, 52 insertions(+), 4 deletions(-) diff --git a/apps/blogai/components/header.tsx b/apps/blogai/components/header.tsx index 78eea4e..bea1a12 100644 --- a/apps/blogai/components/header.tsx +++ b/apps/blogai/components/header.tsx @@ -490,14 +490,62 @@ export function DetailPageHeader({ data }: { data: any }) { } }; - const handleDelete = () => { + const handleDelete = async () => { if (loading) return; - if (window.confirm("确定要删除吗?")) { - setLoading(true); - console.log("模拟删除执行..."); + + const confirmed = window.confirm("确定要删除该部署吗?"); + if (!confirmed) return; + + setLoading(true); + setStatusText("正在删除部署..."); + setProgressBarColor("bg-gray-400"); + + try { + const userData = JSON.parse(localStorage.getItem("UserData") || "null"); + const userName = userData?.user_name; + const id = data?.id; + + if (!userName || !id) { + setStatusText("缺少 user_name 或 id"); + return; + } + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), 10_000); // ⏰ 10秒超时 + + const res = await fetch("/api/v1/deploy/delete", { + method: "POST", + headers: { "Content-Type": "application/json" }, + signal: controller.signal, + body: JSON.stringify({ user_name: userName, id }), + }); + + clearTimeout(timeoutId); // ✅ 成功返回前清除 timeout + + if (!res.ok) { + throw new Error(`HTTP 请求失败: ${res.status}`); + } + + const json = await res.json(); + if (json?.header?.code === 0) { + setStatusText("删除成功"); + setProgress("0%"); + setShowDelete(false); // 删除成功后隐藏按钮 + } else { + setStatusText(json?.header?.message || "删除失败(后端返回错误)"); + } + } catch (err) { + if ((err as any).name === "AbortError") { + setStatusText("请求超时(超过10秒)"); + } else { + console.error("删除请求出错:", err); + setStatusText("删除失败,请检查网络"); + } + } finally { setLoading(false); } }; + useEffect(() => { const fetchDeployStatus = async () => {