diff --git a/apps/desktop/src/pages/Library.tsx b/apps/desktop/src/pages/Library.tsx index 362775fc..a92f2cbf 100644 --- a/apps/desktop/src/pages/Library.tsx +++ b/apps/desktop/src/pages/Library.tsx @@ -489,7 +489,7 @@ export default function Library() {
{/* Header */}
-
+

我的书库

diff --git a/apps/desktop/src/pages/MemberBenefits.tsx b/apps/desktop/src/pages/MemberBenefits.tsx index dd3e56f3..71cf0bb9 100644 --- a/apps/desktop/src/pages/MemberBenefits.tsx +++ b/apps/desktop/src/pages/MemberBenefits.tsx @@ -282,7 +282,7 @@ export default function MemberBenefits() {
-

+

会员特权

diff --git a/apps/desktop/src/pages/MemberDetail.tsx b/apps/desktop/src/pages/MemberDetail.tsx index 3479f411..374ad386 100644 --- a/apps/desktop/src/pages/MemberDetail.tsx +++ b/apps/desktop/src/pages/MemberDetail.tsx @@ -44,7 +44,7 @@ export default function MemberDetail() {

-

我的会员

+

我的会员

感谢您对 BookDock 的支持

diff --git a/apps/desktop/src/pages/Notes.tsx b/apps/desktop/src/pages/Notes.tsx index f9548347..776274f6 100644 --- a/apps/desktop/src/pages/Notes.tsx +++ b/apps/desktop/src/pages/Notes.tsx @@ -151,7 +151,7 @@ export default function Notes() { > -

+

{headerTitle}

diff --git a/apps/desktop/src/pages/Profile.tsx b/apps/desktop/src/pages/Profile.tsx index 2cd6d078..04fd8339 100644 --- a/apps/desktop/src/pages/Profile.tsx +++ b/apps/desktop/src/pages/Profile.tsx @@ -1,6 +1,6 @@ // @ts-nocheck import { useState, useEffect, useCallback, useMemo, useRef } from "react"; -import { useNavigate } from "react-router-dom"; +import { useNavigate, Link } from "react-router-dom"; import { getApiClient, Book, Collection } from "@bookdock/api-client"; import { useAuthStore } from "../stores/authStore"; import { getCoverImageUrl } from "../utils/network"; @@ -17,6 +17,11 @@ import { Search, Clock, User, + Settings, + Crown, + RefreshCw, + Shield, + LogOut, } from "lucide-react"; function formatDate(dateStr: string): string { @@ -53,7 +58,7 @@ type TabKey = "collections" | "reading" | "favorites" | "downloads" | "notes"; export default function Profile() { const navigate = useNavigate(); - const { user } = useAuthStore(); + const { user, logout } = useAuthStore(); const [activeTab, setActiveTab] = useState("collections"); const [collections, setCollections] = useState([]); const [favorites, setFavorites] = useState([]); @@ -67,6 +72,21 @@ export default function Profile() { const noteLimit = 20; const [showCreateModal, setShowCreateModal] = useState(false); const [newCollectionName, setNewCollectionName] = useState(""); + const [showDropdown, setShowDropdown] = useState(false); + const dropdownRef = useRef(null); + + // Close dropdown on click outside + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { + setShowDropdown(false); + } + }; + if (showDropdown) { + document.addEventListener("mousedown", handleClickOutside); + } + return () => document.removeEventListener("mousedown", handleClickOutside); + }, [showDropdown]); const fetchData = useCallback(async () => { setIsLoading(true); @@ -442,14 +462,69 @@ export default function Profile() {
{/* Header */}
-

我的

+
+
+ + {showDropdown && ( +
+ + setShowDropdown(false)} + className="flex items-center gap-2 px-4 py-2.5 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" + > + + 会员中心 + + setShowDropdown(false)} + className="flex items-center gap-2 px-4 py-2.5 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" + > + + 笔记 + + {user?.role === "admin" && ( + setShowDropdown(false)} + className="flex items-center gap-2 px-4 py-2.5 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 transition-colors" + > + + 后台管理 + + )} +
+ +
+ )} +
+

我的

+
diff --git a/apps/desktop/src/pages/Recommend.tsx b/apps/desktop/src/pages/Recommend.tsx index f8029a64..052f2076 100644 --- a/apps/desktop/src/pages/Recommend.tsx +++ b/apps/desktop/src/pages/Recommend.tsx @@ -113,7 +113,7 @@ export default function Recommend() { return (
{/* Header */} -
+

推荐 diff --git a/apps/desktop/src/pages/Settings.tsx b/apps/desktop/src/pages/Settings.tsx index 6241b831..17638197 100644 --- a/apps/desktop/src/pages/Settings.tsx +++ b/apps/desktop/src/pages/Settings.tsx @@ -472,7 +472,7 @@ export default function Settings() { return (
-

设置

+

设置

{/* Profile Section */}