63 lines
1.8 KiB
Plaintext
63 lines
1.8 KiB
Plaintext
export type AuthRedirectOptions = {
|
|
loginPath?: string
|
|
registerPath?: string
|
|
fallbackUrl?: string
|
|
}
|
|
|
|
function normalizePath(path: string): string {
|
|
if (!path) return ''
|
|
return path.startsWith('/') ? path : `/${path}`
|
|
}
|
|
|
|
function safeEncode(url: string): string {
|
|
try {
|
|
return encodeURIComponent(url)
|
|
} catch (_) {
|
|
return url
|
|
}
|
|
}
|
|
|
|
export function getCurrentPageUrlWithQuery(): string {
|
|
const pages = getCurrentPages() as any[]
|
|
const currentPage = pages.length > 0 ? pages[pages.length - 1] : null
|
|
if (!currentPage) return ''
|
|
|
|
const route = currentPage.route as string | null
|
|
const options = (currentPage.options ?? {}) as Record<string, any>
|
|
if (!route) return ''
|
|
|
|
const path = normalizePath(route)
|
|
const keys = Object.keys(options)
|
|
if (keys.length === 0) return path
|
|
|
|
const query = keys
|
|
.filter((k) => options[k] != null)
|
|
.map((k) => `${k}=${encodeURIComponent(String(options[k]))}`)
|
|
.join('&')
|
|
return query.length > 0 ? `${path}?${query}` : path
|
|
}
|
|
|
|
export function toLoginWithRedirect(redirectUrl?: string, opts?: AuthRedirectOptions) {
|
|
const loginPath = opts?.loginPath ?? '/pages/user/login'
|
|
const fallback = opts?.fallbackUrl ?? '/pages/mall/consumer/index'
|
|
const target = (redirectUrl != null && redirectUrl.length > 0)
|
|
? redirectUrl
|
|
: (getCurrentPageUrlWithQuery() || fallback)
|
|
|
|
uni.navigateTo({
|
|
url: `${loginPath}?redirect=${safeEncode(target)}`
|
|
})
|
|
}
|
|
|
|
export function toRegisterWithRedirect(redirectUrl?: string, opts?: AuthRedirectOptions) {
|
|
const registerPath = opts?.registerPath ?? '/pages/user/register'
|
|
const fallback = opts?.fallbackUrl ?? '/pages/mall/consumer/index'
|
|
const target = (redirectUrl != null && redirectUrl.length > 0)
|
|
? redirectUrl
|
|
: (getCurrentPageUrlWithQuery() || fallback)
|
|
|
|
uni.navigateTo({
|
|
url: `${registerPath}?redirect=${safeEncode(target)}`
|
|
})
|
|
}
|