/** * 微信环境检测和跳转工具类 */ /** * 检查是否为企业微信环境 * @returns {Promise} 是否为企业微信环境 */ export function isWxWorkEnvironment() { return new Promise((resolve) => { // #ifdef MP-WEIXIN try { // 获取系统信息 const systemInfo = uni.getSystemInfoSync(); // 检查environment字段是否为wxwork const isWxWork = systemInfo.environment === 'wxwork'; console.log('环境检测结果:', isWxWork, systemInfo); resolve(isWxWork); } catch (e) { console.error('获取系统信息失败:', e); // fallback检测:尝试使用wx.qy对象判断 try { if (typeof wx !== 'undefined' && wx.qy) { console.log('通过wx.qy对象检测到企业微信环境'); resolve(true); } else { resolve(false); } } catch (e2) { console.error('fallback检测也失败:', e2); resolve(false); } } // #endif // #ifndef MP-WEIXIN resolve(false); // #endif }); } /** * 构造带参数的URL * @param {string} baseUrl 基础URL * @param {Object} queryParameters 查询参数对象 * @returns {string} 构造后的URL */ export function buildUrlWithParams(baseUrl, queryParameters) { if (!queryParameters) return baseUrl; const queryParams = Object.keys(queryParameters) .map(key => `${key}=${encodeURIComponent(queryParameters[key])}`) .join('&'); if (queryParams) { return baseUrl + '?' + queryParams; } return baseUrl; } /** * 根据环境自动跳转到合适的登录页面 * @param {Object} options 启动参数 * @param {Object} tab tab导航对象 */ export async function redirectToLoginByEnvironment(options, tab) { // #ifdef MP-WEIXIN // 在微信小程序环境中 try { const isWxWork = await isWxWorkEnvironment(); if (isWxWork) { console.log('检测到企业微信环境,跳转到企业微信免登页面'); // 构造带参数的URL redirectToQyLogin(options, tab); return; } else { console.log('检测到普通微信环境,跳转到微信登录页面'); redirectToLogin(options, tab); return; } } catch (e) { console.error('环境检测失败:', e); redirectToLogin(options, tab); } // #endif // #ifndef MP-WEIXIN // 非微信小程序环境,跳转到普通登录页面 console.log('非微信小程序环境,跳转到普通登录页面'); redirectToLogin(options, tab); // #endif } export function redirectToQyLogin(options, tab) { try { let url = '/pages/qylogin'; // 保存目标URL用于登录后跳转 if (options && options.path && options.path !== 'pages/qylogin') { // 构造完整的路径和查询参数 let fullPath = '/' + options.path; if (options.query) { const queryString = Object.keys(options.query).map(key => `${key}=${encodeURIComponent(options.query[key])}`).join('&'); if (queryString) { fullPath += '?' + queryString; } } // 添加redirect参数 const separator = fullPath.includes('?') ? '&' : '?'; url += `${separator}redirect=${encodeURIComponent(fullPath)}`; } else if (options && options.query) { url = buildUrlWithParams(url, options.query); } console.log('跳转到企业微信登录页面:', url); tab.reLaunch(url); } catch (e) { console.error('跳转到企业微信登录页面失败:', e); // fallback到普通登录页面 redirectToLogin(options, tab); } } export function redirectToLogin(options, tab) { try { let url = '/pages/login'; if (options && options.query) { url = buildUrlWithParams(url, options.query); } console.log('跳转到普通登录页面:', url); tab.reLaunch(url); } catch (e) { console.error('跳转到普通登录页面失败:', e); // 如果跳转失败,至少确保不会卡在当前页面 try { tab.reLaunch('/pages/login'); } catch (fallbackError) { console.error('fallback跳转也失败了:', fallbackError); } } } export default { isWxWorkEnvironment, buildUrlWithParams, redirectToLogin, redirectToQyLogin, redirectToLoginByEnvironment };