user.js 5.2 KB

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