1
This commit is contained in:
187
nx/router/index.js
Normal file
187
nx/router/index.js
Normal file
@@ -0,0 +1,187 @@
|
||||
import $store from '@/nx/store'
|
||||
import { isString, isEmpty, startsWith, isObject, isNil, clone } from 'lodash'
|
||||
import { throttle } from '@/uview-plus'
|
||||
|
||||
const _go = (
|
||||
path,
|
||||
params = {},
|
||||
options = {
|
||||
redirect: false,
|
||||
reLaunch: false
|
||||
}
|
||||
) => {
|
||||
let page = '' // 跳转页面
|
||||
let query = '' // 页面参数
|
||||
let url = '' // 跳转页面完整路径
|
||||
|
||||
if (isString(path)) {
|
||||
// 判断跳转类型是 path | 还是http
|
||||
if (startsWith(path, 'http')) {
|
||||
// #ifdef H5
|
||||
window.location = path
|
||||
return
|
||||
// #endif
|
||||
// #ifndef H5
|
||||
page = `/pages/public/webview`
|
||||
query = `url=${encodeURIComponent(path)}`
|
||||
// #endif
|
||||
} else {
|
||||
;[page, query] = path.split('?')
|
||||
}
|
||||
if (!isEmpty(params)) {
|
||||
let query2 = paramsToQuery(params)
|
||||
if (isEmpty(query)) {
|
||||
query = query2
|
||||
} else {
|
||||
query += '&' + query2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isObject(path)) {
|
||||
page = path.url
|
||||
if (!isNil(path.params)) {
|
||||
query = paramsToQuery(path.params)
|
||||
}
|
||||
}
|
||||
|
||||
const nextRoute = ROUTES_MAP[page]
|
||||
|
||||
// 未找到指定跳转页面
|
||||
// mark: 跳转404页
|
||||
if (!nextRoute) {
|
||||
console.log(`%c跳转路径参数错误<${page || 'EMPTY'}>`, 'color:red;background:yellow')
|
||||
return
|
||||
}
|
||||
|
||||
// 页面登录拦截
|
||||
if (nextRoute.meta?.auth && !$store('user').isLogin) {
|
||||
// 这里做未登录拦截
|
||||
uni.reLaunch({
|
||||
url: 'pages/login/login'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
url = page
|
||||
if (!isEmpty(query)) {
|
||||
url += `?${query}`
|
||||
}
|
||||
|
||||
// 跳转底部导航
|
||||
if (TABBAR.includes(page)) {
|
||||
uni.switchTab({
|
||||
url
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 使用redirect跳转
|
||||
if (options.redirect) {
|
||||
uni.redirectTo({
|
||||
url
|
||||
})
|
||||
return
|
||||
}
|
||||
if (options.reLaunch) {
|
||||
uni.reLaunch({
|
||||
url
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
uni.navigateTo({
|
||||
url
|
||||
})
|
||||
}
|
||||
|
||||
// 限流 防止重复点击跳转
|
||||
function go(...args) {
|
||||
throttle(_go(...args), 500)
|
||||
}
|
||||
|
||||
function paramsToQuery(params) {
|
||||
if (isEmpty(params)) {
|
||||
return ''
|
||||
}
|
||||
// return new URLSearchParams(Object.entries(params)).toString();
|
||||
let query = []
|
||||
for (let key in params) {
|
||||
query.push(key + '=' + params[key])
|
||||
}
|
||||
|
||||
return query.join('&')
|
||||
}
|
||||
|
||||
function back() {
|
||||
// #ifdef H5
|
||||
history.back()
|
||||
// #endif
|
||||
|
||||
// #ifndef H5
|
||||
uni.navigateBack()
|
||||
// #endif
|
||||
}
|
||||
|
||||
function redirect(path, params = {}) {
|
||||
go(path, params, {
|
||||
redirect: true
|
||||
})
|
||||
}
|
||||
|
||||
// 检测是否有浏览器历史
|
||||
function hasHistory() {
|
||||
// #ifndef H5
|
||||
const pages = getCurrentPages()
|
||||
if (pages.length > 1) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
// #endif
|
||||
|
||||
// #ifdef H5
|
||||
return !!history.state.back
|
||||
// #endif
|
||||
}
|
||||
|
||||
function getCurrentRoute(field = '') {
|
||||
let currentPage = getCurrentPage()
|
||||
// #ifdef MP
|
||||
currentPage.$page['route'] = currentPage.route
|
||||
currentPage.$page['options'] = currentPage.options
|
||||
// #endif
|
||||
if (field !== '') {
|
||||
return currentPage.$page[field]
|
||||
} else {
|
||||
return currentPage.$page
|
||||
}
|
||||
}
|
||||
|
||||
function getCurrentPage() {
|
||||
let pages = getCurrentPages()
|
||||
return pages[pages.length - 1]
|
||||
}
|
||||
|
||||
function getCur() {
|
||||
let a = getCurrentPages()
|
||||
let pages = clone(a)
|
||||
return pages
|
||||
}
|
||||
|
||||
function error(errCode, errMsg = '') {
|
||||
redirect('/pages/public/error', {
|
||||
errCode,
|
||||
errMsg
|
||||
})
|
||||
}
|
||||
|
||||
export default {
|
||||
go,
|
||||
back,
|
||||
hasHistory,
|
||||
redirect,
|
||||
getCurrentPage,
|
||||
getCurrentRoute,
|
||||
getCur,
|
||||
error
|
||||
}
|
||||
Reference in New Issue
Block a user