xlx_teacher_app/src/App.vue

108 lines
2.8 KiB
Vue
Raw Normal View History

2025-08-14 21:04:04 +08:00
<script setup lang="ts">
import { onHide, onLaunch, onShow } from '@dcloudio/uni-app'
import { navigateToInterceptor } from '@/router/interceptor'
2025-08-15 21:30:51 +08:00
import { useUserStore } from '@/store/user'
2025-08-14 21:04:04 +08:00
import { tabbarStore } from './tabbar/store'
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only'
2025-08-15 21:30:51 +08:00
const userStore = useUserStore()
// 不需要登录验证的页面路径
const publicPages = [
'/pages/auth/splash',
'/pages/auth/index',
]
// 检查是否为公开页面
function isPublicPage(path: string) {
return publicPages.some(page => path.includes(page.replace('/pages/', '')))
}
// 处理登录状态检查和页面跳转
function handlePageNavigation(targetPath?: string) {
const isLoggedIn = userStore.isLogin && userStore.accessToken
// 如果未登录且不是公开页面,跳转到加载页
if (!isLoggedIn && targetPath && !isPublicPage(targetPath)) {
console.log('用户未登录,跳转到加载页')
uni.reLaunch({
url: '/pages/auth/index',
})
return
}
// 如果已登录且访问的是登录相关页面,跳转到首页
if (isLoggedIn && targetPath && isPublicPage(targetPath)) {
console.log('用户已登录,跳转到首页')
uni.reLaunch({
url: '/pages/index/index',
})
return
}
// 正常处理页面跳转
if (targetPath) {
navigateToInterceptor.invoke({ url: targetPath })
}
else {
// 根据登录状态决定默认跳转页面
const defaultUrl = isLoggedIn ? '/pages/index/index' : '/pages/auth/splash'
navigateToInterceptor.invoke({ url: defaultUrl })
}
}
2025-08-14 21:04:04 +08:00
onLaunch((options) => {
// 处理直接进入页面路由的情况如h5直接输入路由、微信小程序分享后进入等
// https://github.com/unibest-tech/unibest/issues/192
console.log('App Launch', options)
2025-08-15 21:30:51 +08:00
const targetPath = options?.path ? `/${options.path}` : undefined
// 延迟执行以确保 store 已初始化
setTimeout(() => {
handlePageNavigation(targetPath)
// 处理直接进入路由非首页时tabbarIndex 不正确的问题
tabbarStore.setAutoCurIdx(options.path)
}, 100)
2025-08-14 21:04:04 +08:00
})
2025-08-15 21:30:51 +08:00
2025-08-14 21:04:04 +08:00
onShow((options) => {
console.log('App Show', options)
2025-08-15 21:30:51 +08:00
// 每次显示应用时检查登录状态
const isLoggedIn = userStore.isLogin && userStore.accessToken
if (!isLoggedIn) {
// 检查当前页面是否为公开页面
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const currentRoute = currentPage?.route || ''
if (!isPublicPage(`/${currentRoute}`)) {
console.log('应用显示时检测到未登录,跳转到登录页')
uni.reLaunch({
url: '/pages/auth/index',
})
}
}
2025-08-14 21:04:04 +08:00
})
2025-08-15 21:30:51 +08:00
2025-08-14 21:04:04 +08:00
onHide(() => {
console.log('App Hide')
})
</script>
<style lang="scss">
swiper,
scroll-view {
flex: 1;
height: 100%;
overflow: hidden;
}
image {
width: 100%;
height: 100%;
vertical-align: middle;
}
</style>