| app/App.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/pages/login.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/pages/qylogin.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/static/images/loading.gif | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| app/utils/wechat.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-admin/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-system/src/main/resources/mapper/system/VehicleGpsSegmentMileageMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/App.vue
@@ -14,6 +14,7 @@ } }, onLaunch: function(options) { console.log('App onLaunch, options:', options); this.lastToken = getToken() this.initApp(options) @@ -37,7 +38,11 @@ this.stopMessagePolling() this.lastToken = null // 清除消息徽标 uni.removeTabBarBadge({ index: 3 }) try { uni.removeTabBarBadge({ index: 3 }) } catch (e) { console.error('清除消息徽标失败:', e) } }) }, onShow: function() { @@ -74,10 +79,14 @@ methods: { // 初始化应用 initApp(options) { // 初始化应用配置 this.initConfig() // 检查用户登录状态并自动跳转到合适的登录页面 this.checkLoginAndRedirect(options) try { // 初始化应用配置 this.initConfig() // 检查用户登录状态并自动跳转到合适的登录页面 this.checkLoginAndRedirect(options) } catch (e) { console.error('初始化应用失败:', e) } // 注意:不在应用启动时自动启动轮询 // 只有在用户主动登录成功后才启动(通过 user-login 事件触发) @@ -87,22 +96,40 @@ }, // 检查登录状态并自动跳转到合适的登录页面 checkLoginAndRedirect(options) { if (!getToken()) { // 使用工具类根据环境自动跳转到合适的登录页面 redirectToLoginByEnvironment(options, this.$tab); try { if (!getToken()) { console.log('用户未登录,准备跳转到登录页面') // 使用工具类根据环境自动跳转到合适的登录页面 redirectToLoginByEnvironment(options, this.$tab); } else { console.log('用户已登录,无需跳转') } } catch (e) { console.error('检查登录状态并跳转失败:', e) // fallback到普通登录页面 try { this.$tab.reLaunch('/pages/login'); } catch (fallbackError) { console.error('fallback跳转也失败了:', fallbackError); } } }, // 判断当前是否在登录页面 isLoginPage() { const pages = getCurrentPages() if (pages.length === 0) { try { const pages = getCurrentPages() if (pages.length === 0) { return false } const currentPage = pages[pages.length - 1] const route = currentPage.route || '' // 判断是否为登录相关页面 return route.includes('login') || route.includes('register') } catch (e) { console.error('判断是否为登录页面失败:', e) return false } const currentPage = pages[pages.length - 1] const route = currentPage.route || '' // 判断是否为登录相关页面 return route.includes('login') || route.includes('register') }, // 更新未读消息徽标 @@ -119,15 +146,23 @@ if (count > 0) { // 设置徽标 uni.setTabBarBadge({ index: 3, // 消息页面在tabBar中的索引位置(0开始) text: count > 99 ? '99+' : count.toString() }) try { uni.setTabBarBadge({ index: 3, // 消息页面在tabBar中的索引位置(0开始) text: count > 99 ? '99+' : count.toString() }) } catch (e) { console.error('设置消息徽标失败:', e) } } else { // 移除徽标 uni.removeTabBarBadge({ index: 3 }) try { uni.removeTabBarBadge({ index: 3 }) } catch (e) { console.error('移除消息徽标失败:', e) } } }).catch(error => { console.error('获取未读消息数量失败:', error) @@ -136,22 +171,30 @@ // 启动消息轮询 startMessagePolling() { // 每30秒轮询一次 this.messagePollingTimer = setInterval(() => { if (getToken()) { this.updateUnreadMessageBadge() } else { // 如果用户已登出,停止轮询 this.stopMessagePolling() } }, 30000) // 30秒 try { // 每30秒轮询一次 this.messagePollingTimer = setInterval(() => { if (getToken()) { this.updateUnreadMessageBadge() } else { // 如果用户已登出,停止轮询 this.stopMessagePolling() } }, 30000) // 30秒 } catch (e) { console.error('启动消息轮询失败:', e) } }, // 停止消息轮询 stopMessagePolling() { if (this.messagePollingTimer) { clearInterval(this.messagePollingTimer) this.messagePollingTimer = null try { if (this.messagePollingTimer) { clearInterval(this.messagePollingTimer) this.messagePollingTimer = null } } catch (e) { console.error('停止消息轮询失败:', e) } }, app/pages/login.vue
@@ -93,9 +93,13 @@ onLoad(options) { // 保存页面参数 this.pageOptions = options || {} if(isWxWorkEnvironment()){ redirectToQyLogin(options,this.$tab); } isWxWorkEnvironment().then(res=>{ if(res){ // console.log("企业微信环境 login.vue....") redirectToQyLogin(options,this.$tab); } }); }, created() { this.getCode() app/pages/qylogin.vue
@@ -34,10 +34,18 @@ }, onLoad(options) { // 保存页面参数 this.pageOptions = options || {}; // 页面加载时执行免登流程 this.qyWechatAutoLogin(); // 添加容错处理 try { // 保存页面参数 this.pageOptions = options || {}; // 页面加载时执行免登流程 this.qyWechatAutoLogin(); } catch (e) { console.error('页面加载出错:', e); this.loading = false; this.error = true; this.errorMessage = "页面初始化失败,请重试"; } }, methods: { app/static/images/loading.gif
app/utils/wechat.js
@@ -12,12 +12,13 @@ try { // 获取系统信息 const systemInfo = uni.getSystemInfoSync(); console.log('系统信息:', systemInfo); // 检查environment字段是否为wxwork resolve(systemInfo.environment === 'wxwork'); const isWxWork = systemInfo.environment === 'wxwork'; console.log('环境检测结果:', isWxWork, systemInfo); resolve(isWxWork); } catch (e) { console.error('获取系统信息失败:', e); // fallback检测 resolve(false); } // #endif @@ -62,41 +63,61 @@ if (isWxWork) { console.log('检测到企业微信环境,跳转到企业微信免登页面'); // 构造带参数的URL redirectToQyLogin(options,tab); redirectToQyLogin(options, tab); return; } else { console.log('检测到普通微信环境,跳转到微信登录页面'); redirectToLogin(options,tab); redirectToLogin(options, tab); return; } } catch (e) { console.error('环境检测失败:', e); redirectToLogin(options,tab); redirectToLogin(options, tab); } // #endif // #ifndef MP-WEIXIN // 非微信小程序环境,跳转到普通登录页面 console.log('非微信小程序环境,跳转到普通登录页面'); redirectToLogin(options,tab); redirectToLogin(options, tab); // #endif } export function redirectToQyLogin(options,tab){ export function redirectToQyLogin(options, tab) { try { let url = '/pages/qylogin'; if (options && options.query) { url = buildUrlWithParams(url, options.query); } tab.reLaunch(url); 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){ export function redirectToLogin(options, tab) { try { let url = '/pages/login'; if (options && options.query) { url = buildUrlWithParams(url, options.query); } tab.reLaunch(url); 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, ruoyi-admin/src/main/resources/application.yml
@@ -58,7 +58,7 @@ basename: i18n/messages profiles: # 环境 dev|test|prod active: dev active: prod # 文件上传 servlet: multipart: ruoyi-system/src/main/resources/mapper/system/VehicleGpsSegmentMileageMapper.xml
@@ -66,8 +66,7 @@ WHERE vehicle_id = #{vehicleId} AND segment_start_time <= #{endDate} AND segment_end_time >= #{startDate} AND segment_start_time IS NOT NULL AND segment_end_time IS NOT NULL AND segment_distance >0 ORDER BY segment_start_time </select>