import UserApi from "../apis/user" import { saveToken, saveUserInfo } from './storage' import EventEmitter from './eventEmitter' const app = getApp() function wxLogin() { return new Promise((resovle, reject) => { wx.login({ success(res) { resovle(res.code) }, fail(err) { wx.showModal({ title: "登录失败", content: "网络异常,请重试", }) reject(err) }, }) }) } function checkSession() { return new Promise((resolve, reject) => { wx.checkSession({ success: (res) => { resolve(res) }, fail(err) { reject(err) }, }) }) } function loginByPhone(data, isAgency) { const LoginApi = isAgency ? UserApi.loginByPhoneCodeAgency : UserApi.loginByPhoneCode return LoginApi(data).then(res => { const data = res.data data.user = data.user || data.agency data.user.user_id = data.user.user_id || data.user.agency_user_id saveToken(data.token) saveUserInfo(data.user) getApp().globalData.token = data.token getApp().globalData.userinfo = data.user EventEmitter.emit('login') return res }) } function tips (res) { console.log(res) if (res.data.code == 3032) { wx.showToast({ title: '经纪人未注册,请联系管理员', icon: 'none', duration: 2000, }) return } if (res.data.code != 3008) { wx.showToast({ title: res.data.msg, icon: 'none', duration: 2000, }) return } } export default function Login(phone_data, code, isAgency) { const { encryptedData, iv } = phone_data.detail if (!encryptedData || !iv) { return new Promise((_, reject) => reject()) } return new Promise((resolve, reject) => { checkSession() .then(() => { return loginByPhone({ phone_num: encryptedData, iv, wx_code: code }, isAgency).then(res => { resolve(res) }) }) .catch((err) => { // 登陆失败可能是code失效,故重新wx.login重新获取code tips(err) wxLogin().then((code) => { loginByPhone({ phone_num: encryptedData, iv, wx_code: code }, isAgency).then(res => { resolve(res) }).catch(err => { console.log(err, 'err') tips(err) }) }) }) }) } export async function loginByUserInfo () { wx.showLoading('登录中') return new Promise(async (resolve, reject) => { let code = await wxLogin() wx.getUserInfo({ withCredentials: true, success (res) { console.log(res) res.wx_code = code UserApi.loginByUserInfo(res).then(loginRes => { const data = loginRes.data data.user = data.user || data.agency data.user.user_id = data.user.user_id || data.user.agency_user_id saveToken(data.token) saveUserInfo(data.user) getApp().globalData.token = data.token getApp().globalData.userinfo = data.user EventEmitter.emit('login') wx.hideLoading() resolve(res) }) }, fail (err) { wx.hideLoading() reject(err) } }) }) }