feat: 平台登录页+企业登录页添加记住账号密码功能

This commit is contained in:
selfrelease
2026-07-29 12:06:10 +08:00
parent b7e617cd0d
commit 0c6cb8d6cb
2 changed files with 70 additions and 4 deletions
+33 -2
View File
@@ -1,4 +1,4 @@
import { useState } from 'react'
import { useState, useEffect } from 'react'
import { useNavigate, Link } from 'react-router-dom'
import { Eye, EyeOff } from 'lucide-react'
import Logo from '../../components/ui/Logo'
@@ -23,8 +23,9 @@ export default function Login() {
const [showPassword, setShowPassword] = useState(false)
const [error, setError] = useState('')
const [loading, setLoading] = useState(false)
const [remember, setRemember] = useState(false)
const { register, handleSubmit, formState: { errors } } = useForm<FormData>({
const { register, handleSubmit, setValue, formState: { errors } } = useForm<FormData>({
resolver: zodResolver(schema),
defaultValues: {
phone: '13800000001',
@@ -32,11 +33,31 @@ export default function Login() {
},
})
// 读取记住的账号密码
useEffect(() => {
try {
const saved = localStorage.getItem('admin-login-remember')
if (saved) {
const { phone, password } = JSON.parse(saved)
if (phone) setValue('phone', phone)
if (password) setValue('password', password)
setRemember(true)
}
} catch {
// 忽略解析错误
}
}, [setValue])
const onSubmit = async (data: FormData) => {
setError('')
setLoading(true)
try {
const res = await api.post('/auth/login', data) as any
if (remember) {
localStorage.setItem('admin-login-remember', JSON.stringify({ phone: data.phone, password: data.password }))
} else {
localStorage.removeItem('admin-login-remember')
}
setAuth(res.data.user, res.data.accessToken, res.data.refreshToken)
navigate('/')
} catch (err: any) {
@@ -92,6 +113,16 @@ export default function Login() {
{errors.password && <p className="text-xs text-red-500 mt-1">{errors.password.message}</p>}
</div>
<label className="flex items-center gap-2 cursor-pointer select-none">
<input
type="checkbox"
checked={remember}
onChange={(e) => setRemember(e.target.checked)}
className="w-4 h-4 rounded border-gray-300 text-primary focus:ring-primary focus:ring-offset-0"
/>
<span className="text-sm text-gray-500"></span>
</label>
<Button type="submit" className="w-full" disabled={loading}>
{loading ? '登录中...' : '登录'}
</Button>