import { useState, useEffect } from 'react' import { Card, Tabs, Form, Input, Button, Avatar, Upload, message } from 'antd' import { UserOutlined, LockOutlined, UploadOutlined } from '@ant-design/icons' import { getCurrentUser, updateProfile, changePassword } from '@/api/auth' import useUserStore from '@/stores/userStore' import MainLayout from '@/components/MainLayout/MainLayout' import Toast from '@/components/Toast/Toast' import './ProfilePage.css' function ProfilePage() { const [loading, setLoading] = useState(false) const [userInfo, setUserInfo] = useState(null) const [profileForm] = Form.useForm() const [passwordForm] = Form.useForm() const { user, setUser } = useUserStore() useEffect(() => { loadUserInfo() }, []) // 加载用户信息 const loadUserInfo = async () => { try { const res = await getCurrentUser() setUserInfo(res.data) profileForm.setFieldsValue({ username: res.data.username, nickname: res.data.nickname, email: res.data.email, phone: res.data.phone, }) } catch (error) { console.error('Load user info error:', error) message.error('加载用户信息失败') } } // 更新资料 const handleUpdateProfile = async (values) => { setLoading(true) try { const res = await updateProfile({ nickname: values.nickname, email: values.email, phone: values.phone, }) setUserInfo(res.data) setUser(res.data) // 更新全局用户信息 Toast.success('更新成功', '个人资料已更新') } catch (error) { console.error('Update profile error:', error) message.error(error.response?.data?.detail || '更新失败') } finally { setLoading(false) } } // 修改密码 const handleChangePassword = async (values) => { setLoading(true) try { await changePassword({ old_password: values.old_password, new_password: values.new_password, }) Toast.success('修改成功', '密码已修改,请重新登录') passwordForm.resetFields() // 2秒后跳转到登录页 setTimeout(() => { window.location.href = '/login' }, 2000) } catch (error) { console.error('Change password error:', error) message.error(error.response?.data?.detail || '修改密码失败') } finally { setLoading(false) } } const tabItems = [ { key: 'profile', label: ( 个人资料 ), children: (
} />

支持 JPG、PNG 格式,文件小于 2MB

), }, { key: 'password', label: ( 修改密码 ), children: (
({ validator(_, value) { if (!value || getFieldValue('new_password') === value) { return Promise.resolve() } return Promise.reject(new Error('两次输入的密码不一致')) }, }), ]} >

密码安全建议:

  • 密码长度至少6个字符
  • 包含字母、数字和特殊字符的组合更安全
  • 不要使用过于简单的密码,如"123456"
  • 定期更换密码,提高账户安全性
), }, ] return (

个人中心

) } export default ProfilePage