wlzboy
7 小时以前 5f2ee03958a1a16dc27195c76ea7cffb422c95d1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/**
 * 微信环境检测和跳转工具类
 */
 
/**
 * 检查是否为企业微信环境
 * @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检测:尝试使用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
};