import Vue from 'vue' import Storage from '@/utils/storage' import { API } from '@/utils/request' import * as API_Connect from '@/api/connect' import 'wx-promise-pro' import store from '@/store' const mp_type = 'miniprogram_uu_sleep' const mixin = { data() { return { // 项目名称 projectName: 'UU睡眠', // 图片上传API MixinUploadApi: `${API.base}/uploaders`, // 是否已经授权 默认false hasAuth: false, } }, onLoad(query) { }, /** 解决在真机上下拉不回弹 */ onPullDownRefresh() { wx.stopPullDownRefresh() }, onShareAppMessage(){ }, methods: { async checkHasLogin() { const { code } = await wx.pro.login({ timeout: 8000 }) const uuid = Storage.getItem('uuid') let result = await API_Connect.checkHasLogin({ code, uuid, mp_type }) // console.log('是否登录返回=', result) let _this = this if (result.autologin === 'yes') { _this.hasAuth = true Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' }) const { access_token, refresh_token, access_token_timeout, refresh_token_timeout, uid, no_union_id } = result // 如果登录成功 存储token(access_token refresh_token) uid 获取用户数据 if (access_token && refresh_token && uid) { const now=Math.round(new Date()/1000) store.dispatch('setAccessTokenAction', access_token) store.dispatch('setRefreshTokenAction', refresh_token) Storage.setItem('uid', uid) Storage.setItem('access_token_timeout',now+access_token_timeout-60) Storage.setItem('refresh_token_timeout',now+refresh_token_timeout-60) Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' }) // this.autoBindPart() store.dispatch('getUserDataAction').then(()=>{ let page = Storage.getItem('goPage') console.log('mixin-goPage===', page); uni.switchTab({ url: '/pages/tabBar/home' }) }) } else if (no_union_id) { Storage.setItem('haslogin', { loginType: 'hand_movement' }) uni.reLaunch({ url:'/pages/login/auth' }) } else { uni.reLaunch({ url:'/pages/login/index' }) } } else { uni.showModal({ title: '提示', content: "您还未登录,是否前往登录呢?", confirmText: "确定", showCancel: true, success: function(res) { if (res.confirm) { uni.reLaunch({ url:'/pages/login/auth' }) } } }) } }, // 处理result disposeResult(result) { const { access_token, refresh_token, access_token_timeout, refresh_token_timeout, uid, no_union_id } = result // 如果登录成功 存储token(access_token refresh_token) uid 获取用户数据 if (access_token && refresh_token && uid) { const now=Math.round(new Date()/1000) store.dispatch('setAccessTokenAction', access_token) store.dispatch('setRefreshTokenAction', refresh_token) Storage.setItem('uid', uid) Storage.setItem('access_token_timeout',now+access_token_timeout-60) Storage.setItem('refresh_token_timeout',now+refresh_token_timeout-60) Storage.setItem('haslogin', { uid: result.uid, loginType: 'auto' }) // this.autoBindPart() store.dispatch('getUserDataAction').then(()=>{ let page = Storage.getItem('goPage') console.log('mixin-goPage===', page); uni.switchTab({ url: '/pages/tabBar/home' }) }) } else if (no_union_id) { Storage.setItem('haslogin', { loginType: 'hand_movement' }) uni.reLaunch({ url:'/pages/login/auth' }) } else { uni.reLaunch({ url:'/pages/login/index' }) } }, async toAutoLogin() { this.hasAuth = true // 检测是否登录 如果已经登录 或者登录结果为账户未发现 则不再进行自动登录 // if (Storage.getItem('refresh_token') || Storage.getItem('login_result') === 'account_not_found') return let final = {} const { code } = await wx.pro.login({ timeout: 8000 }) const uuid = Storage.getItem('uuid') try { let result = await API_Connect.loginByAuto({ code, uuid, mp_type }) if (result.reson === 'unionid_not_found') { // 如果已经进行过用户授权但是没有获取到unionID let { encryptedData, iv } = await wx.pro.getUserInfo({ withCredentials: true, lang: 'zh_CN' }) final = await API_Connect.accessUnionID({ code, uuid, encrypted_data: encryptedData, iv }) } if(result.reson === 'account_not_found' || final.reson === 'account_not_found'){ //没有绑定账号 跳到登陆页面 uni.reLaunch({ url:'/pages/login/index' }) } Storage.setItem('login_result', result.reson) Storage.setItem('haslogin', { loginType: 'hand_movement' }) this.disposeResult(result) } catch (e) { Storage.setItem('login_result', false) if (e.response.data.code === 'E133') { uni.redirectTo({ url: '/pages/tabBar/home' }) this.hasAuth = false Storage.removeItem('uuid') } } }, } } Vue.prototype.$toAutoLogin = mixin.methods.toAutoLogin Vue.prototype.$checkHasLogin = mixin.methods.checkHasLogin export default mixin