user.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import {createSlice, PayloadAction } from '@reduxjs/toolkit';
  2. import Taro from '@tarojs/taro';
  3. interface UserState {
  4. id:string|null;
  5. nickname: string | null;
  6. avatar: string | null;
  7. token: string | null;
  8. scenario_select_count: number | 0;
  9. isLogin: boolean;
  10. }
  11. // const initialState: UserState = await getUserDataFromLocalStorage();
  12. const initialState: UserState = {
  13. id:null,
  14. isLogin: false,
  15. nickname: null,
  16. avatar: null,
  17. scenario_select_count: 0,
  18. token: null,
  19. }
  20. const userSlice = createSlice({
  21. name: 'user',
  22. initialState,
  23. reducers: {
  24. loginSuccess(state, action: PayloadAction<any>) {
  25. const { id,nickname, avatar, token,scenario_select_count } = action.payload;
  26. state.id = id;
  27. state.nickname = nickname;
  28. state.avatar = avatar;
  29. state.token = token;
  30. state.scenario_select_count = scenario_select_count;
  31. state.isLogin = true;
  32. global.token = token;
  33. Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
  34. },
  35. registerSuccess(state, action: PayloadAction<any>) {
  36. const { id,nickname, avatar, token,scenario_select_count } = action.payload;
  37. state.id = id;
  38. state.nickname = nickname;
  39. state.avatar = avatar;
  40. state.token = token;
  41. state.scenario_select_count = scenario_select_count;
  42. state.isLogin = true;
  43. global.token = token;
  44. Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
  45. },
  46. logoutSuccess(state) {
  47. debugger
  48. state.id = null;
  49. state.nickname = null;
  50. state.avatar = null;
  51. state.token = null;
  52. state.isLogin = false;
  53. state.scenario_select_count = 0;
  54. global.token = '';
  55. Taro.clearStorage();
  56. },
  57. clearSuccess(state) {
  58. debugger
  59. state.id = null;
  60. state.nickname = null;
  61. state.avatar = null;
  62. state.token = null;
  63. state.isLogin = false;
  64. state.scenario_select_count = 0;
  65. global.token = '';
  66. Taro.clearStorage();
  67. },
  68. getInfoSuccess(state, action: PayloadAction<any>) {
  69. const {id, nickname, avatar, token,scenario_select_count } = action.payload;
  70. state.id = id;
  71. state.nickname = nickname;
  72. state.avatar = avatar;
  73. state.token = token;
  74. state.scenario_select_count = scenario_select_count;
  75. state.isLogin = true;
  76. global.token = token;
  77. Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
  78. },
  79. updateSuccess(state, action: PayloadAction<any>) {
  80. const { nickname, avatar, token } = action.payload;
  81. state.nickname = nickname;
  82. state.avatar = avatar;
  83. state.token = token;
  84. state.isLogin = true;
  85. Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
  86. }
  87. },
  88. });
  89. export const { loginSuccess, registerSuccess, logoutSuccess, getInfoSuccess, updateSuccess, clearSuccess } = userSlice.actions;
  90. export default userSlice.reducer;
  91. // export const login = (username: string, password: string) => (dispatch: any) => {
  92. // request({
  93. // url: API_LOGIN, method: 'POST', data: { username, password }
  94. // }).then(res => {
  95. // dispatch(loginSuccess(res));
  96. // })
  97. // }
  98. // export const wxLogin = createAsyncThunk('user/wxLogin', async (payload: { code: string, encryptedData: string,iv:string }, { dispatch }) => {
  99. // console.log(payload.code)
  100. // request({
  101. // url: API_LOGIN, method: 'POST',
  102. // data: {
  103. // code: payload.code,
  104. // type: 'WX_MP',
  105. // app_version: '1',
  106. // client_version: '1',
  107. // client_type: 'WX_MP',
  108. // extra: {
  109. // encryptedData: payload.encryptedData,
  110. // iv: payload.iv
  111. // }
  112. // }
  113. // }).then(res => {
  114. // dispatch(loginSuccess(res));
  115. // })
  116. // });
  117. // /*
  118. // export const wxLogin = (code: string) => (dispatch: any) => {
  119. // request({
  120. // url: API_LOGIN, method: 'POST', data: { code,type:'WX_MP',app_version:'1',client_version:'1',client_type:'WXP_MP' }
  121. // }).then(res => {
  122. // console.log(res);
  123. // dispatch(loginSuccess(res));
  124. // })
  125. // }*/
  126. // export const register = (name: string,email:string, password: string) => (dispatch: any) => {
  127. // request({
  128. // url: API_REGISTER, method: 'POST', data: { client_type:'IOS',username:name,email:email, password:password }
  129. // }).then(res => {
  130. // dispatch(registerSuccess(res));
  131. // })
  132. // }
  133. // export const logout = () => (dispatch: any) => {
  134. // request({
  135. // url: API_LOGOUT, method: 'GET', data: {}
  136. // }).then(res => {
  137. // dispatch(logoutSuccess());
  138. // })
  139. // }
  140. // export const clear = () => (dispatch: any) => {
  141. // request({
  142. // url: API_CLEAR_USER, method: 'POST', data: {}
  143. // }).then(res => {
  144. // dispatch(clearSuccess());
  145. // })
  146. // }
  147. // export const getInfo = () => (dispatch: any) => {
  148. // request({
  149. // url: API_USER_INFO, method: 'GET', data: {}
  150. // }).then(res => {
  151. // dispatch(getInfoSuccess(res));
  152. // })
  153. // }
  154. // export const update = () => (dispatch: any) => {
  155. // request({
  156. // url: API_USER_INFO, method: 'POST', data: {}
  157. // }).then(res => {
  158. // dispatch(updateSuccess(res));
  159. // })
  160. // }