// 进入新的页面的方法
import urlMap from '@/common/urlMap'
import Vue from 'vue'

const encodeParam = function (params) {
  let url = ''
  for (const k in params) {
    const value = params[k] !== undefined ? params[k] : ''
    url += '&' + k + '=' + encodeURIComponent(value)
  }
  return url ? url.substring(1) : ''
}

const routerToFail = function (err) {
  console.log(err, '跳转新页面失败')
}

const commonMethods = {
  /**
   * 保留当前页面，跳转到应用内的某个页面，使用uni.navigateBack可以返回到原页面
   * 页面跳转路径有层级限制，不能无限制跳转新页面
   * @param {*} type 路径唯一类型
   * @param {*} params 路径参数
   * @returns {*} null
   */
  globalNavigateTo: function (type, params) {
    if (urlMap.has(type)) {
      let url = urlMap.get(type)
      if (params) {
        url += (url.indexOf('?') < 0 && params ? '?' : '&') + encodeParam(params)
      }
      uni.navigateTo({ url, fail: routerToFail })
    }
  },
  // 关闭当前页面，跳转到应用内的某个页面
  globalRedirectTo: function (type, params) {
    if (urlMap.has(type)) {
      let url = urlMap.get(type)
      if (params) {
        url += (url.indexOf('?') < 0 && params ? '?' : '&') + encodeParam(params)
      }
      uni.redirectTo({ url, fail: routerToFail })
    }
  },
  // 关闭所有页面，打开应用内的某个页面
  globalReLaunch: function (type, params) {
    if (urlMap.has(type)) {
      let url = urlMap.get(type)
      if (params) {
        url += (url.indexOf('?') < 0 && params ? '?' : '&') + encodeParam(params)
      }
      uni.reLaunch({ url, fail: routerToFail })
    }
  }
}

export default commonMethods
