fix(fe): resolve tab overflow eviction and router synchronization bugs when closing active tabs

This commit is contained in:
2026-08-15 20:57:27 +09:00
parent c1e1221bda
commit 62348d94c2
2 changed files with 22 additions and 4 deletions
+10
View File
@@ -15,7 +15,17 @@ const handleTabClick = (path: string) => {
const handleCloseTab = (event: Event, tabId: string) => {
event.stopPropagation()
const wasActive = activeTabId.value === tabId
layoutStore.closeTab(tabId)
if (wasActive) {
const nextActiveTab = tabs.value.find(t => t.id === layoutStore.activeTabId)
if (nextActiveTab) {
router.push(nextActiveTab.path)
} else {
router.push('/home')
}
}
}
const handleCloseOther = (tabId: string) => {
+12 -4
View File
@@ -45,24 +45,32 @@ export const useLayoutStore = defineStore('layout', () => {
// Tab management
const addTab = (tab: Omit<OpenedTab, 'timestamp'>) => {
// Check if tab already exists
// Standardize tab ID based on path to prevent duplicates
const tabId = tab.id || `tab-${tab.path}`
const existing = openedTabs.value.find(t => t.path === tab.path)
if (existing) {
activeTabId.value = existing.id
return
}
// Respect max tabs limit
// Respect max tabs limit (FIFO eviction)
if (openedTabs.value.length >= maxTabs.value) {
openedTabs.value.shift() // Remove oldest tab
// Find oldest tab that is NOT currently active if possible
const oldestIndex = openedTabs.value.findIndex(t => t.id !== activeTabId.value)
if (oldestIndex !== -1) {
openedTabs.value.splice(oldestIndex, 1)
} else {
openedTabs.value.shift()
}
}
const newTab: OpenedTab = {
...tab,
id: tabId,
timestamp: Date.now(),
}
openedTabs.value.push(newTab)
activeTabId.value = tab.id
activeTabId.value = newTab.id
saveTabs()
}