import { createSlice, PayloadAction } from '@reduxjs/toolkit' export interface Tab { id: string title: string path: string closable: boolean } interface TabsState { tabs: Tab[] activeId: string | null } const initialState: TabsState = { tabs: [{ id: 'main', title: '主页', path: '/', closable: false }], activeId: 'main', } const tabsSlice = createSlice({ name: 'tabs', initialState, reducers: { openTab(state, action: PayloadAction) { const existing = state.tabs.find(t => t.id === action.payload.id) if (existing) { existing.path = action.payload.path } else { state.tabs.push(action.payload) } state.activeId = action.payload.id }, closeTab(state, action: PayloadAction) { const idx = state.tabs.findIndex(t => t.id === action.payload) if (idx === -1) return state.tabs.splice(idx, 1) if (state.activeId === action.payload) { const newIdx = Math.min(idx, state.tabs.length - 1) state.activeId = state.tabs[newIdx]?.id ?? null } }, activateTab(state, action: PayloadAction) { state.activeId = action.payload }, updateTabPath(state, action: PayloadAction<{ id: string; path: string }>) { const tab = state.tabs.find(t => t.id === action.payload.id) if (tab) tab.path = action.payload.path }, }, }) export const { openTab, closeTab, activateTab, updateTabPath } = tabsSlice.actions export default tabsSlice.reducer