uni-app项目封装跳转拦截

封装缓存

tools.js

// 缓存
export const useSession = ()=> {
	const setItem = (key,value) =>{
		uni.setStorageSync(key,JSON.stringify(value))
		// sessionStorage.setItem(key,)
	}
	
	const getItem = (key)=>{
		let returnVal = uni.getStorageSync(key)
		if(returnVal){
			 returnVal = JSON.parse(uni.getStorageSync(key))
		}
		
		return returnVal
		// uni.setStorageSync(key,JSON.stringify(value))
		// return JSON.parse(sessionStorage.getItem(key))
	} 
	
	const removeItem = (key) => {
		uni.removeStorageSync(key)
	}
	
	return {
		setItem,
		getItem,
		removeItem,
		timeStamp
	}
}  
跳转拦截

permission.js

import { useSession } from '@/utils/tools.js'

const session = useSession()

// 白名单
const whiteList = [
  '/', // 注意入口页必须直接写 '/'
  '/pages/login/login',
  '/pages/binding/binding'
]

export default async function() {
	const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']
	
	// 添加全局路由拦截
	list.forEach(item => {
		uni.addInterceptor(item, {
		  // 路由前拦截
		  invoke(args) {
			console.log('navigateTo路由跳转成功', args);
			const token = session.getItem('token')
			const url = args.url.split('?')[0]
		    if (token) {
				if (args.url.includes('/pages/binding/binding') || args.url.includes('/pages/login/login')) {
					//跳转到首页
					uni.navigateTo({
					  url: '/pages/index/index',
					});
					
					return false;
				}
				
				return args;
		    } else {
				let pass;
				if (whiteList) {
					pass = whiteList.some((whiteItem) => {
						if (typeof (whiteItem) === 'object' && whiteItem.pattern) {
							return whiteItem.pattern.test(url)
						}
						return url === whiteItem
					})
				}
				console.log('pass', pass)
				
				if(!pass) {
					uni.showToast({
						title: '请先登录',
						icon: 'none'
					})
					
					uni.navigateTo({
						url: "/pages/login/login"
					})
					
					return false
				}
		        return args;
		    }
		  },
		  // 路由后拦截
		  success(res) {
		  },
		  fail(err) {
		  }
		});
	})
}

引入

可以在main.js中进行引入(要注意执行顺序),也可以在App.vue中的onLaunch函数中执行

App.vue

import routingIntercept from '@/utils/permission.js'

export default {
  onLaunch: function() {
  	//路由拦截
	routingIntercept()
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值