| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import { PAGE_SEARCH_INDEX, PAGE_SEARCH_RESULT } from '@/utils/pageRoute'
- /** 当前页路由(如 subpackage/search/result) */
- function getCurrentRoute() {
- const pages = getCurrentPages()
- const page = pages[pages.length - 1]
- return (page && page.route) || ''
- }
- function isSearchResultRoute(route) {
- return route.includes('search/result')
- }
- function isSearchIndexRoute(route) {
- return route.includes('search/index')
- }
- /** 跳转搜索输入页 A */
- export function goSearchInput(keyword) {
- const text = (keyword || '').trim()
- const url = text
- ? `${PAGE_SEARCH_INDEX}?keyword=${encodeURIComponent(text)}`
- : PAGE_SEARCH_INDEX
- const route = getCurrentRoute()
- // 从结果页「重新搜索」:替换当前页,避免栈变成 result → index 导致返回循环
- if (isSearchResultRoute(route)) {
- uni.redirectTo({ url })
- return
- }
- // 已在输入页:仅刷新当前页参数
- if (isSearchIndexRoute(route)) {
- uni.redirectTo({ url })
- return
- }
- uni.navigateTo({ url })
- }
- /** 跳转搜索结果页 B */
- export function goSearchResult(keyword) {
- const text = (keyword || '').trim()
- if (!text) return
- const url = `${PAGE_SEARCH_RESULT}?keyword=${encodeURIComponent(text)}`
- const route = getCurrentRoute()
- // 已在结果页:改关键词时用替换,不叠一层
- if (isSearchResultRoute(route)) {
- uni.redirectTo({ url })
- return
- }
- uni.navigateTo({ url })
- }
- /** 输入页返回:若栈里下层仍是结果页,多退一层,防止 index ↔ result 循环 */
- export function navigateBackFromSearchIndex() {
- const pages = getCurrentPages()
- if (pages.length >= 2) {
- const prev = pages[pages.length - 2]
- const prevRoute = (prev && prev.route) || ''
- if (isSearchResultRoute(prevRoute)) {
- uni.navigateBack({ delta: 2 })
- return
- }
- }
- uni.navigateBack({
- fail: () => {
- uni.switchTab({ url: '/pages/index/index' })
- }
- })
- }
|