import { createSlice, type PayloadAction } from '@reduxjs/toolkit' import { TOKEN_KEY } from '@/api/request' import type { UserInfo } from '@/api/types' const USER_KEY = 'erp.user' function loadUser(): UserInfo | null { const raw = sessionStorage.getItem(USER_KEY) if (!raw) return null try { return JSON.parse(raw) as UserInfo } catch { return null } } interface AuthState { token: string | null user: UserInfo | null } const initialState: AuthState = { token: sessionStorage.getItem(TOKEN_KEY), user: loadUser(), } const slice = createSlice({ name: 'auth', initialState, reducers: { loginSucceeded(state, action: PayloadAction<{ token: string; user: UserInfo }>) { state.token = action.payload.token state.user = action.payload.user sessionStorage.setItem(TOKEN_KEY, action.payload.token) sessionStorage.setItem(USER_KEY, JSON.stringify(action.payload.user)) }, loggedOut(state) { state.token = null state.user = null sessionStorage.removeItem(TOKEN_KEY) sessionStorage.removeItem(USER_KEY) }, }, }) export const { loginSucceeded, loggedOut } = slice.actions export default slice.reducer