import store from "../store"; import Cache from '../utils/cache'; import { Debounce } from '@/utils/validate.js' // #ifdef H5 import { isWeixin } from "../utils"; import auth from './wechat'; // #endif import { LOGIN_STATUS, USER_INFO, EXPIRES_TIME, STATE_R_KEY, BACK_URL} from './../config/cache'; const LOGIN_PAGE_ROUTE = 'pages/users/login/index'; const WECHAT_LOGIN_PAGE_ROUTE = 'pages/users/wechat_login/index'; function normalizeRoute(route) { return (route || '').replace(/^\//, ''); } function getPrevPageRoute() { const pages = getCurrentPages(); if (pages.length < 2) { return ''; } return normalizeRoute(pages[pages.length - 2].route); } /** * 登录页 ⇄ 微信登录页切换:上一页已是目标页则返回,避免反复 navigateTo 堆栈 */ export function switchLoginPage(url) { const targetRoute = normalizeRoute((url || '').split('?')[0].replace(/^\//, '')); const prevRoute = getPrevPageRoute(); if (prevRoute && prevRoute === targetRoute && url.indexOf('?') === -1) { uni.navigateBack(); return; } uni.navigateTo({ url }); } /** * 微信授权后进入账号绑定页(replace 当前页,避免栈里叠多层登录相关页面) */ export function openLoginBindPage(authKey) { const url = `/pages/users/login/index?bindWechat=1&authKey=${encodeURIComponent(authKey)}`; const prevRoute = getPrevPageRoute(); if (prevRoute === LOGIN_PAGE_ROUTE) { uni.redirectTo({ url }); return; } uni.redirectTo({ url }); } function prePage(){ let pages = getCurrentPages(); let prePage = pages[pages.length - 1]; return prePage.route; } export const toLogin = Debounce(_toLogin,800) export function _toLogin(push, pathLogin) { store.commit("LOGOUT"); let path = prePage(); let login_back_url = Cache.get(BACK_URL); // #ifdef APP uni.navigateTo({ url: '/pages/users/login/index' }) return // #endif // #ifdef H5 // path = location.href; path = location.pathname + location.search; // #endif if(!pathLogin){ pathLogin = '/page/users/login/index' Cache.set('login_back_url',path); } if (['pages/user/index','/pages/user/index'].indexOf(login_back_url) == -1) { // #ifdef H5 if (isWeixin()) { let urlData = location.pathname + location.search if (urlData.indexOf('?') !== -1) { urlData += '&go_longin=1'; } else { urlData += '?go_longin=1'; } if (!Cache.has('snsapiKey')) { auth.oAuth('snsapi_base', urlData); } else { uni.navigateTo({ url: '/pages/users/wechat_login/index' }) } } else { uni.navigateTo({ url: '/pages/users/login/index' }) } // #endif // #ifdef MP uni.navigateTo({ url: '/pages/users/wechat_login/index' }) // #endif } } export function checkLogin() { let token = Cache.get(LOGIN_STATUS); let expiresTime = Cache.get(EXPIRES_TIME); let newTime = Math.round(new Date() / 1000); if (expiresTime < newTime || !token){ Cache.clear(LOGIN_STATUS); Cache.clear(EXPIRES_TIME); Cache.clear(USER_INFO); Cache.clear(STATE_R_KEY); return false; }else{ store.commit('UPDATE_LOGIN',token); let userInfo = Cache.get(USER_INFO,true); if(userInfo){ store.commit('UPDATE_USERINFO',userInfo); } return true; } }