fix: 修复标签栏排序错乱问题
This commit is contained in:
@@ -293,6 +293,10 @@ onBeforeUnmount(() => {
|
||||
const handleSessionsUpdate = (newSessions: SessionTabInfoWithStatus[]) => {
|
||||
// v-model handles updating draggableSessions.value automatically
|
||||
emit('update:sessions', newSessions);
|
||||
// 保存用户自定义顺序到本地存储
|
||||
const sessionOrder = newSessions.map(session => session.sessionId);
|
||||
localStorage.setItem('sessionOrder', JSON.stringify(sessionOrder));
|
||||
console.log('[TabBar] 已保存用户自定义标签顺序到本地存储');
|
||||
};
|
||||
const toggleHeader = () => {
|
||||
if (isWorkspaceRoute.value) {
|
||||
|
||||
@@ -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 => ({
|
||||
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[]; // 用于暂存恢复会话时,在终端实例准备好之前收到的输出
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user