import { postForm } from '@/request'; import * as api from '@/services/login'; import { message } from '@/utils/antdAppInstance'; import { userKey } from '@/utils/authUtils'; import { secureLocalStorage as ls } from '@/utils/localUtils'; import { CloseOutlined, EditOutlined, LoadingOutlined, PlusOutlined, SaveOutlined, } from '@ant-design/icons'; import { ProFormText } from '@ant-design/pro-components'; import { useModel } from '@umijs/max'; import { Avatar, Button, Card, Col, Form, Row, Space, Upload } from 'antd'; import React, { useEffect, useState } from 'react'; const UserInfo: React.FC = () => { const { initialState, setInitialState } = useModel('@@initialState'); const [form] = Form.useForm(); const [isEditing, setIsEditing] = useState(false); const [loading, setLoading] = useState(false); const [uploading, setUploading] = useState(false); const [userInfo, setUserInfo] = useState(null); useEffect(() => { if (initialState?.currentUser) { setUserInfo(initialState.currentUser); form.setFieldsValue({ username: initialState.currentUser.username, nickname: initialState.currentUser.nickname, avatar: initialState.currentUser.avatar, email: initialState.currentUser.email, phone: initialState.currentUser.phone, }); } }, [initialState?.currentUser, form]); const handleEdit = () => { setIsEditing(true); }; const handleCancel = () => { setIsEditing(false); if (userInfo) { form.setFieldsValue({ username: userInfo.username, nickname: userInfo.nickname, avatar: userInfo.avatar, email: userInfo.email, phone: userInfo.phone, }); } }; const handleSave = async () => { try { const values = await form.validateFields(); setLoading(true); const result = await api.fetchUserUpdateInfo({ username: values.username, nickname: values.nickname, avatar: values.avatar, email: values.email, phone: values.phone, }); if (result.success) { message.success('修改成功'); setIsEditing(false); setInitialState((prev) => ({ ...prev, currentUser: { ...prev?.currentUser, ...values, }, })); const localUserInfo = ls.getLocal(userKey); const newUserInfo = { ...localUserInfo, ...values, }; ls.setLocal(userKey, newUserInfo); setUserInfo(newUserInfo); } else { message.error(result.errorMessage || '修改失败'); } } catch (error) { message.error('修改失败'); } finally { setLoading(false); } }; const handleAvatarUpload = async (options: any) => { const { file } = options; const isImage = file.type.startsWith('image/'); if (!isImage) { message.error('只能上传图片文件!'); return; } if (file.size / 1024 / 1024 > 1) { message.error('头像大小不能超过1MB'); return; } setUploading(true); try { const formData = new FormData(); formData.append('file', file); formData.append('fileType', 'avatar'); const res = await postForm>( '/minio/upload', formData, ); if (res.success && res.data) { form.setFieldValue('avatar', res.data.path); setUserInfo((prev) => (prev ? { ...prev, avatar: res.data!.url } : prev)); message.success('上传成功'); } else { message.error(res.errorMessage || '上传失败'); } } catch { message.error('上传失败'); } finally { setUploading(false); } }; if (!userInfo) { return
加载中...
; } return (
{!isEditing ? ( ) : ( )}
); }; export default UserInfo;