This commit is contained in:
hailin 2025-04-02 22:47:27 +08:00
parent 17eef2e5de
commit 17bd1c941c
1 changed files with 14 additions and 17 deletions

View File

@ -403,21 +403,18 @@ export function Header() {
export function DetailPageHeader({ data }: { data: any }) {
const [loading, setLoading] = useState(false);
const [statusText, setStatusText] = useState(data?.statusText || "加载中...");
const [progress, setProgress] = useState(data?.progress || "0%");
const [showDelete, setShowDelete] = useState(true);
const [showDelete, setShowDelete] = useState(false); // 默认隐藏避免闪烁
const [hasWSConnected, setHasWSConnected] = useState(false);
const socketRef = useRef<WebSocket | null>(null); // ✅ 引用存 WebSocket 实例
const [statusLoaded, setStatusLoaded] = useState(false); // 👈 状态是否加载完成
const [statusLoaded, setStatusLoaded] = useState(false);
const socketRef = useRef<WebSocket | null>(null);
// ✅ 提取 WebSocket 初始化逻辑
// ✅ 初始化 WebSocket
const initWebSocket = (userName: string, id: number) => {
if (socketRef.current) {
socketRef.current.close(); // 关闭旧连接
}
if (socketRef.current) socketRef.current.close();
const wsBase = process.env.NEXT_PUBLIC_CLIENT_BASE_WS;
const socket = new WebSocket(`${wsBase}/status/${userName}/${id}`);
@ -453,7 +450,6 @@ export function DetailPageHeader({ data }: { data: any }) {
setHasWSConnected(true);
};
// ✅ 部署请求
const handleClick = async (source: "icon" | "info") => {
setLoading(true);
setStatusText(source === "icon" ? "正在处理图标操作..." : "正在处理信息操作...");
@ -506,7 +502,7 @@ export function DetailPageHeader({ data }: { data: any }) {
}
};
// ✅ 页面加载时自动拉状态 & 触发 WebSocket如 status 为 deploying
// ✅ 取部署状态
useEffect(() => {
const fetchDeployStatus = async () => {
try {
@ -516,14 +512,14 @@ export function DetailPageHeader({ data }: { data: any }) {
body: JSON.stringify({ id: data?.id }),
}).then((res) => res.json());
console.log("==================>result:", result);
console.log("====> deploy status result:", result);
const status = result?.data?.status;
const status = result?.data?.data?.status;
const userData = JSON.parse(localStorage.getItem("UserData") || "null");
const userName = userData?.user_name;
const id = data?.id;
setStatusLoaded(true); // 在 fetch 成功最后加这句
setStatusLoaded(true);
if (status === "deploying" && userName && id && !hasWSConnected) {
setStatusText("检测到正在部署,连接中...");
@ -537,14 +533,13 @@ export function DetailPageHeader({ data }: { data: any }) {
}
setStatusText(result.header.message || "部署成功");
// ✅ 只在 running / stopped 状态下显示删除按钮
// ✅ 只在 running / stopped 显示删除按钮
if (status === "running" || status === "stopped") {
setShowDelete(true);
} else {
setShowDelete(false);
}
setProgress(result.data?.progress || "0%");
} catch (err) {
console.error("请求部署状态失败:", err);
setStatusText("请求失败");
@ -555,7 +550,7 @@ export function DetailPageHeader({ data }: { data: any }) {
fetchDeployStatus();
}, [data?.id]);
// ✅ 页面卸载时关闭 WebSocket
// ✅ 卸载时关闭 WebSocket
useEffect(() => {
return () => {
if (socketRef.current) {
@ -638,6 +633,8 @@ export function DetailPageHeader({ data }: { data: any }) {
}
// export function Header() {
// const router = useRouter();