'use client' import {useMemo, useState, PointerEvent, ComponentProps, useSyncExternalStore, use, Suspense} 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/profile' import UserCenter from '@/components/composites/user-center' import {MenuIcon} from 'lucide-react' import down from '@/assets/header/down.svg' import {merge} from '@/lib/utils' export type HeaderProps = {} export default function Header(props: HeaderProps) { // ====================== // 滚动条状态 // ====================== const scroll = useSyncExternalStore((callback) => { window.addEventListener('scroll', callback) return () => { window.removeEventListener('scroll', callback) } }, () => window.scrollY > 48, () => false) // ====================== // 菜单状态 // ====================== 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 (
{/* 菜单栏 */}
{/* 登录 */}
{/* 下拉菜单 */}
{pages[page]}
{/* 遮罩层 */}
) } function LinkItem(props: { text: string href: string }) { return (
  • {props.text}
  • ) } function MenuItem(props: { text: string active: boolean } & ComponentProps<'button'>) { return (
  • ) } function ProfileOrLogin() { const profile = use(useProfileStore(store => store.profile)) return (
    {profile == null ? ( <> 登录 注册 ) : ( ) }
    ) }