2024-11-05 10:14:41 +08:00

94 lines
2.2 KiB
TypeScript

import { debugWarn } from '../error'
import { isEmptyVariableInDefault } from '../is-empty'
type navType = 'navigateTo' | 'redirectTo' | 'reLaunch' | 'switchTab'
/**
* 返回上一页
* @param indexUrl 首页地址
* @param delta 返回的页面数,如果 delta 大于现有页面数,则返回到首页
*/
export function tnNavBack(indexUrl?: string, delta = 1) {
const indexPageUrl = isEmptyVariableInDefault(indexUrl, '/pages/index/index')
// 通过判断当前页面的页面栈信息,是否有上一页进行返回,如果没有则跳转到首页
const pages = getCurrentPages()
if (pages?.length) {
const firstPage = pages[0]
if (
pages.length === 1 &&
(!firstPage.route || firstPage?.route != indexPageUrl)
) {
return tnNavPage(indexPageUrl, 'reLaunch')
} else {
uni.navigateBack({
delta,
})
return Promise.resolve()
}
} else {
return tnNavPage(indexPageUrl, 'reLaunch')
}
}
/**
* 跳转到指定页面
* @param url 页面地址
* @param type 跳转类型
*/
export function tnNavPage(url: string, type: navType = 'navigateTo') {
function handelNavFail(err: any) {
debugWarn('tnNavPage', `跳转页面失败: ${err}`)
}
return new Promise<void>((resolve, reject) => {
switch (type) {
case 'navigateTo':
uni.navigateTo({
url,
success: () => {
resolve()
},
fail: (err) => {
handelNavFail(err)
reject(err)
},
})
break
case 'redirectTo':
uni.redirectTo({
url,
success: () => {
resolve()
},
fail: (err) => {
handelNavFail(err)
reject(err)
},
})
break
case 'reLaunch':
uni.reLaunch({
url,
success: () => {
resolve()
},
fail: (err) => {
handelNavFail(err)
reject(err)
},
})
break
case 'switchTab':
uni.switchTab({
url,
success: () => {
resolve()
},
fail: (err) => {
handelNavFail(err)
reject(err)
},
})
}
})
}