巴青农资商城

searchNav.js 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { PAGE_SEARCH_INDEX, PAGE_SEARCH_RESULT } from '@/utils/pageRoute'
  2. /** 当前页路由(如 subpackage/search/result) */
  3. function getCurrentRoute() {
  4. const pages = getCurrentPages()
  5. const page = pages[pages.length - 1]
  6. return (page && page.route) || ''
  7. }
  8. function isSearchResultRoute(route) {
  9. return route.includes('search/result')
  10. }
  11. function isSearchIndexRoute(route) {
  12. return route.includes('search/index')
  13. }
  14. /** 跳转搜索输入页 A */
  15. export function goSearchInput(keyword) {
  16. const text = (keyword || '').trim()
  17. const url = text
  18. ? `${PAGE_SEARCH_INDEX}?keyword=${encodeURIComponent(text)}`
  19. : PAGE_SEARCH_INDEX
  20. const route = getCurrentRoute()
  21. // 从结果页「重新搜索」:替换当前页,避免栈变成 result → index 导致返回循环
  22. if (isSearchResultRoute(route)) {
  23. uni.redirectTo({ url })
  24. return
  25. }
  26. // 已在输入页:仅刷新当前页参数
  27. if (isSearchIndexRoute(route)) {
  28. uni.redirectTo({ url })
  29. return
  30. }
  31. uni.navigateTo({ url })
  32. }
  33. /** 跳转搜索结果页 B */
  34. export function goSearchResult(keyword) {
  35. const text = (keyword || '').trim()
  36. if (!text) return
  37. const url = `${PAGE_SEARCH_RESULT}?keyword=${encodeURIComponent(text)}`
  38. const route = getCurrentRoute()
  39. // 已在结果页:改关键词时用替换,不叠一层
  40. if (isSearchResultRoute(route)) {
  41. uni.redirectTo({ url })
  42. return
  43. }
  44. uni.navigateTo({ url })
  45. }
  46. /** 输入页返回:若栈里下层仍是结果页,多退一层,防止 index ↔ result 循环 */
  47. export function navigateBackFromSearchIndex() {
  48. const pages = getCurrentPages()
  49. if (pages.length >= 2) {
  50. const prev = pages[pages.length - 2]
  51. const prevRoute = (prev && prev.route) || ''
  52. if (isSearchResultRoute(prevRoute)) {
  53. uni.navigateBack({ delta: 2 })
  54. return
  55. }
  56. }
  57. uni.navigateBack({
  58. fail: () => {
  59. uni.switchTab({ url: '/pages/index/index' })
  60. }
  61. })
  62. }