fix: 修复标签栏排序错乱问题
This commit is contained in:
@@ -293,6 +293,10 @@ onBeforeUnmount(() => {
|
|||||||
const handleSessionsUpdate = (newSessions: SessionTabInfoWithStatus[]) => {
|
const handleSessionsUpdate = (newSessions: SessionTabInfoWithStatus[]) => {
|
||||||
// v-model handles updating draggableSessions.value automatically
|
// v-model handles updating draggableSessions.value automatically
|
||||||
emit('update:sessions', newSessions);
|
emit('update:sessions', newSessions);
|
||||||
|
// 保存用户自定义顺序到本地存储
|
||||||
|
const sessionOrder = newSessions.map(session => session.sessionId);
|
||||||
|
localStorage.setItem('sessionOrder', JSON.stringify(sessionOrder));
|
||||||
|
console.log('[TabBar] 已保存用户自定义标签顺序到本地存储');
|
||||||
};
|
};
|
||||||
const toggleHeader = () => {
|
const toggleHeader = () => {
|
||||||
if (isWorkspaceRoute.value) {
|
if (isWorkspaceRoute.value) {
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ export const openNewSession = (
|
|||||||
activeEditorTabId: ref(null),
|
activeEditorTabId: ref(null),
|
||||||
commandInputContent: ref(''),
|
commandInputContent: ref(''),
|
||||||
isMarkedForSuspend: false,
|
isMarkedForSuspend: false,
|
||||||
|
createdAt: Date.now(),
|
||||||
disposables: [],
|
disposables: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,47 @@ export const sessionTabs = computed(() => {
|
|||||||
|
|
||||||
// 包含状态的标签页信息
|
// 包含状态的标签页信息
|
||||||
export const sessionTabsWithStatus = computed((): SessionTabInfoWithStatus[] => {
|
export const sessionTabsWithStatus = computed((): SessionTabInfoWithStatus[] => {
|
||||||
return Array.from(sessions.value.values()).map(session => ({
|
const sessionOrderStr = localStorage.getItem('sessionOrder');
|
||||||
sessionId: session.sessionId,
|
let sessionOrder: string[] = [];
|
||||||
connectionName: session.connectionName,
|
if (sessionOrderStr) {
|
||||||
status: session.wsManager.connectionStatus.value, // 从 wsManager 获取状态
|
try {
|
||||||
isMarkedForSuspend: session.isMarkedForSuspend,
|
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 => {
|
export const activeSession = computed((): SessionState | null => {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ export interface SessionState {
|
|||||||
commandInputContent: Ref<string>; // 当前会话的命令输入框内容
|
commandInputContent: Ref<string>; // 当前会话的命令输入框内容
|
||||||
isResuming?: boolean; // 标记会话是否正在从挂起状态恢复
|
isResuming?: boolean; // 标记会话是否正在从挂起状态恢复
|
||||||
isMarkedForSuspend?: boolean; // +++ 标记会话是否已被用户请求标记为待挂起 +++
|
isMarkedForSuspend?: boolean; // +++ 标记会话是否已被用户请求标记为待挂起 +++
|
||||||
|
createdAt: number; // 记录会话创建的时间戳,用于排序
|
||||||
disposables?: (() => void)[]; // 用于存储清理函数,例如取消注册消息处理器
|
disposables?: (() => void)[]; // 用于存储清理函数,例如取消注册消息处理器
|
||||||
pendingOutput?: string[]; // 用于暂存恢复会话时,在终端实例准备好之前收到的输出
|
pendingOutput?: string[]; // 用于暂存恢复会话时,在终端实例准备好之前收到的输出
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user