Files
yuxingu-Miniprogram-dev/util/yxgNav.js
T
jackyu66gitandCursor b09d82df8d feat: 小程序统一走 Go 后台,咨询与登录切到 /api/v1
去掉协会 WebView 和魔方账密页,微信登录与咨询接口共用同一 token 和拦截器。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-15 00:26:28 +08:00

76 lines
2.4 KiB
JavaScript

const HOME = '/pages/yxg-magic/index'
const MAP = [
[/^\/explore\/bank\/([^/?#]+)/, (_, c) => `/pages/yxg/explore-bank?category=${encodeURIComponent(c)}`],
[/^\/explore\/([^/?#]+)/, (_, c) => `/pages/yxg/explore-category?category=${encodeURIComponent(c)}`],
[/^\/explore\/?$/, '/pages/yxg/explore'],
[/^\/growth-plan\/?$/, '/pages/yxg/growth-plan'],
[/^\/ask\/?$/, '/pages/yxg/ask'],
[/^\/companion\/?$/, '/pages/yxg/companion'],
[/^\/mine\/?$/, '/pages/yxg/mine'],
[/^\/login\/?$/, '/pages/login-pop/login-pop?type=2'],
[/^\/profile\/?$/, '/pages/yxg/profile'],
[/^\/portrait\/?$/, '/pages/yxg/portrait'],
[/^\/star\/?$/, '/pages/yxg/star'],
[/^\/synastry\/invite\/([^/?#]+)/, (_, t) => `/pages/yxg/synastry-invite?token=${encodeURIComponent(t)}`],
[/^\/synastry\/?$/, '/pages/yxg/synastry'],
[/^\/rhythm\/?$/, '/pages/yxg/rhythm'],
[/^\/cards\/?$/, '/pages/yxg/cards'],
[/^\/relation\/?$/, '/pages/yxg/relation'],
[/^\/membership\/?$/, '/pages/yxg/membership'],
[/^\/scales\/([^/?#]+)/, (_, s) => `/pages/yxg/scale?slug=${encodeURIComponent(s)}`],
[/^\/share\/?$/, '/pages/yxg/share'],
[/^\/reports\/([^/?#]+)/, (_, id) => `/pages/yxg/report?id=${encodeURIComponent(id)}`],
[/^\/reports\/?$/, '/pages/yxg/reports'],
[/^\/decode\/?$/, '/pages/yxg/portrait'],
[/^\/?$/, HOME],
]
function withQuery(url, query) {
if (!query) return url
const pairs = Object.keys(query)
.filter((k) => query[k] !== undefined && query[k] !== null && query[k] !== '')
.map((k) => `${encodeURIComponent(k)}=${encodeURIComponent(query[k])}`)
if (!pairs.length) return url
return url + (url.includes('?') ? '&' : '?') + pairs.join('&')
}
export function h5ToMp(path, query) {
const raw = String(path || '/')
const pathname = raw.split('?')[0]
for (const [re, dest] of MAP) {
const m = pathname.match(re)
if (!m) continue
const url = typeof dest === 'function' ? dest(...m) : dest
return withQuery(url, query)
}
return HOME
}
export function yxgGo(path, query) {
const url = h5ToMp(path, query)
if (url === HOME || url.startsWith(`${HOME}?`)) {
uni.switchTab({ url: HOME })
return
}
uni.navigateTo({ url })
}
export function yxgReplace(path, query) {
const url = h5ToMp(path, query)
if (url === HOME || url.startsWith(`${HOME}?`)) {
uni.switchTab({ url: HOME })
return
}
uni.redirectTo({ url })
}
export function yxgBack() {
const pages = getCurrentPages()
if (pages.length > 1) {
uni.navigateBack()
return
}
uni.switchTab({ url: HOME })
}