/**
|
* 微信环境检测和跳转工具类
|
*/
|
|
/**
|
* 检查是否为企业微信环境
|
* @returns {Promise<boolean>} 是否为企业微信环境
|
*/
|
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检测
|
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';
|
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
|
};
|