router.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * @Author: wjc
  3. * @Date: 2024-07-02 10:16:29
  4. * @LastEditors: wjc
  5. * @LastEditTime: 2024-07-02 15:05:47
  6. * @Description:
  7. */
  8. import type { App } from 'vue'
  9. import qs from 'qs'
  10. import { useUserStore } from '@/stores/modules/userStore'
  11. import { pages } from '@/pages.json'
  12. // 需要拦截的页面
  13. const loginBlacklist = pages
  14. .filter((p) => p.actions && p.actions.includes('login'))
  15. .map((p) => `/${p.path}`)
  16. const interceptor = {
  17. invoke({ url }) {
  18. const userStore = useUserStore()
  19. const token = userStore.storageUserId
  20. const path = url.split('?')[0]
  21. const isNeedLogin = loginBlacklist.includes(path)
  22. console.log('244-', path, loginBlacklist, isNeedLogin)
  23. // 不需要登录权限的,直接跳转
  24. if (!isNeedLogin) {
  25. return true
  26. }
  27. // 已经登录的,直接跳转
  28. if (token) {
  29. return true
  30. }
  31. // 访问的是需要登录权限才能查看的页面,先跳转到提示页面提醒用户
  32. const redirectRoute = `/pages/auth/index?redirect=${encodeURIComponent(url)}`
  33. uni.navigateTo({ url: redirectRoute })
  34. return false
  35. },
  36. }
  37. export function setupRouterInterceptor(app: App) {
  38. app.use({
  39. install() {
  40. uni.addInterceptor('navigateTo', interceptor)
  41. uni.addInterceptor('reLaunch', interceptor)
  42. uni.addInterceptor('redirectTo', interceptor)
  43. },
  44. })
  45. }