import { useEffect, useState } from 'react' import { Button, Card, Checkbox, Form, Input, Typography, theme, } from 'antd' import { LockOutlined, LoginOutlined, SafetyCertificateOutlined, UserOutlined, } from '@ant-design/icons' import { useNavigate } from 'react-router-dom' import { toast } from 'sonner' import { apiUserLogin } from '@/apis/apisUser' import { useUserStore } from '@/store/user' const LOGIN_REMEMBER_KEY = 'mall-admin:remember-login' interface LoginFormValues { account: string password: string captcha: string remember: boolean } interface RememberLoginData { account: string password: string remember: boolean } const readRememberLogin = (): RememberLoginData => { if (typeof window === 'undefined') { return { account: '', password: '', remember: true, } } try { const raw = window.localStorage.getItem(LOGIN_REMEMBER_KEY) if (!raw) { return { account: '', password: '', remember: true, } } const parsed = JSON.parse(raw) as Partial return { account: parsed.account ?? '', password: parsed.password ?? '', remember: parsed.remember ?? true, } } catch { return { account: '', password: '', remember: true, } } } const persistRememberLogin = (values: RememberLoginData) => { if (typeof window === 'undefined') { return } if (!values.remember) { window.localStorage.removeItem(LOGIN_REMEMBER_KEY) return } window.localStorage.setItem(LOGIN_REMEMBER_KEY, JSON.stringify(values)) } export default function LoginPage() { const navigate = useNavigate() const [form] = Form.useForm() const [loading, setLoading] = useState(false) const token = useUserStore(state => state.token) const setToken = useUserStore(state => state.setToken) const { token: themeToken } = theme.useToken() useEffect(() => { if (token?.accessToken) { navigate('/merchant-review', { replace: true }) return } form.setFieldsValue(readRememberLogin()) }, [form, navigate, token?.accessToken]) const onFinish = async (values: LoginFormValues) => { try { setLoading(true) const res = await apiUserLogin({ account: values.account.trim(), password: values.password, captcha: values.captcha.trim(), captchaId: '', loginType: '0', type: '0', remember: values.remember, }) persistRememberLogin({ account: values.account.trim(), password: values.password, remember: values.remember, }) setToken(res.data) toast.success('登录成功') navigate('/merchant-review', { replace: true }) } catch (error) { toast.error(error instanceof Error ? error.message : '登录失败') } finally { setLoading(false) } } return (
商城平台管理端
form={form} layout="vertical" requiredMark={false} onFinish={onFinish} initialValues={{ account: '', password: '', captcha: '', remember: true, }} > } /> } /> } />
记住密码
) }