wlzboy
2025-11-08 d3fd4b0ab851bab89c30c199e27245f7f45f1c0e
app/App.vue
@@ -3,6 +3,7 @@
  import store from '@/store'
  import { getToken } from '@/utils/auth'
  import { getUnreadCount } from '@/api/message'
  import storage from '@/utils/storage'
  export default {
    data() {
@@ -14,6 +15,20 @@
    onLaunch: function() {
      this.lastToken = getToken()
      this.initApp()
      // 检查并清理存储空间
      this.checkStorage()
      // 监听用户登录事件
      uni.$on('user-login', () => {
        console.log('接收到用户登录事件,启动消息轮询')
        const token = getToken()
        if (token) {
          this.lastToken = token
          this.updateUnreadMessageBadge()
          this.startMessagePolling()
        }
      })
      
      // 监听用户登出事件
      uni.$on('user-logout', () => {
@@ -42,7 +57,8 @@
      }
      
      // 应用显示时刷新未读消息数量
      if (currentToken) {
      // 注意:只有已登录且不在登录页面时才调用
      if (currentToken && !this.isLoginPage()) {
        this.updateUnreadMessageBadge()
        // 重新启动轮询(如果之前已停止)
        if (!this.messagePollingTimer) {
@@ -64,12 +80,8 @@
        this.checkLogin()
        //#endif
        
        // 如果已登录,启动未读消息轮询
        if (getToken()) {
          this.updateUnreadMessageBadge()
          // 每30秒轮询一次
          this.startMessagePolling()
        }
        // 注意:不在应用启动时自动启动轮询
        // 只有在用户主动登录成功后才启动(通过 user-login 事件触发)
      },
      initConfig() {
        this.globalData.config = config
@@ -78,6 +90,18 @@
        if (!getToken()) {
          this.$tab.reLaunch('/pages/login') 
        }
      },
      // 判断当前是否在登录页面
      isLoginPage() {
        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')
      },
      
      // 更新未读消息徽标
@@ -128,6 +152,34 @@
          clearInterval(this.messagePollingTimer)
          this.messagePollingTimer = null
        }
      },
      // 检查存储空间
      checkStorage() {
        try {
          // 获取存储信息
          const info = storage.getStorageInfo()
          if (info) {
            const usagePercent = (info.currentSize / info.limitSize) * 100
            console.log(`💾 存储使用情况: ${usagePercent.toFixed(2)}% (${info.currentSize}KB / ${info.limitSize}KB)`)
            // 如果使用超过 80%,自动清理
            if (usagePercent > 80) {
              console.warn('⚠️ 存储空间使用超过 80%,开始自动清理...')
              storage.checkAndClean()
              // 再次检查
              const newInfo = storage.getStorageInfo()
              if (newInfo) {
                const newUsagePercent = (newInfo.currentSize / newInfo.limitSize) * 100
                console.log(`✅ 清理后使用情况: ${newUsagePercent.toFixed(2)}%`)
              }
            }
          }
        } catch (e) {
          console.error('检查存储失败:', e)
        }
      }
    }
  }