fix: 修复的问题:H5 汉堡菜单位置调整(移到头像右侧)

平板端显示 MoreMenu 而非汉堡菜单
未登录时不显示汉堡菜单
This commit is contained in:
zdl
2025-11-21 17:59:03 +08:00
parent bc50d9fe3e
commit 34bae35858
2 changed files with 20 additions and 26 deletions

View File

@@ -44,7 +44,7 @@ import { useSubscription } from '../../hooks/useSubscription';
import { DesktopUserMenu, TabletUserMenu } from './components/UserMenu'; import { DesktopUserMenu, TabletUserMenu } from './components/UserMenu';
// Phase 4 优化: 提取的导航菜单组件 // Phase 4 优化: 提取的导航菜单组件
import { DesktopNav, PersonalCenterMenu } from './components/Navigation'; import { DesktopNav, MoreMenu, PersonalCenterMenu } from './components/Navigation';
// Phase 5 优化: 提取的移动端抽屉菜单组件 // Phase 5 优化: 提取的移动端抽屉菜单组件
import { MobileDrawer } from './components/MobileDrawer'; import { MobileDrawer } from './components/MobileDrawer';
@@ -67,6 +67,7 @@ export default function HomeNavbar() {
const { isOpen, onOpen, onClose } = useDisclosure(); const { isOpen, onOpen, onClose } = useDisclosure();
const navigate = useNavigate(); const navigate = useNavigate();
const isMobile = useBreakpointValue({ base: true, md: false }); const isMobile = useBreakpointValue({ base: true, md: false });
const isTablet = useBreakpointValue({ base: false, md: true, lg: false });
const isDesktop = useBreakpointValue({ base: false, md: false, lg: true }); const isDesktop = useBreakpointValue({ base: false, md: false, lg: true });
const { user, isAuthenticated, logout, isLoading } = useAuth(); const { user, isAuthenticated, logout, isLoading } = useAuth();
const { openAuthModal } = useAuthModal(); const { openAuthModal } = useAuthModal();
@@ -177,6 +178,8 @@ export default function HomeNavbar() {
isAuthenticated={isAuthenticated} isAuthenticated={isAuthenticated}
user={user} user={user}
isDesktop={isDesktop} isDesktop={isDesktop}
isTablet={isTablet}
isMobile={isMobile}
onMenuOpen={onOpen} onMenuOpen={onOpen}
handleLogout={handleLogout} handleLogout={handleLogout}
watchlistQuotes={watchlistQuotes} watchlistQuotes={watchlistQuotes}

View File

@@ -2,14 +2,14 @@
// Navbar 右侧功能区组件 // Navbar 右侧功能区组件
import React, { memo } from 'react'; import React, { memo } from 'react';
import { HStack, Spinner, IconButton } from '@chakra-ui/react'; import { HStack, Spinner, IconButton, Box } from '@chakra-ui/react';
import { HamburgerIcon } from '@chakra-ui/icons'; import { HamburgerIcon } from '@chakra-ui/icons';
import ThemeToggleButton from '../ThemeToggleButton'; import ThemeToggleButton from '../ThemeToggleButton';
import LoginButton from '../LoginButton'; import LoginButton from '../LoginButton';
import CalendarButton from '../CalendarButton'; import CalendarButton from '../CalendarButton';
import { WatchlistMenu, FollowingEventsMenu } from '../FeatureMenus'; import { WatchlistMenu, FollowingEventsMenu } from '../FeatureMenus';
import { DesktopUserMenu, TabletUserMenu } from '../UserMenu'; import { DesktopUserMenu, TabletUserMenu } from '../UserMenu';
import { PersonalCenterMenu } from '../Navigation'; import { PersonalCenterMenu, MoreMenu } from '../Navigation';
/** /**
* Navbar 右侧功能区组件 * Navbar 右侧功能区组件
@@ -20,8 +20,9 @@ import { PersonalCenterMenu } from '../Navigation';
* @param {boolean} props.isAuthenticated - 是否已登录 * @param {boolean} props.isAuthenticated - 是否已登录
* @param {Object} props.user - 用户对象 * @param {Object} props.user - 用户对象
* @param {boolean} props.isDesktop - 是否为桌面端 * @param {boolean} props.isDesktop - 是否为桌面端
* @param {boolean} props.isTablet - 是否为平板端
* @param {boolean} props.isMobile - 是否为移动端 * @param {boolean} props.isMobile - 是否为移动端
* @param {Function} props.onMenuOpen - 打开移动端菜单的回调 * @param {Function} props.onMenuOpen - 打开移动端抽屉菜单的回调
* @param {Function} props.handleLogout - 登出回调 * @param {Function} props.handleLogout - 登出回调
* @param {Array} props.watchlistQuotes - 自选股数据(用于 TabletUserMenu * @param {Array} props.watchlistQuotes - 自选股数据(用于 TabletUserMenu
* @param {Array} props.followingEvents - 关注事件数据(用于 TabletUserMenu * @param {Array} props.followingEvents - 关注事件数据(用于 TabletUserMenu
@@ -31,6 +32,7 @@ const NavbarActions = memo(({
isAuthenticated, isAuthenticated,
user, user,
isDesktop, isDesktop,
isTablet,
isMobile, isMobile,
onMenuOpen, onMenuOpen,
handleLogout, handleLogout,
@@ -69,8 +71,15 @@ const NavbarActions = memo(({
/> />
)} )}
{/* 移动端汉堡菜单 - 在头像右侧 */} {/* 头像右侧的菜单 - 响应式(互斥逻辑,确保只渲染一个) */}
{isMobile && ( {isDesktop ? (
// 桌面端:个人中心下拉菜单
<PersonalCenterMenu user={user} handleLogout={handleLogout} />
) : isTablet ? (
// 平板端MoreMenu 下拉菜单
<MoreMenu isAuthenticated={isAuthenticated} user={user} />
) : (
// 移动端:汉堡菜单(打开抽屉)
<IconButton <IconButton
icon={<HamburgerIcon />} icon={<HamburgerIcon />}
variant="ghost" variant="ghost"
@@ -79,28 +88,10 @@ const NavbarActions = memo(({
size="md" size="md"
/> />
)} )}
{/* 个人中心下拉菜单 - 仅大屏显示 */}
{isDesktop && (
<PersonalCenterMenu user={user} handleLogout={handleLogout} />
)}
</HStack> </HStack>
) : ( ) : (
// 未登录状态 - 登录按钮 + 汉堡菜单 // 未登录状态 - 仅显示登录按钮
<HStack spacing={{ base: 2, md: 4 }}>
<LoginButton /> <LoginButton />
{/* 移动端汉堡菜单 - 未登录时也显示 */}
{isMobile && (
<IconButton
icon={<HamburgerIcon />}
variant="ghost"
onClick={onMenuOpen}
aria-label="打开菜单"
size="md"
/>
)}
</HStack>
)} )}
</HStack> </HStack>
); );