// REQ-USR-004: 全局登录态(token + user)。token 持久化到 localStorage(D6)。 import { createSlice, type PayloadAction } from '@reduxjs/toolkit'; import { TOKEN_STORAGE_KEY } from '../../api/request'; import type { AuthUser } from '../../api/types'; export interface AuthState { token: string | null; user: AuthUser | null; } const initialState: AuthState = { token: localStorage.getItem(TOKEN_STORAGE_KEY), user: null, }; const authSlice = createSlice({ name: 'auth', initialState, reducers: { // 写 token + user,并持久化 token(reducer 内副作用为 MVP 取舍,全项目统一,D6) setCredentials(state, action: PayloadAction<{ token: string; user: AuthUser }>) { state.token = action.payload.token; state.user = action.payload.user; localStorage.setItem(TOKEN_STORAGE_KEY, action.payload.token); }, // 清登录态并移除持久化 token clearCredentials(state) { state.token = null; state.user = null; localStorage.removeItem(TOKEN_STORAGE_KEY); }, }, }); export const { setCredentials, clearCredentials } = authSlice.actions; export default authSlice.reducer;