common.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. // 全局公共方法
  2. // 此处第二个参数vm,也就是页面使用的this
  3. const install = (Vue, vm) => {
  4. // 检查登录状态
  5. const checkLogin = (e = {}) => {
  6. if (!vm.isLogin) {
  7. uni.navigateTo({
  8. url: '/pages/user/login/login'
  9. })
  10. return false
  11. }
  12. return true
  13. }
  14. // 校验是否是H5页面
  15. const checkH5 = (url) => {
  16. const testHttp = vm.$u.test.url(url)
  17. if (testHttp) {
  18. return '/pages/h5/h5?url=' + url
  19. } else {
  20. return url
  21. }
  22. }
  23. // URL参数转对象
  24. const paramsToObj = (url) => {
  25. // 如果是完整URL,包含?号,先通过?号分解
  26. if (url.indexOf('?') != -1) {
  27. let arr = url.split('?')[1]
  28. }
  29. let arr = url.split('&') //先通过?分解得到?后面的所需字符串,再将其通过&分解开存放在数组里
  30. let obj = {}
  31. for (let i of arr) {
  32. obj[i.split('=')[0]] = i.split('=')[1] //对数组每项用=分解开,=前为对象属性名,=后为属性值
  33. }
  34. return obj
  35. }
  36. // 刷新当前页面
  37. const refreshPage = () => {
  38. const pages = getCurrentPages()
  39. const currentPage = pages[pages.length - 1]
  40. const path = '/' + currentPage.route + vm.$u.queryParams(currentPage.options)
  41. if (vm.$u.test.contains(currentPage.route, 'tabbar')) {
  42. uni.reLaunch({
  43. url: path,
  44. fail: (err) => {
  45. console.log(err)
  46. }
  47. })
  48. } else {
  49. uni.redirectTo({
  50. url: path,
  51. fail: (err) => {
  52. console.log(err)
  53. }
  54. })
  55. }
  56. }
  57. // toast
  58. const showToast = (data = {}) => {
  59. if (typeof data == 'string') {
  60. uni.showToast({
  61. title: data,
  62. icon: 'none'
  63. })
  64. } else {
  65. uni.showToast({
  66. title: data.title,
  67. icon: data.icon || 'none',
  68. image: data.image || '',
  69. mask: data.mask || false,
  70. position: data.position || 'center',
  71. duration: data.duration || 1500,
  72. success: () => {
  73. setTimeout(() => {
  74. if (data.back) return uni.navigateBack()
  75. data.success && data.success()
  76. }, data.duration || 1500)
  77. }
  78. })
  79. }
  80. }
  81. // 单图上传
  82. const uploadImage = (callback) => {
  83. uni.chooseImage({
  84. count: 1,
  85. success: img => {
  86. const tempFilePaths = img.tempFilePaths
  87. uni.uploadFile({
  88. url: 'xxx.com',
  89. filePath: tempFilePaths[0],
  90. name: 'file',
  91. header: {
  92. openid: vm.userInfo.openid || ''
  93. },
  94. success: res => {
  95. callback && callback(JSON.parse(res.data))
  96. }
  97. })
  98. }
  99. })
  100. }
  101. Vue.prototype.$u.func = {
  102. checkLogin,
  103. checkH5,
  104. paramsToObj,
  105. refreshPage,
  106. showToast,
  107. uploadImage,
  108. }
  109. // 将各个定义的方法,统一放进对象挂载到vm.$u.func(因为vm就是this,也即this.$u.func)下
  110. }
  111. export default {
  112. install
  113. }