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