user.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // 用户数据模块
  2. import {
  3. login as loginApi,
  4. wxLogin,
  5. logout
  6. } from '@/config/api.js'
  7. const state = {
  8. access_token: uni.getStorageSync("access_token") || "",
  9. refresh_token: uni.getStorageSync("refresh_token") || "",
  10. isLogin: uni.getStorageSync("isLogin") || false, // 是否登陆
  11. userInfo: uni.getStorageSync("userInfo") || {}, // 用户信息
  12. }
  13. const getters = {
  14. access_token: state => state.access_token,
  15. refresh_token: state => state.refresh_token,
  16. isLogin: state => state.isLogin,
  17. userInfo: state => state.userInfo
  18. }
  19. const actions = {
  20. // 设置token
  21. setToken({
  22. commit
  23. }, token) {
  24. commit('access_token', token);
  25. commit('isLogin', true);
  26. },
  27. // 设置用户信息
  28. setUserInfo({
  29. commit
  30. }, userInfo) {
  31. commit('userInfo', userInfo);
  32. },
  33. // 登录
  34. login({
  35. commit
  36. }, userInfo = {}) {
  37. return new Promise((resolve, reject) => {
  38. loginApi({
  39. account: userInfo.email,
  40. password: userInfo.password,
  41. type: userInfo.type,
  42. }).then(res => {
  43. if (!res.user_id) return uni.$u.toast(res.error_description)
  44. commit('isLogin', true);
  45. commit('access_token', res.access_token);
  46. commit('refresh_token', res.refresh_token);
  47. commit('userInfo', res);
  48. uni.$u.toast('登录成功')
  49. resolve(res)
  50. }).catch(e => {
  51. reject(e)
  52. })
  53. })
  54. },
  55. // 刷新token
  56. refreshToken({
  57. commit
  58. }, userInfo = {}) {
  59. return new Promise((resolve, reject) => {
  60. wxLogin({
  61. refresh_token: userInfo.refreshToken,
  62. grant_type: 'refresh_token'
  63. }).then(res => {
  64. if (!res.user_id) return uni.$u.toast(res.error_description)
  65. commit('access_token', res.access_token);
  66. commit('refresh_token', res.refresh_token);
  67. commit('userInfo', res);
  68. resolve(res)
  69. }).catch(e => {
  70. reject(e)
  71. })
  72. })
  73. },
  74. // 退出登录
  75. logout({
  76. commit,
  77. dispatch
  78. }) {
  79. uni.getStorageSync('access_token') && logout()
  80. commit('access_token', '');
  81. commit('refresh_token', '');
  82. commit('isLogin', false);
  83. commit('userInfo', {});
  84. uni.$u.toast('退出登录成功')
  85. },
  86. // 处理未登录状态
  87. handleUnauthorized({
  88. commit
  89. }, redirectPath = '') {
  90. // 清除用户状态
  91. commit('access_token', '');
  92. commit('refresh_token', '');
  93. commit('isLogin', false);
  94. commit('userInfo', {});
  95. // 如果没有传入重定向路径,则获取当前页面路径
  96. if (!redirectPath) {
  97. const pages = getCurrentPages();
  98. const currentPage = pages[pages.length - 1];
  99. if (currentPage) {
  100. redirectPath = currentPage.route;
  101. }
  102. }
  103. // 使用 reLaunch 重新加载到登录页
  104. const redirectUrl = redirectPath ? encodeURIComponent(redirectPath) : '';
  105. uni.reLaunch({
  106. url: `/pages/user/login?redirect=/${redirectUrl}`,
  107. complete: () => {
  108. uni.$u.toast('请登录后操作');
  109. }
  110. });
  111. },
  112. }
  113. const mutations = {
  114. access_token(state, payload) {
  115. state.access_token = payload;
  116. uni.setStorageSync("access_token", payload);
  117. },
  118. refresh_token(state, payload) {
  119. state.refresh_token = payload;
  120. uni.setStorageSync("refresh_token", payload);
  121. },
  122. // 登录态
  123. isLogin(state, data) {
  124. state.isLogin = data;
  125. uni.setStorageSync('isLogin', data);
  126. },
  127. // 用户信息
  128. userInfo(state, data) {
  129. state.userInfo = data;
  130. uni.setStorageSync("userInfo", data);
  131. },
  132. }
  133. export default {
  134. state,
  135. mutations,
  136. actions,
  137. getters
  138. }