login.js 5.44 KB
import request from './request'
import * as api from '@/common/api.js';

let appId = ''
// #ifdef MP
const accountInfo = uni.getAccountInfoSync()
const appId = accountInfo.miniProgram.appId;
// #endif

function wxLogin() {
	return new Promise((resolve, reject) => {
		uni.login({
			provider: 'weixin',
			success: (res) => {
				// console.log(res.code);
				resolve(res)
			},
			fail: (res) => {
				reject(res)
			}
		})
	})
}

function pcLogin(code) {
	if (code) {
		return pcLoginByCode(code)
	} else {
		const currUser = uni.getStorageSync('currUser') || {}
		if (currUser.openId) {
			return pcLoginByOpenId(currUser.openId);
		} else {
			return wxLogin().then((loginRes) => {
				return pcLoginByCode(loginRes.code)
			})
		}
	}
}

function pcLoginByOpenId(openId) {
	return request({
		url: "/system/wx/loginByOpenId",
		method: "POST",
		params: {
			appId: appId,
			openId: openId
		}
	}).then((res) => {
		let user = res.data;
		// console.log("openId " + openId, user)

		uni.setStorageSync('token', user.token);
		uni.setStorageSync('currUser', user);
		return user;
	}).catch(() => {
		uni.removeStorageSync('currUser')
	})
}

function pcLoginByCode(code) {
	return request({
		// url: "/weixin/api/login",
		url: "/system/wx/loginByJsCode",
		method: "POST",
		params: {
			appId: appId,
			jsCode: code
		}
	}).then((res) => {
		let user = res.data
		// console.log("code: " + code, user)
		// getNowOpenId()
		uni.setStorageSync('token', user.token);
		uni.setStorageSync('currUser', user);
		return user;
	}).catch((err) => {
		uni.removeStorageSync('currUser')
	})
}

function getCurrUser(isAuto) {
	return request({
		url: "/system/wx/getUserInfo",
		method: "GET",
		opts: {
			isAuto: isAuto
		}
	}).then((res) => {
		let user = res.data;
		uni.setStorageSync('currUser', user);
		return user
	})
}

function getWxUser() {
	return new Promise((resolve, reject) => {
		const currUser = uni.getStorageSync('currUser');
		// getNowOpenId()
		const nowOpenId = uni.getStorageSync('nowOpenId');
		uni.getUserProfile({
			desc: '用于完善用户信息',
			success: function(infoRes) {
				console.log(infoRes)

				request({
					url: `/system/wx/updateWxUser?openId=${nowOpenId}`,
					method: "POST",
					params: {
						appId: appId,
						openId: nowOpenId,
						userId: currUser.id,
						encryptedData: infoRes.encryptedData,
						errMsg: infoRes.errMsg,
						iv: infoRes.iv,
						rawData: infoRes.rawData,
						signature: infoRes.signature
					}
				}).then((res) => {
					let user = res.data;
					uni.setStorageSync('currUser', user);
					resolve(user);
				}).catch(() => {
					reject()
				})
			},
			fail: (res) => {
				reject(res)
			}
		});
	});
}

function getWxUserPhone(phoneRes) {
	// console.log(phoneRes)

	const currUser = uni.getStorageSync('currUser');
	// getNowOpenId()
	const nowOpenId = uni.getStorageSync('nowOpenId');
	return request({
		url: `/system/wx/updateMobile?openId=${nowOpenId}`,
		method: "POST",
		params: {
			appId: appId,
			userId: currUser.id,
			encryptedData: phoneRes.encryptedData,
			errMsg: phoneRes.errMsg,
			iv: phoneRes.iv,
			rawData: phoneRes.rawData,
			signature: phoneRes.signature
		}
	}).then((res) => {
		let user = res.data;
		// uni.setStorageSync('token', 'Bearer '+ user.token);
		uni.setStorageSync('token', user.token);
		uni.setStorageSync('currUser', user);
		return user
	})
}

function checkUserAuth(path) {
	const currUser = uni.getStorageSync('currUser')
	if (currUser.phonenumber) {
		// if (currUser.nickName) {
		return true
	} else {
		uni.navigateTo({
			url: '/pages/index/start?path=' + encodeURIComponent(path)
		})
		return false;
	}
}

function getNowOpenId() {
	console.log('getNowOpenId')
	return request({
		url: `/system/user/getMyOpenId/${appId}`,
		method: 'get'
	}).then((res) => {
		uni.setStorageSync('nowOpenId', res.msg)
	})
}

function h5Login(userName) {
	uni.showLoading({})
	return request({
		url: `/h5Login`,
		method: 'post',
		params: {
			username: userName
		}
	}).then((res) => {
		uni.setStorageSync('token', res.data.token);
	}).finally(() => {
		uni.hideLoading()
	})
}

function showLogin(callback) {
	uni.removeStorageSync("userName")

	uni.showModal({
		title: '请输入身份证,进行身份验证',
		showCancel: false,
		editable: true,
		placeholderText: '身份证',
		complete: (res) => {
			if (res.cancel) {
				setTimeout(() => {
					showLogin(callback)
				})
				return
			}
			if (!res.content) {
				uni.showToast({
					title: '身份证不能为空',
					icon: 'none',
					duration: 3000
				})

				setTimeout(() => {
					showLogin(callback)
				})
				return
			}
			if (res.confirm) {
				h5Login(res.content)
					.then(() => {
						uni.showToast({
							title: '验证成功',
							icon: 'none',
							duration: 1000
						})

						uni.setStorageSync('userName', res.content)

						if (callback) {
							callback()
						}
					})
					.catch(() => {
						showLogin(callback)
					})
			}
		}
	})
}

function h5LoginAuto() {
	let userName = uni.getStorageSync('userName')
	if (userName) {
		return h5Login(userName)
	} else {
		showLogin()
	}
}

function initData() {}

export {
	getNowOpenId,
	wxLogin,
	pcLogin,
	getCurrUser,
	getWxUser,
	getWxUserPhone,
	checkUserAuth,
	h5Login,
	showLogin,
	h5LoginAuto,
	initData
}