deploy-ease-platform/frontend/src/store/userSlice.ts
2024-11-30 08:33:01 +08:00

51 lines
1.3 KiB
TypeScript

import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import type { MenuResponse } from '@/pages/System/Menu/types';
interface UserInfo {
id: number;
username: string;
nickname?: string;
email?: string;
phone?: string;
}
interface UserState {
token: string | null;
userInfo: UserInfo | null;
menus: MenuResponse[];
}
const initialState: UserState = {
token: localStorage.getItem('token'),
userInfo: null,
menus: []
};
const userSlice = createSlice({
name: 'user',
initialState,
reducers: {
setToken: (state, action: PayloadAction<string>) => {
state.token = action.payload;
localStorage.setItem('token', action.payload);
},
setUserInfo: (state, action: PayloadAction<UserInfo>) => {
state.userInfo = action.payload;
localStorage.setItem('userInfo', JSON.stringify(action.payload));
},
setMenus: (state, action: PayloadAction<MenuResponse[]>) => {
state.menus = action.payload;
},
logout: (state) => {
state.token = null;
state.userInfo = null;
state.menus = [];
localStorage.removeItem('token');
localStorage.removeItem('tenantId');
localStorage.removeItem('userInfo');
}
}
});
export const { setToken, setUserInfo, setMenus, logout } = userSlice.actions;
export default userSlice.reducer;