import store from '../store'; import { checkLogin } from './login'; import { login, thirdLogin, thirdUpdate } from '../api/public'; import { getUserInfo, getUserBean } from '../api/user'; import Cache from '../utils/cache'; import { STATE_R_KEY, USER_INFO, EXPIRES_TIME, LOGIN_STATUS } from './../config/cache'; class Routine { constructor() { this.scopeUserInfo = 'scope.userInfo'; } async getUserCode() { let isAuth = await this.isAuth(), code = ''; if (isAuth) code = await this.getCode(); return code; } /** * 获取用户信息 */ getUserProfile() { let that = this, code = this.getUserCode(); return new Promise((resolve, reject) => { uni.getUserProfile({ lang: 'zh_CN', desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 success(user) { if (code) user.code = code; resolve({ userInfo: user, islogin: false }); }, fail(res) { reject(res); } }) }) } /** * 获取用户信息 */ authorize() { let that = this; return new Promise((resolve, reject) => { if (checkLogin()) return resolve({ userInfo: Cache.get(USER_INFO, true), islogin: true, }); uni.authorize({ scope: that.scopeUserInfo, success() { resolve({ islogin: false }); }, fail(res) { reject(res); } }) }) } async getCode() { let provider = await this.getProvider(); return new Promise((resolve, reject) => { uni.login({ provider: provider, success(res) { console.log(uni.login,res); if (res.code) Cache.set(STATE_R_KEY, res.code, 10800); return resolve(res.code); }, fail(res) { return reject(res); } }) }) } /** * 获取服务供应商 */ getProvider() { return new Promise((resolve, reject) => { uni.getProvider({ service: 'oauth', success(res) { resolve(res.provider); }, fail() { resolve(false); } }); }); } /** * 是否授权 */ isAuth() { let that = this; return new Promise((resolve, reject) => { uni.getSetting({ success(res) { if (!res.authSetting[that.scopeUserInfo]) { resolve(true) } else { resolve(true); } }, fail() { resolve(false); } }); }); } /** * 小程序登录 */ authThirdUserInfo(data) { let that = this; return new Promise((resolve, reject) => { thirdLogin(data).then(res => { store.commit('UPDATE_LOGINSTATUS', res.data); return resolve(res); }).catch(res => { return reject(res); }) }) } authThirdUpdate(data) { let that = this; return new Promise((resolve, reject) => { thirdUpdate(data).then(res => { return resolve(res); }).catch(res => { return reject(res); }) }) } authUserInfo(code, data) { let that = this; return new Promise((resolve, reject) => { login(code, data).then(res => { store.commit('UPDATE_LOGINSTATUS', res.data); return resolve(res); }).catch(res => { return reject(res); }) }) } async getLastUserInfo() { try { const res = await getUserInfo(); const userInfo = res.data; userInfo.isReady = true; store.commit("UPDATE_USERINFO", userInfo); uni.$emit('updateUserInfo', {}); console.log("User info updated:", userInfo); return userInfo; } catch (error) { let app=getApp(); if (app) { uni.$emit("showTips", { 'title': error, 'icon': 'none' }); } else { uni.showToast({ 'title': error, 'icon': 'none' }) } console.error("获取用户信息失败:", error); // 添加详细错误日志 throw error; // 重新抛出错误供调用方处理 } } } export default new Routine();