fix: 修复标签栏排序错乱问题

This commit is contained in:
Baobhan Sith
2025-05-13 19:35:05 +08:00
parent 13066c8b71
commit 97df12f8a7
4 changed files with 47 additions and 6 deletions
@@ -64,6 +64,7 @@ export const openNewSession = (
activeEditorTabId: ref(null),
commandInputContent: ref(''),
isMarkedForSuspend: false,
createdAt: Date.now(),
disposables: [],
};
@@ -13,12 +13,47 @@ export const sessionTabs = computed(() => {
// 包含状态的标签页信息
export const sessionTabsWithStatus = computed((): SessionTabInfoWithStatus[] => {
return Array.from(sessions.value.values()).map(session => ({
sessionId: session.sessionId,
connectionName: session.connectionName,
status: session.wsManager.connectionStatus.value, // 从 wsManager 获取状态
isMarkedForSuspend: session.isMarkedForSuspend,
}));
const sessionOrderStr = localStorage.getItem('sessionOrder');
let sessionOrder: string[] = [];
if (sessionOrderStr) {
try {
sessionOrder = JSON.parse(sessionOrderStr);
console.log('[SessionGetters] 使用本地存储的用户自定义标签顺序');
} catch (e) {
console.error('[SessionGetters] 解析本地存储的标签顺序失败:', e);
sessionOrder = [];
}
}
const sessionList = Array.from(sessions.value.values());
if (sessionOrder.length > 0) {
// 按照用户自定义顺序排序
return sessionList
.sort((a, b) => {
const indexA = sessionOrder.indexOf(a.sessionId);
const indexB = sessionOrder.indexOf(b.sessionId);
if (indexA === -1 && indexB === -1) return a.createdAt - b.createdAt;
if (indexA === -1) return 1;
if (indexB === -1) return -1;
return indexA - indexB;
})
.map(session => ({
sessionId: session.sessionId,
connectionName: session.connectionName,
status: session.wsManager.connectionStatus.value, // 从 wsManager 获取状态
isMarkedForSuspend: session.isMarkedForSuspend,
}));
} else {
// 如果没有自定义顺序,则按照创建时间排序
return sessionList
.sort((a, b) => a.createdAt - b.createdAt)
.map(session => ({
sessionId: session.sessionId,
connectionName: session.connectionName,
status: session.wsManager.connectionStatus.value, // 从 wsManager 获取状态
isMarkedForSuspend: session.isMarkedForSuspend,
}));
}
});
export const activeSession = computed((): SessionState | null => {
@@ -43,6 +43,7 @@ export interface SessionState {
commandInputContent: Ref<string>; // 当前会话的命令输入框内容
isResuming?: boolean; // 标记会话是否正在从挂起状态恢复
isMarkedForSuspend?: boolean; // +++ 标记会话是否已被用户请求标记为待挂起 +++
createdAt: number; // 记录会话创建的时间戳,用于排序
disposables?: (() => void)[]; // 用于存储清理函数,例如取消注册消息处理器
pendingOutput?: string[]; // 用于暂存恢复会话时,在终端实例准备好之前收到的输出
}