"use client"; import Link from "next/link"; import React, { useEffect, useState } from "react"; import { usePathname } from "next/navigation"; // !text-[var(--current-color)] export default function Nav({ color = "#fab758" }) { const [menu, setMenu] = useState([]); const pathname = usePathname(); useEffect(() => { // 获取菜单数据 fetch("/api/get-menu") .then((res) => res.json()) .then((data) => setMenu(data.menu || [])); // 点击外部区域关闭下拉菜单 const handleClickOutside = (event) => { if (!event.target.closest('.dropdown')) { document.querySelectorAll('.dropdown-menu').forEach(menu => { menu.style.display = 'none'; }); } }; // 为多级下拉菜单添加事件监听器 const handleDropdownEvents = () => { document.querySelectorAll('.dropdown-submenu').forEach(submenu => { submenu.addEventListener('mouseenter', function() { const dropdownMenu = this.querySelector('.dropdown-menu'); if (dropdownMenu) { dropdownMenu.style.display = 'block'; } }); submenu.addEventListener('mouseleave', function() { const dropdownMenu = this.querySelector('.dropdown-menu'); if (dropdownMenu) { dropdownMenu.style.display = 'none'; } }); }); }; // 等待 DOM 加载完成后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', handleDropdownEvents); } else { // 延迟执行,确保菜单已经渲染 setTimeout(handleDropdownEvents, 100); } // 添加全局点击事件监听器 document.addEventListener('click', handleClickOutside); return () => { // 清理事件监听器 document.removeEventListener('click', handleClickOutside); document.querySelectorAll('.dropdown-submenu').forEach(submenu => { submenu.removeEventListener('mouseenter', handleDropdownEvents); submenu.removeEventListener('mouseleave', handleDropdownEvents); }); }; }, []); // 只在顶级菜单过滤 position const filterHeaderMenu = (items) => { return items.filter(item => item.position === 'Header'); }; // 递归渲染菜单 const renderMenu = (items, level = 0) => { // 顶级菜单过滤 position if (level === 0) items = filterHeaderMenu(items); return items.map((item) => { const hasChildren = item.children && item.children.length > 0; const hasHref = !!item.href && item.href !== "#"; if (hasChildren) { return (