user.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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',{group:'system.notification'}).then(res => {
  132. commit('formatMessage', res.data)
  133. Promise.resolve(res.data)
  134. }).catch(e => {
  135. Promise.reject(e)
  136. })
  137. },
  138. }
  139. const mutations = {
  140. token(state, payload) {
  141. state.token = payload;
  142. uni.setStorageSync("token", payload);
  143. },
  144. // 登录态
  145. isLogin(state, data) {
  146. state.isLogin = data;
  147. uni.setStorageSync('isLogin', data);
  148. },
  149. // 用户信息
  150. userInfo(state, data) {
  151. state.userInfo = data;
  152. uni.setStorageSync("userInfo", data);
  153. },
  154. // 小程序订阅消息模板ids
  155. MESSAGE_IDS(state, data) {
  156. state.subscribeMessageIds = data;
  157. },
  158. USER_DATA(state, data) {
  159. state.userData = data;
  160. uni.setStorageSync("userData", data);
  161. },
  162. AUTH_TYPE(state, data) {
  163. data ? uni.hideTabBar() : uni.showTabBar();
  164. state.authType = data;
  165. },
  166. // 订阅消息
  167. subscribeMessage(state, type) {
  168. let arr = state.subscribeMessageIdsMap[type];
  169. arr.length && uni.requestSubscribeMessage({
  170. tmplIds: arr,
  171. success: (res) => {
  172. // console.log(res);
  173. },
  174. fail: (err) => {
  175. // console.log(err);
  176. }
  177. });
  178. },
  179. // 解析订阅消息数据
  180. formatMessage(state, messageIdsObj) {
  181. // 各场景下用到的订阅模板
  182. let typeMap = {
  183. 'unread_msg': ['pay_suc','examine_result','company_examine'],
  184. // 'order':['pay_suc','recommend','new_video']
  185. }
  186. let idsMap = {}
  187. Object.keys(typeMap).forEach(key => {
  188. idsMap[key] = []
  189. typeMap[key].forEach(item => {
  190. idsMap[key].push(messageIdsObj[item])
  191. })
  192. })
  193. state.subscribeMessageIdsMap = idsMap
  194. },
  195. }
  196. export default {
  197. state,
  198. mutations,
  199. actions,
  200. getters
  201. }