user.tsx 5.0 KB

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