feat: improve login UX and add admin login lock reset
- Translate all login error messages to Chinese (network errors, HTTP status codes, URL validation errors) - Add password visibility toggle (eye icon) to login form - Add live countdown timer when login is locked, disable login button during cooldown, auto-clear error when countdown ends - Add X button red hover feedback in server settings dialog - Add LoginGuard.Unlock() method to clear Redis lock/failure keys - Expose POST /admin-users/:id/reset-login-lock endpoint in ops API - Add "重置登录保护" button in ops-web user management table Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -391,10 +391,23 @@ function formatLoginError(err: unknown): string {
|
||||
login_in_progress: '登录请求正在处理中',
|
||||
login_guard_unavailable: '登录保护暂时不可用',
|
||||
}
|
||||
const message = messages[err.message] ?? err.message.replaceAll('_', ' ')
|
||||
return err.detail ? `${message},${err.detail}` : message
|
||||
if (err.message in messages) {
|
||||
const message = messages[err.message]!
|
||||
return err.message === 'login_locked' && err.detail ? `${message},${err.detail}` : message
|
||||
}
|
||||
if (err.status === 404) return '登录接口不存在,请确认服务器地址'
|
||||
if (err.status && err.status >= 500) return '服务器内部错误,请稍后重试'
|
||||
if (err.status && err.status >= 400) return '请求被服务器拒绝,请检查账号信息'
|
||||
if (!err.status) return '网络连接失败,请检查服务器地址或网络'
|
||||
return err.message.replaceAll('_', ' ')
|
||||
}
|
||||
return err instanceof Error ? err.message : '登录失败,请稍后重试'
|
||||
if (err instanceof Error) {
|
||||
const msg = err.message
|
||||
if (msg.includes('Invalid URL') || msg.includes('Failed to construct')) {
|
||||
return '服务器地址无效,请检查网关 API 地址设置'
|
||||
}
|
||||
}
|
||||
return '登录失败,请稍后重试'
|
||||
}
|
||||
|
||||
async function performLogin(payload: LoginRequest): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user