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 }) }