fix: 修复移动端恢复不了挂起会话的问题

This commit is contained in:
Baobhan Sith
2025-05-10 13:43:40 +08:00
parent 3980145188
commit 0031c2f717
3 changed files with 39 additions and 10 deletions
@@ -23,7 +23,7 @@ const findConnectionInfo = (connectionId: number | string, connectionsStore: Ret
// --- Actions ---
export const openNewSession = (
connectionId: number | string,
connectionOrId: ConnectionInfo | number | string,
dependencies: {
connectionsStore: ReturnType<typeof useConnectionsStore>;
t: ReturnType<typeof useI18n>['t'];
@@ -31,16 +31,26 @@ export const openNewSession = (
existingSessionId?: string // 新增:可选的预定义会话 ID
) => {
const { connectionsStore, t } = dependencies;
console.log(`[SessionActions] 请求打开新会话: ${connectionId}${existingSessionId ? `, 使用预定义 ID: ${existingSessionId}` : ''}`);
const connInfo = findConnectionInfo(connectionId, connectionsStore);
let connInfo: ConnectionInfo | undefined;
let connIdForLog: string | number;
if (typeof connectionOrId === 'object' && connectionOrId !== null && 'id' in connectionOrId) {
connInfo = connectionOrId as ConnectionInfo;
connIdForLog = connInfo.id;
} else {
connIdForLog = connectionOrId as number | string;
connInfo = findConnectionInfo(connIdForLog, connectionsStore);
}
console.log(`[SessionActions] 请求打开新会话: ${connIdForLog}${existingSessionId ? `, 使用预定义 ID: ${existingSessionId}` : ''}`);
if (!connInfo) {
console.error(`[SessionActions] 无法打开新会话:找不到 ID 为 ${connectionId} 的连接信息。`);
console.error(`[SessionActions] 无法打开新会话:找不到 ID 为 ${connIdForLog} 的连接信息。`);
// TODO: 向用户显示错误
return;
}
const newSessionId = existingSessionId || generateSessionId();
const dbConnId = String(connInfo.id);
const dbConnId = String(connInfo.id); // connInfo is now guaranteed to be defined here
// 1. 创建管理器实例
const isResume = !!existingSessionId; // 如果提供了 existingSessionId,则为恢复流程
@@ -225,11 +225,18 @@ export const resumeSshSession = async (suspendSessionId: string): Promise<void>
const newFrontendSessionId = uuidv4(); // 为恢复的会话生成新的前端 ID
try {
console.log(`[${t('term.sshSuspend')}] 准备恢复会话 ${suspendSessionId}。将创建新前端会话 ${newFrontendSessionId} 并连接 WebSocket。`);
// +++ 先从 connectionsStore 获取完整的 ConnectionInfo +++
const connectionInfo = connectionsStore.connections.find(c => c.id === originalConnectionId);
if (!connectionInfo) {
console.error(`[${t('term.sshSuspend')}] 恢复操作失败:在 Connection Store 中未找到原始连接配置 (ID: ${originalConnectionId})。`);
uiNotificationsStore.addNotification({ type: 'error', message: t('sshSuspend.notifications.resumeErrorConnectionConfigNotFound', { id: String(originalConnectionId) }) });
return;
}
console.log(`[${t('term.sshSuspend')}] 已找到原始连接配置 (ID: ${originalConnectionId}),准备使用它恢复会话 ${suspendSessionId}。将创建新前端会话 ${newFrontendSessionId} 并连接 WebSocket。`);
// 1. 调用 openNewSession 创建前端会话状态、WebSocket 连接等
// 1. 调用 openNewSession 创建前端会话状态、WebSocket 连接等,传入完整的 connectionInfo
openNewSession(
originalConnectionId,
connectionInfo, // +++ 传入完整的 ConnectionInfo 对象 +++
{ connectionsStore, t }, // 传递依赖
newFrontendSessionId // 将 newFrontendSessionId 作为 existingSessionId 传递
);