86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
/**
|
||
* 登录状态管理工具
|
||
* 仅在用户点击需要身份认证的功能时才要求登录
|
||
*/
|
||
|
||
/**
|
||
* 检查用户是否已登录
|
||
* @returns {boolean} true 已登录,false 未登录
|
||
*/
|
||
export function isLoggedIn() {
|
||
const token = uni.getStorageSync('token');
|
||
return !!token;
|
||
}
|
||
|
||
/**
|
||
* 要求登录 — 未登录时跳转登录页,已登录直接执行回调
|
||
* 登录页提供返回/取消按钮,用户可拒绝登录
|
||
*
|
||
* @param {Object} options
|
||
* @param {Function} [options.onLoggedIn] - 已登录或登录成功后执行的回调
|
||
* @param {string} [options.title] - 展示给用户的提示标题(为什么需要登录)
|
||
* @param {Function} [options.onCancel] - 用户取消登录后的回调
|
||
*/
|
||
export function requireAuth({ onLoggedIn, title, onCancel } = {}) {
|
||
if (isLoggedIn()) {
|
||
if (onLoggedIn) onLoggedIn();
|
||
return;
|
||
}
|
||
|
||
// 弹窗询问用户是否去登录,用户可拒绝("暂不")
|
||
const tipTitle = title ? `"${title}"需要登录` : '该功能需要登录';
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: `${tipTitle},是否去登录?`,
|
||
confirmText: '去登录',
|
||
cancelText: '暂不',
|
||
success: (modalRes) => {
|
||
if (modalRes.confirm) {
|
||
// 用户点击"去登录"
|
||
uni.setStorageSync('pendingAuthCallback', {
|
||
time: Date.now(),
|
||
title: title || ''
|
||
});
|
||
|
||
uni.navigateTo({
|
||
url: '/pageSubPack/loginSub/pwd-login',
|
||
events: {
|
||
loginSuccess: () => {
|
||
if (onLoggedIn) onLoggedIn();
|
||
uni.removeStorageSync('pendingAuthCallback');
|
||
}
|
||
}
|
||
});
|
||
} else {
|
||
// 用户点击"暂不",留在当前页
|
||
if (onCancel) onCancel();
|
||
}
|
||
}
|
||
});
|
||
}
|
||
|
||
/**
|
||
* 清除登录状态
|
||
*/
|
||
export function clearLoginState() {
|
||
uni.removeStorageSync('token');
|
||
uni.removeStorageSync('userId');
|
||
uni.removeStorageSync('currentVillageId');
|
||
uni.removeStorageSync('pendingAuthCallback');
|
||
}
|
||
|
||
/**
|
||
* 保存登录成功后的 token 和用户信息
|
||
* @param {Object} data - 登录接口返回的 data
|
||
*/
|
||
export function saveLoginData(data) {
|
||
if (data.token) {
|
||
uni.setStorageSync('token', data.token);
|
||
}
|
||
if (data.userId) {
|
||
uni.setStorageSync('userId', data.userId);
|
||
}
|
||
const currentVillageId = data.currentVillageId || 0;
|
||
uni.setStorageSync('currentVillageId', currentVillageId);
|
||
}
|