94 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

2024-11-05 10:09:18 +08:00
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)
},
})
}
})
}