爱简收旧衣按件回收前端代码仓库
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.

65 lines
1.8 KiB

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