user.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. // 用户数据模块
  2. import http from '@/common/request/index'
  3. import store from '@/common/store'
  4. import tools from '@/common/utils/tools'
  5. import wechat from '@/common/wechat/wechat'
  6. import share from '@/common/share'
  7. const state = {
  8. token: uni.getStorageSync("token") || "",
  9. isLogin: uni.getStorageSync("isLogin") || false, // 是否登陆
  10. userInfo: uni.getStorageSync("userInfo") || {}, // 用户信息
  11. userData: {}, //用户其他相关数据
  12. subscribeMessageIdsMap: [], //小程序订阅消息模板ids
  13. authType: '', // smsLogin:手机号登录注册, accountLogin:密码登录, forgotPwd:忘记密码, changePwd:修改密码, bindMobile:绑定手机号
  14. tabbarList: []
  15. }
  16. const getters = {
  17. token: state => state.token,
  18. isLogin: state => state.isLogin,
  19. userInfo: state => state.userInfo,
  20. authType: state => state.authType,
  21. userData: state => state.userData,
  22. tabbarList: state => state.tabbarList,
  23. subscribeMessageIdsMap: state => state.subscribeMessageIdsMap
  24. }
  25. const actions = {
  26. // 获取用户信息
  27. getUserInfo({
  28. commit,
  29. dispatch,
  30. getters,
  31. state
  32. }, token = '') {
  33. return new Promise((resolve, reject) => {
  34. console.log(token);
  35. token && uni.setStorageSync('token', token);
  36. http('user.info').then(res => {
  37. // console.log(res);
  38. if (res.code === 0) {
  39. let lastLoginStatus = getters.isLogin;
  40. commit('userInfo', res.data);
  41. commit('isLogin', true);
  42. !lastLoginStatus && share.setShareInfo();
  43. // 存在分享信息 添加分享记录
  44. let spm = uni.getStorageSync('spm');
  45. if (spm) {
  46. http('commission.addTeam', {
  47. spm: spm
  48. });
  49. uni.removeStorageSync('spm');
  50. }
  51. resolve(res.data)
  52. }
  53. }).then(() => {
  54. // uni.showModal({
  55. // title:'提示',
  56. // content:'账号已被锁定,请联系管理员',
  57. // showCancel:false,
  58. // confirmText:'确定',
  59. // confirmColor:'#00e699'
  60. // })
  61. // 只有在登录的时候请求购物车信息,订单信息,获取登录信息之后。
  62. // token && dispatch('getCartList');
  63. // console.log('sss');
  64. // dispatch('tabbarInit');
  65. token && dispatch('getUserData');
  66. // dispatch('getMember');
  67. })
  68. .catch(e => {
  69. reject(e)
  70. })
  71. })
  72. },
  73. // 用户其他相关信息
  74. getUserData({
  75. commit
  76. }) {
  77. return new Promise((resolve, reject) => {
  78. http('user.userData').then(res => {
  79. commit('USER_DATA', res.data);
  80. resolve(res)
  81. }).catch(e => {
  82. reject(e)
  83. })
  84. })
  85. },
  86. // 自动登录
  87. async autoLogin({
  88. getters,
  89. dispatch
  90. }) {
  91. // console.log('s')
  92. if (getters.initWechat?.autologin && !getters.isLogin) { // 微信开启自动登录 并且当前未登录,进入自动登录流程
  93. let token = '';
  94. // #ifdef H5
  95. // wechat.login();
  96. // #endif
  97. // #ifdef MP-WEIXIN
  98. token = await wechat.getWxMiniProgramSessionKey(true);
  99. // #endif
  100. token && await dispatch('getUserInfo', token);
  101. } else if (getters.isLogin) { // 已经登录,直接获取用户信息
  102. await dispatch('getUserInfo');
  103. }
  104. share.setShareInfo();
  105. // 初始化小程序session_key
  106. // #ifdef MP-WEIXIN
  107. if (!getters.initWechat?.autologin) {
  108. await wechat.getWxMiniProgramSessionKey(false);
  109. }
  110. // #endif
  111. },
  112. // 退出登录
  113. logout({
  114. commit,
  115. dispatch
  116. }) {
  117. uni.getStorageSync('token');
  118. commit('token', "");
  119. uni.removeStorageSync('chatSessionId');
  120. commit('isLogin', false);
  121. commit('userInfo', {});
  122. commit('USER_DATA', {});
  123. // 重置全局分享信息
  124. share.setShareInfo();
  125. },
  126. // 获取订阅消息模板ids;
  127. getMessageIds({
  128. commit,
  129. state
  130. }) {
  131. http('conf.getGroupConf', {
  132. group: 'system.notification'
  133. }).then(res => {
  134. commit('formatMessage', res.data)
  135. Promise.resolve(res.data)
  136. }).catch(e => {
  137. Promise.reject(e)
  138. })
  139. },
  140. }
  141. const mutations = {
  142. token(state, payload) {
  143. state.token = payload;
  144. uni.setStorageSync("token", payload);
  145. },
  146. // 登录态
  147. isLogin(state, data) {
  148. state.isLogin = data;
  149. uni.setStorageSync('isLogin', data);
  150. },
  151. // 用户信息
  152. userInfo(state, data) {
  153. state.userInfo = data;
  154. uni.setStorageSync("userInfo", data);
  155. },
  156. // 小程序订阅消息模板ids
  157. MESSAGE_IDS(state, data) {
  158. state.subscribeMessageIds = data;
  159. },
  160. USER_DATA(state, data) {
  161. state.userData = data;
  162. uni.setStorageSync("userData", data);
  163. },
  164. AUTH_TYPE(state, data) {
  165. data ? uni.hideTabBar() : uni.showTabBar();
  166. state.authType = data;
  167. },
  168. // 订阅消息
  169. subscribeMessage(state, type) {
  170. let arr = state.subscribeMessageIdsMap[type];
  171. arr.length && uni.requestSubscribeMessage({
  172. tmplIds: arr,
  173. success: (res) => {
  174. // console.log(res);
  175. },
  176. fail: (err) => {
  177. // console.log(err);
  178. }
  179. });
  180. },
  181. // 解析订阅消息数据
  182. formatMessage(state, messageIdsObj) {
  183. // 各场景下用到的订阅模板
  184. let typeMap = {
  185. 'unread_msg': ['pay_suc', 'examine_result', 'company_examine'],
  186. // 'order':['pay_suc','recommend','new_video']
  187. }
  188. let idsMap = {}
  189. Object.keys(typeMap).forEach(key => {
  190. idsMap[key] = []
  191. typeMap[key].forEach(item => {
  192. idsMap[key].push(messageIdsObj[item])
  193. })
  194. })
  195. state.subscribeMessageIdsMap = idsMap
  196. },
  197. }
  198. export default {
  199. state,
  200. mutations,
  201. actions,
  202. getters
  203. }