38 lines
1.0 KiB
JavaScript
38 lines
1.0 KiB
JavaScript
/**
|
||
* Banner导航工具函数
|
||
* 根据Banner的linkType决定导航方式
|
||
* @param {object} banner - Banner对象 { linkType: 'internal'|'external', linkUrl: string }
|
||
* @returns {{ type: string, url: string } | null} 导航结果描述,null表示无效Banner
|
||
*/
|
||
export function resolveBannerNavigation(banner) {
|
||
if (!banner || !banner.linkUrl) return null
|
||
|
||
if (banner.linkType === 'internal') {
|
||
return { type: 'internal', url: banner.linkUrl }
|
||
} else if (banner.linkType === 'external') {
|
||
return { type: 'external', url: banner.linkUrl }
|
||
}
|
||
|
||
return null
|
||
}
|
||
|
||
/**
|
||
* 执行Banner导航(依赖uni API)
|
||
* @param {object} banner - Banner对象
|
||
*/
|
||
export function navigateBanner(banner) {
|
||
const result = resolveBannerNavigation(banner)
|
||
if (!result) return
|
||
|
||
if (result.type === 'internal') {
|
||
uni.navigateTo({ url: result.url })
|
||
} else if (result.type === 'external') {
|
||
// #ifdef APP-PLUS
|
||
plus.runtime.openURL(result.url)
|
||
// #endif
|
||
// #ifdef H5
|
||
window.open(result.url)
|
||
// #endif
|
||
}
|
||
}
|