爱简收旧衣按件回收前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.7 KiB

6 months ago
  1. /**
  2. * @description 自定义路由拦截
  3. */
  4. // 白名单
  5. const whiteList = [
  6. '/', // 注意入口页必须直接写 '/'
  7. // { pattern: /^\/pages\/list.*/ }, // 支持正则表达式
  8. '/pages/component/home',
  9. '/pages/component/recycle',
  10. '/pages/component/my',
  11. '/pages/component/home',
  12. '/pages/wxUserInfo',
  13. {
  14. pattern: /^\/pages\/index\/*/
  15. }
  16. ]
  17. export default async function() {
  18. const list = ['navigateTo', 'redirectTo', 'reLaunch', 'switchTab']
  19. // 用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
  20. list.forEach(item => {
  21. uni.addInterceptor(item, {
  22. invoke(e) {
  23. const url = e.url.split('?')[0]// 获取要跳转的页面路径(url去掉"?"和"?"后的参数)
  24. // console.log('url路由拦截-地址', url)
  25. if(url!=='/pages/index/index'){ //并缓存要去的页面路由以便用户登录成功后直接跳转
  26. uni.setStorageSync('toRouter', url)
  27. // console.log('不是login')
  28. }
  29. let pass
  30. if (whiteList) {// 判断当前窗口是白名单,如果是则不重定向路由
  31. pass = whiteList.some((item) => {
  32. if (typeof(item) === 'object' && item.pattern) {
  33. return item.pattern.test(url)
  34. }
  35. return url === item
  36. })
  37. }
  38. let userInfo = uni.getStorageSync('token')
  39. console.log(userInfo,'是否路由导航')
  40. // console.log('url路由拦截-用户缓存', pass, userInfo, !userInfo)
  41. // 不是白名单并且没有token
  42. if (!pass && !userInfo) {
  43. uni.showToast({
  44. title: '请先登录',
  45. icon: 'none'
  46. })
  47. uni.navigateTo({
  48. url: "/pages/index/index"
  49. })
  50. return false
  51. }
  52. return e
  53. },
  54. fail(err) { // 失败回调拦截
  55. console.log(err)
  56. }
  57. })
  58. })
  59. }