import { useState } from 'react'; import { Card, Form, Input, Button, Row, Col, Typography, Descriptions, Divider, message, Modal, } from 'antd'; import { UserOutlined, LockOutlined, SafetyOutlined, InfoCircleOutlined, } from '@ant-design/icons'; import { useAuth } from '../../../../shared/hooks/useAuth'; import api from '../../../../shared/utils/api'; const { Title, Text } = Typography; export function SettingsPage() { const { admin, logout } = useAuth(); const [changePasswordForm] = Form.useForm(); const [changingPassword, setChangingPassword] = useState(false); const [passwordModalOpen, setPasswordModalOpen] = useState(false); const handleChangePassword = async () => { try { const values = await changePasswordForm.validateFields(); if (values.newPassword !== values.confirmPassword) { message.error('两次输入的密码不一致'); return; } setChangingPassword(true); await api.post('/admin/change-password', { oldPassword: values.oldPassword, newPassword: values.newPassword, }); message.success('密码修改成功,请重新登录'); setPasswordModalOpen(false); changePasswordForm.resetFields(); // Logout after password change setTimeout(() => { logout(); }, 1500); } catch (error: unknown) { const err = error as { response?: { data?: { message?: string } } }; message.error(err.response?.data?.message || '密码修改失败'); } finally { setChangingPassword(false); } }; const systemInfo = { version: '1.0.0', environment: import.meta.env.MODE, apiBase: import.meta.env.VITE_API_BASE_URL || '/api/v1', buildTime: new Date().toISOString().split('T')[0], }; return (
系统设置 {/* Admin Profile */} 管理员信息 } > {admin?.username || '-'} {admin?.name || '-'} {admin?.role || '-'}
{admin?.permissions?.map((p: string) => ( {p} )) || '-'}
{/* Security Settings */} 安全设置 } >
定期修改密码可以提高账户安全性
退出登录后需要重新输入账号密码
{/* System Info */} 系统信息 } >
系统版本
{systemInfo.version}
运行环境
{systemInfo.environment}
API 地址
{systemInfo.apiBase}
构建日期
{systemInfo.buildTime}
{/* Change Password Modal */} { setPasswordModalOpen(false); changePasswordForm.resetFields(); }} confirmLoading={changingPassword} okText="确认修改" cancelText="取消" >
({ validator(_, value) { if (!value || getFieldValue('newPassword') === value) { return Promise.resolve(); } return Promise.reject(new Error('两次输入的密码不一致')); }, }), ]} >
); }