fix(mini): refresh page after login

This commit is contained in:
stu2not
2026-09-19 16:05:20 +08:00
parent 7bcace0410
commit 15e7c56319
+35 -14
View File
@@ -5,19 +5,46 @@ import Taro from '@tarojs/taro'
import { getToken, wechatLogin } from '@/services/auth'
import './index.scss'
const LOGIN_PAGE_URL = '/pages/login/index'
const DEFAULT_POST_LOGIN_URL = '/pages/device/index'
const TAB_BAR_ROUTES = new Set([
'/pages/device/index',
'/pages/chat/index',
'/pages/location/index',
'/pages/sleep/index',
])
function consumePostLoginRedirect(): string {
const storedUrl = String(Taro.getStorageSync('postLoginRedirect') || '').trim()
Taro.removeStorageSync('postLoginRedirect')
if (!storedUrl || storedUrl === LOGIN_PAGE_URL || !storedUrl.startsWith('/pages/')) {
return DEFAULT_POST_LOGIN_URL
}
return storedUrl
}
function navigateAfterLogin(url: string): void {
const route = url.split('?')[0]
if (!TAB_BAR_ROUTES.has(route)) {
Taro.reLaunch({ url })
return
}
// Tab pages must be opened with switchTab so their lifecycle and custom tab bar refresh.
void Promise.resolve(Taro.switchTab({ url: route })).catch(() => {
Taro.reLaunch({ url: route })
})
}
export default function Login() {
const [submitting, setSubmitting] = useState(false)
const [agreementAccepted, setAgreementAccepted] = useState(false)
useEffect(() => {
if (getToken()) {
const redirectUrl = String(Taro.getStorageSync('postLoginRedirect') || '').trim()
if (redirectUrl) {
Taro.removeStorageSync('postLoginRedirect')
Taro.reLaunch({ url: redirectUrl })
return
}
Taro.reLaunch({ url: '/pages/device/index' })
navigateAfterLogin(consumePostLoginRedirect())
return
}
@@ -60,13 +87,7 @@ export default function Login() {
Taro.showToast({ title: '登录成功', icon: 'success' })
setTimeout(() => {
const redirectUrl = String(Taro.getStorageSync('postLoginRedirect') || '').trim()
if (redirectUrl) {
Taro.removeStorageSync('postLoginRedirect')
Taro.reLaunch({ url: redirectUrl })
return
}
Taro.reLaunch({ url: '/pages/device/index' })
navigateAfterLogin(consumePostLoginRedirect())
}, 300)
} catch (error: any) {
console.error('[login] failed:', error)