user.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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. test_user:boolean;
  11. is_new_user:boolean;
  12. }
  13. // const initialState: UserState = await getUserDataFromLocalStorage();
  14. const initialState: UserState = {
  15. id:null,
  16. isLogin: false,
  17. nickname: null,
  18. avatar: null,
  19. scenario_select_count: 0,
  20. token: null,
  21. test_user:false,
  22. is_new_user:false,
  23. }
  24. const userSlice = createSlice({
  25. name: 'user',
  26. initialState,
  27. reducers: {
  28. loginSuccess(state, action: PayloadAction<any>) {
  29. const { id,nickname, avatar, token,scenario_select_count,test_user,is_new_user } = action.payload;
  30. state.id = id;
  31. state.nickname = nickname;
  32. state.avatar = avatar;
  33. state.token = token;
  34. state.scenario_select_count = scenario_select_count;
  35. state.isLogin = true;
  36. state.test_user = test_user;
  37. state.is_new_user = is_new_user;
  38. global.token = token;
  39. Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
  40. },
  41. registerSuccess(state, action: PayloadAction<any>) {
  42. const { id,nickname, avatar, token,scenario_select_count,test_user,is_new_user } = action.payload;
  43. state.id = id;
  44. state.nickname = nickname;
  45. state.avatar = avatar;
  46. state.token = token;
  47. state.scenario_select_count = scenario_select_count;
  48. state.isLogin = true;
  49. state.test_user = test_user;
  50. state.is_new_user = is_new_user;
  51. global.token = token;
  52. Taro.setStorage({ key: 'userData', data: JSON.stringify(action.payload) });
  53. },
  54. logoutSuccess(state) {
  55. state.id = null;
  56. state.nickname = null;
  57. state.avatar = null;
  58. state.token = null;
  59. state.isLogin = false;
  60. state.test_user = false;
  61. state.scenario_select_count = 0;
  62. global.token = '';
  63. Taro.clearStorage();
  64. },
  65. clearSuccess(state) {
  66. state.id = null;
  67. state.nickname = null;
  68. state.avatar = null;
  69. state.token = null;
  70. state.isLogin = false;
  71. state.test_user = false;
  72. state.scenario_select_count = 0;
  73. global.token = '';
  74. Taro.clearStorage();
  75. },
  76. getInfoSuccess(state, action: PayloadAction<any>) {
  77. const {id, nickname, avatar,scenario_select_count,test_user,token } = action.payload;
  78. state.id = id;
  79. state.nickname = nickname;
  80. state.avatar = avatar;
  81. //
  82. state.scenario_select_count = scenario_select_count;
  83. state.isLogin = true;
  84. state.test_user = test_user;
  85. var obj = JSON.parse(JSON.stringify(action.payload))
  86. if (token){
  87. state.token = token;
  88. global.token = token;
  89. }
  90. else {
  91. obj.token = state.token;
  92. }
  93. Taro.setStorage({ key: 'userData', data: JSON.stringify(obj) });
  94. },
  95. updateSuccess(state, action: PayloadAction<any>) {
  96. const { nickname, avatar } = action.payload;
  97. if (nickname)
  98. state.nickname = nickname;
  99. if (avatar)
  100. state.avatar = avatar;
  101. state.isLogin = true;
  102. Taro.setStorage({ key: 'userData', data: JSON.stringify(state) });
  103. }
  104. },
  105. });
  106. export const { loginSuccess, registerSuccess, logoutSuccess, getInfoSuccess, updateSuccess, clearSuccess } = userSlice.actions;
  107. export default userSlice.reducer;