import {createSlice, PayloadAction } from '@reduxjs/toolkit'; import Taro from '@tarojs/taro'; interface UserState { id:string|null; nickname: string | null; avatar: string | null; token: string | null; scenario_select_count: number | 0; isLogin: boolean; } // const initialState: UserState = await getUserDataFromLocalStorage(); const initialState: UserState = { id:null, isLogin: false, nickname: null, avatar: null, scenario_select_count: 0, token: null, } const userSlice = createSlice({ name: 'user', initialState, reducers: { loginSuccess(state, action: PayloadAction) { const { id,nickname, avatar, token,scenario_select_count } = action.payload; state.id = id; state.nickname = nickname; state.avatar = avatar; state.token = token; state.scenario_select_count = scenario_select_count; state.isLogin = true; global.token = token; Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) }); }, registerSuccess(state, action: PayloadAction) { const { id,nickname, avatar, token,scenario_select_count } = action.payload; state.id = id; state.nickname = nickname; state.avatar = avatar; state.token = token; state.scenario_select_count = scenario_select_count; state.isLogin = true; global.token = token; Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) }); }, logoutSuccess(state) { debugger state.id = null; state.nickname = null; state.avatar = null; state.token = null; state.isLogin = false; state.scenario_select_count = 0; global.token = ''; Taro.clearStorage(); }, clearSuccess(state) { debugger state.id = null; state.nickname = null; state.avatar = null; state.token = null; state.isLogin = false; state.scenario_select_count = 0; global.token = ''; Taro.clearStorage(); }, getInfoSuccess(state, action: PayloadAction) { const {id, nickname, avatar, token,scenario_select_count } = action.payload; state.id = id; state.nickname = nickname; state.avatar = avatar; state.token = token; state.scenario_select_count = scenario_select_count; state.isLogin = true; global.token = token; Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) }); }, updateSuccess(state, action: PayloadAction) { const { nickname, avatar, token } = action.payload; state.nickname = nickname; state.avatar = avatar; state.token = token; state.isLogin = true; Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) }); } }, }); export const { loginSuccess, registerSuccess, logoutSuccess, getInfoSuccess, updateSuccess, clearSuccess } = userSlice.actions; export default userSlice.reducer; // export const login = (username: string, password: string) => (dispatch: any) => { // request({ // url: API_LOGIN, method: 'POST', data: { username, password } // }).then(res => { // dispatch(loginSuccess(res)); // }) // } // export const wxLogin = createAsyncThunk('user/wxLogin', async (payload: { code: string, encryptedData: string,iv:string }, { dispatch }) => { // console.log(payload.code) // request({ // url: API_LOGIN, method: 'POST', // data: { // code: payload.code, // type: 'WX_MP', // app_version: '1', // client_version: '1', // client_type: 'WX_MP', // extra: { // encryptedData: payload.encryptedData, // iv: payload.iv // } // } // }).then(res => { // dispatch(loginSuccess(res)); // }) // }); // /* // export const wxLogin = (code: string) => (dispatch: any) => { // request({ // url: API_LOGIN, method: 'POST', data: { code,type:'WX_MP',app_version:'1',client_version:'1',client_type:'WXP_MP' } // }).then(res => { // console.log(res); // dispatch(loginSuccess(res)); // }) // }*/ // export const register = (name: string,email:string, password: string) => (dispatch: any) => { // request({ // url: API_REGISTER, method: 'POST', data: { client_type:'IOS',username:name,email:email, password:password } // }).then(res => { // dispatch(registerSuccess(res)); // }) // } // export const logout = () => (dispatch: any) => { // request({ // url: API_LOGOUT, method: 'GET', data: {} // }).then(res => { // dispatch(logoutSuccess()); // }) // } // export const clear = () => (dispatch: any) => { // request({ // url: API_CLEAR_USER, method: 'POST', data: {} // }).then(res => { // dispatch(clearSuccess()); // }) // } // export const getInfo = () => (dispatch: any) => { // request({ // url: API_USER_INFO, method: 'GET', data: {} // }).then(res => { // dispatch(getInfoSuccess(res)); // }) // } // export const update = () => (dispatch: any) => { // request({ // url: API_USER_INFO, method: 'POST', data: {} // }).then(res => { // dispatch(updateSuccess(res)); // }) // }