import { useState, useEffect } from 'react'; import { Form, Input, Button, Card, message, Avatar, Descriptions, Space, Modal, Row, Col } from 'antd'; import { UserOutlined, LockOutlined, SafetyOutlined, KeyOutlined, ExclamationCircleOutlined } from '@ant-design/icons'; import { authApi } from '@/services/api'; import type { User } from '@/types'; function ProfilePage() { const [profileForm] = Form.useForm(); const [passwordForm] = Form.useForm(); const [loading, setLoading] = useState(false); const [passwordModalVisible, setPasswordModalVisible] = useState(false); const [user, setUser] = useState(null); useEffect(() => { loadUserProfile(); }, []); const loadUserProfile = () => { const currentUser = authApi.getCurrentUser(); if (currentUser) { setUser(currentUser); profileForm.setFieldsValue({ username: currentUser.username, name: currentUser.name, email: currentUser.email, role: currentUser.role, createdAt: new Date(currentUser.createdAt).toLocaleString('zh-CN'), }); } }; const handleUpdateProfile = async (values: any) => { setLoading(true); try { const updatedUser = await authApi.updateProfile({ name: values.name, email: values.email, }); setUser(updatedUser); message.success('更新资料成功!'); } catch (error: any) { message.error(error.message || '更新资料失败'); } finally { setLoading(false); } }; const handleChangePassword = async (values: any) => { setLoading(true); try { await authApi.changePassword(values.currentPassword, values.newPassword); message.success('修改密码成功!'); setPasswordModalVisible(false); passwordForm.resetFields(); } catch (error: any) { message.error(error.message || '修改密码失败'); } finally { setLoading(false); } }; return (
用户资料 } bordered={false} > {user && ( } size={64} /> {user.username} {user.name} {user.email || '-'} {user.role} {new Date(user.createdAt).toLocaleString('zh-CN')} )}
基础信息
安全
修改密码
双因素验证(TOTP)
通行密钥(Passkey)
注销账户
setPasswordModalVisible(false)} footer={null} >
({ validator(_, value) { if (!value || getFieldValue('newPassword') === value) { return Promise.resolve(); } return Promise.reject(new Error('两次输入的密码不一致')); }, }), ]} >
); } export default ProfilePage;