123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import request from './request.js';
- import api from './appOnLaunch.js';
- import { getStorageSync, setStorageSync } from './cache.js';
- import event from './event.js';
- import $const from './const.js';
- import $store from '../store/index.js';
- import Vue from 'vue';
- const storageKey = '_USER_ACCESS_TOKEN';
- let userInfo = null;
- export default {
- getUserInfoResolve: null,
- getUserInfoReject: null,
- getAccessToken(options) {
- options = options || {};
- if (typeof options.cacheOnly === 'undefined') {
- options.cacheOnly = false;
- }
- return new Promise((resolve, reject) => {
- let accessToken = getStorageSync(storageKey);
- if (accessToken) {
- return resolve(accessToken);
- }
- if (options.cacheOnly) {
- return resolve(accessToken);
- }
- const pages = getCurrentPages();
- const currentPage = pages[pages.length - 1];
- currentPage.$vm.$store.commit('user/showLoginModal', true);
- this.getUserInfoResolve = (userInfoResult) => {
- uni.showLoading({
- mask: true,
- title: '正在登录',
- });
- uni.login({
- scopes: 'auth_base',
- success(loginResult) {
- const data = {
- encryptedData: userInfoResult.detail.encryptedData,
- iv: userInfoResult.detail.iv,
- rawData: userInfoResult.detail.rawData,
- signature: userInfoResult.detail.signature,
- code: loginResult.code,
- };
- request({
- url: api.passport.login,
- method: 'post',
- data: data,
- }).then(response => {
- uni.hideLoading();
- if (response.code === 0) {
- event.trigger($const.EVENT_USER_LOGIN);
- setStorageSync(storageKey, response.data.access_token);
- return resolve(response.data.access_token);
- } else {
- return reject(response.msg);
- }
- }).catch(e => {
- uni.hideLoading();
- reject(e);
- });
- },
- });
- };
- this.getUserInfoReject = (e) => {
- reject(e);
- };
- });
- },
- getInfo(options) {
- options = options || {};
- if (typeof options.refresh === 'undefined') {
- options.refresh = false;
- }
- return new Promise((resolve, reject) => {
- if (options.refresh) {
- userInfo = null;
- }
- if (userInfo) {
- return resolve(userInfo);
- }
- this.getAccessToken().then(accessToken => {
- uni.showNavigationBarLoading();
- request({
- url: api.user.user_info,
- }).then(response => {
- uni.hideNavigationBarLoading();
- if (response.code === 0) {
- userInfo = JSON.parse(JSON.stringify(response.data));
- event.trigger($const.EVENT_USER_REGISTER, userInfo);
- if (typeof userInfo.register !== 'undefined') {
- let register = userInfo.register;
- if (register.coupon_list) {
- let coupon = {
- list: register.coupon_list,
- type: 'register'
- };
- $store.dispatch('page/actionSetCoupon', coupon);
- }
- }
- return resolve(userInfo);
- } else {
- return reject(response.msg);
- }
- }).catch(e => {
- uni.hideNavigationBarLoading();
- return reject(e);
- });
- }).catch(e => {
- return reject(e);
- });
- });
- },
- isLogin() {
- if ($store && $store.state.user && $store.state.user.accessToken) return true;
- return !!getStorageSync(storageKey);
- },
- loginByToken(token) {
- setStorageSync(storageKey, token);
- },
- silentLogin() {
- uni.login({
- success: function (loginRes) {
- request({
- url: api.passport.login,
- method: 'post',
- data: {
- code: loginRes.code
- },
- }).then(response => {
- if (response.code === 0) {
- uni.setStorageSync(storageKey, response.data.access_token);
- }
- });
- }
- });
- }
- }
|