"use client"; import React, { useEffect, useState } from "react"; import axios from "axios"; /** * Product category sidebar component * @param {string} componentName - component name * @param {string} className - additional class names */ export default function Category({ componentName = "Category", className = "", }) { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [activeCategory, setActiveCategory] = useState(null); useEffect(() => { async function fetchData() { try { setLoading(true); // 1. 获取组件元数据 const metaRes = await axios.get("/api/get-component-data", { params: { component_name: componentName }, }); const metaData = metaRes.data.data || {}; // 2. 获取分类树 if (metaData.p1 && metaData.p2) { const catRes = await axios.get("/api/get-category", { params: { pagetype: metaData.p1, name: metaData.p2 }, }); const categoryData = catRes.data.message?.data || {}; setData({ title: metaData.title || "Product Categories", subtitle: metaData.subtitle || "", slug: categoryData.slug, items: categoryData.children || [], }); } } catch (err) { console.error("获取分类数据失败:", err); setError("Failed to fetch category data"); } finally { setLoading(false); } } fetchData(); }, [componentName]); if (loading) return null; if (error) return null; if (!data) return null; const handleCategoryClick = (categorySlug) => { if (activeCategory === categorySlug) { setActiveCategory(null); } else { setActiveCategory(categorySlug); } }; // 渲染分类列表 const renderCategories = (items, parentSlugs = []) => { if (!items || !items.length) return null; return (