diff --git a/src/pages/LoginPage.module.scss b/src/pages/LoginPage.module.scss index a877ab0..3f4bccb 100644 --- a/src/pages/LoginPage.module.scss +++ b/src/pages/LoginPage.module.scss @@ -169,22 +169,8 @@ // 语言下拉选择 .languageSelect { - white-space: nowrap; - border: 1px solid var(--border-color); - border-radius: $radius-md; - padding: 10px 12px; - font-size: 14px; - background: var(--bg-primary); - color: var(--text-primary); - cursor: pointer; - height: 40px; - box-sizing: border-box; - - &:focus { - outline: none; - border-color: var(--primary-color); - box-shadow: 0 0 0 3px rgba($primary-color, 0.18); - } + min-width: 108px; + flex: 0 0 auto; } // 连接信息框 @@ -218,19 +204,13 @@ .toggleAdvanced { display: flex; justify-content: flex-start; - align-items: center; - gap: $spacing-xs; + width: 100%; +} + +.toggleLabel { color: var(--text-secondary); - cursor: pointer; - - input[type='checkbox'] { - cursor: pointer; - } - - label { - cursor: pointer; - font-size: 14px; - } + font-size: 14px; + font-weight: 500; } // 错误提示框 diff --git a/src/pages/LoginPage.tsx b/src/pages/LoginPage.tsx index c746bf7..089de46 100644 --- a/src/pages/LoginPage.tsx +++ b/src/pages/LoginPage.tsx @@ -3,6 +3,8 @@ import { Navigate, useNavigate, useLocation } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; +import { Select } from '@/components/ui/Select'; +import { ToggleSwitch } from '@/components/ui/ToggleSwitch'; import { IconEye, IconEyeOff } from '@/components/ui/icons'; import { useAuthStore, useLanguageStore, useNotificationStore } from '@/stores'; import { detectApiBaseFromLocation, normalizeApiBase } from '@/utils/connection'; @@ -89,9 +91,16 @@ export function LoginPage() { const [error, setError] = useState(''); const detectedBase = useMemo(() => detectApiBaseFromLocation(), []); + const languageOptions = useMemo( + () => + LANGUAGE_ORDER.map((lang) => ({ + value: lang, + label: t(LANGUAGE_LABEL_KEYS[lang]) + })), + [t] + ); const handleLanguageChange = useCallback( - (event: React.ChangeEvent) => { - const selectedLanguage = event.target.value; + (selectedLanguage: string) => { if (!isSupportedLanguage(selectedLanguage)) { return; } @@ -205,19 +214,14 @@ export function LoginPage() {
{t('title.login')}
- + fullWidth={false} + ariaLabel={t('language.switch')} + />
{t('login.subtitle')}
@@ -229,13 +233,12 @@ export function LoginPage() {
- setShowCustomBase(e.target.checked)} + onChange={setShowCustomBase} + ariaLabel={t('login.custom_connection_label')} + label={{t('login.custom_connection_label')}} /> -
{showCustomBase && ( @@ -278,13 +281,12 @@ export function LoginPage() { />
- setRememberPassword(e.target.checked)} + onChange={setRememberPassword} + ariaLabel={t('login.remember_password_label')} + label={{t('login.remember_password_label')}} /> -