index.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import stringify from '@/utils/querystring'
  2. export const _router = {
  3. mode: 'history',
  4. switchTab,
  5. push,
  6. replace,
  7. go,
  8. back,
  9. reLaunch,
  10. }
  11. export function handleAuth() {
  12. /**
  13. * 如何判断权限?
  14. * 用户如果登录了系统,会留下两个东西,一个是token,一个是userInfo
  15. * token存在会过期的问题,如果长时间没有打开小程序,会导致登录失效,出现打开一个页面瞬间跳转到授权页面的问题
  16. * 解决办法,保存token的时候加上过期时间,每次请求都取一下缓存里的token
  17. * userInfo只是用来限时用户信息,作用并不是很大
  18. * ps:只需要判断 token 是否存在即可
  19. */
  20. // if (cookie.get('login_status')) {
  21. // return true
  22. // }
  23. return true
  24. }
  25. export const handleLoginStatus = (location, complete, fail, success) => {
  26. // 不登录可访问的页面
  27. let page = [
  28. {
  29. path: '/pages/home/index',
  30. name: '首页',
  31. }
  32. ]
  33. // 是否可以访问
  34. let isAuth = false
  35. // 从 location 中获取当前url,location typeof string || object
  36. let path = ''
  37. if (typeof location === 'string') {
  38. path = location
  39. } else {
  40. path = location.path
  41. }
  42. // 判断用户是否有token
  43. if (!handleAuth()) {
  44. page.map(item => {
  45. if (item.path == path) {
  46. isAuth = true
  47. }
  48. })
  49. } else {
  50. isAuth = true
  51. }
  52. return new Promise((resolve, reject) => {
  53. resolve({
  54. url: parseUrl(location),
  55. complete,
  56. fail,
  57. success,
  58. })
  59. // if (isAuth) {
  60. // // 有token
  61. // if (path == '/pages/home/index' || path == '/pages/shop/GoodsClass/index' || path == '/pages/shop/ShoppingCart/index' || path == '/pages/user/User/index') {
  62. // // switchTab({
  63. // // path: parseUrl(location),
  64. // // })
  65. // // return
  66. // }
  67. // resolve({
  68. // url: parseUrl(location),
  69. // complete,
  70. // fail,
  71. // success,
  72. // })
  73. // } else {
  74. // // 没有token,先校验用户是否授权,如果授权了,进行自动登录
  75. // routerPermissions(parseUrl(location))
  76. // reject()
  77. // }
  78. })
  79. }
  80. export function switchTab(location, complete, fail, success) {
  81. handleLoginStatus(location, complete, fail, success)
  82. .then(params => {
  83. uni.switchTab(params)
  84. })
  85. .catch(error => {
  86. // 没有权限
  87. })
  88. }
  89. export function push(location, complete, fail, success) {
  90. handleLoginStatus(location, complete, fail, success)
  91. .then(params => {
  92. uni.navigateTo(params)
  93. })
  94. .catch(error => {
  95. // 没有权限
  96. })
  97. }
  98. export function replace(location, complete, fail, success) {
  99. handleLoginStatus(location, complete, fail, success)
  100. .then(params => {
  101. uni.redirectTo(params)
  102. })
  103. .catch(error => {
  104. // 没有权限
  105. })
  106. }
  107. export function reLaunch(location, complete, fail, success) {
  108. handleLoginStatus(location, complete, fail, success)
  109. .then(params => {
  110. uni.reLaunch(params)
  111. })
  112. }
  113. export function go(delta) {
  114. uni.navigateBack({
  115. delta,
  116. })
  117. }
  118. export function back() {
  119. uni.navigateBack({
  120. delta: 1,
  121. success: function(e) {},
  122. fail: function(e) {},
  123. })
  124. }
  125. export function parseRoute($mp) {
  126. const _$mp = $mp || {}
  127. const path = _$mp.page && _$mp.page.route
  128. return {
  129. path: `/${path}`,
  130. params: {},
  131. query: _$mp.query || _$mp.page.options,
  132. hash: '',
  133. fullPath: parseUrl({
  134. path: `/${path}`,
  135. query: _$mp.query || _$mp.page.options,
  136. }),
  137. name: path && path.replace(/\/(\w)/g, ($0, $1) => $1.toUpperCase()),
  138. }
  139. }
  140. export function parseUrl(location) {
  141. if (typeof location === 'string') return location
  142. const { path, query } = location
  143. const queryStr = stringify(query)
  144. if (!queryStr) {
  145. return path
  146. }
  147. return `${path}?${queryStr}`
  148. }