sa2kit 1.6.59 → 1.6.60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/dist/booking-B0BM8grt.d.mts +141 -0
  2. package/dist/booking-CUy8u7Za.d.ts +141 -0
  3. package/dist/{bookingAdminService-Dmg7dC6V.d.mts → bookingAdminService-BNEDyw7U.d.mts} +1 -1
  4. package/dist/{bookingAdminService-B2QDjSHJ.d.ts → bookingAdminService-BtOtG96L.d.ts} +1 -1
  5. package/dist/{cart-D3o67Q3H.d.ts → cart-Cw3i0Dy6.d.ts} +1 -1
  6. package/dist/{cart-CcZ7rQyG.d.mts → cart-DLSbsihH.d.mts} +1 -1
  7. package/dist/{chunk-SKCMZYSQ.js → chunk-3YSRTVIY.js} +31 -15
  8. package/dist/chunk-3YSRTVIY.js.map +1 -0
  9. package/dist/chunk-C76U5FF4.mjs +10 -0
  10. package/dist/chunk-C76U5FF4.mjs.map +1 -0
  11. package/dist/{chunk-LJGJPAQ4.js → chunk-COOI6MT3.js} +2 -11
  12. package/dist/chunk-COOI6MT3.js.map +1 -0
  13. package/dist/{chunk-SNBILYSH.mjs → chunk-CSDIPQQO.mjs} +2 -2
  14. package/dist/{chunk-SNBILYSH.mjs.map → chunk-CSDIPQQO.mjs.map} +1 -1
  15. package/dist/{chunk-WK3HTUID.js → chunk-CYTXGBP2.js} +39 -39
  16. package/dist/{chunk-WK3HTUID.js.map → chunk-CYTXGBP2.js.map} +1 -1
  17. package/dist/{chunk-FVDPGX6A.mjs → chunk-DWJLOHAE.mjs} +2 -11
  18. package/dist/chunk-DWJLOHAE.mjs.map +1 -0
  19. package/dist/{chunk-7CMGQX3S.mjs → chunk-OX6VMQDU.mjs} +14 -13
  20. package/dist/chunk-OX6VMQDU.mjs.map +1 -0
  21. package/dist/{chunk-UZB4IO3T.mjs → chunk-PONZPO3U.mjs} +3 -3
  22. package/dist/{chunk-UZB4IO3T.mjs.map → chunk-PONZPO3U.mjs.map} +1 -1
  23. package/dist/chunk-V5HE6IYN.js +12 -0
  24. package/dist/chunk-V5HE6IYN.js.map +1 -0
  25. package/dist/{chunk-UVHPCLP6.js → chunk-YN4MJFIG.js} +2 -2
  26. package/dist/{chunk-UVHPCLP6.js.map → chunk-YN4MJFIG.js.map} +1 -1
  27. package/dist/{booking-BXtkG2ns.d.mts → index-Bi666jIm.d.mts} +1 -139
  28. package/dist/{booking-BXtkG2ns.d.ts → index-Bi666jIm.d.ts} +1 -139
  29. package/dist/showmasterpiece/db/index.js +42 -42
  30. package/dist/showmasterpiece/db/index.mjs +1 -1
  31. package/dist/showmasterpiece/index.d.mts +8 -6
  32. package/dist/showmasterpiece/index.d.ts +8 -6
  33. package/dist/showmasterpiece/index.js +127 -126
  34. package/dist/showmasterpiece/index.js.map +1 -1
  35. package/dist/showmasterpiece/index.mjs +4 -3
  36. package/dist/showmasterpiece/index.mjs.map +1 -1
  37. package/dist/showmasterpiece/logic/index.d.mts +9 -17
  38. package/dist/showmasterpiece/logic/index.d.ts +9 -17
  39. package/dist/showmasterpiece/logic/index.js +35 -34
  40. package/dist/showmasterpiece/logic/index.mjs +3 -2
  41. package/dist/showmasterpiece/logic/miniapp/index.d.mts +15 -0
  42. package/dist/showmasterpiece/logic/miniapp/index.d.ts +15 -0
  43. package/dist/showmasterpiece/logic/miniapp/index.js +42 -0
  44. package/dist/showmasterpiece/logic/miniapp/index.js.map +1 -0
  45. package/dist/showmasterpiece/logic/miniapp/index.mjs +5 -0
  46. package/dist/showmasterpiece/logic/miniapp/index.mjs.map +1 -0
  47. package/dist/showmasterpiece/server/index.js +42 -42
  48. package/dist/showmasterpiece/server/index.mjs +1 -1
  49. package/dist/showmasterpiece/ui/miniapp/index.d.mts +3 -2
  50. package/dist/showmasterpiece/ui/miniapp/index.d.ts +3 -2
  51. package/dist/showmasterpiece/ui/web/index.d.mts +3 -2
  52. package/dist/showmasterpiece/ui/web/index.d.ts +3 -2
  53. package/dist/showmasterpiece/ui/web/index.js +29 -29
  54. package/dist/showmasterpiece/ui/web/index.mjs +2 -2
  55. package/package.json +6 -1
  56. package/dist/chunk-7CMGQX3S.mjs.map +0 -1
  57. package/dist/chunk-FVDPGX6A.mjs.map +0 -1
  58. package/dist/chunk-LJGJPAQ4.js.map +0 -1
  59. package/dist/chunk-SKCMZYSQ.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/showmasterpiece/services/masterpiecesService.ts","../src/showmasterpiece/logic/hooks/useMasterpieces.ts","../src/showmasterpiece/services/masterpiecesConfigService.ts","../src/showmasterpiece/logic/hooks/useMasterpiecesConfig.ts","../src/showmasterpiece/services/cartHistoryService.ts","../src/showmasterpiece/services/cartService.ts","../src/showmasterpiece/logic/hooks/useCart.ts","../src/showmasterpiece/services/bookingService.ts","../src/showmasterpiece/logic/hooks/useBooking.ts","../src/showmasterpiece/services/bookingAdminService.ts","../src/showmasterpiece/logic/hooks/useBookingAdmin.ts","../src/showmasterpiece/logic/hooks/useDeadlinePopup.ts","../src/showmasterpiece/logic/hooks/useCartContext.ts","../src/showmasterpiece/logic/hooks/index.ts","../src/showmasterpiece/logic/contexts/CartContext.tsx"],"names":["getMasterpieces","MasterpiecesService","__esm","useMasterpieces","useState","useCallback","useEffect","getConfig","updateConfig","resetConfig","getAllCollections","createCollection","updateCollection","deleteCollection","updateCollectionOrder","moveCollection","moveCollectionUp","moveCollectionDown","addArtworkToCollection","updateArtwork","deleteArtwork","getArtworksByCollection","updateArtworkOrder","moveArtwork","moveArtworkUp","moveArtworkDown","getCategories","createCategory","getTags","useMasterpiecesConfig","error","CartHistoryService","getCartHistory","updateBookingStatus","deleteHistoryRecord","clearUserHistory","getAllHistory","getStatistics","saveCartHistory","CartService","getCart","addToCart","updateCartItem","removeFromCart","clearCart","batchBooking","notifyCartUpdate","CART_UPDATE_EVENT","cartUpdateEvents","BookingService","createBooking","getBookings","getBooking","updateBooking","deleteBooking","getBookableCollections","BookingAdminService","getAllBookings","getBookingStats","forceRefreshAllBookings","forceRefreshBookingStats","exportBookings","useBookingAdmin","useCartContext","CartContext","__toCommonJS","useContext","__export","CartProvider","React"],"mappings":"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","file":"chunk-3YSRTVIY.js","sourcesContent":["/**\n * MasterpiecesService - 美术作品前端API服务\n * \n * 这个文件提供了客户端与美术作品相关API的通信接口。\n * 主要用于前端组件和Hook中调用后端API,获取和操作画集数据。\n * \n * 主要功能:\n * - 画集数据的获取和查询\n * - 搜索和筛选功能\n * - 分类和标签管理\n * - 推荐算法\n * \n * 设计特点:\n * - 使用静态方法,无需实例化\n * - 统一的错误处理\n * - 支持多种查询方式\n * - TypeScript类型安全\n * \n * @module MasterpiecesService\n */\n\nimport type { ArtCollection } from '../types';\n\n/**\n * 获取美术作品画集列表(函数式API)\n * \n * 这是一个简单的函数式接口,用于获取所有画集数据。\n * 主要为了保持向后兼容性而保留。\n * \n * @returns Promise<ArtCollection[]> 画集数组\n * @throws {Error} 当API请求失败时抛出错误\n * \n * @deprecated 建议使用 MasterpiecesService.getAllCollections() 代替\n */\nexport const getMasterpieces = async (): Promise<ArtCollection[]> => {\n const response = await fetch('/api/showmasterpiece/collections');\n if (!response.ok) {\n throw new Error('获取画集失败');\n }\n return await response.json();\n};\n\n/**\n * 美术作品服务类\n * \n * 提供完整的美术作品数据访问接口,包括画集的获取、搜索、筛选等功能。\n * 所有方法都是静态方法,可以直接调用,无需实例化。\n * \n * @example\n * ```typescript\n * // 获取所有画集\n * const collections = await MasterpiecesService.getAllCollections();\n * \n * // 搜索画集\n * const results = await MasterpiecesService.searchCollections('油画');\n * \n * // 按分类获取\n * const paintings = await MasterpiecesService.getCollectionsByCategory('油画');\n * ```\n */\nexport class MasterpiecesService {\n /**\n * 获取所有画集\n * \n * 从后端API获取所有可用的画集数据。\n * 返回的数据包含完整的画集信息和作品页面。\n * \n * @returns Promise<ArtCollection[]> 所有画集的数组\n * @throws {Error} 当API请求失败时抛出错误\n * \n * @example\n * ```typescript\n * try {\n * const collections = await MasterpiecesService.getAllCollections();\n * console.log(`共加载了 ${collections.length} 个画集`);\n * } catch (error) {\n * console.error('加载失败:', error.message);\n * }\n * ```\n */\n static async getAllCollections(): Promise<ArtCollection[]> {\n const response = await fetch('/api/showmasterpiece/collections');\n if (!response.ok) {\n throw new Error('获取画集失败');\n }\n const payload = await response.json();\n const collections = Array.isArray(payload)\n ? payload\n : (payload?.collections ?? payload?.data ?? []);\n\n if (!Array.isArray(collections)) {\n throw new Error('画集数据格式不正确');\n }\n\n return collections;\n }\n\n /**\n * 根据ID获取特定画集\n * \n * 通过画集ID获取单个画集的详细信息。\n * 内部实现是先获取所有画集,然后筛选出指定ID的画集。\n * \n * @param id - 画集的唯一标识符\n * @returns Promise<ArtCollection | null> 找到的画集对象,如果不存在则返回null\n * \n * @example\n * ```typescript\n * const collection = await MasterpiecesService.getCollectionById(1);\n * if (collection) {\n * console.log(`找到画集: ${collection.title}`);\n * } else {\n * console.log('画集不存在');\n * }\n * ```\n */\n static async getCollectionById(id: number): Promise<ArtCollection | null> {\n const collections = await this.getAllCollections();\n return collections.find(c => c.id === id) || null;\n }\n\n /**\n * 搜索画集\n * \n * 根据关键词在画集的多个字段中进行搜索,包括:\n * - 画集标题\n * - 艺术家姓名\n * - 画集描述\n * - 画集分类\n * - 画集标签\n * \n * 搜索是大小写不敏感的,支持部分匹配。\n * \n * @param query - 搜索关键词\n * @returns Promise<ArtCollection[]> 匹配的画集数组\n * \n * @example\n * ```typescript\n * // 搜索包含\"山水\"的画集\n * const results = await MasterpiecesService.searchCollections('山水');\n * console.log(`找到 ${results.length} 个相关画集`);\n * ```\n */\n static async searchCollections(query: string): Promise<ArtCollection[]> {\n const collections = await this.getAllCollections();\n const searchTerm = query.toLowerCase();\n \n return collections.filter((collection: ArtCollection) => \n collection.title.toLowerCase().includes(searchTerm) ||\n collection.number.toLowerCase().includes(searchTerm) ||\n collection.description.toLowerCase().includes(searchTerm) ||\n (collection.category && collection.category.toLowerCase().includes(searchTerm)) ||\n (collection.tags && collection.tags.some((tag: string) => tag.toLowerCase().includes(searchTerm)))\n );\n }\n\n /**\n * 根据分类获取画集\n * \n * 获取属于指定分类的所有画集。\n * 支持特殊值 'all' 来获取所有画集。\n * \n * @param category - 分类名称,或 'all' 表示所有分类\n * @returns Promise<ArtCollection[]> 该分类下的画集数组\n * \n * @example\n * ```typescript\n * // 获取油画分类的画集\n * const paintings = await MasterpiecesService.getCollectionsByCategory('油画');\n * \n * // 获取所有画集\n * const allCollections = await MasterpiecesService.getCollectionsByCategory('all');\n * ```\n */\n static async getCollectionsByCategory(category: string): Promise<ArtCollection[]> {\n const collections = await this.getAllCollections();\n \n if (category === 'all') {\n return collections;\n }\n \n return collections.filter((collection: ArtCollection) => collection.category === category);\n }\n\n /**\n * 获取推荐画集\n * \n * 基于简单的推荐算法获取推荐的画集。\n * 当前算法:优先选择已发布的画集,按作品数量降序排列。\n * \n * @param limit - 返回的推荐画集数量,默认为3个\n * @returns Promise<ArtCollection[]> 推荐的画集数组\n * \n * @example\n * ```typescript\n * // 获取3个推荐画集\n * const recommended = await MasterpiecesService.getRecommendedCollections();\n * \n * // 获取5个推荐画集\n * const moreRecommended = await MasterpiecesService.getRecommendedCollections(5);\n * ```\n */\n static async getRecommendedCollections(limit: number = 3): Promise<ArtCollection[]> {\n const collections = await this.getAllCollections();\n \n // 简单的推荐逻辑:返回已发布的画集,按作品数量排序\n return collections\n .filter((collection: ArtCollection) => collection.isPublished !== false)\n .sort((a: ArtCollection, b: ArtCollection) => b.pages.length - a.pages.length)\n .slice(0, limit);\n }\n\n /**\n * 获取所有可用分类\n * \n * 从后端API获取所有已定义的画集分类列表。\n * 用于构建分类筛选器和下拉菜单。\n * \n * @returns Promise<Array<{ name: string; description?: string | null }>> 分类名称数组\n * @throws {Error} 当API请求失败时抛出错误\n * \n * @example\n * ```typescript\n * const categories = await MasterpiecesService.getCategories();\n * console.log('可用分类:', categories);\n * ```\n */\n static async getCategories(): Promise<Array<{ name: string; description?: string | null }>> {\n const response = await fetch('/api/showmasterpiece/categories');\n if (!response.ok) {\n throw new Error('获取分类失败');\n }\n const payload = await response.json();\n return Array.isArray(payload) ? payload : payload?.data ?? [];\n }\n\n /**\n * 获取所有可用标签\n * \n * 从后端API获取所有已定义的画集标签列表。\n * 用于构建标签筛选器和标签云。\n * \n * @returns Promise<string[]> 标签名称数组\n * @throws {Error} 当API请求失败时抛出错误\n * \n * @example\n * ```typescript\n * const tags = await MasterpiecesService.getTags();\n * console.log('可用标签:', tags);\n * ```\n */\n static async getTags(): Promise<string[]> {\n const response = await fetch('/api/showmasterpiece/tags');\n if (!response.ok) {\n throw new Error('获取标签失败');\n }\n return await response.json();\n }\n} \n","/**\n * useMasterpieces Hook - 画集数据管理和浏览状态管理\n * \n * 这是一个自定义React Hook,提供了完整的画集数据管理和浏览功能。\n * 主要用于ShowMasterpiece模块的前端页面,封装了所有与画集相关的状态和操作。\n * \n * 主要功能:\n * - 画集数据的加载和缓存\n * - 画集浏览状态管理(当前选中的画集、当前页面等)\n * - 翻页操作(上一页、下一页、跳转)\n * - 搜索功能\n * - 错误处理和加载状态管理\n * \n * 性能优化:\n * - 内存缓存机制,减少重复API调用\n * - 使用useCallback优化函数引用稳定性\n * - 懒加载和按需加载\n * \n * @example\n * ```tsx\n * const {\n * collections,\n * selectedCollection,\n * currentPage,\n * loading,\n * selectCollection,\n * nextPage,\n * prevPage\n * } = useMasterpieces();\n * ```\n * \n * @returns {Object} Hook返回的状态和方法集合\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { ArtCollection } from '../../types';\nimport { MasterpiecesService } from '../../services/masterpiecesService';\n\n// ===== 数据缓存配置 =====\n\n/** 画集数据缓存存储 */\nlet collectionsCache: ArtCollection[] | null = null;\n\n/** 缓存时间戳,用于判断缓存是否过期 */\nlet collectionsCacheTime = 0;\n\n/** 缓存持续时间:3分钟 */\nconst COLLECTIONS_CACHE_DURATION = 3 * 60 * 1000; // 3分钟缓存\n\n/**\n * useMasterpieces Hook 主体函数\n * \n * 提供画集数据管理和浏览状态管理的完整解决方案。\n * 包含状态管理、数据获取、缓存机制和用户交互功能。\n * \n */\nexport const useMasterpieces = () => {\n // ===== 状态管理 =====\n \n /** 所有画集数据列表 */\n const [collections, setCollections] = useState<ArtCollection[]>([]);\n \n /** 当前选中的画集(null表示在画集列表页面) */\n const [selectedCollection, setSelectedCollection] = useState<ArtCollection | null>(null);\n \n /** 当前查看的作品页面索引(从0开始) */\n const [currentPage, setCurrentPage] = useState(0);\n \n /** 数据加载状态 */\n const [loading, setLoading] = useState(false);\n \n /** 错误信息(null表示无错误) */\n const [error, setError] = useState<string | null>(null);\n\n // ===== 数据加载方法 =====\n \n /**\n * 加载所有画集数据\n * \n * 支持缓存机制,避免重复的网络请求。\n * 如果缓存有效,直接使用缓存数据;否则从服务器获取新数据。\n * \n * @param forceRefresh - 是否强制刷新,忽略缓存\n */\n const loadCollections = useCallback(async (forceRefresh = false) => {\n try {\n // 检查缓存是否有效\n const now = Date.now();\n if (!forceRefresh && collectionsCache && (now - collectionsCacheTime) < COLLECTIONS_CACHE_DURATION) {\n setCollections(collectionsCache);\n return;\n }\n\n setLoading(true);\n setError(null);\n \n // 调用服务获取数据\n const data = await MasterpiecesService.getAllCollections();\n \n // 更新缓存\n collectionsCache = data;\n collectionsCacheTime = now;\n \n setCollections(data);\n } catch (err) {\n setError('加载画集失败');\n console.error('Error loading collections:', err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n // ===== 画集浏览操作 =====\n \n /**\n * 选择一个画集进行查看\n * \n * 设置当前选中的画集,并重置页面索引为第一页。\n * \n * @param collection - 要查看的画集对象\n */\n const selectCollection = useCallback((collection: ArtCollection) => {\n setSelectedCollection(collection);\n setCurrentPage(0); // 重置到第一页\n }, []);\n\n /**\n * 切换到下一页作品\n * \n * 检查是否还有下一页,如果有则切换到下一页。\n * 自动处理边界条件,不会超出作品总数。\n */\n const nextPage = useCallback(() => {\n if (selectedCollection && currentPage < selectedCollection.pages.length - 1) {\n setCurrentPage(prev => prev + 1);\n }\n }, [selectedCollection, currentPage]);\n\n /**\n * 切换到上一页作品\n * \n * 检查是否还有上一页,如果有则切换到上一页。\n * 自动处理边界条件,不会低于第一页。\n */\n const prevPage = useCallback(() => {\n if (currentPage > 0) {\n setCurrentPage(prev => prev - 1);\n }\n }, [currentPage]);\n\n /**\n * 跳转到指定页面的作品\n * \n * 直接跳转到指定的页面索引。\n * 包含边界检查,确保索引在有效范围内。\n * \n * @param pageIndex - 目标页面索引(从0开始)\n */\n const goToPage = useCallback((pageIndex: number) => {\n if (selectedCollection && pageIndex >= 0 && pageIndex < selectedCollection.pages.length) {\n setCurrentPage(pageIndex);\n }\n }, [selectedCollection]);\n\n /**\n * 返回画集列表页面\n * \n * 清除当前选中的画集,回到画集列表视图。\n * 同时重置页面索引。\n */\n const backToGallery = useCallback(() => {\n setSelectedCollection(null);\n setCurrentPage(0);\n }, []);\n\n // ===== 搜索功能 =====\n \n /**\n * 搜索画集\n * \n * 根据关键词搜索画集,支持标题、作者、描述等字段的模糊匹配。\n * 搜索结果会替换当前的画集列表。\n * \n * @param query - 搜索关键词\n */\n const searchCollections = useCallback(async (query: string) => {\n try {\n setLoading(true);\n setError(null);\n const data = await MasterpiecesService.searchCollections(query);\n setCollections(data);\n } catch (err) {\n setError('搜索失败');\n console.error('Error searching collections:', err);\n } finally {\n setLoading(false);\n }\n }, []);\n\n // ===== 辅助方法 =====\n \n /**\n * 获取当前正在查看的作品\n * \n * 根据当前选中的画集和页面索引,返回对应的作品对象。\n * 如果没有选中画集或索引无效,返回null。\n * \n * @returns 当前作品对象或null\n */\n const getCurrentArtwork = useCallback(() => {\n if (!selectedCollection || !selectedCollection.pages[currentPage]) {\n return null;\n }\n return selectedCollection.pages[currentPage];\n }, [selectedCollection, currentPage]);\n\n // ===== 计算属性 =====\n \n /** 是否可以切换到下一页 */\n const canGoNext = selectedCollection ? currentPage < selectedCollection.pages.length - 1 : false;\n \n /** 是否可以切换到上一页 */\n const canGoPrev = currentPage > 0;\n\n // ===== 初始化 =====\n \n /**\n * 组件挂载时自动加载画集数据\n */\n useEffect(() => {\n loadCollections();\n }, [loadCollections]);\n\n // ===== 返回值 =====\n \n return {\n // === 状态数据 ===\n /** 所有画集数据 */\n collections,\n /** 当前选中的画集 */\n selectedCollection,\n /** 当前页面索引 */\n currentPage,\n /** 加载状态 */\n loading,\n /** 错误信息 */\n error,\n \n // === 计算属性 ===\n /** 获取当前作品的方法 */\n getCurrentArtwork,\n /** 是否可以下一页 */\n canGoNext,\n /** 是否可以上一页 */\n canGoPrev,\n \n // === 操作方法 ===\n /** 选择画集 */\n selectCollection,\n /** 下一页 */\n nextPage,\n /** 上一页 */\n prevPage,\n /** 跳转到指定页 */\n goToPage,\n /** 返回画集列表 */\n backToGallery,\n /** 搜索画集 */\n searchCollections,\n /** 加载画集数据 */\n loadCollections,\n };\n}; \n","import type { \n MasterpiecesConfig, \n ArtCollection, \n ArtworkPage,\n CollectionFormData,\n ArtworkFormData \n} from '../types';\n\n// 配置缓存\nlet configCache: MasterpiecesConfig | null = null;\nlet configCacheTime: number = 0;\nconst CONFIG_CACHE_DURATION = 5 * 60 * 1000; // 5分钟缓存\n\n// 配置管理\nexport const getConfig = async (): Promise<MasterpiecesConfig> => {\n // 检查缓存是否有效\n const now = Date.now();\n if (configCache && (now - configCacheTime) < CONFIG_CACHE_DURATION) {\n return configCache;\n }\n\n const response = await fetch('/api/showmasterpiece/config');\n if (!response.ok) {\n throw new Error('获取配置失败');\n }\n \n const config = await response.json();\n \n // 更新缓存\n configCache = config;\n configCacheTime = now;\n \n return config;\n};\n\nexport const updateConfig = async (configData: Partial<MasterpiecesConfig>): Promise<MasterpiecesConfig> => {\n const response = await fetch('/api/showmasterpiece/config', {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(configData),\n });\n \n if (!response.ok) {\n throw new Error('更新配置失败');\n }\n \n const updatedConfig = await response.json();\n \n // 更新缓存\n configCache = updatedConfig;\n configCacheTime = Date.now();\n \n return updatedConfig;\n};\n\nexport const resetConfig = async (): Promise<MasterpiecesConfig> => {\n const response = await fetch('/api/showmasterpiece/config', {\n method: 'DELETE',\n });\n \n if (!response.ok) {\n throw new Error('重置配置失败');\n }\n \n const resetConfigData = await response.json();\n \n // 清除缓存\n configCache = resetConfigData;\n configCacheTime = Date.now();\n \n return resetConfigData;\n};\n\n// 画集管理\nexport const getAllCollections = async (): Promise<ArtCollection[]> => {\n console.log('📡 [服务] 开始获取所有画集...');\n \n try {\n // 添加时间戳参数防止缓存\n const timestamp = new Date().getTime();\n const response = await fetch(`/api/showmasterpiece/collections?_t=${timestamp}`, {\n method: 'GET',\n headers: {\n 'Cache-Control': 'no-cache',\n 'Pragma': 'no-cache'\n }\n });\n \n console.log('📡 [服务] 画集请求响应状态:', response.status);\n \n if (!response.ok) {\n const errorText = await response.text();\n console.error('❌ [服务] 获取画集失败:', {\n status: response.status,\n statusText: response.statusText,\n error: errorText\n });\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n \n const payload = await response.json();\n const collections = Array.isArray(payload)\n ? payload\n : (payload?.collections ?? payload?.data ?? []);\n\n if (!Array.isArray(collections)) {\n throw new Error('画集数据格式不正确');\n }\n\n console.log('✅ [服务] 画集数据获取成功:', {\n count: collections.length,\n titles: collections.map((c: ArtCollection) => c.title)\n });\n\n return collections;\n } catch (error) {\n console.error('❌ [服务] 获取画集数据失败:', error);\n throw error;\n }\n};\n\nexport const createCollection = async (collectionData: CollectionFormData): Promise<ArtCollection> => {\n const requestBody = collectionData;\n \n const response = await fetch('/api/showmasterpiece/collections', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody),\n });\n \n if (!response.ok) {\n if (response.status === 413) {\n throw new Error('图片文件太大,请选择更小的图片或等待图片压缩完成后重试');\n }\n throw new Error('创建画集失败');\n }\n return await response.json();\n};\n\nexport const updateCollection = async (id: number, collectionData: CollectionFormData): Promise<ArtCollection> => {\n const response = await fetch(`/api/showmasterpiece/collections/${id}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(collectionData),\n });\n \n if (!response.ok) {\n if (response.status === 413) {\n throw new Error('图片文件太大,请选择更小的图片或等待图片压缩完成后重试');\n }\n throw new Error('更新画集失败');\n }\n return await response.json();\n};\n\nexport const deleteCollection = async (id: number): Promise<void> => {\n const url = new URL(`/api/showmasterpiece/collections/${id}`, window.location.origin);\n \n const response = await fetch(url.toString(), {\n method: 'DELETE',\n });\n \n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || '删除画集失败');\n }\n};\n\n// 画集顺序管理\nexport const updateCollectionOrder = async (collectionOrders: { id: number; displayOrder: number }[]): Promise<void> => {\n const response = await fetch('/api/showmasterpiece/collections?action=reorder', {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ collectionOrders }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '更新画集顺序失败');\n }\n};\n\nexport const moveCollection = async (collectionId: number, targetOrder: number): Promise<void> => {\n const response = await fetch('/api/showmasterpiece/collections?action=move', {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ collectionId, targetOrder }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '移动画集失败');\n }\n};\n\nexport const moveCollectionUp = async (collectionId: number): Promise<void> => {\n const response = await fetch('/api/showmasterpiece/collections?action=up', {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ collectionId }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '上移画集失败');\n }\n};\n\nexport const moveCollectionDown = async (collectionId: number): Promise<void> => {\n const response = await fetch('/api/showmasterpiece/collections?action=down', {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ collectionId }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '下移画集失败');\n }\n};\n\n// 作品管理\nexport const addArtworkToCollection = async (collectionId: number, artworkData: ArtworkFormData): Promise<ArtworkPage> => {\n console.log('🌐 [服务] 开始发送作品创建请求:', {\n collectionId,\n title: artworkData.title,\n number: artworkData.number,\n imageSize: artworkData.image ? `${artworkData.image.length} chars` : 'null'\n });\n \n const requestBody = JSON.stringify(artworkData);\n console.log('📦 [服务] 请求体大小:', `${requestBody.length} chars (${(requestBody.length / 1024).toFixed(1)} KB)`);\n \n try { \n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: requestBody,\n });\n \n console.log('📡 [服务] 收到HTTP响应:', {\n status: response.status,\n statusText: response.statusText,\n contentLength: response.headers.get('content-length'),\n contentType: response.headers.get('content-type')\n });\n \n if (!response.ok) {\n const errorText = await response.text();\n console.error('❌ [服务] HTTP请求失败:', {\n status: response.status,\n statusText: response.statusText,\n errorText: errorText.substring(0, 200)\n });\n \n if (response.status === 413) {\n throw new Error('图片文件太大,请选择更小的图片或等待图片压缩完成后重试');\n }\n throw new Error(`添加作品失败: ${response.status} ${response.statusText}`);\n }\n \n const result = await response.json();\n console.log('✅ [服务] 作品创建成功:', {\n id: result.id,\n title: result.title,\n number: result.number\n });\n \n return result;\n \n } catch (error) {\n console.error('❌ [服务] 请求过程中发生错误:', error);\n if (error instanceof TypeError && error.message.includes('fetch')) {\n throw new Error('网络连接失败,请检查网络连接后重试');\n }\n throw error;\n }\n};\n\nexport const updateArtwork = async (collectionId: number, artworkId: number, artworkData: ArtworkFormData): Promise<ArtworkPage> => {\n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks/${artworkId}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(artworkData),\n });\n \n if (!response.ok) {\n if (response.status === 413) {\n throw new Error('图片文件太大,请选择更小的图片或等待图片压缩完成后重试');\n }\n throw new Error('更新作品失败');\n }\n return await response.json();\n};\n\nexport const deleteArtwork = async (collectionId: number, artworkId: number): Promise<void> => {\n const url = new URL(`/api/showmasterpiece/collections/${collectionId}/artworks/${artworkId}`, window.location.origin);\n \n const response = await fetch(url.toString(), {\n method: 'DELETE',\n });\n \n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || '删除作品失败');\n }\n};\n\n// 作品排序管理\nexport const getArtworksByCollection = async (collectionId: number): Promise<(ArtworkPage & { pageOrder: number })[]> => {\n // 添加时间戳参数防止缓存\n const timestamp = new Date().getTime();\n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks?_t=${timestamp}`, {\n headers: {\n 'Cache-Control': 'no-cache',\n 'Pragma': 'no-cache'\n }\n });\n if (!response.ok) {\n throw new Error('获取作品列表失败');\n }\n return await response.json();\n};\n\nexport const updateArtworkOrder = async (collectionId: number, artworkOrders: { id: number; pageOrder: number }[]): Promise<void> => {\n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks?action=reorder`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ artworkOrders }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '更新作品顺序失败');\n }\n};\n\nexport const moveArtwork = async (collectionId: number, artworkId: number, targetOrder: number): Promise<void> => {\n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks?action=move`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ artworkId, targetOrder }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '移动作品失败');\n }\n};\n\nexport const moveArtworkUp = async (collectionId: number, artworkId: number): Promise<void> => {\n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks?action=up`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ artworkId }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '上移作品失败');\n }\n};\n\nexport const moveArtworkDown = async (collectionId: number, artworkId: number): Promise<void> => {\n const response = await fetch(`/api/showmasterpiece/collections/${collectionId}/artworks?action=down`, {\n method: 'PATCH',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ artworkId }),\n });\n \n if (!response.ok) {\n const error = await response.json();\n throw new Error(error.error || '下移作品失败');\n }\n};\n\n// 分类和标签\nexport const getCategories = async (): Promise<Array<{ name: string; description?: string | null }>> => {\n const response = await fetch('/api/showmasterpiece/categories');\n if (!response.ok) {\n throw new Error('获取分类失败');\n }\n const payload = await response.json();\n const categories = Array.isArray(payload) ? payload : (payload?.data ?? []);\n if (!Array.isArray(categories)) {\n throw new Error('分类数据格式不正确');\n }\n return categories;\n};\n\nexport const createCategory = async (name: string, description?: string): Promise<void> => {\n const response = await fetch('/api/showmasterpiece/categories', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ name, description }),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || '创建分类失败');\n }\n};\n\nexport const getTags = async (): Promise<string[]> => {\n const response = await fetch('/api/showmasterpiece/tags');\n if (!response.ok) {\n throw new Error('获取标签失败');\n }\n return await response.json();\n};\n\n// 获取画集概览(不包含作品详情,用于列表展示)\nexport async function getCollectionsOverview(): Promise<Omit<ArtCollection, 'pages'>[]> {\n const response = await fetch('/api/showmasterpiece/collections?overview=true');\n if (!response.ok) {\n throw new Error('获取画集概览失败');\n }\n return response.json();\n} \n","import { useState, useEffect } from 'react';\nimport {\n getConfig,\n updateConfig,\n resetConfig,\n getAllCollections,\n createCollection,\n updateCollection,\n deleteCollection,\n addArtworkToCollection,\n updateArtwork,\n deleteArtwork,\n moveArtworkUp,\n moveArtworkDown,\n updateArtworkOrder,\n moveCollectionUp,\n moveCollectionDown,\n updateCollectionOrder,\n getArtworksByCollection,\n getCategories,\n getTags\n} from '../../services/masterpiecesConfigService';\nimport type { \n MasterpiecesConfig, \n ArtCollection, \n CollectionFormData, \n ArtworkFormData,\n CategoryOption,\n} from '../../types';\n\nexport const useMasterpiecesConfig = () => {\n const [config, setConfig] = useState<MasterpiecesConfig | null>(null);\n const [collections, setCollections] = useState<ArtCollection[]>([]);\n const [categories, setCategories] = useState<CategoryOption[]>([]);\n const [tags, setTags] = useState<string[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [refreshCounter, setRefreshCounter] = useState(0);\n\n // 加载初始数据\n useEffect(() => {\n loadData();\n }, []);\n\n const loadData = async () => {\n console.log('🔄 [Hook] 开始加载数据...');\n //tabitem\n try {\n setLoading(true);\n setError(null);\n \n console.log('📡 [Hook] 并行请求所有数据...');\n \n // 强制不使用缓存,添加时间戳和特殊参数\n const timestamp = Date.now();\n const [configData, collectionsResponse, categoriesData, tagsData] = await Promise.all([\n getConfig(),\n fetch(`/api/showmasterpiece/collections?_t=${timestamp}&nocache=true&includeImages=true`, {\n headers: {\n 'Cache-Control': 'no-cache',\n 'Pragma': 'no-cache'\n }\n }).then(r => r.json()),\n getCategories(),\n getTags()\n ]);\n \n // 从API响应中提取实际的画集数据\n const collectionsData = collectionsResponse.data || [];\n \n console.log('✅ [Hook] 数据加载完成:', {\n 配置: configData ? '已加载' : '未加载',\n 画集数量: collectionsData.length,\n 分类数量: categoriesData.length,\n 标签数量: tagsData.length\n });\n \n // 详细检查每个画集的作品数量\n if (collectionsData.length > 0) {\n console.log('📚 [Hook] 画集详情:');\n collectionsData.forEach((collection: ArtCollection, index: number) => {\n console.log(` ${index + 1}. ${collection.title} - 作品数量: ${collection.pages.length}`);\n if (collection.pages.length > 0) {\n collection.pages.forEach((page: any, pageIndex: number) => {\n console.log(` ${pageIndex + 1}. ${page.title} (ID: ${page.id})`);\n });\n }\n });\n }\n \n setConfig(configData);\n setCollections(collectionsData);\n setCategories(categoriesData);\n setTags(tagsData);\n \n console.log('💾 [Hook] 状态更新完成');\n \n // 返回加载的数据,供调用者使用\n return {\n config: configData,\n collections: collectionsData, // 这里已经是提取后的数组数据\n categories: categoriesData,\n tags: tagsData\n };\n \n } catch (err) {\n console.error('❌ [Hook] 加载数据失败:', err);\n console.error('错误详情:', {\n message: err instanceof Error ? err.message : '未知错误',\n stack: err instanceof Error ? err.stack : undefined\n });\n setError(err instanceof Error ? err.message : '加载数据失败');\n throw err; // 重新抛出错误,让调用者知道加载失败\n } finally {\n setLoading(false);\n console.log('🏁 [Hook] 数据加载流程结束');\n }\n };\n\n // 统一错误处理函数\n const handleApiError = (error: unknown, operation: string) => {\n if (error instanceof Error) {\n if (error.message.includes('413') || error.message.includes('太大')) {\n throw new Error('图片文件过大,请使用压缩后的图片');\n }\n if (error.message.includes('401')) {\n throw new Error('没有权限执行此操作,请先登录');\n }\n if (error.message.includes('404') || error.message.includes('画集不存在')) {\n throw new Error('画集不存在或已被删除,请刷新页面后重试');\n }\n if (error.message.includes('409')) {\n // 冲突错误,可能是外键约束或其他数据完整性问题\n if (error.message.includes('画集不存在') || error.message.includes('已被删除')) {\n throw new Error('画集不存在或已被删除,请刷新页面后重试');\n }\n throw new Error(error.message); // 保留原始冲突错误信息\n }\n throw new Error(`${operation}失败:${error.message}`);\n }\n throw new Error(`${operation}失败:未知错误`);\n };\n\n // 配置管理\n const handleUpdateConfig = async (configData: Partial<MasterpiecesConfig>) => {\n try {\n const updatedConfig = await updateConfig(configData);\n setConfig(updatedConfig);\n } catch (err) {\n handleApiError(err, '更新配置');\n }\n };\n\n const handleResetConfig = async () => {\n try {\n const resetConfigData = await resetConfig();\n setConfig(resetConfigData);\n } catch (err) {\n handleApiError(err, '重置配置');\n }\n };\n\n // 画集管理\n const handleCreateCollection = async (collectionData: CollectionFormData) => {\n try {\n const newCollection = await createCollection(collectionData);\n // 重新加载数据以确保与数据库完全同步\n await loadData();\n } catch (err) {\n handleApiError(err, '创建画集');\n }\n };\n\n const handleUpdateCollection = async (id: number, collectionData: CollectionFormData) => {\n try {\n const updatedCollection = await updateCollection(id, collectionData);\n // 重新加载数据以确保与数据库完全同步\n await loadData();\n } catch (err) {\n handleApiError(err, '更新画集');\n }\n };\n\n const handleDeleteCollection = async (id: number) => {\n try {\n await deleteCollection(id);\n // 重新加载数据以确保与数据库完全同步\n await loadData();\n } catch (err) {\n handleApiError(err, '删除画集');\n }\n };\n\n // 作品管理\n const handleAddArtworkToCollection = async (collectionId: number, artworkData: ArtworkFormData) => {\n console.log('🎯 [Hook] 开始添加作品到画集:', {\n collectionId,\n title: artworkData.title,\n number: artworkData.number,\n imageSize: artworkData.image ? `${artworkData.image.length} chars` : 'null',\n description: artworkData.description?.substring(0, 50) + (artworkData.description && artworkData.description.length > 50 ? '...' : '')\n });\n \n try {\n console.log('📞 [Hook] 调用API服务...');\n const newArtwork = await addArtworkToCollection(collectionId, artworkData);\n console.log('✅ [Hook] API调用成功,返回作品:', {\n id: newArtwork.id,\n title: newArtwork.title,\n number: newArtwork.number\n });\n \n console.log('🔄 [Hook] 重新加载数据以确保与数据库完全同步...');\n // 重新加载数据以确保与数据库完全同步\n const reloadedData = await loadData();\n console.log('✅ [Hook] 数据重新加载完成');\n \n // 🔍 使用Promise等待下一个事件循环,确保React状态已更新\n await new Promise(resolve => setTimeout(resolve, 50));\n \n // 验证新作品是否在重新加载的数据中\n const targetCollection = reloadedData.collections.find((c: ArtCollection) => c.id === collectionId);\n if (targetCollection) {\n const newArtworkInCollection = targetCollection.pages.find((p: any) => p.id === newArtwork.id);\n if (newArtworkInCollection) {\n console.log('✅ [Hook] 验证成功:新作品已在画集中', {\n artworkId: newArtwork.id,\n collectionId: collectionId,\n artworkTitle: newArtworkInCollection.title\n });\n } else {\n console.error('❌ [Hook] 验证失败:新作品不在重新加载的数据中', {\n expectedArtworkId: newArtwork.id,\n collectionId: collectionId,\n currentArtworks: targetCollection.pages.map((p: any) => ({ id: p.id, title: p.title }))\n });\n // 再次尝试加载数据\n console.log('🔄 [Hook] 再次尝试重新加载数据...');\n await loadData();\n }\n } else {\n console.error('❌ [Hook] 验证失败:找不到目标画集', {\n collectionId,\n availableCollections: reloadedData.collections.map((c: ArtCollection) => ({ id: c.id, title: c.title }))\n });\n }\n \n // 🎉 强制触发一次额外的状态更新,确保UI显示最新数据\n console.log('🎉 [Hook] 强制更新状态以确保UI同步...');\n setCollections([...reloadedData.collections]);\n \n // 🔥 触发刷新计数器,强制组件重新渲染\n setRefreshCounter(prev => prev + 1);\n console.log('🔥 [Hook] 触发强制重新渲染');\n \n } catch (err) {\n console.error('❌ [Hook] 添加作品失败:', err);\n console.error('错误详情:', {\n message: err instanceof Error ? err.message : '未知错误',\n collectionId,\n artworkTitle: artworkData.title\n });\n handleApiError(err, '添加作品');\n }\n };\n\n const handleUpdateArtwork = async (collectionId: number, artworkId: number, artworkData: ArtworkFormData) => {\n try {\n const updatedArtwork = await updateArtwork(collectionId, artworkId, artworkData);\n // 重新加载数据以确保与数据库完全同步\n await loadData();\n } catch (err) {\n handleApiError(err, '更新作品');\n }\n };\n\n const handleDeleteArtwork = async (collectionId: number, artworkId: number) => {\n try {\n await deleteArtwork(collectionId, artworkId);\n // 重新加载数据以确保与数据库完全同步\n await loadData();\n } catch (err) {\n handleApiError(err, '删除作品');\n }\n };\n\n // 新增:作品排序管理\n const handleMoveArtworkUp = async (collectionId: number, artworkId: number) => {\n try {\n await moveArtworkUp(collectionId, artworkId);\n // 只更新特定画集的数据,避免重新加载所有数据\n await updateCollectionArtworks(collectionId);\n } catch (err) {\n handleApiError(err, '上移作品');\n }\n };\n\n const handleMoveArtworkDown = async (collectionId: number, artworkId: number) => {\n try {\n await moveArtworkDown(collectionId, artworkId);\n // 只更新特定画集的数据,避免重新加载所有数据\n await updateCollectionArtworks(collectionId);\n } catch (err) {\n handleApiError(err, '下移作品');\n }\n };\n\n const handleUpdateArtworkOrder = async (collectionId: number, artworkOrders: { id: number; pageOrder: number }[]) => {\n try {\n await updateArtworkOrder(collectionId, artworkOrders);\n // 只更新特定画集的数据,避免重新加载所有数据\n await updateCollectionArtworks(collectionId);\n } catch (err) {\n handleApiError(err, '更新作品顺序');\n }\n };\n\n // 更新特定画集的作品数据\n const updateCollectionArtworks = async (collectionId: number) => {\n try {\n const updatedArtworks = await getArtworksByCollection(collectionId);\n \n setCollections(prevCollections => \n prevCollections.map(collection => \n collection.id === collectionId \n ? { ...collection, pages: updatedArtworks }\n : collection\n )\n );\n } catch (err) {\n console.error('更新画集作品数据失败:', err);\n // 如果更新失败,回退到重新加载所有数据\n await loadData();\n }\n };\n\n // 新增:画集排序管理\n const handleMoveCollectionUp = async (collectionId: number) => {\n try {\n await moveCollectionUp(collectionId);\n // 只更新画集数据,避免重新加载所有数据\n await updateCollectionsData();\n } catch (err) {\n handleApiError(err, '上移画集');\n }\n };\n\n const handleMoveCollectionDown = async (collectionId: number) => {\n try {\n await moveCollectionDown(collectionId);\n // 只更新画集数据,避免重新加载所有数据\n await updateCollectionsData();\n } catch (err) {\n handleApiError(err, '下移画集');\n }\n };\n\n const handleUpdateCollectionOrder = async (collectionOrders: { id: number; displayOrder: number }[]) => {\n try {\n await updateCollectionOrder(collectionOrders);\n // 只更新画集数据,避免重新加载所有数据\n await updateCollectionsData();\n } catch (err) {\n handleApiError(err, '更新画集顺序');\n }\n };\n\n // 更新画集数据\n const updateCollectionsData = async () => {\n try {\n const updatedCollections = await getAllCollections();\n setCollections(updatedCollections);\n } catch (err) {\n console.error('更新画集数据失败:', err);\n // 如果更新失败,回退到重新加载所有数据\n await loadData();\n }\n };\n\n // 刷新分类和标签\n const refreshCategoriesAndTags = async () => {\n try {\n const [categoriesData, tagsData] = await Promise.all([\n getCategories(),\n getTags()\n ]);\n setCategories(categoriesData);\n setTags(tagsData);\n } catch (err) {\n console.error('刷新分类和标签失败:', err);\n }\n };\n\n return {\n // 数据\n config,\n collections,\n categories,\n tags,\n loading,\n error,\n refreshCounter,\n \n // 方法\n updateConfig: handleUpdateConfig,\n resetConfig: handleResetConfig,\n createCollection: handleCreateCollection,\n updateCollection: handleUpdateCollection,\n deleteCollection: handleDeleteCollection,\n addArtworkToCollection: handleAddArtworkToCollection,\n updateArtwork: handleUpdateArtwork,\n deleteArtwork: handleDeleteArtwork,\n \n // 新增:作品排序方法\n moveArtworkUp: handleMoveArtworkUp,\n moveArtworkDown: handleMoveArtworkDown,\n updateArtworkOrder: handleUpdateArtworkOrder,\n \n // 新增:画集排序方法\n moveCollectionUp: handleMoveCollectionUp,\n moveCollectionDown: handleMoveCollectionDown,\n updateCollectionOrder: handleUpdateCollectionOrder,\n \n refreshData: loadData,\n };\n}; \n","/**\n * ShowMasterpiece 模块 - 购物车历史记录服务\n * \n * 提供用户购物车历史记录功能,包括:\n * - 保存用户提交的购物车数据\n * - 获取用户历史记录\n * - 更新预订状态\n * - 本地存储管理\n * \n * @fileoverview 购物车历史记录服务\n */\n\nimport { \n CartHistoryItem, \n CartHistory, \n CartItem,\n BatchBookingResponse \n} from '../types/cart';\n\n/**\n * 购物车历史记录本地存储键名基础\n */\nconst CART_HISTORY_STORAGE_KEY_BASE = 'showmasterpiece_cart_history';\n\n/**\n * 默认的购物车历史记录存储键(向后兼容)\n */\nconst CART_HISTORY_STORAGE_KEY = CART_HISTORY_STORAGE_KEY_BASE;\n\n\n/**\n * 购物车历史记录服务类\n * \n * 提供购物车历史记录相关的本地存储操作方法\n */\nexport class CartHistoryService {\n /**\n * 生成唯一ID\n */\n // static generateId(): string {\n // return `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n // }\n\n /**\n * 获取用户购物车历史记录\n * \n * @param qqNumber 用户QQ号\n * @param phoneNumber 用户手机号\n * @returns 购物车历史记录\n */\n static async getCartHistory(qqNumber: string, phoneNumber: string): Promise<CartHistory> {\n try {\n const historyData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n if (historyData) {\n const allHistory: CartHistoryItem[] = JSON.parse(historyData);\n \n // 过滤当前用户的历史记录\n const userHistory = allHistory.filter(record => \n record.qqNumber === qqNumber && record.phoneNumber === phoneNumber\n );\n\n // 将字符串日期转换为Date对象\n const processedHistory = userHistory.map(record => ({\n ...record,\n submittedAt: new Date(record.submittedAt),\n items: record.items.map((item: any) => ({\n ...item,\n addedAt: new Date(item.addedAt)\n }))\n }));\n\n // 按提交时间倒序排列\n processedHistory.sort((a, b) => b.submittedAt.getTime() - a.submittedAt.getTime());\n\n return {\n records: processedHistory,\n totalRecords: processedHistory.length\n };\n }\n } catch (error) {\n console.error('读取购物车历史记录失败:', error);\n }\n \n return {\n records: [],\n totalRecords: 0\n };\n }\n\n /**\n * 保存购物车历史记录\n * \n * @param historyItem 历史记录项\n */\n static async saveCartHistory(historyItem: Omit<CartHistoryItem, 'id'>): Promise<CartHistoryItem> {\n try {\n // 直接在函数内生成ID,避免this上下文问题\n const generateId = () => `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n \n const newHistoryItem: CartHistoryItem = {\n ...historyItem,\n id: generateId(),\n submittedAt: new Date()\n };\n\n // 获取现有历史记录\n const existingData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n const allHistory: CartHistoryItem[] = existingData ? JSON.parse(existingData) : [];\n\n // 添加新记录\n allHistory.push(newHistoryItem);\n\n // 保存到本地存储\n localStorage.setItem(CART_HISTORY_STORAGE_KEY, JSON.stringify(allHistory));\n\n console.log('✅ 购物车历史记录保存成功:', { \n id: newHistoryItem.id,\n qqNumber: newHistoryItem.qqNumber,\n itemCount: newHistoryItem.items.length\n });\n\n return newHistoryItem;\n } catch (error) {\n console.error('保存购物车历史记录失败:', error);\n throw new Error('保存购物车历史记录失败');\n }\n }\n\n /**\n * 更新预订状态\n * \n * @param qqNumber 用户QQ号\n * @param phoneNumber 用户手机号\n * @param historyId 历史记录ID\n * @param status 新状态\n * @param bookingIds 预订ID列表\n */\n static async updateBookingStatus(\n qqNumber: string, \n phoneNumber: string, \n historyId: string, \n status: CartHistoryItem['status'],\n bookingIds?: number[]\n ): Promise<void> {\n try {\n const historyData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n if (historyData) {\n const allHistory: CartHistoryItem[] = JSON.parse(historyData);\n \n // 找到并更新指定记录\n const recordIndex = allHistory.findIndex(record => \n record.id === historyId && \n record.qqNumber === qqNumber && \n record.phoneNumber === phoneNumber\n );\n\n if (recordIndex !== -1) {\n const record = allHistory[recordIndex];\n if (!record) {\n return;\n }\n record.status = status;\n if (bookingIds) {\n record.bookingIds = bookingIds;\n }\n\n // 保存更新后的数据\n localStorage.setItem(CART_HISTORY_STORAGE_KEY, JSON.stringify(allHistory));\n\n console.log('✅ 预订状态更新成功:', { \n historyId, \n status, \n bookingIds \n });\n }\n }\n } catch (error) {\n console.error('更新预订状态失败:', error);\n throw new Error('更新预订状态失败');\n }\n }\n\n /**\n * 删除历史记录\n * \n * @param qqNumber 用户QQ号\n * @param phoneNumber 用户手机号\n * @param historyId 历史记录ID\n */\n static async deleteHistoryRecord(\n qqNumber: string, \n phoneNumber: string, \n historyId: string\n ): Promise<void> {\n try {\n const historyData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n if (historyData) {\n const allHistory: CartHistoryItem[] = JSON.parse(historyData);\n \n // 过滤掉要删除的记录\n const filteredHistory = allHistory.filter(record => \n !(record.id === historyId && \n record.qqNumber === qqNumber && \n record.phoneNumber === phoneNumber)\n );\n\n // 保存过滤后的数据\n localStorage.setItem(CART_HISTORY_STORAGE_KEY, JSON.stringify(filteredHistory));\n\n console.log('✅ 历史记录删除成功:', { historyId });\n }\n } catch (error) {\n console.error('删除历史记录失败:', error);\n throw new Error('删除历史记录失败');\n }\n }\n\n /**\n * 清空用户所有历史记录\n * \n * @param qqNumber 用户QQ号\n * @param phoneNumber 用户手机号\n */\n static async clearUserHistory(qqNumber: string, phoneNumber: string): Promise<void> {\n try {\n const historyData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n if (historyData) {\n const allHistory: CartHistoryItem[] = JSON.parse(historyData);\n \n // 过滤掉当前用户的所有记录\n const filteredHistory = allHistory.filter(record => \n !(record.qqNumber === qqNumber && record.phoneNumber === phoneNumber)\n );\n\n // 保存过滤后的数据\n localStorage.setItem(CART_HISTORY_STORAGE_KEY, JSON.stringify(filteredHistory));\n\n console.log('✅ 用户历史记录清空成功:', { qqNumber, phoneNumber });\n }\n } catch (error) {\n console.error('清空用户历史记录失败:', error);\n throw new Error('清空用户历史记录失败');\n }\n }\n\n /**\n * 获取所有历史记录(管理员功能)\n */\n static async getAllHistory(): Promise<CartHistoryItem[]> {\n try {\n const historyData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n if (historyData) {\n const allHistory: CartHistoryItem[] = JSON.parse(historyData);\n \n // 将字符串日期转换为Date对象\n return allHistory.map(record => ({\n ...record,\n submittedAt: new Date(record.submittedAt),\n items: record.items.map((item: any) => ({\n ...item,\n addedAt: new Date(item.addedAt)\n }))\n }));\n }\n } catch (error) {\n console.error('读取所有历史记录失败:', error);\n }\n \n return [];\n }\n\n /**\n * 获取统计数据\n */\n static async getStatistics(): Promise<{\n totalRecords: number;\n totalUsers: number;\n totalItems: number;\n totalRevenue: number;\n }> {\n try {\n const allHistory = await this.getAllHistory();\n \n const totalRecords = allHistory.length;\n const uniqueUsers = new Set(\n allHistory.map(record => `${record.qqNumber}_${record.phoneNumber}`)\n );\n const totalUsers = uniqueUsers.size;\n \n let totalItems = 0;\n let totalRevenue = 0;\n \n allHistory.forEach(record => {\n totalItems += record.totalQuantity;\n totalRevenue += record.totalPrice;\n });\n\n return {\n totalRecords,\n totalUsers,\n totalItems,\n totalRevenue\n };\n } catch (error) {\n console.error('获取统计数据失败:', error);\n return {\n totalRecords: 0,\n totalUsers: 0,\n totalItems: 0,\n totalRevenue: 0\n };\n }\n }\n}\n\n// 导出单独的函数,方便直接导入使用\nexport const getCartHistory = CartHistoryService.getCartHistory;\nexport const updateBookingStatus = CartHistoryService.updateBookingStatus;\nexport const deleteHistoryRecord = CartHistoryService.deleteHistoryRecord;\nexport const clearUserHistory = CartHistoryService.clearUserHistory;\nexport const getAllHistory = CartHistoryService.getAllHistory;\nexport const getStatistics = CartHistoryService.getStatistics;\n\n// 独立的saveCartHistory函数,避免类方法绑定问题\nexport const saveCartHistory = async (historyItem: Omit<CartHistoryItem, 'id'>): Promise<CartHistoryItem> => {\n try {\n // 生成唯一ID\n const generateId = () => `${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;\n \n const newHistoryItem: CartHistoryItem = {\n ...historyItem,\n id: generateId(),\n submittedAt: new Date()\n };\n\n // 获取现有历史记录\n const existingData = localStorage.getItem(CART_HISTORY_STORAGE_KEY);\n const allHistory: CartHistoryItem[] = existingData ? JSON.parse(existingData) : [];\n\n // 添加新记录\n allHistory.push(newHistoryItem);\n\n // 保存到本地存储\n localStorage.setItem(CART_HISTORY_STORAGE_KEY, JSON.stringify(allHistory));\n\n console.log('✅ 购物车历史记录保存成功:', { \n id: newHistoryItem.id,\n qqNumber: newHistoryItem.qqNumber,\n itemCount: newHistoryItem.items.length\n });\n\n return newHistoryItem;\n } catch (error) {\n console.error('保存购物车历史记录失败:', error);\n throw new Error('保存购物车历史记录失败');\n }\n}; \n","/**\n * ShowMasterpiece 模块 - 购物车服务\n * \n * 提供购物车功能的前端本地存储服务,包括:\n * - 添加商品到购物车\n * - 更新购物车商品数量\n * - 从购物车移除商品\n * - 清空购物车\n * - 批量预订\n * \n * @fileoverview 购物车服务 - 本地存储版本\n */\n\nimport { \n Cart,\n AddToCartRequest,\n UpdateCartItemRequest,\n RemoveFromCartRequest,\n ClearCartRequest,\n BatchBookingRequest,\n BatchBookingResponse\n} from '../types/cart';\nimport { saveCartHistory } from './cartHistoryService';\n\n/**\n * 购物车本地存储键名\n */\nconst CART_STORAGE_KEY = 'showmasterpiece_cart';\n\n/**\n * 购物车服务类\n * \n * 提供购物车功能相关的本地存储操作方法\n */\nexport class CartService {\n private static readonly BOOKING_URL = '/api/showmasterpiece/bookings/batch';\n\n /**\n * 获取购物车数据\n * \n * @param userId 用户ID\n * @returns 购物车数据\n */\n static async getCart(userId: number): Promise<Cart> {\n try {\n const storageKey = `${CART_STORAGE_KEY}_${userId}`;\n \n const cartData = localStorage.getItem(storageKey);\n if (cartData) {\n const parsed = JSON.parse(cartData);\n // 将字符串日期转换为Date对象\n if (parsed.items) {\n parsed.items = parsed.items.map((item: any) => ({\n ...item,\n addedAt: new Date(item.addedAt)\n }));\n }\n return parsed;\n }\n } catch (error) {\n console.error('读取购物车数据失败:', error);\n }\n \n // 返回空的购物车\n return {\n items: [],\n totalQuantity: 0,\n totalPrice: 0\n };\n }\n\n /**\n * 保存购物车数据到本地存储\n * \n * @param userId 用户ID\n * @param cart 购物车数据\n */\n private static saveCart(userId: number, cart: Cart): void {\n try {\n const storageKey = `${CART_STORAGE_KEY}_${userId}`;\n \n localStorage.setItem(storageKey, JSON.stringify(cart));\n } catch (error) {\n console.error('保存购物车数据失败:', error);\n }\n }\n\n /**\n * 计算购物车总数量和总价格\n * \n * @param items 购物车商品项\n * @returns 总数量和总价格\n */\n private static calculateTotals(items: Cart['items']): { totalQuantity: number; totalPrice: number } {\n let totalQuantity = 0;\n let totalPrice = 0;\n \n items.forEach(item => {\n totalQuantity += item.quantity;\n const itemPrice = (item.collection.price || 0) * item.quantity;\n totalPrice += itemPrice;\n });\n \n return { totalQuantity, totalPrice };\n }\n\n /**\n * 添加商品到购物车\n * \n * @param data 添加商品数据\n * @returns 更新后的购物车数据\n */\n static async addToCart(data: AddToCartRequest & { userId: number; collection?: any }): Promise<Cart> {\n const { userId, collectionId, quantity, collection } = data;\n \n // 获取当前购物车\n const cart = await this.getCart(userId);\n \n // 检查商品是否已在购物车中\n const existingItemIndex = cart.items.findIndex(item => item.collectionId === collectionId);\n \n if (existingItemIndex >= 0) {\n // 如果已存在,增加数量\n const existingItem = cart.items[existingItemIndex];\n if (existingItem) {\n existingItem.quantity += quantity;\n }\n } else {\n // 如果不存在,添加新项\n if (collection) {\n // 使用传入的完整画集信息\n cart.items.push({\n collectionId,\n collection,\n quantity,\n addedAt: new Date()\n });\n } else {\n // 如果没有传入画集信息,使用简化的数据结构\n cart.items.push({\n collectionId,\n collection: {\n id: collectionId,\n title: `画集${collectionId}`, // 临时标题,实际应该从画集数据中获取\n number: '未知编号',\n coverImage: '',\n description: '',\n pages: [],\n category: '画集' as any,\n tags: [],\n isPublished: true,\n price: 0\n },\n quantity,\n addedAt: new Date()\n });\n }\n }\n \n // 重新计算总数量和总价格\n const { totalQuantity, totalPrice } = this.calculateTotals(cart.items);\n cart.totalQuantity = totalQuantity;\n cart.totalPrice = totalPrice;\n \n // 保存到本地存储\n this.saveCart(userId, cart);\n \n return cart;\n }\n\n /**\n * 更新购物车商品数量\n * \n * @param data 更新商品数据\n * @returns 更新后的购物车数据\n */\n static async updateCartItem(data: UpdateCartItemRequest & { userId: number }): Promise<Cart> {\n const { userId, collectionId, quantity } = data;\n \n // 获取当前购物车\n const cart = await this.getCart(userId);\n \n // 查找商品项\n const itemIndex = cart.items.findIndex(item => item.collectionId === collectionId);\n \n if (itemIndex >= 0) {\n if (quantity <= 0) {\n // 如果数量为0或负数,移除商品\n cart.items.splice(itemIndex, 1);\n } else {\n // 更新数量\n const item = cart.items[itemIndex];\n if (item) {\n item.quantity = quantity;\n }\n }\n \n // 重新计算总数量和总价格\n const { totalQuantity, totalPrice } = this.calculateTotals(cart.items);\n cart.totalQuantity = totalQuantity;\n cart.totalPrice = totalPrice;\n \n // 保存到本地存储\n this.saveCart(userId, cart);\n }\n \n return cart;\n }\n\n /**\n * 从购物车移除商品\n * \n * @param data 移除商品数据\n * @returns 更新后的购物车数据\n */\n static async removeFromCart(data: RemoveFromCartRequest & { userId: number }): Promise<Cart> {\n const { userId, collectionId } = data;\n \n // 获取当前购物车\n const cart = await this.getCart(userId);\n \n // 移除商品\n cart.items = cart.items.filter(item => item.collectionId !== collectionId);\n \n // 重新计算总数量和总价格\n const { totalQuantity, totalPrice } = this.calculateTotals(cart.items);\n cart.totalQuantity = totalQuantity;\n cart.totalPrice = totalPrice;\n \n // 保存到本地存储\n this.saveCart(userId, cart);\n \n return cart;\n }\n\n /**\n * 清空购物车\n * \n * @param userId 用户ID\n * @returns 清空后的购物车数据\n */\n static async clearCart(userId: number): Promise<Cart> {\n const emptyCart: Cart = {\n items: [],\n totalQuantity: 0,\n totalPrice: 0\n };\n \n // 保存空的购物车到本地存储\n this.saveCart(userId, emptyCart);\n \n return emptyCart;\n }\n\n /**\n * 批量预订购物车中的商品\n * \n * @param data 批量预订数据\n * @param cart 当前购物车数据(用于保存历史记录)\n * @returns 预订结果\n */\n static async batchBooking(data: BatchBookingRequest, cart?: Cart): Promise<BatchBookingResponse> {\n // 将请求数据发送到后端\n const requestData = {\n ...data\n };\n \n console.log('🛒 [CartService] 批量预订:', { data });\n \n const response = await fetch(this.BOOKING_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestData),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '批量预订失败' }));\n throw new Error(error.message || '批量预订失败');\n }\n\n const result = await response.json();\n\n // 如果预订成功且有购物车数据,保存历史记录\n if (result.successCount > 0 && cart) {\n try {\n await saveCartHistory({\n qqNumber: data.qqNumber,\n phoneNumber: data.phoneNumber,\n items: cart.items,\n totalQuantity: cart.totalQuantity,\n totalPrice: cart.totalPrice,\n notes: data.notes,\n pickupMethod: data.pickupMethod,\n status: 'pending',\n bookingIds: result.bookingIds,\n submittedAt: new Date()\n });\n } catch (error) {\n console.error('保存购物车历史记录失败:', error);\n // 不影响预订流程,只记录错误\n }\n }\n\n return result;\n }\n}\n\n/**\n * 购物车服务函数集\n * \n * 提供函数式的API调用接口,作为服务类的补充。\n */\n\n/**\n * 获取购物车数据\n * \n * @param userId 用户ID\n * @returns 购物车数据\n */\nexport const getCart = (userId: number): Promise<Cart> => {\n return CartService.getCart(userId);\n};\n\n/**\n * 添加商品到购物车\n * \n * @param data 添加商品数据\n * @returns 更新后的购物车数据\n */\nexport const addToCart = (data: AddToCartRequest & { userId: number }): Promise<Cart> => {\n return CartService.addToCart(data);\n};\n\n/**\n * 更新购物车商品数量\n * \n * @param data 更新商品数据\n * @returns 更新后的购物车数据\n */\nexport const updateCartItem = (data: UpdateCartItemRequest & { userId: number }): Promise<Cart> => {\n return CartService.updateCartItem(data);\n};\n\n/**\n * 从购物车移除商品\n * \n * @param data 移除商品数据\n * @returns 更新后的购物车数据\n */\nexport const removeFromCart = (data: RemoveFromCartRequest & { userId: number }): Promise<Cart> => {\n return CartService.removeFromCart(data);\n};\n\n/**\n * 清空购物车\n * \n * @param userId 用户ID\n * @returns 清空后的购物车数据\n */\nexport const clearCart = (userId: number): Promise<Cart> => {\n return CartService.clearCart(userId);\n};\n\n/**\n * 批量预订购物车中的商品\n * \n * @param data 批量预订数据\n * @param cart 当前购物车数据(用于保存历史记录)\n * @returns 预订结果\n */\nexport const batchBooking = (data: BatchBookingRequest, cart?: Cart): Promise<BatchBookingResponse> => {\n return CartService.batchBooking(data, cart);\n}; \n","/**\n * ShowMasterpiece 模块 - 购物车功能Hook\n * \n * 提供购物车功能相关的状态管理和业务逻辑,包括:\n * - 购物车状态管理\n * - 购物车操作(添加、更新、移除、清空)\n * - 批量预订处理\n * - 错误处理和加载状态\n * \n * @fileoverview 购物车功能Hook\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { \n Cart, \n CartItem, \n CartState,\n AddToCartRequest,\n UpdateCartItemRequest,\n RemoveFromCartRequest,\n BatchBookingRequest,\n BatchBookingResponse\n} from '../../types/cart';\nimport {\n getCart,\n addToCart,\n updateCartItem,\n removeFromCart,\n clearCart,\n batchBooking\n} from '../../services/cartService';\n\ntype CartEvent = { type: string };\ntype CartEventListener = (event: CartEvent) => void;\n\ninterface CartEventTarget {\n addEventListener: (type: string, listener: CartEventListener) => void;\n removeEventListener: (type: string, listener: CartEventListener) => void;\n dispatchEvent: (event: CartEvent) => boolean | void;\n}\n\nconst createCartEventTarget = (): CartEventTarget => {\n if (typeof EventTarget !== 'undefined') {\n return new EventTarget() as unknown as CartEventTarget;\n }\n\n const listeners = new Map<string, Set<CartEventListener>>();\n\n const addEventListener = (type: string, listener: CartEventListener) => {\n const set = listeners.get(type) ?? new Set<CartEventListener>();\n set.add(listener);\n listeners.set(type, set);\n };\n\n const removeEventListener = (type: string, listener: CartEventListener) => {\n const set = listeners.get(type);\n if (!set) return;\n set.delete(listener);\n if (set.size === 0) listeners.delete(type);\n };\n\n const dispatchEvent = (event: CartEvent) => {\n const set = listeners.get(event.type);\n if (!set) return false;\n set.forEach(listener => listener(event));\n return true;\n };\n\n return { addEventListener, removeEventListener, dispatchEvent };\n};\n\n// 创建一个全局事件系统来通知购物车更新\nexport const CART_UPDATE_EVENT = 'cart-updated';\nexport const cartUpdateEvents = createCartEventTarget();\n\nexport const notifyCartUpdate = () => {\n const event =\n typeof Event !== 'undefined'\n ? (new Event(CART_UPDATE_EVENT) as unknown as CartEvent)\n : { type: CART_UPDATE_EVENT };\n cartUpdateEvents.dispatchEvent(event);\n};\n\n/**\n * 购物车Hook\n * \n * 管理购物车的状态和业务逻辑\n * \n * @param userId 用户ID\n * @returns 购物车状态和操作方法\n */\nexport function useCart(userId: number) {\n const [state, setState] = useState<CartState>({\n cart: {\n items: [],\n totalQuantity: 0,\n totalPrice: 0\n },\n loading: false,\n error: undefined,\n isCartOpen: false\n });\n\n /**\n * 加载购物车数据\n */\n const loadCart = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n const cartData = await getCart(userId);\n setState(prev => ({ \n ...prev, \n cart: cartData,\n loading: false \n }));\n } catch (error) {\n console.error('加载购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '加载购物车失败' \n }));\n }\n }, [userId]);\n\n /**\n * 添加商品到购物车\n * \n * @param request 添加商品请求数据\n */\n const addItemToCart = useCallback(async (request: AddToCartRequest & { userId: number; collection?: any }) => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n const updatedCart = await addToCart(request);\n setState(prev => ({ \n ...prev, \n cart: updatedCart,\n loading: false \n }));\n // 通知其他组件购物车已更新\n notifyCartUpdate();\n } catch (error) {\n console.error('添加到购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '添加到购物车失败' \n }));\n }\n }, [userId]);\n\n /**\n * 更新购物车商品数量\n * \n * @param collectionId 画集ID\n * @param quantity 新数量\n */\n const updateItemQuantity = useCallback(async (collectionId: number, quantity: number) => {\n if (quantity <= 0) {\n await removeItemFromCart(collectionId);\n return;\n }\n\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n const request: UpdateCartItemRequest & { userId: number } = {\n userId,\n collectionId,\n quantity\n };\n\n const updatedCart = await updateCartItem(request);\n setState(prev => ({ \n ...prev, \n cart: updatedCart,\n loading: false \n }));\n // 通知其他组件购物车已更新\n notifyCartUpdate();\n } catch (error) {\n console.error('更新购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '更新购物车失败' \n }));\n }\n }, [userId]);\n\n /**\n * 从购物车移除商品\n * \n * @param collectionId 画集ID\n */\n const removeItemFromCart = useCallback(async (collectionId: number) => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n const request: RemoveFromCartRequest & { userId: number } = {\n userId,\n collectionId\n };\n\n const updatedCart = await removeFromCart(request);\n setState(prev => ({ \n ...prev, \n cart: updatedCart,\n loading: false \n }));\n // 通知其他组件购物车已更新\n notifyCartUpdate();\n } catch (error) {\n console.error('从购物车移除失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '从购物车移除失败' \n }));\n }\n }, [userId]);\n\n /**\n * 清空购物车\n */\n const clearCartItems = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n await clearCart(userId);\n setState(prev => ({ \n ...prev, \n cart: { items: [], totalQuantity: 0, totalPrice: 0 },\n loading: false \n }));\n // 通知其他组件购物车已更新\n notifyCartUpdate();\n } catch (error) {\n console.error('清空购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '清空购物车失败' \n }));\n }\n }, [userId]);\n\n /**\n * 批量预订购物车中的商品\n * \n * @param qqNumber QQ号\n * @param phoneNumber 手机号\n * @param notes 备注\n * @param pickupMethod 领取方式\n */\n const checkoutCart = useCallback(async (qqNumber: string, phoneNumber: string, notes?: string, pickupMethod: string = ''): Promise<BatchBookingResponse> => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n const request: BatchBookingRequest = {\n qqNumber,\n phoneNumber,\n items: state.cart.items.map(item => ({\n collectionId: item.collectionId,\n quantity: item.quantity\n })),\n notes,\n pickupMethod\n };\n\n const result = await batchBooking(request, state.cart);\n \n // 预订成功后清空购物车\n if (result.successCount > 0) {\n await clearCartItems();\n }\n \n setState(prev => ({ ...prev, loading: false }));\n return result;\n } catch (error) {\n console.error('批量预订失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '批量预订失败' \n }));\n throw error;\n }\n }, [state.cart.items, clearCartItems]);\n\n /**\n * 打开购物车弹窗\n */\n const openCart = useCallback(() => {\n setState(prev => ({ ...prev, isCartOpen: true }));\n }, []);\n\n /**\n * 关闭购物车弹窗\n */\n const closeCart = useCallback(() => {\n setState(prev => ({ ...prev, isCartOpen: false }));\n }, []);\n\n /**\n * 清除错误信息\n */\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: undefined }));\n }, []);\n\n // 组件挂载时加载购物车数据\n useEffect(() => {\n if (userId) {\n loadCart();\n }\n }, [userId, loadCart]);\n\n return {\n // 状态\n cart: state.cart,\n loading: state.loading,\n error: state.error,\n isCartOpen: state.isCartOpen,\n \n // 操作方法\n loadCart,\n addItemToCart,\n updateItemQuantity,\n removeItemFromCart,\n clearCartItems,\n checkoutCart,\n openCart,\n closeCart,\n clearError,\n };\n} \n","/**\n * ShowMasterpiece 模块 - 预订服务\n * \n * 提供画集预订功能的前端API调用服务,包括:\n * - 创建预订\n * - 查询预订列表\n * - 更新预订状态\n * - 获取画集简略信息\n * \n * @fileoverview 预订服务\n */\n\nimport { \n Booking, \n CreateBookingRequest, \n UpdateBookingRequest, \n BookingListParams, \n BookingListResponse,\n CollectionSummary \n} from '../types/booking';\n\n/**\n * 预订服务类\n * \n * 提供预订功能相关的API调用方法,使用面向对象的方式封装HTTP请求。\n */\nexport class BookingService {\n private static readonly BASE_URL = '/api/showmasterpiece/bookings';\n\n /**\n * 创建新预订\n * \n * @param data 预订数据\n * @returns 创建的预订信息\n */\n static async createBooking(data: CreateBookingRequest): Promise<Booking> {\n const response = await fetch(this.BASE_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '创建预订失败' }));\n throw new Error(error.message || '创建预订失败');\n }\n\n return response.json();\n }\n\n /**\n * 获取预订列表\n * \n * @param params 查询参数\n * @returns 预订列表和分页信息\n */\n static async getBookings(params: BookingListParams = {}): Promise<BookingListResponse> {\n const searchParams = new URLSearchParams();\n \n if (params.collectionId) {\n searchParams.append('collectionId', params.collectionId.toString());\n }\n if (params.qqNumber) {\n searchParams.append('qqNumber', params.qqNumber);\n }\n if (params.phoneNumber) {\n searchParams.append('phoneNumber', params.phoneNumber);\n }\n if (params.status) {\n searchParams.append('status', params.status);\n }\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n if (params.limit) {\n searchParams.append('limit', params.limit.toString());\n }\n\n const url = `${this.BASE_URL}?${searchParams.toString()}`;\n const response = await fetch(url);\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '获取预订列表失败' }));\n throw new Error(error.message || '获取预订列表失败');\n }\n\n return response.json();\n }\n\n /**\n * 获取单个预订详情\n * \n * @param id 预订ID\n * @returns 预订详情\n */\n static async getBooking(id: number): Promise<Booking> {\n const response = await fetch(`${this.BASE_URL}/${id}`);\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '获取预订详情失败' }));\n throw new Error(error.message || '获取预订详情失败');\n }\n\n return response.json();\n }\n\n /**\n * 更新预订状态\n * \n * @param id 预订ID\n * @param data 更新数据\n * @returns 更新后的预订信息\n */\n static async updateBooking(id: number, data: UpdateBookingRequest): Promise<Booking> {\n const response = await fetch(`${this.BASE_URL}/${id}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '更新预订失败' }));\n throw new Error(error.message || '更新预订失败');\n }\n\n return response.json();\n }\n\n /**\n * 删除预订\n * \n * @param id 预订ID\n */\n static async deleteBooking(id: number): Promise<void> {\n const response = await fetch(`${this.BASE_URL}/${id}`, {\n method: 'DELETE',\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '删除预订失败' }));\n throw new Error(error.message || '删除预订失败');\n }\n }\n\n /**\n * 获取可预订的画集列表\n * \n * @returns 画集简略信息列表\n */\n static async getBookableCollections(): Promise<CollectionSummary[]> {\n const url = `${this.BASE_URL}/collections`;\n \n console.log('📡 [BookingService] 获取可预订画集:', { url });\n \n const response = await fetch(url);\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: '获取画集列表失败' }));\n throw new Error(error.message || '获取画集列表失败');\n }\n\n const data = await response.json();\n \n // 处理新的API响应格式\n if (data.success && Array.isArray(data.data)) {\n console.log(`✅ [BookingService] 获取到 ${data.data.length} 个可预订画集`);\n return data.data;\n }\n \n // 向下兼容旧格式\n if (Array.isArray(data)) {\n console.log(`✅ [BookingService] 获取到 ${data.length} 个可预订画集 (兼容格式)`);\n return data;\n }\n \n throw new Error('API响应格式错误');\n }\n}\n\n/**\n * 预订服务函数集\n * \n * 提供函数式的API调用接口,作为服务类的补充。\n */\n\n/**\n * 创建新预订\n * \n * @param data 预订数据\n * @returns 创建的预订信息\n */\nexport const createBooking = (data: CreateBookingRequest): Promise<Booking> => {\n return BookingService.createBooking(data);\n};\n\n/**\n * 获取预订列表\n * \n * @param params 查询参数\n * @returns 预订列表和分页信息\n */\nexport const getBookings = (params?: BookingListParams): Promise<BookingListResponse> => {\n return BookingService.getBookings(params);\n};\n\n/**\n * 获取单个预订详情\n * \n * @param id 预订ID\n * @returns 预订详情\n */\nexport const getBooking = (id: number): Promise<Booking> => {\n return BookingService.getBooking(id);\n};\n\n/**\n * 更新预订状态\n * \n * @param id 预订ID\n * @param data 更新数据\n * @returns 更新后的预订信息\n */\nexport const updateBooking = (id: number, data: UpdateBookingRequest): Promise<Booking> => {\n return BookingService.updateBooking(id, data);\n};\n\n/**\n * 删除预订\n * \n * @param id 预订ID\n */\nexport const deleteBooking = (id: number): Promise<void> => {\n return BookingService.deleteBooking(id);\n};\n\n/**\n * 获取可预订的画集列表\n * \n * @returns 画集简略信息列表\n */\nexport const getBookableCollections = (): Promise<CollectionSummary[]> => {\n return BookingService.getBookableCollections();\n};\n","/**\n * ShowMasterpiece 模块 - 预订功能Hook\n * \n * 提供预订功能相关的状态管理和业务逻辑,包括:\n * - 预订表单状态管理\n * - 画集列表加载\n * - 预订提交处理\n * - 错误处理和加载状态\n * \n * @fileoverview 预订功能Hook\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport { \n BookingFormData, \n CollectionSummary, \n BookingPageState,\n CreateBookingRequest \n} from '../../types/booking';\nimport { getBookableCollections, createBooking } from '../../services/bookingService';\n\n/**\n * 预订页面Hook属性\n */\ninterface UseBookingProps {}\n\n/**\n * 预订页面Hook\n * \n * 管理预订页面的状态和业务逻辑\n * \n * @param props Hook属性\n * @returns 预订页面状态和操作方法\n */\nexport function useBooking(_props: UseBookingProps = {}) {\n // 状态管理\n const [state, setState] = useState<BookingPageState>({\n collections: [],\n loading: false,\n error: undefined,\n submitting: false,\n submitted: false,\n });\n\n /**\n * 加载画集列表\n */\n const loadCollections = useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n console.log('🔄 [useBooking] 加载画集列表...');\n const collections = await getBookableCollections();\n setState(prev => ({ \n ...prev, \n collections, \n loading: false \n }));\n } catch (error) {\n console.error('加载画集列表失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '加载画集列表失败' \n }));\n }\n }, []);\n\n /**\n * 提交预订\n * \n * @param formData 预订表单数据\n */\n const submitBooking = useCallback(async (formData: BookingFormData) => {\n setState(prev => ({ ...prev, submitting: true, error: undefined }));\n \n try {\n const bookingData: CreateBookingRequest = {\n collectionId: formData.collectionId,\n qqNumber: formData.qqNumber,\n phoneNumber: formData.phoneNumber.trim(),\n quantity: formData.quantity,\n notes: formData.notes || undefined,\n };\n\n await createBooking(bookingData);\n \n setState(prev => ({ \n ...prev, \n submitting: false, \n submitted: true \n }));\n } catch (error) {\n console.error('提交预订失败:', error);\n setState(prev => ({ \n ...prev, \n submitting: false, \n error: error instanceof Error ? error.message : '提交预订失败' \n }));\n }\n }, []);\n\n /**\n * 重置提交状态\n */\n const resetSubmission = useCallback(() => {\n setState(prev => ({ \n ...prev, \n submitted: false, \n error: undefined \n }));\n }, []);\n\n /**\n * 清除错误信息\n */\n const clearError = useCallback(() => {\n setState(prev => ({ ...prev, error: undefined }));\n }, []);\n\n // 组件挂载时加载画集列表\n useEffect(() => {\n loadCollections();\n }, [loadCollections]);\n\n return {\n // 状态\n collections: state.collections,\n loading: state.loading,\n error: state.error,\n submitting: state.submitting,\n submitted: state.submitted,\n \n // 操作方法\n loadCollections,\n submitBooking,\n resetSubmission,\n clearError,\n };\n}\n\n/**\n * 预订表单Hook\n * \n * 管理预订表单的状态和验证\n * \n * @returns 表单状态和操作方法\n */\nexport function useBookingForm() {\n const [formData, setFormData] = useState<BookingFormData>({\n collectionId: 0,\n qqNumber: '',\n phoneNumber: '',\n quantity: 1,\n notes: '',\n });\n\n const [errors, setErrors] = useState<Partial<Record<keyof BookingFormData, string>>>({});\n\n /**\n * 更新表单字段\n * \n * @param field 字段名\n * @param value 字段值\n */\n const updateField = useCallback((field: keyof BookingFormData, value: any) => {\n setFormData(prev => ({ ...prev, [field]: value }));\n \n // 清除对应字段的错误\n if (errors[field]) {\n setErrors(prev => ({ ...prev, [field]: undefined }));\n }\n }, [errors]);\n\n /**\n * 验证表单\n * \n * @returns 是否验证通过\n */\n const validateForm = useCallback((): boolean => {\n const newErrors: Partial<Record<keyof BookingFormData, string>> = {};\n\n // 验证画集选择\n if (!formData.collectionId) {\n newErrors.collectionId = '请选择要预订的画集';\n }\n\n // 验证QQ号\n if (!formData.qqNumber.trim()) {\n newErrors.qqNumber = '请输入QQ号';\n } else if (!/^\\d{5,11}$/.test(formData.qqNumber.trim())) {\n newErrors.qqNumber = 'QQ号格式不正确';\n }\n\n // 验证手机号(如果提供)\n if (formData.phoneNumber.trim()) {\n const phoneRegex = /^1[3-9]\\d{9}$/;\n if (!phoneRegex.test(formData.phoneNumber.trim())) {\n newErrors.phoneNumber = '手机号格式不正确';\n }\n }\n\n // 验证数量\n if (!formData.quantity || formData.quantity < 1) {\n newErrors.quantity = '预订数量必须大于0';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n }, [formData]);\n\n /**\n * 重置表单\n */\n const resetForm = useCallback(() => {\n setFormData({\n collectionId: 0,\n qqNumber: '',\n phoneNumber: '',\n quantity: 1,\n notes: '',\n });\n setErrors({});\n }, []);\n\n return {\n formData,\n errors,\n updateField,\n validateForm,\n resetForm,\n };\n} \n","/**\n * ShowMasterpiece 模块 - 预订管理服务\n * \n * 提供预订管理相关的类型定义和服务函数\n * \n * @fileoverview 预订管理服务\n */\n\nimport { BookingStatus } from '../types/booking';\n\n/**\n * 预订管理数据接口\n */\nexport interface BookingAdminData {\n /** 预订ID */\n id: number;\n /** 用户ID */\n userId: number;\n /** 用户名 */\n userName: string;\n /** 用户手机号 */\n userPhone: string;\n /** QQ号 */\n qqNumber?: string;\n /** 手机号 */\n phoneNumber?: string;\n /** 画集ID */\n collectionId: number;\n /** 画集标题 */\n collectionTitle: string;\n /** 画集编号 */\n collectionNumber: string;\n /** 画集信息 */\n collection: {\n /** 画集ID */\n id: number;\n /** 画集标题 */\n title: string;\n /** 画集编号 */\n number: string;\n /** 封面图片 */\n coverImage: string;\n /** 价格 */\n price: number;\n };\n /** 预订状态 */\n status: BookingStatus;\n /** 预订时间 */\n bookingTime: string;\n /** 更新时间 */\n updatedAt: string;\n /** 创建时间 */\n createdAt: string;\n /** 管理员备注 */\n adminNotes?: string;\n /** 用户备注 */\n notes?: string;\n /** 领取方式 */\n pickupMethod?: string;\n /** 数量 */\n quantity: number;\n /** 价格 */\n price: number;\n /** 总价格 */\n totalPrice: number;\n /** 确认时间 */\n confirmedAt?: string;\n /** 完成时间 */\n completedAt?: string;\n /** 取消时间 */\n cancelledAt?: string;\n}\n\n/**\n * 预订管理统计信息接口\n */\nexport interface BookingAdminStats {\n /** 总预订数 */\n totalBookings: number;\n /** 待处理预订数 */\n pendingBookings: number;\n /** 已确认预订数 */\n confirmedBookings: number;\n /** 已完成预订数 */\n completedBookings: number;\n /** 已取消预订数 */\n cancelledBookings: number;\n /** 总金额 */\n totalAmount: number;\n /** 总收入 */\n totalRevenue: number;\n /** 总数量 */\n totalQuantity: number;\n /** 今日新增预订数 */\n todayBookings: number;\n /** 本周新增预订数 */\n weekBookings: number;\n}\n\n/**\n * 预订管理接口响应类型\n */\nexport interface BookingAdminResponse {\n bookings: BookingAdminData[];\n stats: BookingAdminStats;\n}\n\n/**\n * 预订管理查询参数\n */\nexport interface BookingAdminQueryParams {\n /** QQ号搜索 */\n qqNumber?: string;\n /** 手机号搜索 */\n phoneNumber?: string;\n /** 状态过滤 */\n status?: BookingStatus | 'all';\n}\n\n/**\n * 预订管理服务类\n */\nexport class BookingAdminService {\n /**\n * 获取所有预订数据\n */\n static async getAllBookings(params?: BookingAdminQueryParams): Promise<BookingAdminData[]> {\n try {\n // 添加时间戳参数防止缓存\n const timestamp = Date.now();\n const randomId = Math.random().toString(36).substring(7);\n \n // 构建查询参数\n const searchParams = new URLSearchParams();\n searchParams.append('t', timestamp.toString());\n searchParams.append('forceRefresh', randomId);\n \n if (params?.qqNumber) {\n searchParams.append('qqNumber', params.qqNumber);\n }\n if (params?.phoneNumber) {\n searchParams.append('phoneNumber', params.phoneNumber);\n }\n if (params?.status && params.status !== 'all') {\n searchParams.append('status', params.status);\n }\n \n \n const response = await fetch(`/api/showmasterpiece/bookings/admin?${searchParams.toString()}`, {\n method: 'GET',\n cache: 'no-store',\n headers: {\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n 'Pragma': 'no-cache',\n 'Expires': '0',\n 'X-Requested-With': 'XMLHttpRequest'\n }\n });\n if (!response.ok) {\n throw new Error('获取预订数据失败');\n }\n const data = await response.json();\n return data.bookings || [];\n } catch (error) {\n console.error('获取预订数据失败:', error);\n throw error;\n }\n }\n\n /**\n * 强制刷新获取所有预订数据(绕过所有缓存)\n */\n static async forceRefreshAllBookings(params?: BookingAdminQueryParams): Promise<BookingAdminData[]> {\n try {\n console.log('🔄 使用强制刷新API获取预订数据...');\n const timestamp = Date.now();\n const randomId = Math.random().toString(36).substring(7);\n \n // 构建查询参数\n const searchParams = new URLSearchParams();\n searchParams.append('t', timestamp.toString());\n searchParams.append('forceRefresh', randomId);\n \n if (params?.qqNumber) {\n searchParams.append('qqNumber', params.qqNumber);\n }\n if (params?.phoneNumber) {\n searchParams.append('phoneNumber', params.phoneNumber);\n }\n if (params?.status && params.status !== 'all') {\n searchParams.append('status', params.status);\n }\n \n \n const response = await fetch(`/api/showmasterpiece/bookings/admin/refresh?${searchParams.toString()}`, {\n method: 'GET',\n cache: 'no-store',\n headers: {\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n 'Pragma': 'no-cache',\n 'Expires': '0',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Force-Refresh': 'true'\n }\n });\n if (!response.ok) {\n throw new Error('强制刷新获取预订数据失败');\n }\n const data = await response.json();\n console.log('🔄 强制刷新API响应:', { \n bookingsCount: data.bookings?.length || 0,\n timestamp: data._timestamp,\n refreshType: data._refreshType\n });\n return data.bookings || [];\n } catch (error) {\n console.error('强制刷新获取预订数据失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取预订统计信息\n */\n static async getBookingStats(params?: BookingAdminQueryParams): Promise<BookingAdminStats> {\n try {\n // 添加时间戳参数防止缓存\n const timestamp = Date.now();\n const randomId = Math.random().toString(36).substring(7);\n \n // 构建查询参数\n const searchParams = new URLSearchParams();\n searchParams.append('t', timestamp.toString());\n searchParams.append('forceRefresh', randomId);\n \n if (params?.qqNumber) {\n searchParams.append('qqNumber', params.qqNumber);\n }\n if (params?.phoneNumber) {\n searchParams.append('phoneNumber', params.phoneNumber);\n }\n if (params?.status && params.status !== 'all') {\n searchParams.append('status', params.status);\n }\n \n \n const response = await fetch(`/api/showmasterpiece/bookings/admin?${searchParams.toString()}`, {\n method: 'GET',\n cache: 'no-store',\n headers: {\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n 'Pragma': 'no-cache',\n 'Expires': '0',\n 'X-Requested-With': 'XMLHttpRequest'\n }\n });\n if (!response.ok) {\n throw new Error('获取统计信息失败');\n }\n const data = await response.json();\n return data.stats || {\n totalBookings: 0,\n pendingBookings: 0,\n confirmedBookings: 0,\n completedBookings: 0,\n cancelledBookings: 0,\n totalQuantity: 0,\n totalRevenue: 0,\n totalAmount: 0,\n todayBookings: 0,\n weekBookings: 0,\n };\n } catch (error) {\n console.error('获取统计信息失败:', error);\n throw error;\n }\n }\n\n /**\n * 强制刷新获取预订统计信息(绕过所有缓存)\n */\n static async forceRefreshBookingStats(params?: BookingAdminQueryParams): Promise<BookingAdminStats> {\n try {\n console.log('🔄 使用强制刷新API获取统计信息...');\n const timestamp = Date.now();\n const randomId = Math.random().toString(36).substring(7);\n \n // 构建查询参数\n const searchParams = new URLSearchParams();\n searchParams.append('t', timestamp.toString());\n searchParams.append('forceRefresh', randomId);\n \n if (params?.qqNumber) {\n searchParams.append('qqNumber', params.qqNumber);\n }\n if (params?.phoneNumber) {\n searchParams.append('phoneNumber', params.phoneNumber);\n }\n if (params?.status && params.status !== 'all') {\n searchParams.append('status', params.status);\n }\n \n \n const response = await fetch(`/api/showmasterpiece/bookings/admin/refresh?${searchParams.toString()}`, {\n method: 'GET',\n cache: 'no-store',\n headers: {\n 'Cache-Control': 'no-cache, no-store, must-revalidate',\n 'Pragma': 'no-cache',\n 'Expires': '0',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Force-Refresh': 'true'\n }\n });\n if (!response.ok) {\n throw new Error('强制刷新获取统计信息失败');\n }\n const data = await response.json();\n console.log('🔄 强制刷新统计信息响应:', { \n stats: data.stats,\n timestamp: data._timestamp,\n refreshType: data._refreshType\n });\n return data.stats || {\n totalBookings: 0,\n pendingBookings: 0,\n confirmedBookings: 0,\n completedBookings: 0,\n cancelledBookings: 0,\n totalQuantity: 0,\n totalRevenue: 0,\n totalAmount: 0,\n todayBookings: 0,\n weekBookings: 0,\n };\n } catch (error) {\n console.error('强制刷新获取统计信息失败:', error);\n throw error;\n }\n }\n\n /**\n * 更新预订状态\n */\n static async updateBookingStatus(\n bookingId: number, \n status: BookingStatus, \n adminNotes?: string\n ): Promise<void> {\n try {\n const response = await fetch(`/api/showmasterpiece/bookings/admin/${bookingId}/status`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ status, adminNotes }),\n });\n \n if (!response.ok) {\n throw new Error('更新预订状态失败');\n }\n } catch (error) {\n console.error('更新预订状态失败:', error);\n throw error;\n }\n }\n\n /**\n * 删除预订\n */\n static async deleteBooking(bookingId: number): Promise<void> {\n try {\n const response = await fetch(`/api/showmasterpiece/bookings/admin/${bookingId}`, {\n method: 'DELETE',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n \n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.message || '删除预订失败');\n }\n \n console.log('✅ 预订删除成功:', { bookingId });\n } catch (error) {\n console.error('删除预订失败:', error);\n throw error;\n }\n }\n\n /**\n * 导出预订数据\n */\n static async exportBookings(format: 'csv' | 'excel' = 'csv'): Promise<Blob> {\n try {\n const response = await fetch(`/api/showmasterpiece/bookings/admin/export?format=${format}`);\n if (!response.ok) {\n throw new Error('导出预订数据失败');\n }\n return await response.blob();\n } catch (error) {\n console.error('导出预订数据失败:', error);\n throw error;\n }\n }\n}\n\n// 导出单独的函数,方便直接导入使用\nexport const getAllBookings = BookingAdminService.getAllBookings;\nexport const getBookingStats = BookingAdminService.getBookingStats;\nexport const forceRefreshAllBookings = BookingAdminService.forceRefreshAllBookings;\nexport const forceRefreshBookingStats = BookingAdminService.forceRefreshBookingStats;\nexport const updateBookingStatus = BookingAdminService.updateBookingStatus;\nexport const deleteBooking = BookingAdminService.deleteBooking;\nexport const exportBookings = BookingAdminService.exportBookings; \n","/**\n * ShowMasterpiece 模块 - 预订管理Hook\n * \n * 提供预订管理功能的状态管理和数据获取逻辑,包括:\n * - 获取所有预订数据\n * - 预订统计信息\n * - 状态更新\n * - 加载和错误状态管理\n * - 用户搜索功能\n * \n * @fileoverview 预订管理Hook\n */\n\nimport { useState, useEffect, useCallback } from 'react';\nimport {\n BookingAdminData,\n BookingAdminStats,\n BookingAdminResponse,\n BookingAdminQueryParams,\n getAllBookings,\n getBookingStats,\n updateBookingStatus as updateBookingStatusService,\n deleteBooking as deleteBookingService,\n exportBookings as exportBookingsService\n} from '../../services/bookingAdminService';\nimport { BookingStatus } from '../../types/booking';\n\n/**\n * 预订管理Hook返回值类型\n */\ninterface UseBookingAdminReturn {\n /** 预订数据列表 */\n bookings: BookingAdminData[];\n /** 统计信息 */\n stats: BookingAdminStats;\n /** 加载状态 */\n loading: boolean;\n /** 错误信息 */\n error?: string;\n /** 搜索参数 */\n searchParams: BookingAdminQueryParams;\n /** 刷新数据 */\n refreshData: () => Promise<void>;\n /** 搜索预订数据 */\n searchBookings: (params: BookingAdminQueryParams) => Promise<void>;\n /** 清除搜索条件 */\n clearSearch: () => void;\n /** 更新预订状态 */\n updateBookingStatus: (id: number, status: BookingStatus, adminNotes?: string) => Promise<void>;\n /** 删除预订 */\n deleteBooking: (id: number) => Promise<void>;\n /** 导出预订数据 */\n exportBookings: (format?: 'csv' | 'excel') => Promise<void>;\n /** 清除错误 */\n clearError: () => void;\n}\n\n/**\n * 预订管理Hook\n * \n * 提供预订管理功能的状态管理和数据获取逻辑\n * \n * @returns 预订管理Hook返回值\n */\nexport const useBookingAdmin = (): UseBookingAdminReturn => {\n const [bookings, setBookings] = useState<BookingAdminData[]>([]);\n const [stats, setStats] = useState<BookingAdminStats>({\n totalBookings: 0,\n pendingBookings: 0,\n confirmedBookings: 0,\n completedBookings: 0,\n cancelledBookings: 0,\n totalQuantity: 0,\n totalRevenue: 0,\n totalAmount: 0,\n todayBookings: 0,\n weekBookings: 0,\n });\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | undefined>(undefined);\n const [searchParams, setSearchParams] = useState<BookingAdminQueryParams>({});\n\n /**\n * 获取预订数据\n */\n const fetchBookings = useCallback(async (params?: BookingAdminQueryParams) => {\n try {\n setLoading(true);\n setError(undefined);\n \n const queryParams = params || searchParams;\n \n console.log('🔄 开始获取预订数据...', { \n searchParams: queryParams \n });\n \n const [bookingsData, statsData] = await Promise.all([\n getAllBookings(queryParams),\n getBookingStats(queryParams)\n ]);\n \n console.log('✅ 获取到预订数据:', { \n bookingsCount: bookingsData.length, \n stats: statsData,\n searchParams: queryParams,\n timestamp: new Date().toISOString()\n });\n \n setBookings(bookingsData);\n setStats(statsData);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : '获取预订数据失败';\n setError(errorMessage);\n console.error('❌ 获取预订数据失败:', err);\n } finally {\n setLoading(false);\n }\n }, [searchParams]);\n\n /**\n * 搜索预订数据\n */\n const searchBookings = useCallback(async (params: BookingAdminQueryParams) => {\n setSearchParams(params);\n await fetchBookings(params);\n }, [fetchBookings]);\n\n /**\n * 清除搜索条件\n */\n const clearSearch = useCallback(async () => {\n const emptyParams: BookingAdminQueryParams = {};\n setSearchParams(emptyParams);\n await fetchBookings(emptyParams);\n }, [fetchBookings]);\n\n /**\n * 更新预订状态\n */\n const updateBookingStatus = useCallback(async (\n id: number, \n status: BookingStatus, \n adminNotes?: string\n ) => {\n try {\n setError(undefined);\n console.log('开始更新预订状态:', { id, status, adminNotes });\n \n await updateBookingStatusService(id, status, adminNotes);\n console.log('预订状态更新成功');\n \n // 重新获取所有数据以确保数据一致性\n await fetchBookings();\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : '更新预订状态失败';\n setError(errorMessage);\n console.error('更新预订状态失败:', err);\n throw err; // 重新抛出错误,让调用者知道更新失败\n }\n }, [fetchBookings]);\n\n /**\n * 删除预订\n */\n const deleteBooking = useCallback(async (id: number) => {\n try {\n setError(undefined);\n console.log('开始删除预订:', { id });\n \n await deleteBookingService(id);\n console.log('预订删除成功');\n \n // 重新获取所有数据以确保数据一致性\n await fetchBookings();\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : '删除预订失败';\n setError(errorMessage);\n console.error('删除预订失败:', err);\n throw err; // 重新抛出错误,让调用者知道删除失败\n }\n }, [fetchBookings]);\n\n /**\n * 导出预订数据\n */\n const exportBookings = useCallback(async (format: 'csv' | 'excel' = 'csv') => {\n try {\n setError(undefined);\n console.log('开始导出预订数据:', { format });\n \n const blob = await exportBookingsService(format);\n \n // 创建下载链接\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = `预订信息_${new Date().toISOString().split('T')[0]}.${format}`;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n \n console.log('预订数据导出成功');\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : '导出预订数据失败';\n setError(errorMessage);\n console.error('导出预订数据失败:', err);\n throw err; // 重新抛出错误,让调用者知道导出失败\n }\n }, []);\n\n /**\n * 刷新数据\n */\n const refreshData = useCallback(async () => {\n await fetchBookings();\n }, [fetchBookings]);\n\n /**\n * 清除错误\n */\n const clearError = useCallback(() => {\n setError(undefined);\n }, []);\n\n /**\n * 组件挂载时获取数据\n */\n useEffect(() => {\n // 总是加载数据,无论是否有活动参数\n fetchBookings();\n }, []); // 只在组件挂载时执行一次\n\n return {\n bookings,\n stats,\n loading,\n error,\n searchParams,\n refreshData,\n searchBookings,\n clearSearch,\n updateBookingStatus,\n deleteBooking,\n exportBookings,\n clearError,\n };\n}; \n","/**\n * ShowMasterpiece 模块 - 限时弹窗Hook\n * \n * 管理限时弹窗的显示逻辑\n * \n * @fileoverview 限时弹窗Hook\n */\n\n'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { PopupConfig } from '../../types/popup';\n\n/**\n * 弹窗显示状态\n */\ninterface PopupDisplayState {\n /** 需要显示的弹窗配置 */\n configs: PopupConfig[];\n /** 是否正在加载 */\n loading: boolean;\n /** 错误信息 */\n error: string | null;\n /** 是否有弹窗显示 */\n hasPopup: boolean;\n}\n\n/**\n * 限时弹窗Hook\n */\nexport function useDeadlinePopup(\n businessModule: string = 'showmasterpiece',\n businessScene: string = 'cart_checkout'\n) {\n const [state, setState] = useState<PopupDisplayState>({\n configs: [],\n loading: false,\n error: null,\n hasPopup: false,\n });\n\n const [dismissedPopups, setDismissedPopups] = useState<Set<string>>(new Set());\n\n /**\n * 检查是否需要显示弹窗\n */\n const checkPopups = useCallback(async (currentTime?: Date) => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n\n try {\n const response = await fetch('/api/showmasterpiece/popup-configs/check', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n businessModule,\n businessScene,\n currentTime: (currentTime || new Date()).toISOString(),\n }),\n });\n\n if (!response.ok) {\n throw new Error('检查弹窗配置失败');\n }\n\n const result = await response.json();\n const configs: PopupConfig[] = result.configs || [];\n \n // 过滤掉已经被用户关闭的弹窗\n const activeConfigs = configs.filter(config => !dismissedPopups.has(config.id));\n\n setState(prev => ({\n ...prev,\n configs: activeConfigs,\n loading: false,\n hasPopup: activeConfigs.length > 0,\n }));\n\n console.log(`🔔 [useDeadlinePopup] 检查到 ${activeConfigs.length} 个需要显示的弹窗`);\n \n return activeConfigs;\n } catch (error) {\n console.error('❌ [useDeadlinePopup] 检查弹窗失败:', error);\n setState(prev => ({\n ...prev,\n loading: false,\n error: error instanceof Error ? error.message : '检查弹窗失败',\n configs: [],\n hasPopup: false,\n }));\n return [];\n }\n }, [businessModule, businessScene, dismissedPopups]);\n\n /**\n * 关闭弹窗\n */\n const closePopup = useCallback((configId: string) => {\n setDismissedPopups(prev => new Set([...prev, configId]));\n setState(prev => {\n const remainingConfigs = prev.configs.filter(config => config.id !== configId);\n return {\n ...prev,\n configs: remainingConfigs,\n hasPopup: remainingConfigs.length > 0,\n };\n });\n \n console.log(`✅ [useDeadlinePopup] 弹窗已关闭:`, configId);\n }, []);\n\n /**\n * 确认弹窗\n */\n const confirmPopup = useCallback((configId: string) => {\n console.log(`✅ [useDeadlinePopup] 弹窗已确认:`, configId);\n closePopup(configId);\n }, [closePopup]);\n\n /**\n * 取消弹窗\n */\n const cancelPopup = useCallback((configId: string) => {\n console.log(`❌ [useDeadlinePopup] 弹窗已取消:`, configId);\n closePopup(configId);\n }, [closePopup]);\n\n /**\n * 临时关闭弹窗(用于阻断类型弹窗,不添加到dismissedPopups)\n */\n const temporaryClosePopup = useCallback((configId: string) => {\n setState(prev => {\n const remainingConfigs = prev.configs.filter(config => config.id !== configId);\n return {\n ...prev,\n configs: remainingConfigs,\n hasPopup: remainingConfigs.length > 0,\n };\n });\n \n console.log(`⏸️ [useDeadlinePopup] 弹窗临时关闭:`, configId);\n }, []);\n\n /**\n * 重置已关闭的弹窗记录\n */\n const resetDismissedPopups = useCallback(() => {\n setDismissedPopups(new Set());\n console.log('🔄 [useDeadlinePopup] 已重置弹窗关闭记录');\n }, []);\n\n /**\n * 手动触发弹窗检查(用于购物车提交时)\n * 强制重新检查,不受dismissedPopups影响\n */\n const triggerCheck = useCallback(async (currentTime?: Date) => {\n setState(prev => ({ ...prev, loading: true, error: null }));\n\n try {\n const response = await fetch('/api/showmasterpiece/popup-configs/check', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n businessModule,\n businessScene,\n currentTime: (currentTime || new Date()).toISOString(),\n }),\n });\n\n if (!response.ok) {\n throw new Error('检查弹窗配置失败');\n }\n\n const result = await response.json();\n const configs: PopupConfig[] = result.configs || [];\n \n // 对于手动触发检查,我们需要区分阻断弹窗和提醒弹窗\n // 阻断弹窗:不受dismissedPopups影响,总是检查\n // 提醒弹窗:受dismissedPopups影响,避免重复显示\n const activeConfigs = configs.filter(config => {\n if (config.blockProcess) {\n // 阻断弹窗:总是显示,不受dismissedPopups影响\n return true;\n } else {\n // 提醒弹窗:检查是否已被用户关闭\n return !dismissedPopups.has(config.id);\n }\n });\n\n setState(prev => ({\n ...prev,\n configs: activeConfigs,\n loading: false,\n hasPopup: activeConfigs.length > 0,\n }));\n\n console.log(`🔔 [useDeadlinePopup] 手动检查到 ${activeConfigs.length} 个需要显示的弹窗(阻断弹窗不受dismissedPopups限制)`);\n \n return activeConfigs;\n } catch (error) {\n console.error('❌ [useDeadlinePopup] 手动检查弹窗失败:', error);\n setState(prev => ({\n ...prev,\n loading: false,\n error: error instanceof Error ? error.message : '检查弹窗失败',\n configs: [],\n hasPopup: false,\n }));\n return [];\n }\n }, [businessModule, businessScene, dismissedPopups]);\n\n return {\n ...state,\n checkPopups,\n closePopup,\n confirmPopup,\n cancelPopup,\n temporaryClosePopup,\n resetDismissedPopups,\n triggerCheck,\n };\n}\n\nexport default useDeadlinePopup;\n","/**\n * ShowMasterpiece 模块 - 购物车上下文Hook\n * \n * 提供购物车上下文状态的访问Hook,用于在组件中获取购物车相关的状态和操作。\n * 这个Hook必须在CartProvider包装的组件内使用。\n * \n * 主要功能:\n * - 获取购物车数据\n * - 获取加载状态\n * - 获取错误信息\n * - 提供刷新购物车的方法\n * \n * @fileoverview 购物车上下文Hook\n */\n\n'use client';\n\nimport { useContext } from 'react';\nimport type { CartContextState } from '../../types/context';\n\n/**\n * 使用购物车上下文Hook\n * \n * 这个Hook用于在组件中访问购物车上下文状态。\n * 必须在CartProvider包装的组件内使用,否则会抛出错误。\n * \n * @returns 购物车上下文状态,包含购物车数据、加载状态、错误信息和刷新方法\n * @throws {Error} 当在CartProvider外部使用时抛出错误\n * \n * @example\n * ```tsx\n * function CartButton() {\n * const { cart, loading, error, refreshCart } = useCartContext();\n * \n * if (loading) return <div>加载中...</div>;\n * if (error) return <div>错误: {error}</div>;\n * \n * return (\n * <button onClick={refreshCart}>\n * 购物车 ({cart.totalQuantity})\n * </button>\n * );\n * }\n * ```\n */\nexport const useCartContext = (): CartContextState => {\n // 动态导入 CartContext 以避免循环依赖\n let CartContext: any;\n try {\n const contextModule = require('../contexts/CartContext');\n CartContext = contextModule.CartContext;\n } catch (error) {\n throw new Error('Failed to load CartContext. Make sure CartProvider is properly set up.');\n }\n \n const context = useContext(CartContext) as unknown as CartContextState | undefined;\n if (context === undefined) {\n throw new Error('useCartContext must be used within a CartProvider');\n }\n return context;\n};\n","/**\n * ShowMasterpiece 模块 - Hooks 导出\n * \n * 这个文件导出了ShowMasterpiece模块中所有的自定义React Hooks。\n * 这些Hooks都采用了模块化设计,具有以下特点:\n * - 完全自包含,封装业务逻辑\n * - 支持TypeScript类型检查\n * - 统一的错误处理和加载状态\n * - 遵循React Hooks最佳实践\n * \n * Hook分类:\n * - 数据管理Hook:用于数据获取和状态管理\n * - 业务逻辑Hook:用于特定业务功能封装\n * - 工具类Hook:用于通用功能支持\n */\n\n/** \n * 画集数据管理Hook\n * \n * 提供完整的画集数据管理和浏览功能,是ShowMasterpiece模块的核心Hook。\n * 包含画集数据加载、浏览状态管理、翻页操作等功能。\n * \n * 主要功能:\n * - 画集数据的加载和缓存\n * - 画集浏览状态管理(当前选中的画集、当前页面等)\n * - 翻页操作(上一页、下一页、跳转)\n * - 搜索功能\n * - 错误处理和加载状态管理\n * \n * 性能优化:\n * - 内存缓存机制,减少重复API调用\n * - 使用useCallback优化函数引用稳定性\n * - 懒加载和按需加载\n * \n * @example\n * ```tsx\n * const {\n * collections,\n * selectedCollection,\n * currentPage,\n * loading,\n * selectCollection,\n * nextPage,\n * prevPage\n * } = useMasterpieces();\n * ```\n */\nexport { useMasterpieces } from './useMasterpieces';\n\n/** \n * 画集配置管理Hook\n * \n * 提供画集和作品配置管理的完整功能,用于后台管理界面。\n * 封装了所有的CRUD操作和状态管理逻辑。\n * \n * 主要功能:\n * - 系统配置的读取和更新\n * - 画集的增删改查操作\n * - 作品的增删改查操作\n * - 拖拽排序功能\n * - 表单验证和错误处理\n * \n * @example\n * ```tsx\n * const {\n * config,\n * collections,\n * loading,\n * createCollection,\n * updateArtwork,\n * deleteCollection\n * } = useMasterpiecesConfig();\n * ```\n */\nexport { useMasterpiecesConfig } from './useMasterpiecesConfig';\n\n/** \n * 购物车功能Hook\n * \n * 提供购物车功能相关的状态管理和业务逻辑。\n * 支持购物车操作、批量预订等功能。\n * \n * 主要功能:\n * - 购物车状态管理\n * - 购物车操作(添加、更新、移除、清空)\n * - 批量预订处理\n * - 错误处理和加载状态\n * - 购物车更新事件通知\n * \n * 导出内容:\n * - useCart Hook\n * - cartUpdateEvents 事件对象\n * - CART_UPDATE_EVENT 事件常量\n * - notifyCartUpdate 通知函数\n * \n * @example\n * ```tsx\n * const {\n * cart,\n * loading,\n * addToCart,\n * updateCartItem,\n * batchBooking\n * } = useCart(userId);\n * ```\n */\nexport { \n useCart,\n cartUpdateEvents,\n CART_UPDATE_EVENT,\n notifyCartUpdate \n} from './useCart';\n\n/** \n * 预订功能Hook\n * \n * 提供预订功能相关的状态管理和业务逻辑。\n * 包含预订表单管理和预订提交处理。\n * \n * 主要功能:\n * - 预订表单状态管理\n * - 画集列表加载\n * - 预订提交处理\n * - 错误处理和加载状态\n * \n * 导出内容:\n * - useBooking Hook - 基础预订功能\n * - useBookingForm Hook - 预订表单管理\n * \n * @example\n * ```tsx\n * const {\n * collections,\n * loading,\n * refreshCollections\n * } = useBooking();\n * \n * const {\n * formData,\n * updateFormData,\n * submitBooking\n * } = useBookingForm();\n * ```\n */\nexport { useBooking, useBookingForm } from './useBooking';\n\n/** \n * 预订管理Hook\n * \n * 提供预订管理功能的状态管理和数据获取逻辑。\n * 主要用于管理员查看和管理所有用户的预订信息。\n * \n * 主要功能:\n * - 获取所有预订数据\n * - 预订统计信息\n * - 状态更新\n * - 加载和错误状态管理\n * - 用户搜索功能\n * \n * @example\n * ```tsx\n * const {\n * bookings,\n * stats,\n * loading,\n * updateStatus,\n * refreshData\n * } = useBookingAdmin();\n * ```\n */\nexport { useBookingAdmin } from './useBookingAdmin';\n\n/** \n * 限时弹窗Hook\n * \n * 管理限时弹窗的显示逻辑,用于显示重要通知和截止日期提醒。\n * 支持弹窗配置管理、显示控制和用户交互处理。\n * \n * 主要功能:\n * - 弹窗配置检查和加载\n * - 弹窗显示状态管理\n * - 用户交互处理(确认、取消、关闭)\n * - 弹窗显示条件判断\n * - 临时关闭和重置功能\n * \n * @example\n * ```tsx\n * const {\n * configs,\n * hasPopup,\n * loading,\n * closePopup,\n * confirmPopup,\n * cancelPopup\n * } = useDeadlinePopup('showmasterpiece', 'homepage_visit');\n * ```\n */\nexport { useDeadlinePopup } from './useDeadlinePopup';\n\n/** \n * 购物车上下文Hook\n * \n * 用于在组件中访问购物车上下文状态的Hook。\n * 必须在CartProvider包装的组件内使用。\n * \n * 主要功能:\n * - 获取购物车数据\n * - 获取加载状态\n * - 获取错误信息\n * - 提供刷新购物车的方法\n * \n * @example\n * ```tsx\n * const { cart, loading, error, refreshCart } = useCartContext();\n * ```\n */\nexport { useCartContext } from './useCartContext';\n\n/** \n * 默认导出\n * \n * 为了兼容性,同时提供默认导出,指向最常用的Hook\n */\nexport { useDeadlinePopup as default } from './useDeadlinePopup';\n","/**\n * ShowMasterpiece 模块 - 购物车上下文\n * \n * 提供购物车状态的全局管理,包括:\n * - 购物车数据状态\n * - 购物车数据刷新\n * - 购物车更新通知\n * \n * @fileoverview 购物车上下文\n */\n\n'use client';\n\nimport * as React from 'react';\nimport type { ReactNode } from 'react';\nimport { Cart, AddToCartRequest, UpdateCartItemRequest, RemoveFromCartRequest, BatchBookingRequest, BatchBookingResponse } from '../../types/cart';\nimport { getCart, addToCart, updateCartItem, removeFromCart, batchBooking, clearCart } from '../../services/cartService';\nimport { cartUpdateEvents, CART_UPDATE_EVENT } from '../hooks';\nimport type { CartContextState } from '../../types/context';\n\n/**\n * 购物车上下文类型\n */\nexport const CartContext = React.createContext<CartContextState | undefined>(undefined);\n\n/**\n * 购物车上下文提供者属性\n */\ninterface CartProviderProps {\n children: ReactNode;\n userId: number;\n}\n\n/**\n * 购物车上下文提供者组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const CartProvider: React.FC<CartProviderProps> = ({ children, userId }) => {\n const [state, setState] = React.useState<CartContextState>({\n cart: {\n items: [],\n totalQuantity: 0,\n totalPrice: 0\n },\n loading: false,\n error: undefined,\n refreshCart: async () => {},\n addToCart: async () => {},\n updateCartItem: async () => {},\n removeFromCart: async () => {},\n batchBooking: async () => ({ successCount: 0, failCount: 0, bookingIds: [], failures: [] }),\n clearCart: async () => {}\n });\n\n /**\n * 刷新购物车数据\n */\n const refreshCart = React.useCallback(async () => {\n if (!userId) return;\n\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n const cartData = await getCart(userId);\n setState(prev => ({ \n ...prev, \n cart: cartData,\n loading: false \n }));\n } catch (error) {\n console.error('刷新购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '刷新购物车失败' \n }));\n }\n }, [userId]);\n\n /**\n * 添加商品到购物车\n */\n const addToCartWithEvent = React.useCallback(async (request: AddToCartRequest & { collection?: any }) => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n console.log('🛒 [CartContext] 添加到购物车:', { request, userId });\n \n await addToCart({ ...request, userId });\n \n // 刷新购物车数据\n await refreshCart();\n \n setState(prev => ({ ...prev, loading: false }));\n } catch (error) {\n console.error('添加到购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '添加到购物车失败' \n }));\n }\n }, [refreshCart, userId]);\n\n /**\n * 更新购物车商品数量\n */\n const updateCartItemWithEvent = React.useCallback(async (request: UpdateCartItemRequest) => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n console.log('🔢 [CartContext] 更新购物车数量:', { request, userId });\n \n await updateCartItem({ ...request, userId });\n \n // 刷新购物车数据\n await refreshCart();\n \n setState(prev => ({ ...prev, loading: false }));\n } catch (error) {\n console.error('更新购物车数量失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '更新购物车数量失败' \n }));\n }\n }, [refreshCart, userId]);\n\n /**\n * 从购物车移除商品\n */\n const removeFromCartWithEvent = React.useCallback(async (request: RemoveFromCartRequest) => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n console.log('🗑️ [CartContext] 移除商品:', { request, userId });\n \n await removeFromCart({ ...request, userId });\n \n // 刷新购物车数据\n await refreshCart();\n \n setState(prev => ({ ...prev, loading: false }));\n } catch (error) {\n console.error('移除商品失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '移除商品失败' \n }));\n }\n }, [refreshCart, userId]);\n\n /**\n * 批量预订购物车商品\n */\n const batchBookingWithEvent = React.useCallback(async (request: BatchBookingRequest): Promise<BatchBookingResponse> => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n console.log('📋 [CartContext] 批量预订:', { request, userId });\n \n const result = await batchBooking(request, state.cart);\n \n // 预订成功后刷新购物车(可能需要清空)\n await refreshCart();\n \n setState(prev => ({ ...prev, loading: false }));\n \n return result;\n } catch (error) {\n console.error('批量预订失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '批量预订失败' \n }));\n throw error;\n }\n }, [refreshCart, userId, state.cart]);\n\n /**\n * 清空购物车\n */\n const clearCartWithEvent = React.useCallback(async () => {\n setState(prev => ({ ...prev, loading: true, error: undefined }));\n \n try {\n console.log('🗑️ [CartContext] 清空购物车:', { userId });\n \n await clearCart(userId);\n \n // 刷新购物车数据\n await refreshCart();\n \n setState(prev => ({ ...prev, loading: false }));\n } catch (error) {\n console.error('清空购物车失败:', error);\n setState(prev => ({ \n ...prev, \n loading: false, \n error: error instanceof Error ? error.message : '清空购物车失败' \n }));\n }\n }, [refreshCart, userId]);\n\n // 初始化时加载购物车数据\n React.useEffect(() => {\n refreshCart();\n }, [refreshCart]);\n\n // 监听购物车更新事件\n React.useEffect(() => {\n const handleCartUpdate = () => {\n refreshCart();\n };\n\n cartUpdateEvents.addEventListener(CART_UPDATE_EVENT, handleCartUpdate);\n\n return () => {\n cartUpdateEvents.removeEventListener(CART_UPDATE_EVENT, handleCartUpdate);\n };\n }, [refreshCart]);\n\n const contextValue: CartContextState = {\n ...state,\n refreshCart,\n addToCart: addToCartWithEvent,\n updateCartItem: updateCartItemWithEvent,\n removeFromCart: removeFromCartWithEvent,\n batchBooking: batchBookingWithEvent,\n clearCart: clearCartWithEvent\n };\n\n return <CartContext.Provider value={contextValue}>{children}</CartContext.Provider>;\n};\n"]}
@@ -0,0 +1,10 @@
1
+ import { init_hooks, init_CartContext } from './chunk-OX6VMQDU.mjs';
2
+
3
+ // src/showmasterpiece/logic/index.ts
4
+ init_hooks();
5
+
6
+ // src/showmasterpiece/logic/contexts/index.ts
7
+ init_CartContext();
8
+ init_hooks();
9
+ //# sourceMappingURL=chunk-C76U5FF4.mjs.map
10
+ //# sourceMappingURL=chunk-C76U5FF4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/showmasterpiece/logic/index.ts","../src/showmasterpiece/logic/contexts/index.ts"],"names":[],"mappings":";;;AAAA,UAAA,EAAA;;;ACAA,gBAAA,EAAA;AACA,UAAA,EAAA","file":"chunk-C76U5FF4.mjs","sourcesContent":["export * from './hooks';\nexport * from './contexts';\nexport * from './shared';\n","export { CartProvider } from './CartContext';\nexport { useCartContext } from '../hooks';\n"]}
@@ -1,14 +1,5 @@
1
1
  'use strict';
2
2
 
3
- var chunkSKCMZYSQ_js = require('./chunk-SKCMZYSQ.js');
4
-
5
- // src/showmasterpiece/logic/index.ts
6
- chunkSKCMZYSQ_js.init_hooks();
7
-
8
- // src/showmasterpiece/logic/contexts/index.ts
9
- chunkSKCMZYSQ_js.init_CartContext();
10
- chunkSKCMZYSQ_js.init_hooks();
11
-
12
3
  // src/showmasterpiece/logic/shared/storage.ts
13
4
  var hasWxStorage = () => typeof wx !== "undefined" && typeof wx.getStorageSync === "function";
14
5
  var hasLocalStorage = () => typeof localStorage !== "undefined" && typeof localStorage.getItem === "function";
@@ -115,5 +106,5 @@ exports.clearCart = clearCart;
115
106
  exports.getCart = getCart;
116
107
  exports.removeCartItem = removeCartItem;
117
108
  exports.updateCartItem = updateCartItem;
118
- //# sourceMappingURL=chunk-LJGJPAQ4.js.map
119
- //# sourceMappingURL=chunk-LJGJPAQ4.js.map
109
+ //# sourceMappingURL=chunk-COOI6MT3.js.map
110
+ //# sourceMappingURL=chunk-COOI6MT3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/showmasterpiece/logic/shared/storage.ts","../src/showmasterpiece/logic/shared/cart.ts"],"names":[],"mappings":"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","file":"chunk-COOI6MT3.js","sourcesContent":["declare const wx: any;\n\nconst hasWxStorage = (): boolean =>\n typeof wx !== 'undefined' && typeof (wx as any).getStorageSync === 'function';\n\nconst hasLocalStorage = (): boolean =>\n typeof localStorage !== 'undefined' && typeof localStorage.getItem === 'function';\n\nexport const getStorageSync = <T>(key: string): T | null => {\n try {\n if (hasWxStorage()) {\n return (wx as any).getStorageSync(key) as T;\n }\n if (hasLocalStorage()) {\n const value = localStorage.getItem(key);\n return value ? (JSON.parse(value) as T) : null;\n }\n } catch {\n return null;\n }\n return null;\n};\n\nexport const setStorageSync = (key: string, value: unknown): void => {\n try {\n if (hasWxStorage()) {\n (wx as any).setStorageSync(key, value);\n return;\n }\n if (hasLocalStorage()) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n } catch {\n // ignore\n }\n};\n","import type { Cart } from '../../types/cart';\nimport type { ArtCollection } from '../../types';\nimport { getStorageSync, setStorageSync } from './storage';\n\nconst CART_STORAGE_KEY = 'showmasterpiece_cart';\n\nconst normalizeCart = (cart?: Cart): Cart => {\n const safeCart: Cart = cart ?? { items: [], totalPrice: 0, totalQuantity: 0 };\n const totals = safeCart.items.reduce(\n (acc, item) => {\n acc.totalQuantity += item.quantity;\n acc.totalPrice += (item.collection.price || 0) * item.quantity;\n return acc;\n },\n { totalQuantity: 0, totalPrice: 0 }\n );\n\n return {\n ...safeCart,\n totalQuantity: totals.totalQuantity,\n totalPrice: totals.totalPrice\n };\n};\n\nexport const getCart = (): Cart => {\n const stored = getStorageSync<Cart>(CART_STORAGE_KEY);\n if (stored && stored.items) {\n return normalizeCart(stored);\n }\n return normalizeCart();\n};\n\nconst saveCart = (cart: Cart) => {\n setStorageSync(CART_STORAGE_KEY, cart);\n};\n\nexport const addToCart = (collection: ArtCollection, quantity = 1): Cart => {\n const cart = getCart();\n const existing = cart.items.find(item => item.collectionId === collection.id);\n\n if (existing) {\n existing.quantity += quantity;\n } else {\n cart.items.push({\n collectionId: collection.id,\n collection,\n quantity,\n addedAt: new Date()\n });\n }\n\n const next = normalizeCart(cart);\n saveCart(next);\n return next;\n};\n\nexport const updateCartItem = (collectionId: number, quantity: number): Cart => {\n const cart = getCart();\n const target = cart.items.find(item => item.collectionId === collectionId);\n if (!target) return cart;\n\n if (quantity <= 0) {\n cart.items = cart.items.filter(item => item.collectionId !== collectionId);\n } else {\n target.quantity = quantity;\n }\n\n const next = normalizeCart(cart);\n saveCart(next);\n return next;\n};\n\nexport const removeCartItem = (collectionId: number): Cart => {\n const cart = getCart();\n cart.items = cart.items.filter(item => item.collectionId !== collectionId);\n const next = normalizeCart(cart);\n saveCart(next);\n return next;\n};\n\nexport const clearCart = (): Cart => {\n const empty = normalizeCart({ items: [], totalPrice: 0, totalQuantity: 0 });\n saveCart(empty);\n return empty;\n};\n"]}
@@ -2774,5 +2774,5 @@ function createBookingCommandService(db2) {
2774
2774
  }
2775
2775
 
2776
2776
  export { BookingCommandError, BookingCommandService, BookingQueryService, CategoriesDbService, MasterpiecesConfigDbService, PopupConfigService, ShowmasterConfigService, TagsDbService, artworksDbService, categoriesDbService, collectionsDbService, comicUniverseArtworks, comicUniverseArtworksRelations, comicUniverseBookings, comicUniverseBookingsRelations, comicUniverseCategories, comicUniverseCategoriesRelations, comicUniverseCollectionTags, comicUniverseCollectionTagsRelations, comicUniverseCollections, comicUniverseCollectionsRelations, comicUniverseConfigs, comicUniverseConfigsRelations, comicUniverseTags, comicUniverseTagsRelations, createBookingCommandService, createBookingQueryService, createCategoriesDbService, createMasterpiecesConfigDbService, createPopupConfigService, createShowmasterConfigService, createTagsDbService, initializeShowmasterpieceDb, masterpiecesConfigDbService, popupConfigs, popupConfigsRelations, showmasterConfigCategories, showmasterConfigHistory, showmasterConfigItems, showmasterConfigPermissions, tagsDbService };
2777
- //# sourceMappingURL=chunk-SNBILYSH.mjs.map
2778
- //# sourceMappingURL=chunk-SNBILYSH.mjs.map
2777
+ //# sourceMappingURL=chunk-CSDIPQQO.mjs.map
2778
+ //# sourceMappingURL=chunk-CSDIPQQO.mjs.map