| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- import type { App } from 'vue'
- import { pages, subPackages } from '@/pages.json'
- import { useUserStore } from '@/stores/modules/userStore'
- // 处理分包路由
- const subPages = []
- subPackages.forEach((item) => {
- if (item.pages && Array.isArray(item.pages)) {
- item.pages.forEach((p) => {
- subPages.push({
- actions: p.actions,
- path: `${item.root}/${p.path}`,
- })
- })
- }
- })
- // 需要拦截的页面
- const loginBlacklist = new Set(
- [...pages, ...subPages]
- .filter((p) => p.actions && p.actions.includes('login'))
- .map((p) => `/${p.path}`)
- )
- // console.log('loginBlacklist', loginBlacklist)
- const interceptor = {
- invoke({ url }) {
- const userStore = useUserStore()
- const token = userStore.token
- const path = url.split('?')[0]
- const isNeedLogin = loginBlacklist.has(path)
- // 不需要登录权限的,直接跳转
- if (!isNeedLogin) {
- return true
- }
- // 已经登录的,直接跳转
- if (token) {
- return true
- }
- // 访问的是需要登录权限才能查看的页面,先跳转到提示页面提醒用户
- const redirectRoute = `/pages-sub/auth/index?redirect=${encodeURIComponent(url)}`
- uni.navigateTo({ url: redirectRoute })
- return false
- },
- }
- export function setupRouterInterceptor(app: App) {
- app.use({
- install() {
- uni.addInterceptor('navigateTo', interceptor)
- uni.addInterceptor('reLaunch', interceptor)
- uni.addInterceptor('redirectTo', interceptor)
- },
- })
- }
|