2026-03-13 10:17:12 +08:00
|
|
|
/**
|
|
|
|
|
* 静默登录 - 重新获取 token
|
|
|
|
|
* 完全静默,不会跳转登录页
|
|
|
|
|
* @returns {Promise<{success: boolean, token?: string, error?: string}>}
|
|
|
|
|
*/
|
|
|
|
|
export function silentLogin() {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
uni.login({
|
|
|
|
|
provider: 'weixin',
|
|
|
|
|
success: (loginRes) => {
|
|
|
|
|
console.log('Silent login code:', loginRes.code);
|
|
|
|
|
// 调用后端接口获取新 token
|
|
|
|
|
uni.request({
|
|
|
|
|
url: 'https://bsh.info.yw.hnzhwlkj.cn/miniapp/login',
|
|
|
|
|
method: 'POST',
|
|
|
|
|
data: {
|
|
|
|
|
code: loginRes.code
|
|
|
|
|
},
|
|
|
|
|
header: {
|
|
|
|
|
'content-type': 'application/x-www-form-urlencoded',
|
|
|
|
|
'Fdesk-Language': uni.getStorageSync('i18locale') || 'zh',
|
|
|
|
|
'Fdesk-Login-Type': 'wechat',
|
|
|
|
|
'Fdesk-System-Code': 'wechat'
|
|
|
|
|
},
|
|
|
|
|
success: (res) => {
|
2026-05-08 13:28:09 +08:00
|
|
|
if (res.data.code == 200) {
|
2026-03-13 10:17:12 +08:00
|
|
|
const { token, openid } = res.data.data;
|
|
|
|
|
// 更新本地存储
|
|
|
|
|
uni.setStorageSync('token', token);
|
|
|
|
|
uni.setStorageSync('openid', openid);
|
|
|
|
|
console.log('Silent login success, new token obtained');
|
|
|
|
|
resolve({ success: true, token });
|
|
|
|
|
} else {
|
|
|
|
|
console.error('Silent login failed:', res.data.msg);
|
|
|
|
|
// 不跳转登录页,只返回失败状态
|
|
|
|
|
resolve({ success: false, error: res.data.msg });
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
console.error('Silent login request failed:', err);
|
|
|
|
|
// 不跳转登录页,只返回失败状态
|
|
|
|
|
resolve({ success: false, error: err.errMsg });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
console.error('uni.login failed:', err);
|
|
|
|
|
// 不跳转登录页,只返回失败状态
|
|
|
|
|
resolve({ success: false, error: err.errMsg });
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 清除认证信息并跳转登录页
|
|
|
|
|
*/
|
|
|
|
|
export function clearAuthAndRedirect() {
|
|
|
|
|
// 清除登录信息
|
|
|
|
|
uni.removeStorageSync('token');
|
|
|
|
|
uni.removeStorageSync('openid');
|
|
|
|
|
uni.removeStorageSync('is_login');
|
|
|
|
|
|
|
|
|
|
// 跳转到登录页
|
|
|
|
|
uni.reLaunch({
|
|
|
|
|
url: '/pages/login/index'
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 检查是否正在登录中(防止并发重复登录)
|
|
|
|
|
*/
|
|
|
|
|
let isLoggingIn = false;
|
|
|
|
|
let loginPromise = null;
|
|
|
|
|
|
|
|
|
|
export function loginOnce() {
|
|
|
|
|
if (isLoggingIn) {
|
|
|
|
|
return loginPromise;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
isLoggingIn = true;
|
|
|
|
|
loginPromise = silentLogin().finally(() => {
|
|
|
|
|
isLoggingIn = false;
|
|
|
|
|
loginPromise = null;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return loginPromise;
|
|
|
|
|
}
|