/** * 分类数据获取 Hook * 封装店铺、场景、平台、品类的数据获取逻辑 */ import { useState, useEffect, useCallback } from 'react' /** * 分类项接口 */ export interface CategoryItem { id: string name: string } /** * 分类数据接口 */ export interface CategoryData { categories: CategoryItem[] scenes: CategoryItem[] platforms: CategoryItem[] productCategories: CategoryItem[] } /** * 分类数据 Hook 返回值 */ export interface UseCategoryDataReturn { data: CategoryData loading: boolean error: string | null refresh: () => Promise refreshCategories: () => Promise refreshScenes: () => Promise refreshPlatforms: () => Promise refreshProductCategories: () => Promise } /** * 分类数据获取 Hook */ export function useCategoryData(): UseCategoryDataReturn { const [categories, setCategories] = useState([]) const [scenes, setScenes] = useState([]) const [platforms, setPlatforms] = useState([]) const [productCategories, setProductCategories] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) // 获取店铺列表 const fetchCategories = useCallback(async () => { try { const response = await fetch('/api/categories') if (response.ok) { const data = await response.json() setCategories(data) } } catch (err) { console.error('Error fetching categories:', err) } }, []) // 获取场景列表 const fetchScenes = useCallback(async () => { try { const response = await fetch('/api/scenes') if (response.ok) { const data = await response.json() setScenes(data) } } catch (err) { console.error('Error fetching scenes:', err) } }, []) // 获取平台列表 const fetchPlatforms = useCallback(async () => { try { const response = await fetch('/api/platforms') if (response.ok) { const data = await response.json() setPlatforms(data) } } catch (err) { console.error('Error fetching platforms:', err) } }, []) // 获取品类列表 const fetchProductCategories = useCallback(async () => { try { const response = await fetch('/api/product-categories') if (response.ok) { const data = await response.json() setProductCategories(data) } } catch (err) { console.error('Error fetching product categories:', err) } }, []) // 刷新所有数据 const refresh = useCallback(async () => { setLoading(true) setError(null) try { await Promise.all([ fetchCategories(), fetchScenes(), fetchPlatforms(), fetchProductCategories(), ]) } catch (err) { setError('获取分类数据失败') console.error('Error refreshing category data:', err) } finally { setLoading(false) } }, [fetchCategories, fetchScenes, fetchPlatforms, fetchProductCategories]) // 初始加载 useEffect(() => { refresh() }, [refresh]) return { data: { categories, scenes, platforms, productCategories, }, loading, error, refresh, refreshCategories: fetchCategories, refreshScenes: fetchScenes, refreshPlatforms: fetchPlatforms, refreshProductCategories: fetchProductCategories, } }