feat: 小程序统一走 Go 后台,咨询与登录切到 /api/v1
去掉协会 WebView 和魔方账密页,微信登录与咨询接口共用同一 token 和拦截器。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
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 })
|
||||
}
|
||||
Reference in New Issue
Block a user