uniapp小程序添加路由全局限制,增加路由白名单,登录后接口跳转参数正常传递

uniapp小程序添加路由全局限制,增加路由白名单,登录后接口跳转参数正常传递

** 组件存放的位置 /utils/router.js**

复制代码
import pagesJson from '@/pages.json'; // 引用配置文件的tabbar配置信息
const tabBarListData = pagesJson.tabBar.list
// 路由白名单
const whiteList = [
  '/pages/index/index',
  '/pages/mine/index',
  '/pages/login/index'
]

// tabBar 页面路径
const tabBarList =  tabBarListData.map(item => `/${item.pagePath}`)

// 保存原始路由方法
const originalNavigateTo = uni.navigateTo
const originalRedirectTo = uni.redirectTo
const originalSwitchTab = uni.switchTab
const originalNavigateBack = uni.navigateBack

// 路由拦截处理
function routerInterceptor(args) {
  return new Promise((resolve) => {
    let url = args.url
    if (!url) return resolve(true)

    // 1. 获取当前要跳转的路径(不带参数)
    const toPath = url.split('?')[0]

    // 2. 白名单直接放行
    if (whiteList.includes(toPath)) {
      return resolve(true)
    }

    // 3. 判断是否登录
    const token = uni.getStorageSync('token')
    if (!token) {
      // 未登录 → 存起来跳转目标,登录后自动回去
      uni.setStorageSync('redirectUrl', url)
      
      // 跳转登录页
      uni.redirectTo({
        url: '/pages/login/login'
      })
      return resolve(false)
    }

    // 4. 已登录 → 放行
    resolve(true)
  })
}

// 开始全局拦截
uni.navigateTo = async function(options) {
  const canGo = await routerInterceptor(options)
  if (canGo) originalNavigateTo.call(this, options)
}

uni.redirectTo = async function(options) {
  const canGo = await routerInterceptor(options)
  if (canGo) originalRedirectTo.call(this, options)
}

// 拦截 tabBar
uni.switchTab = async function(options) {
  const canGo = await routerInterceptor(options)
  if (canGo) originalSwitchTab.call(this, options)
}

uni.navigateBack = async function(options) {
  originalNavigateBack.call(this, options)
}

使用方法
在 App.vue 引入(必须)

复制代码
<script>
// 引入全局路由拦截
import '@/utils/router.js'

export default {
  onLaunch() {
    console.log('小程序启动')
  }
}
</script>
相关推荐
济南壹软网络科技有限公司4 小时前
盲盒源码系统小程序V6MAX底层架构解析,PHP+Uniapp高性能商用底座发布
小程序·架构·uni-app
2501_915918414 小时前
iOS 上架注意事项有哪些?Appuploader 的四个阶段自查清单
android·ios·小程序·https·uni-app·iphone·webview
Autumn_ing5 小时前
AI原型设计工具怎么选?可编辑原型与可运行前端适合什么场景
前端·小程序·产品经理·代码·codex·墨刀ai客户端·ai原型
fengGer的bugs5 小时前
微信小程序实战:本地存储的新生儿喂养记录(原生 + 四套主题 + 疫苗日程)
微信小程序·小程序
Ai-_Man6 小时前
我需要批量导出Poe左边栏所有对话,而不是一条具体的对话内容,你们AI导出鸭可以吗?
开发语言·前端·javascript·人工智能·小程序
青企通6 小时前
二手交易小程序的担保交易:资金托管、状态机与争议处理
小程序
andrsted1 天前
练题簿免费刷题小程序:和学习搭子共用一份题库,一起刷题复习
学习·面试·微信小程序·小程序·学习方法·刷题
万岳科技程序员小金1 天前
教育机构如何搭建在线教学平台?网校系统、小程序与APP开发指南
小程序·在线教育系统源码·教育平台搭建·教育app开发·教育软件开发·教育小程序开发
PedroQue991 天前
uni-app x工程化实战:从页面堆到可维护架构
前端·uni-app
小小王app小程序开发1 天前
淘宝扭蛋机小程序玩法开发分析
小程序