app.js 1.3 KB
import { createApp } from 'vue'
import { createPinia } from 'pinia'
import './utils/polyfill'
import './app.less'
import { saveCurrentPagePath, hasAuth, silentAuth, navigateToAuth } from '@/utils/authRedirect'
import { useTabbarStore } from '@/stores/tabbar'

const pinia = createPinia()

const App = createApp({
    async onLaunch(options) {
        const path = options?.path || ''
        const query = options?.query || {}

        const query_string = Object.keys(query)
            .map((key) => `${key}=${encodeURIComponent(query[key])}`)
            .join('&')
        const full_path = query_string ? `${path}?${query_string}` : path

        if (full_path) {
            saveCurrentPagePath(full_path)
        }

        if (path === 'pages/auth/index') return

        if (!hasAuth()) {
            try {
                await silentAuth()
            } catch (error) {
                console.error('静默授权失败:', error)
                navigateToAuth(full_path || undefined)
                return
            }
        }

        try {
            const tabbarStore = useTabbarStore(pinia)
            await tabbarStore.ensureLoaded()
        } catch (error) {
            console.error('预加载底部导航配置失败:', error)
        }
    },
    onShow() {
    },
})

App.use(pinia)

export default App