func.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // 全局公共方法
  2. const install = (Vue, vm) => {
  3. // 登录操作
  4. const login = (userInfo) => {
  5. vm.$u.vuex('userInfo', userInfo)
  6. vm.$u.vuex('accessToken', userInfo.access_token)
  7. vm.$u.vuex('isLogin', true)
  8. uni.switchTab({
  9. url: '/pages/tabBar/home'
  10. })
  11. }
  12. // 退出登录
  13. const logout = () => {
  14. vm.$u.vuex('userInfo', {
  15. avatar: '',
  16. nick_name: '游客',
  17. tenant_id: '暂无'
  18. })
  19. vm.$u.vuex('accessToken', '')
  20. vm.$u.vuex('isLogin', false)
  21. uni.redirectTo({
  22. url: '/pages/login/login'
  23. })
  24. }
  25. // 检查登录状态
  26. const checkLogin = (e = {}) => {
  27. if (!vm.isLogin) {
  28. uni.navigateTo({
  29. url: '/pages/login/login'
  30. })
  31. return false
  32. }
  33. return true
  34. }
  35. // 跳转路由前检查登录状态
  36. const route = (url) => {
  37. if (!vm.isLogin) {
  38. uni.showToast({
  39. title: '请先登录',
  40. icon: 'none'
  41. })
  42. setTimeout(() => {
  43. uni.navigateTo({
  44. url: '/pages/login/login'
  45. })
  46. }, 500)
  47. return false
  48. }
  49. uni.navigateTo({
  50. url: url
  51. })
  52. }
  53. // URL参数转对象
  54. const paramsToObj = (url) => {
  55. if (url.indexOf('?') != -1) {
  56. let arr = url.split('?')[1]
  57. }
  58. let arr = url.split('&')
  59. let obj = {}
  60. for (let i of arr) {
  61. obj[i.split('=')[0]] = i.split('=')[1]
  62. }
  63. return obj
  64. }
  65. // 刷新当前页面
  66. const refreshPage = () => {
  67. const pages = getCurrentPages()
  68. const currentPage = pages[pages.length - 1]
  69. const path = '/' + currentPage.route + vm.$u.queryParams(currentPage.options)
  70. if (vm.$u.test.contains(currentPage.route, 'tabbar')) {
  71. uni.reLaunch({
  72. url: path,
  73. fail: (err) => {
  74. console.log(err)
  75. }
  76. })
  77. } else {
  78. uni.redirectTo({
  79. url: path,
  80. fail: (err) => {
  81. console.log(err)
  82. }
  83. })
  84. }
  85. }
  86. // 提示
  87. const showToast = (data = {}) => {
  88. if (typeof data == 'string') {
  89. uni.showToast({
  90. title: data,
  91. icon: 'none'
  92. })
  93. } else {
  94. uni.showToast({
  95. title: data.title,
  96. icon: data.icon || 'none',
  97. image: data.image || '',
  98. mask: data.mask || false,
  99. position: data.position || 'center',
  100. duration: data.duration || 1500,
  101. success: () => {
  102. setTimeout(() => {
  103. if (data.back) return uni.navigateBack()
  104. data.success && data.success()
  105. }, data.duration || 1500)
  106. }
  107. })
  108. }
  109. }
  110. // 将定义的方法挂载,使用this.$u.func.xx调用
  111. Vue.prototype.$u.func = {
  112. login,
  113. logout,
  114. route,
  115. checkLogin,
  116. paramsToObj,
  117. refreshPage,
  118. showToast
  119. }
  120. }
  121. export default {
  122. install
  123. }