blob: ab065b74ae7d8cd096e02ee083882459db3b7b00 [file] [log] [blame]
San3yuan4d0e8032025-04-04 17:21:40 +08001import { createSlice } from '@reduxjs/toolkit';
San3yuana2ee30b2025-06-05 21:20:17 +08002import { isTokenExpired } from '@/utils/jwt';
San3yuan4d0e8032025-04-04 17:21:40 +08003
4interface UserState {
San3yuan6f2ed692025-04-16 20:24:49 +08005 userId: string;
San3yuan4d0e8032025-04-04 17:21:40 +08006 userName: string;
7 role: string;
8 isLogin: boolean;
9 uploadTraffic: number;
10 downloadTraffic: number;
11 downloadPoints: number;
12 avatar: string;
13}
14
15const initialState: UserState = {
San3yuan6f2ed692025-04-16 20:24:49 +080016 userId: '',
San3yuan4d0e8032025-04-04 17:21:40 +080017 userName: '',
18 role: '',
San3yuana2ee30b2025-06-05 21:20:17 +080019 isLogin: localStorage.getItem('token')&& isTokenExpired(localStorage.getItem('token') as string) ==='0' ? true : false,
San3yuan4d0e8032025-04-04 17:21:40 +080020 uploadTraffic: 0,
21 downloadTraffic: 0,
22 downloadPoints: 0,
23 avatar: '',
24};
25
26
27export const userSlice = createSlice({
28 name: 'user',
29 initialState,
30 reducers: {
31 login: (state, action) => {
San3yuanff75c542025-06-06 20:30:52 +080032 console.log(action.payload)
San3yuan6f2ed692025-04-16 20:24:49 +080033 localStorage.setItem('token', action.payload.token);
34 state.isLogin = true;
35 },
36 getUserInfo: (state, action) => {
San3yuan4d0e8032025-04-04 17:21:40 +080037 state.userId = action.payload.userId;
38 state.userName = action.payload.userName;
39 state.role = action.payload.role;
San3yuan4d0e8032025-04-04 17:21:40 +080040 state.uploadTraffic = action.payload.uploadTraffic;
41 state.downloadTraffic = action.payload.downloadTraffic;
42 state.downloadPoints = action.payload.downloadPoints;
43 state.avatar = action.payload.avatar;
San3yuan4d0e8032025-04-04 17:21:40 +080044 },
45 logout: (state) => {
San3yuan6f2ed692025-04-16 20:24:49 +080046 state.userId = '';
San3yuan4d0e8032025-04-04 17:21:40 +080047 state.userName = '';
48 state.role = '';
49 state.isLogin = false;
50 state.uploadTraffic = 0;
51 state.downloadTraffic = 0;
52 state.downloadPoints = 0;
53 state.avatar = '';
54 },
55 updateTraffic: (state, action) => {
56 state.uploadTraffic = action.payload.uploadTraffic;
57 state.downloadTraffic = action.payload.downloadTraffic;
58 state.downloadPoints = action.payload.downloadPoints;
59 },
60 updateAvatar: (state, action) => {
61 state.avatar = action.payload.avatar;
62 }
63 },
64
65});
66
67export const { login, logout, updateTraffic } = userSlice.actions;
68export default userSlice.reducer;