sju.login.js 4.1 KB
/**
 * 用户登录状态的相关封装
 */
import ajax from '@/common/sju.ajax.js';
import base from '@/common/sju.base.js';
import sjuNav from '@/common/sju.nav.js'

let login = {
	/**
	 * @description 保存不需要登录的页面路径地址
	 * /intake/login		用户登录页面
	 * /intake/register		用户注册页面
	 * @param {数组}  
	 */
	noLogin: ['/pages/login/login'],
	/**
	 * @description 判断访问的Page是否需要登录
	 * 如果需要登录, 则判断是否已登录,未登录则跳转到登陆界面
	 * @param {string} url 打开的页面
	 */
	checkLogin: function(url) {
		// 保存不需要登录的页面,如果pageUrl不在数组中存在,则需要登录
		let needLogin = false;
		for (let item of login.noLogin) {
			if (item == url)
				needLogin = false;
		}
		// 如果需要登录,并且没有登录token标识,则跳转到登陆页面
		let token = login.getValue('token');
		if (needLogin && base.isNull(token)) {
			base.logInfo("需要登录:" + url);
			//微信小程序,提供登录提醒
			//#ifdef MP-WEIXIN
			login.weixinInfo()
			//#endif

			//其它平台,直接跳转登录
			//#ifdef APP-PLUS || H5
			sjuNav.redirectTo('/intake/login');
			//#endif

		} else {
			return true;
		}
		return false;
	},
	/**
	 * @description 微信小程序获取用户信息
	 */
	weixinInfo() {
		var that = this
		uni.hideLoading();
		uni.getUserProfile({
			desc: "用于个人中心信息展示",
			lang: "zh_CN",
			success: res => {
				// var rawData = JSON.parse(res.rawData);
				// login.weixinLogin(rawData.nickName, rawData.avatarUrl);

				// console.log(res);
				if (res.errMsg == 'getUserProfile:ok' && res.userInfo !=
					undefined) {
					var userInfo = {
						avatarUrl: res.userInfo.avatarUrl,
						nickName: res.userInfo.nickName,
						iv: res.iv,
						encryptedData: res.encryptedData
					}
					login.weixinLogin(userInfo);
				} else {
					uni.showToast({
						icon: "none",
						title: "获取失败,请重试"
					})
				}
			},
			fail: (res) => {
				console.info('获取失败')
			}
		});
	},
	/**
	 * @description 微信小程序获取openID
	 * @param {string} nickName 微信用户名称
	 * @param {string} avatarUrl 用户用户头像
	 */
	weixinLogin(userInfo) {

		uni.login({
			provider: 'weixin',
			scopes: 'auth_user',
			success: function(loginRes) {
				// 获取临时code
				var code = loginRes.code;

				// 请求后台接口获取openID
				ajax.post('/api/Member.Member/miniWxLogin', {
					code: code,
					encryptedData: userInfo.encryptedData,
					iv: userInfo.iv
				}, data => {
					console.log(data);

				}, true)
				ajax.post('/api/Member.Member/miniWxCodeRefreshToken', {
					code: code
				}, data => {
					console.log(data);
					
					// if (loginres.statusCode == 200) {
					// 	let token = loginres.data.data.token
					// 	uni.setStorageSync('token',data.token)
					// 	uni.reLaunch({
					// 		url: `/pages/profile/profile?headerUrl=${that.headerUrl}&nickName=${that.nickName}`
					// 	});
					// }
					
					// 把后台返回的token保存到本地存储
					// login.saveValue('token',data.token);
				}, true)

				// login.getPhone(userInfo, loginRes)
			}
		});
	},
	// 绑定手机号
	getPhone(userInfo, loginRes) {
		// console.log(userInfo, loginRes);
		
		var code = loginRes.code;

		ajax.post('/api/Member.Member/bindMobile', {
			code: code,
			encryptedData: userInfo.encryptedData,
			iv: userInfo.iv
		}, res => {
			// console.log(res);
		})
	},
	/**
	 * @description 本地存储 
	 * @param {string} key 保存变量的标识
	 * @param {any} value 保存的值 
	 */
	saveValue: function(key, value) {
		uni.setStorageSync(key, value);
	},
	/**
	 * @description 从本地存储获取key数据
	 * @param {string} key 保存变量的标识
	 */
	getValue: function(key) {
		let value = uni.getStorageSync(key);
		return value;
	},
	/**
	 * @description 从本地存储清除某个key 
	 * @param {string} key 保存变量的标识
	 */
	clearKey: function(key) {
		uni.removeStorageSync(key);
	},
	/**
	 * @description 从本地存储清除所有数据 
	 * @param {string} key 保存变量的标识
	 */
	clearAll: function(key) {
		uni.clearStorageSync();
	}
}
export default login;