From 01cd491f5ee69966c8bfee8491417bba4215700e Mon Sep 17 00:00:00 2001
From: hzm <934585316@qq.com>
Date: Sat, 7 Feb 2026 13:19:26 +0800
Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E7=94=A8=E6=88=B7=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/globals.css | 4 +-
app/page.jsx | 57 ++++--
package-lock.json | 440 ++++++++++++++++++++++++++++++++++++++++++++++
package.json | 5 +
4 files changed, 490 insertions(+), 16 deletions(-)
diff --git a/app/globals.css b/app/globals.css
index 5a49783..2d05191 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -1166,8 +1166,8 @@ input[type="number"] {
}
.user-menu-trigger.logged-in {
- border-color: var(--primary);
- background: rgba(34, 211, 238, 0.1);
+ /*border-color: var(--primary);*/
+ /*background: rgba(34, 211, 238, 0.1);*/
}
.user-avatar-small {
diff --git a/app/page.jsx b/app/page.jsx
index 66ae98e..6e706cc 100644
--- a/app/page.jsx
+++ b/app/page.jsx
@@ -2,6 +2,8 @@
import { useEffect, useRef, useState, useMemo, useLayoutEffect } from 'react';
import { motion, AnimatePresence, Reorder } from 'framer-motion';
+import { createAvatar } from '@dicebear/core';
+import { glass } from '@dicebear/collection';
import Announcement from "./components/Announcement";
import zhifubaoImg from "./assets/zhifubao.jpg";
import weixinImg from "./assets/weixin.jpg";
@@ -1788,6 +1790,14 @@ export default function HomePage() {
const [loginSuccess, setLoginSuccess] = useState('');
const [loginOtp, setLoginOtp] = useState('');
+ const userAvatar = useMemo(() => {
+ if (!user?.id) return '';
+ return createAvatar(glass, {
+ seed: user.id,
+ size: 80
+ }).toDataUri();
+ }, [user?.id]);
+
// 反馈弹窗状态
const [feedbackOpen, setFeedbackOpen] = useState(false);
const [feedbackNonce, setFeedbackNonce] = useState(0);
@@ -2454,6 +2464,13 @@ export default function HomePage() {
// 登出
const handleLogout = async () => {
try {
+ const { data: { session } } = await supabase.auth.getSession();
+ if (!session) {
+ await supabase.auth.signOut({ scope: 'local' });
+ setUserMenuOpen(false);
+ setUser(null);
+ return;
+ }
const { error } = await supabase.auth.signOut();
if (error?.code === 'session_not_found') {
await supabase.auth.signOut({ scope: 'local' });
@@ -3477,17 +3494,8 @@ export default function HomePage() {
>
-
-
- {/* 临时隐藏用户菜单入口 */}
-
+ {/* 用户菜单 */}
+