diff --git a/src/app/user/component/userAvatar.tsx b/src/app/user/component/userAvatar.tsx
new file mode 100644
index 0000000..4ed94d7
--- /dev/null
+++ b/src/app/user/component/userAvatar.tsx
@@ -0,0 +1,282 @@
+'use client';
+
+import { useRef, useState } from 'react';
+import { Avatar } from 'primereact/avatar';
+import { Button } from 'primereact/button';
+// 弹窗
+import { Dialog } from 'primereact/dialog';
+// 头像下拉框
+import { OverlayPanel } from 'primereact/overlaypanel';
+// 输入框
+import { FloatLabel } from "primereact/floatlabel";
+import { InputText } from 'primereact/inputtext';
+// 页面跳转
+import Link from 'next/link';
+// 文件上传
+import { FileUpload } from 'primereact/fileupload';
+// 通知
+import { Toast } from 'primereact/toast';
+// 接口传输
+import axios from 'axios';
+// 样式
+import './user-avatar.scss';
+
+// 用户下拉框
+export default function UserAvatar() {
+    // 功能选项
+    const op = useRef<OverlayPanel>(null);
+    let hoverTimeout: NodeJS.Timeout;
+    // 通知
+    const toast = useRef<Toast>(null);
+    // 控制三个弹窗可见性
+    const [showEditSignature, setShowEditSignature] = useState(false);
+    const [showEditAvatar, setShowEditAvatar] = useState(false);
+    const [showEditPassword, setShowEditPassword] = useState(false);
+    // 头像URL
+    const [avatarUrl, setAvatar] = useState<string>('');
+    // 签名
+    const [signValue, setSignValue] = useState<string>('');
+    // 新密码
+    const [passwardValue, setPasswardValue] = useState<string>('');
+    const [newPasswardValue, setNewPasswardValue] = useState<string>('');
+    // 老密码
+    const [oldPasswardValue, setOldPasswardValue] = useState<string>('');
+
+
+    const handleMouseEnter = (event: React.MouseEvent) => {
+        clearTimeout(hoverTimeout);
+        op.current?.show(event, event.currentTarget);
+    };
+
+    const handleMouseLeave = () => {
+        hoverTimeout = setTimeout(() => {
+            op.current?.hide();
+        }, 300);
+    };
+
+
+    // 修改密码接口
+    const editPassward = async () => {
+        try {
+            await axios.put(process.env.PUBLIC_URL + `/user/password`, {
+                params: { userId: 22301145, password: oldPasswardValue, newPassword: passwardValue }
+            });
+            toast.current?.show({ severity: 'success', summary: 'success', detail: '修改密码成功' });
+            setShowEditPassword(false);
+        } catch (err) {
+            console.error('修改密码失败', err);
+            toast.current?.show({ severity: 'error', summary: 'error', detail: '修改密码失败' });
+        }
+    }
+    // 修改签名接口
+    const editSign = async () => {
+        try {
+            await axios.put(process.env.PUBLIC_URL + `/user/signature`, {
+                params: { userId: 22301145, signature: signValue }
+            });
+            toast.current?.show({ severity: 'success', summary: 'success', detail: '修改签名成功' });
+            setShowEditSignature(false);
+        } catch (err) {
+            console.error('修改签名失败', err);
+            toast.current?.show({ severity: 'error', summary: 'error', detail: '修改签名失败' });
+        }
+    }
+
+    // 修改头像接口
+    const editAvatar = async () => {
+        try {
+            await axios.put(process.env.PUBLIC_URL + `/user/avatar`, {
+                params: { userId: 22301145, avatar: avatarUrl }
+            });
+            toast.current?.show({ severity: 'success', summary: 'success', detail: '修改头像成功' });
+            setShowEditAvatar(false);
+        } catch (err) {
+            console.error('修改头像失败', err);
+            toast.current?.show({ severity: 'error', summary: 'error', detail: '修改头像失败' });
+        }
+    }
+    return (
+        <div
+            onMouseEnter={handleMouseEnter}
+            onMouseLeave={handleMouseLeave}
+            className="user-avatar-wrapper"
+        >
+            <Toast ref={toast}></Toast>
+            <Link href="/user" className="no-underline">
+                <Avatar
+                    image="/images/avatar/asiyajavayant.png"
+                    size="large"
+                    shape="circle"
+                    className="user-avatar-link"
+                />
+            </Link>
+
+            <OverlayPanel ref={op} dismissable={false}>
+                <div
+                    onMouseEnter={() => clearTimeout(hoverTimeout)}
+                    onMouseLeave={handleMouseLeave}
+                    className="user-overlay-panel"
+                >
+                    <Button
+                        text
+                        icon="pi pi-pencil"
+                        label="修改签名"
+                        onClick={() => setShowEditSignature(true)}
+                    />
+                    <Button
+                        text
+                        icon="pi pi-image"
+                        label="修改头像"
+                        onClick={() => setShowEditAvatar(true)}
+                    />
+                    <Button
+                        text
+                        icon="pi pi-unlock"
+                        label="修改密码"
+                        onClick={() => setShowEditPassword(true)}
+                    />
+                </div>
+            </OverlayPanel>
+
+            {/* 修改签名弹窗 */}
+            <Dialog
+                header="修改签名"
+                visible={showEditSignature}
+                style={{ width: '30vw' }}
+                onHide={() => {
+                    setSignValue('');
+                    setShowEditSignature(false);
+                }}
+                modal
+            >
+                <div className="dialog-container">
+                    <div className="dialog-input-group">
+                        <FloatLabel>
+                            <InputText id="username" value={signValue} onChange={(e) => setSignValue(e.target.value)} />
+                            <label htmlFor="username">个性签名</label>
+                        </FloatLabel>
+                    </div>
+                    <div className="dialog-button-group">
+                        <Button label="确定" className="p-button-sm" onClick={() => editSign()} />
+                        <Button
+                            label="取消"
+                            className="p-button-secondary p-button-sm"
+                            onClick={() => {
+                                setSignValue('');
+                                setShowEditSignature(false);
+                            }}
+                        />
+                    </div>
+                </div>
+            </Dialog>
+
+            {/* 修改头像弹窗 */}
+            <Dialog
+                header="修改头像"
+                visible={showEditAvatar}
+                style={{ display: 'flex', flexDirection: 'column', width: '30vw' }}
+                onHide={() => {
+                    setAvatar('');
+                    setShowEditAvatar(false);
+                }}
+                modal
+            >
+                <div className="dialog-container">
+                    <FileUpload
+                        mode="advanced"
+                        name="file"
+                        customUpload
+                        uploadHandler={async (e) => {
+                            const formData = new FormData();
+                            formData.append("file", e.files[0]);
+
+                            try {
+                                const res = await axios.post(`${process.env.PUBLIC_URL}/file/avatar`, formData);
+
+                                const fileUrl = res.data.url;
+                                console.log(fileUrl);
+                                setAvatar(fileUrl);
+                                toast.current?.show({ severity: 'success', summary: '上传成功' });
+                            } catch (error) {
+                                console.log(error);
+                                toast.current?.show({ severity: 'error', summary: '上传失败' });
+                            }
+                        }}
+                        auto
+                        accept="image/*"
+                        chooseLabel="上传头像"
+                    />
+
+                    <div className="dialog-button-group">
+                        <Button label="确定" className="p-button-sm" onClick={() => editAvatar()} />
+                        <Button
+                            label="取消"
+                            className="p-button-secondary p-button-sm"
+                            onClick={() => setShowEditAvatar(false)}
+                        />
+                    </div>
+                </div>
+            </Dialog>
+
+            {/* 修改密码弹窗 */}
+            <Dialog
+                header="修改密码"
+                visible={showEditPassword}
+                style={{ width: '30vw' }}
+                onHide={() => {
+                    setOldPasswardValue('');
+                    setPasswardValue('');
+                    setNewPasswardValue('');
+                    setShowEditPassword(false);
+                }}
+                modal
+            >
+                <div className="dialog-container">
+                    <div className="dialog-input-group">
+                        <FloatLabel>
+                            <InputText id="username" value={oldPasswardValue} onChange={(e) => setOldPasswardValue(e.target.value)} />
+                            <label htmlFor="username">输入旧密码</label>
+                        </FloatLabel>
+                    </div>
+                    <div className="dialog-input-group">
+                        <FloatLabel>
+                            <InputText id="username" value={passwardValue} onChange={(e) => setPasswardValue(e.target.value)} />
+                            <label htmlFor="username">更新密码</label>
+                        </FloatLabel>
+                    </div>
+                    <div className="dialog-input-group">
+                        <FloatLabel>
+                            <InputText id="username" value={newPasswardValue} onChange={(e) => setNewPasswardValue(e.target.value)} />
+                            <label htmlFor="username">确认密码</label>
+                        </FloatLabel>
+                    </div>
+                    <div className="dialog-button-group">
+                        <Button label="确定" className="p-button-sm" onClick={() => {
+                            if (passwardValue !== newPasswardValue) {
+                                toast.current?.show({
+                                    severity: 'warn',
+                                    summary: '两次密码不一致',
+                                    detail: '请确保新密码和确认密码一致',
+                                });
+                                return;
+                            } else {
+                                editPassward();
+                            }
+                        }} />
+                        <Button
+                            label="取消"
+                            className="p-button-secondary p-button-sm"
+                            onClick={() => {
+                                setOldPasswardValue('');
+                                setPasswardValue('');
+                                setNewPasswardValue('');
+                                setShowEditPassword(false);
+                            }}
+                        />
+                    </div>
+                </div>
+            </Dialog>
+        </div>
+    );
+
+}
