'use client' import {useCallback, useEffect, useMemo, useState, PointerEvent, ComponentProps} from 'react' import Link from 'next/link' import Image from 'next/image' import {HeaderContext} from './_components/header/common' import SolutionMenu from './_components/header/menu-solution' import ProductMenu from './_components/header/menu-product' import HelpMenu from './_components/header/menu-help' import MobileMenu from './_components/header/menu-mobile' import Wrap from '@/components/wrap' import logo from '@/assets/logo.webp' import {Button} from '@/components/ui/button' import {useProfileStore} from '@/components/stores-provider' import UserCenter from '@/components/composites/user-center' import {MenuIcon} from 'lucide-react' import down from '@/assets/header/down.svg' import {merge} from '@/lib/utils' import {User} from '@/lib/models' export type HeaderProps = {} export default function Header(props: HeaderProps) { // ====================== // 滚动条状态 // ====================== const [scroll, setScroll] = useState(false) // Changed to false for client-side rendering const handleScroll = useCallback(() => { setScroll(window.scrollY > 48) }, []) useEffect(() => { // Initialize scroll state on client setScroll(window.scrollY > 48) window.addEventListener('scroll', handleScroll) return () => { window.removeEventListener('scroll', handleScroll) } }, [handleScroll]) // ====================== // 菜单状态 // ====================== const [menu, setMenu] = useState(false) const [page, setPage] = useState(0) const pages = useMemo(() => [ , , , , ], []) const enterMenu = (i: number) => { return (e: PointerEvent) => { setPage(i) if (e.pointerType === 'mouse' || page !== i) { setMenu(true) } else { setMenu(!menu) } } } const exitMenu = (e: PointerEvent) => { if (e.pointerType === 'mouse') { setMenu(false) } } const enterMenuContent = (e: PointerEvent) => { setMenu(true) } const exitMenuContent = (e: PointerEvent) => { if (e.pointerType === 'mouse') { setMenu(false) } } const enterMenuMask = (e: PointerEvent) => { if (e.pointerType !== 'mouse') { setMenu(false) } } // ====================== // 用户信息 // ====================== const profile = useProfileStore(store => store.profile) // ====================== // render // ====================== return (
{/* 菜单栏 */}
{/* 登录 */}
{profile == null ? ( <> 登录 注册 ) : ( ) }
{/* 下拉菜单 */}
{pages[page]}
{/* 遮罩层 */}
) } function LinkItem(props: { text: string href: string }) { return (
  • {props.text}
  • ) } function MenuItem(props: { text: string active: boolean } & ComponentProps<'button'>) { return (
  • ) }