wlzboy
4 天以前 06a17c236d4cb9b8da75fce43af938cb7ea510bf
feat: 优化企业微信判断,优化gps分断处理
1个文件已添加
6个文件已修改
195 ■■■■■ 已修改文件
app/App.vue 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/login.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/pages/qylogin.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/static/images/loading.gif 补丁 | 查看 | 原始文档 | blame | 历史
app/utils/wechat.js 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/VehicleGpsSegmentMileageMapper.xml 3 ●●●● 补丁 | 查看 | 原始文档 | 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>