user.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. import request from './request.js';
  2. import api from './appOnLaunch.js';
  3. import { getStorageSync, setStorageSync } from './cache.js';
  4. import event from './event.js';
  5. import $const from './const.js';
  6. import $store from '../store/index.js';
  7. import Vue from 'vue';
  8. const storageKey = '_USER_ACCESS_TOKEN';
  9. let userInfo = null;
  10. export default {
  11. getUserInfoResolve: null,
  12. getUserInfoReject: null,
  13. getAccessToken(options) {
  14. options = options || {};
  15. if (typeof options.cacheOnly === 'undefined') {
  16. options.cacheOnly = false;
  17. }
  18. return new Promise((resolve, reject) => {
  19. let accessToken = getStorageSync(storageKey);
  20. if (accessToken) {
  21. return resolve(accessToken);
  22. }
  23. if (options.cacheOnly) {
  24. return resolve(accessToken);
  25. }
  26. const pages = getCurrentPages();
  27. const currentPage = pages[pages.length - 1];
  28. currentPage.$vm.$store.commit('user/showLoginModal', true);
  29. this.getUserInfoResolve = (userInfoResult) => {
  30. uni.showLoading({
  31. mask: true,
  32. title: '正在登录',
  33. });
  34. uni.login({
  35. scopes: 'auth_base',
  36. success(loginResult) {
  37. const data = {
  38. encryptedData: userInfoResult.detail.encryptedData,
  39. iv: userInfoResult.detail.iv,
  40. rawData: userInfoResult.detail.rawData,
  41. signature: userInfoResult.detail.signature,
  42. code: loginResult.code,
  43. };
  44. request({
  45. url: api.passport.login,
  46. method: 'post',
  47. data: data,
  48. }).then(response => {
  49. uni.hideLoading();
  50. if (response.code === 0) {
  51. event.trigger($const.EVENT_USER_LOGIN);
  52. setStorageSync(storageKey, response.data.access_token);
  53. return resolve(response.data.access_token);
  54. } else {
  55. return reject(response.msg);
  56. }
  57. }).catch(e => {
  58. uni.hideLoading();
  59. reject(e);
  60. });
  61. },
  62. });
  63. };
  64. this.getUserInfoReject = (e) => {
  65. reject(e);
  66. };
  67. });
  68. },
  69. getInfo(options) {
  70. options = options || {};
  71. if (typeof options.refresh === 'undefined') {
  72. options.refresh = false;
  73. }
  74. return new Promise((resolve, reject) => {
  75. if (options.refresh) {
  76. userInfo = null;
  77. }
  78. if (userInfo) {
  79. return resolve(userInfo);
  80. }
  81. this.getAccessToken().then(accessToken => {
  82. uni.showNavigationBarLoading();
  83. request({
  84. url: api.user.user_info,
  85. }).then(response => {
  86. uni.hideNavigationBarLoading();
  87. if (response.code === 0) {
  88. userInfo = JSON.parse(JSON.stringify(response.data));
  89. event.trigger($const.EVENT_USER_REGISTER, userInfo);
  90. if (typeof userInfo.register !== 'undefined') {
  91. let register = userInfo.register;
  92. if (register.coupon_list) {
  93. let coupon = {
  94. list: register.coupon_list,
  95. type: 'register'
  96. };
  97. $store.dispatch('page/actionSetCoupon', coupon);
  98. }
  99. }
  100. return resolve(userInfo);
  101. } else {
  102. return reject(response.msg);
  103. }
  104. }).catch(e => {
  105. uni.hideNavigationBarLoading();
  106. return reject(e);
  107. });
  108. }).catch(e => {
  109. return reject(e);
  110. });
  111. });
  112. },
  113. isLogin() {
  114. if ($store && $store.state.user && $store.state.user.accessToken) return true;
  115. return !!getStorageSync(storageKey);
  116. },
  117. loginByToken(token) {
  118. setStorageSync(storageKey, token);
  119. },
  120. silentLogin() {
  121. uni.login({
  122. success: function (loginRes) {
  123. request({
  124. url: api.passport.login,
  125. method: 'post',
  126. data: {
  127. code: loginRes.code
  128. },
  129. }).then(response => {
  130. if (response.code === 0) {
  131. uni.setStorageSync(storageKey, response.data.access_token);
  132. }
  133. });
  134. }
  135. });
  136. }
  137. }