/** * 登录帮助工具类 * 用于根据平台类型跳转到对应的登录页面 */ import useUserStore from '@/stores/useUserStore'; /** * 检查当前平台类型 * @returns {string} 平台类型:'mp-weixin' | 'h5' | 'app' */ export function getPlatformType() { // #ifdef MP-WEIXIN return 'mp-weixin'; // #endif // #ifdef H5 return 'h5'; // #endif // #ifdef APP-PLUS return 'app'; // #endif return 'h5'; // 默认返回H5 } /** * 跳转到对应平台的登录页面 * @param {Object} options 跳转选项 * @param {string} options.redirectUrl 登录成功后跳转的URL * @param {string} options.loginType 登录类型:'wechat' | 'account' | 'idCard' */ export function navigateToLoginPage(options = {}) { const { redirectUrl, loginType = 'account' } = options; const platform = getPlatformType(); let loginPage = ''; let params = {}; if (redirectUrl) { params.redirectUrl = redirectUrl; } switch (platform) { case 'mp-weixin': // 小程序端使用微信授权登录,直接显示微信授权弹窗 uni.$emit('showLoginModal', { loginType: 'wechat' }); return; case 'h5': if (loginType === 'idCard') { // H5端身份证号码登录 loginPage = '/pages/login/id-card-login'; } else { // H5端账号密码登录 loginPage = '/pages/login/h5-login'; } break; case 'app': // App端使用微信授权登录 uni.$emit('showLoginModal', { loginType: 'wechat' }); return; default: loginPage = '/pages/login/h5-login'; } if (loginPage) { const queryString = Object.keys(params).length > 0 ? `?${new URLSearchParams(params).toString()}` : ''; const finalUrl = `${loginPage}${queryString}`; const pages = getCurrentPages(); if (pages.length >= 10) { // 页面栈已满,使用redirectTo替代 uni.redirectTo({ url: finalUrl, fail: (err) => { console.error('页面跳转失败:', err); } }); } else { uni.navigateTo({ url: finalUrl, fail: (err) => { console.error('页面跳转失败:', err); // 失败后尝试redirectTo uni.redirectTo({ url: finalUrl, fail: (err2) => { console.error('redirectTo也失败:', err2); } }); } }); } } } /** * 检查登录状态,如果未登录则跳转到对应登录页面 * @param {Object} options 选项 * @param {string} options.redirectUrl 登录成功后跳转的URL * @param {string} options.loginType 登录类型 * @returns {boolean} 是否已登录 */ export function checkLoginAndNavigate(options = {}) { const userStore = useUserStore(); if (userStore.hasLogin) { return true; } // 未登录,跳转到对应登录页面 navigateToLoginPage(options); return false; } /** * 处理身份证号码登录的URL参数 * @param {string} url 包含参数的URL * @returns {Object} 解析后的参数对象 */ export function parseIdCardLoginParams(url) { const urlObj = new URL(url, window.location.origin); const params = {}; // 获取身份证号码base64参数 const idCard = urlObj.searchParams.get('idCard'); if (idCard) { params.idCard = idCard; } // 获取重定向URL const redirectUrl = urlObj.searchParams.get('redirectUrl'); if (redirectUrl) { params.redirectUrl = redirectUrl; } return params; } /** * Base64解码身份证号码 * @param {string} base64Str base64编码的字符串 * @returns {string} 解码后的身份证号码 */ export function decodeIdCardBase64(base64Str) { try { // #ifdef H5 return atob(base64Str); // #endif // #ifdef MP-WEIXIN const result = uni.base64ToArrayBuffer(base64Str); return String.fromCharCode.apply(null, new Uint8Array(result)); // #endif // #ifdef APP-PLUS return plus.base64.decode(base64Str); // #endif // 默认使用H5方式 return atob(base64Str); } catch (error) { console.error('Base64解码失败:', error); throw new Error('身份证号码解码失败'); } } export default { getPlatformType, navigateToLoginPage, checkLoginAndNavigate, parseIdCardLoginParams, decodeIdCardBase64 };