sa2kit 1.6.60 → 1.6.62

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 (297) hide show
  1. package/dist/UniversalFileService-C3WQAFOV.js +15 -0
  2. package/dist/{UniversalFileService-J6ET6KZK.js.map → UniversalFileService-C3WQAFOV.js.map} +1 -1
  3. package/dist/UniversalFileService-O3IEROBN.mjs +6 -0
  4. package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map} +1 -1
  5. package/dist/ai/llm/index.d.mts +70 -0
  6. package/dist/ai/llm/index.d.ts +70 -0
  7. package/dist/ai/llm/index.js +54 -0
  8. package/dist/ai/llm/index.js.map +1 -0
  9. package/dist/ai/llm/index.mjs +5 -0
  10. package/dist/ai/llm/index.mjs.map +1 -0
  11. package/dist/ai/llm/ui/electron/index.d.mts +5 -0
  12. package/dist/ai/llm/ui/electron/index.d.ts +5 -0
  13. package/dist/ai/llm/ui/electron/index.js +21 -0
  14. package/dist/ai/llm/ui/electron/index.js.map +1 -0
  15. package/dist/ai/llm/ui/electron/index.mjs +8 -0
  16. package/dist/ai/llm/ui/electron/index.mjs.map +1 -0
  17. package/dist/ai/llm/ui/miniapp/index.d.mts +9 -0
  18. package/dist/ai/llm/ui/miniapp/index.d.ts +9 -0
  19. package/dist/ai/llm/ui/miniapp/index.js +107 -0
  20. package/dist/ai/llm/ui/miniapp/index.js.map +1 -0
  21. package/dist/ai/llm/ui/miniapp/index.mjs +101 -0
  22. package/dist/ai/llm/ui/miniapp/index.mjs.map +1 -0
  23. package/dist/ai/llm/ui/rn/index.d.mts +9 -0
  24. package/dist/ai/llm/ui/rn/index.d.ts +9 -0
  25. package/dist/ai/llm/ui/rn/index.js +249 -0
  26. package/dist/ai/llm/ui/rn/index.js.map +1 -0
  27. package/dist/ai/llm/ui/rn/index.mjs +243 -0
  28. package/dist/ai/llm/ui/rn/index.mjs.map +1 -0
  29. package/dist/ai/llm/ui/web/index.d.mts +15 -0
  30. package/dist/ai/llm/ui/web/index.d.ts +15 -0
  31. package/dist/ai/llm/ui/web/index.js +21 -0
  32. package/dist/ai/llm/ui/web/index.js.map +1 -0
  33. package/dist/ai/llm/ui/web/index.mjs +8 -0
  34. package/dist/ai/llm/ui/web/index.mjs.map +1 -0
  35. package/dist/ar/index.d.mts +7 -0
  36. package/dist/ar/index.d.ts +7 -0
  37. package/dist/ar/index.js +17 -0
  38. package/dist/ar/index.js.map +1 -0
  39. package/dist/ar/index.mjs +4 -0
  40. package/dist/ar/index.mjs.map +1 -0
  41. package/dist/auth/index.js +22 -22
  42. package/dist/auth/index.mjs +2 -2
  43. package/dist/auth/legacy/db/index.d.mts +5 -0
  44. package/dist/auth/legacy/db/index.d.ts +5 -0
  45. package/dist/auth/legacy/db/index.js +34 -0
  46. package/dist/auth/legacy/db/index.js.map +1 -0
  47. package/dist/auth/legacy/db/index.mjs +5 -0
  48. package/dist/auth/legacy/db/index.mjs.map +1 -0
  49. package/dist/auth/legacy/index.d.mts +51 -0
  50. package/dist/auth/legacy/index.d.ts +51 -0
  51. package/dist/auth/legacy/index.js +146 -0
  52. package/dist/auth/legacy/index.js.map +1 -0
  53. package/dist/auth/legacy/index.mjs +13 -0
  54. package/dist/auth/legacy/index.mjs.map +1 -0
  55. package/dist/auth/legacy/logic/index.d.mts +9 -0
  56. package/dist/auth/legacy/logic/index.d.ts +9 -0
  57. package/dist/auth/legacy/logic/index.js +18 -0
  58. package/dist/auth/legacy/logic/index.js.map +1 -0
  59. package/dist/auth/legacy/logic/index.mjs +5 -0
  60. package/dist/auth/legacy/logic/index.mjs.map +1 -0
  61. package/dist/auth/legacy/routes/index.d.mts +50 -0
  62. package/dist/auth/legacy/routes/index.d.ts +50 -0
  63. package/dist/auth/legacy/routes/index.js +34 -0
  64. package/dist/auth/legacy/routes/index.js.map +1 -0
  65. package/dist/auth/legacy/routes/index.mjs +5 -0
  66. package/dist/auth/legacy/routes/index.mjs.map +1 -0
  67. package/dist/auth/legacy/schema/index.d.mts +401 -0
  68. package/dist/auth/legacy/schema/index.d.ts +401 -0
  69. package/dist/auth/legacy/schema/index.js +29 -0
  70. package/dist/auth/legacy/schema/index.js.map +1 -0
  71. package/dist/auth/legacy/schema/index.mjs +4 -0
  72. package/dist/auth/legacy/schema/index.mjs.map +1 -0
  73. package/dist/auth/legacy/server/index.d.mts +15 -0
  74. package/dist/auth/legacy/server/index.d.ts +15 -0
  75. package/dist/auth/legacy/server/index.js +65 -0
  76. package/dist/auth/legacy/server/index.js.map +1 -0
  77. package/dist/auth/legacy/server/index.mjs +8 -0
  78. package/dist/auth/legacy/server/index.mjs.map +1 -0
  79. package/dist/auth/legacy/services/index.d.mts +40 -0
  80. package/dist/auth/legacy/services/index.d.ts +40 -0
  81. package/dist/auth/legacy/services/index.js +14 -0
  82. package/dist/auth/legacy/services/index.js.map +1 -0
  83. package/dist/auth/legacy/services/index.mjs +5 -0
  84. package/dist/auth/legacy/services/index.mjs.map +1 -0
  85. package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
  86. package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
  87. package/dist/auth/legacy/ui/miniapp/index.js +23 -0
  88. package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
  89. package/dist/auth/legacy/ui/miniapp/index.mjs +6 -0
  90. package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
  91. package/dist/auth/legacy/ui/web/index.d.mts +22 -0
  92. package/dist/auth/legacy/ui/web/index.d.ts +22 -0
  93. package/dist/auth/legacy/ui/web/index.js +31 -0
  94. package/dist/auth/legacy/ui/web/index.js.map +1 -0
  95. package/dist/auth/legacy/ui/web/index.mjs +6 -0
  96. package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
  97. package/dist/calendar/index.d.mts +390 -237
  98. package/dist/calendar/index.d.ts +390 -237
  99. package/dist/calendar/index.js +3825 -3785
  100. package/dist/calendar/index.js.map +1 -1
  101. package/dist/calendar/index.mjs +3730 -3696
  102. package/dist/calendar/index.mjs.map +1 -1
  103. package/dist/calendar/routes/index.js +30 -327
  104. package/dist/calendar/routes/index.js.map +1 -1
  105. package/dist/calendar/routes/index.mjs +1 -323
  106. package/dist/calendar/routes/index.mjs.map +1 -1
  107. package/dist/calendar/server.d.mts +6 -0
  108. package/dist/calendar/server.d.ts +6 -0
  109. package/dist/calendar/server.js +41 -13
  110. package/dist/calendar/server.js.map +1 -1
  111. package/dist/calendar/server.mjs +2 -2
  112. package/dist/calendar/server.mjs.map +1 -1
  113. package/dist/chunk-24F7KUED.js +263 -0
  114. package/dist/chunk-24F7KUED.js.map +1 -0
  115. package/dist/{chunk-YMS6BPXS.js → chunk-27IUMDDK.js} +3 -3
  116. package/dist/{chunk-YMS6BPXS.js.map → chunk-27IUMDDK.js.map} +1 -1
  117. package/dist/chunk-37M6NZIF.js +279 -0
  118. package/dist/chunk-37M6NZIF.js.map +1 -0
  119. package/dist/chunk-3JMUNOUT.js +144 -0
  120. package/dist/chunk-3JMUNOUT.js.map +1 -0
  121. package/dist/chunk-3PFCOTJP.mjs +256 -0
  122. package/dist/chunk-3PFCOTJP.mjs.map +1 -0
  123. package/dist/{chunk-NZZZUMMX.mjs → chunk-57MVE5LL.mjs} +3 -3
  124. package/dist/{chunk-NZZZUMMX.mjs.map → chunk-57MVE5LL.mjs.map} +1 -1
  125. package/dist/{chunk-622Y6LTH.mjs → chunk-5BLZEVWK.mjs} +196 -468
  126. package/dist/chunk-5BLZEVWK.mjs.map +1 -0
  127. package/dist/{chunk-YN4MJFIG.js → chunk-5LCGOCKG.js} +5 -5
  128. package/dist/{chunk-YN4MJFIG.js.map → chunk-5LCGOCKG.js.map} +1 -1
  129. package/dist/chunk-6XUQ2B4K.js +219 -0
  130. package/dist/chunk-6XUQ2B4K.js.map +1 -0
  131. package/dist/{chunk-NCOXT7SK.js → chunk-77UEPWVQ.js} +4 -4
  132. package/dist/{chunk-NCOXT7SK.js.map → chunk-77UEPWVQ.js.map} +1 -1
  133. package/dist/chunk-CFM56MGO.mjs +35 -0
  134. package/dist/chunk-CFM56MGO.mjs.map +1 -0
  135. package/dist/chunk-CPSFYP34.mjs +140 -0
  136. package/dist/chunk-CPSFYP34.mjs.map +1 -0
  137. package/dist/chunk-D22QBOCM.mjs +336 -0
  138. package/dist/chunk-D22QBOCM.mjs.map +1 -0
  139. package/dist/chunk-DA4QV64P.mjs +35 -0
  140. package/dist/chunk-DA4QV64P.mjs.map +1 -0
  141. package/dist/chunk-EKDLZND6.js +275 -0
  142. package/dist/chunk-EKDLZND6.js.map +1 -0
  143. package/dist/chunk-EKQPFZXQ.js +12 -0
  144. package/dist/chunk-EKQPFZXQ.js.map +1 -0
  145. package/dist/chunk-ERAAB5VG.js +324 -0
  146. package/dist/chunk-ERAAB5VG.js.map +1 -0
  147. package/dist/chunk-ESLY72VI.mjs +175 -0
  148. package/dist/chunk-ESLY72VI.mjs.map +1 -0
  149. package/dist/chunk-FGQGWW73.js +38 -0
  150. package/dist/chunk-FGQGWW73.js.map +1 -0
  151. package/dist/chunk-FXQOXLDE.js +120 -0
  152. package/dist/chunk-FXQOXLDE.js.map +1 -0
  153. package/dist/chunk-FZELCJR7.mjs +19 -0
  154. package/dist/chunk-FZELCJR7.mjs.map +1 -0
  155. package/dist/{chunk-HHVDOIPV.js → chunk-H3P2PGZL.js} +3 -3
  156. package/dist/{chunk-HHVDOIPV.js.map → chunk-H3P2PGZL.js.map} +1 -1
  157. package/dist/chunk-HBQMN5QM.mjs +10 -0
  158. package/dist/chunk-HBQMN5QM.mjs.map +1 -0
  159. package/dist/chunk-ITRIXMXF.mjs +862 -0
  160. package/dist/chunk-ITRIXMXF.mjs.map +1 -0
  161. package/dist/chunk-IUWSCUDC.js +4 -0
  162. package/dist/chunk-IUWSCUDC.js.map +1 -0
  163. package/dist/chunk-JCKCKRC2.js +50 -0
  164. package/dist/chunk-JCKCKRC2.js.map +1 -0
  165. package/dist/chunk-L7GQNY54.mjs +286 -0
  166. package/dist/chunk-L7GQNY54.mjs.map +1 -0
  167. package/dist/{chunk-ZRWED7Q6.js → chunk-LDVJ7URJ.js} +235 -520
  168. package/dist/chunk-LDVJ7URJ.js.map +1 -0
  169. package/dist/{chunk-CYTXGBP2.js → chunk-MLP74E3O.js} +573 -1607
  170. package/dist/chunk-MLP74E3O.js.map +1 -0
  171. package/dist/chunk-NAX4TUT7.js +182 -0
  172. package/dist/chunk-NAX4TUT7.js.map +1 -0
  173. package/dist/chunk-NW4EN4YI.mjs +213 -0
  174. package/dist/chunk-NW4EN4YI.mjs.map +1 -0
  175. package/dist/chunk-P3QMT3AY.mjs +44 -0
  176. package/dist/chunk-P3QMT3AY.mjs.map +1 -0
  177. package/dist/chunk-PJ4KYAQZ.mjs +631 -0
  178. package/dist/chunk-PJ4KYAQZ.mjs.map +1 -0
  179. package/dist/chunk-PLSEAREM.js +345 -0
  180. package/dist/chunk-PLSEAREM.js.map +1 -0
  181. package/dist/{chunk-EGJPS7OL.mjs → chunk-QZU4UJZG.mjs} +3 -3
  182. package/dist/{chunk-EGJPS7OL.mjs.map → chunk-QZU4UJZG.mjs.map} +1 -1
  183. package/dist/chunk-RJVR33ME.mjs +3 -0
  184. package/dist/chunk-RJVR33ME.mjs.map +1 -0
  185. package/dist/chunk-SYBHDB2D.js +650 -0
  186. package/dist/chunk-SYBHDB2D.js.map +1 -0
  187. package/dist/chunk-TVKVM7JT.js +21 -0
  188. package/dist/chunk-TVKVM7JT.js.map +1 -0
  189. package/dist/{chunk-PONZPO3U.mjs → chunk-UTB72ZJ7.mjs} +414 -1448
  190. package/dist/chunk-UTB72ZJ7.mjs.map +1 -0
  191. package/dist/chunk-V7EVKD5G.mjs +116 -0
  192. package/dist/chunk-V7EVKD5G.mjs.map +1 -0
  193. package/dist/chunk-VGPR3KLR.js +872 -0
  194. package/dist/chunk-VGPR3KLR.js.map +1 -0
  195. package/dist/chunk-VS7WATQD.js +255 -0
  196. package/dist/chunk-VS7WATQD.js.map +1 -0
  197. package/dist/chunk-VSP7XJT5.mjs +272 -0
  198. package/dist/chunk-VSP7XJT5.mjs.map +1 -0
  199. package/dist/{chunk-CSDIPQQO.mjs → chunk-VTKAIOP5.mjs} +5 -5
  200. package/dist/{chunk-CSDIPQQO.mjs.map → chunk-VTKAIOP5.mjs.map} +1 -1
  201. package/dist/chunk-VULJUXTF.mjs +267 -0
  202. package/dist/chunk-VULJUXTF.mjs.map +1 -0
  203. package/dist/chunk-XAHM6B3V.js +44 -0
  204. package/dist/chunk-XAHM6B3V.js.map +1 -0
  205. package/dist/chunk-YSF5YISM.mjs +248 -0
  206. package/dist/chunk-YSF5YISM.mjs.map +1 -0
  207. package/dist/{chunk-OFYBMMWT.mjs → chunk-YYJEVAJI.mjs} +3 -3
  208. package/dist/{chunk-OFYBMMWT.mjs.map → chunk-YYJEVAJI.mjs.map} +1 -1
  209. package/dist/components/index.d.mts +1 -0
  210. package/dist/components/index.d.ts +1 -0
  211. package/dist/components/index.js +182 -181
  212. package/dist/components/index.mjs +4 -3
  213. package/dist/index-DNKZ7-R_.d.mts +184 -0
  214. package/dist/index-DNKZ7-R_.d.ts +184 -0
  215. package/dist/index.d.mts +4 -1
  216. package/dist/index.d.ts +4 -1
  217. package/dist/index.js +285 -229
  218. package/dist/index.js.map +1 -1
  219. package/dist/index.mjs +15 -10
  220. package/dist/index.mjs.map +1 -1
  221. package/dist/mikuFusionGame/index.js +3 -3
  222. package/dist/mikuFusionGame/index.mjs +2 -2
  223. package/dist/mmd/index.d.mts +67 -9
  224. package/dist/mmd/index.d.ts +67 -9
  225. package/dist/mmd/index.js +969 -625
  226. package/dist/mmd/index.js.map +1 -1
  227. package/dist/mmd/index.mjs +969 -628
  228. package/dist/mmd/index.mjs.map +1 -1
  229. package/dist/portfolio/index.js +10 -9
  230. package/dist/portfolio/index.mjs +5 -4
  231. package/dist/qqbot/index.d.mts +2 -0
  232. package/dist/qqbot/index.d.ts +2 -0
  233. package/dist/qqbot/index.js +21 -0
  234. package/dist/qqbot/index.js.map +1 -0
  235. package/dist/qqbot/index.mjs +4 -0
  236. package/dist/qqbot/index.mjs.map +1 -0
  237. package/dist/qqbot/server/index.d.mts +91 -0
  238. package/dist/qqbot/server/index.d.ts +91 -0
  239. package/dist/qqbot/server/index.js +21 -0
  240. package/dist/qqbot/server/index.js.map +1 -0
  241. package/dist/qqbot/server/index.mjs +4 -0
  242. package/dist/qqbot/server/index.mjs.map +1 -0
  243. package/dist/qqbot/ui/web/index.d.mts +10 -0
  244. package/dist/qqbot/ui/web/index.d.ts +10 -0
  245. package/dist/qqbot/ui/web/index.js +105 -0
  246. package/dist/qqbot/ui/web/index.js.map +1 -0
  247. package/dist/qqbot/ui/web/index.mjs +99 -0
  248. package/dist/qqbot/ui/web/index.mjs.map +1 -0
  249. package/dist/screenReceiver/index.d.mts +78 -0
  250. package/dist/screenReceiver/index.d.ts +78 -0
  251. package/dist/screenReceiver/index.js +17 -0
  252. package/dist/screenReceiver/index.js.map +1 -0
  253. package/dist/screenReceiver/index.mjs +4 -0
  254. package/dist/screenReceiver/index.mjs.map +1 -0
  255. package/dist/screenReceiver/server/index.d.mts +36 -0
  256. package/dist/screenReceiver/server/index.d.ts +36 -0
  257. package/dist/screenReceiver/server/index.js +160 -0
  258. package/dist/screenReceiver/server/index.js.map +1 -0
  259. package/dist/screenReceiver/server/index.mjs +157 -0
  260. package/dist/screenReceiver/server/index.mjs.map +1 -0
  261. package/dist/showmasterpiece/db/index.js +42 -42
  262. package/dist/showmasterpiece/db/index.mjs +1 -1
  263. package/dist/showmasterpiece/index.js +52 -41
  264. package/dist/showmasterpiece/index.js.map +1 -1
  265. package/dist/showmasterpiece/index.mjs +15 -4
  266. package/dist/showmasterpiece/index.mjs.map +1 -1
  267. package/dist/showmasterpiece/server/index.js +42 -42
  268. package/dist/showmasterpiece/server/index.mjs +1 -1
  269. package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -0
  270. package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -0
  271. package/dist/showmasterpiece/ui/miniapp/index.js +83 -55
  272. package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
  273. package/dist/showmasterpiece/ui/miniapp/index.mjs +83 -55
  274. package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
  275. package/dist/showmasterpiece/ui/web/index.js +43 -32
  276. package/dist/showmasterpiece/ui/web/index.mjs +15 -4
  277. package/dist/testYourself/index.js +13 -13
  278. package/dist/testYourself/index.mjs +2 -2
  279. package/dist/types-B-hOccQw.d.mts +122 -0
  280. package/dist/types-B8rGXc4e.d.mts +38 -0
  281. package/dist/types-Cg89HGz2.d.ts +38 -0
  282. package/dist/types-CvKvpyN8.d.mts +48 -0
  283. package/dist/types-CvKvpyN8.d.ts +48 -0
  284. package/dist/types-Dy6x2gJW.d.ts +122 -0
  285. package/dist/universalFile/server/index.js +11 -11
  286. package/dist/universalFile/server/index.mjs +4 -4
  287. package/package.json +101 -1
  288. package/dist/UniversalFileService-336GFY6N.mjs +0 -6
  289. package/dist/UniversalFileService-J6ET6KZK.js +0 -15
  290. package/dist/chunk-622Y6LTH.mjs.map +0 -1
  291. package/dist/chunk-CYTXGBP2.js.map +0 -1
  292. package/dist/chunk-GVVS4IMM.mjs +0 -302
  293. package/dist/chunk-GVVS4IMM.mjs.map +0 -1
  294. package/dist/chunk-PONZPO3U.mjs.map +0 -1
  295. package/dist/chunk-WC5QFO3T.js +0 -314
  296. package/dist/chunk-WC5QFO3T.js.map +0 -1
  297. package/dist/chunk-ZRWED7Q6.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/showmasterpiece/ui/web/components/AddToCartButton.tsx","../src/showmasterpiece/ui/web/components/CollectionCard.tsx","../src/showmasterpiece/ui/web/components/ArtworkViewer.tsx","../src/showmasterpiece/ui/web/components/MobileAlbumViewer.tsx","../src/showmasterpiece/ui/web/components/ThumbnailSidebar.tsx","../src/showmasterpiece/services/index.ts","../src/services/universalFile/config/index.ts","../src/showmasterpiece/services/fileService.ts","../src/showmasterpiece/services/exportConfig.ts","../src/showmasterpiece/ui/web/components/CollectionOrderManagerV2.tsx","../src/showmasterpiece/ui/web/components/ArtworkOrderManagerV2.tsx","../src/showmasterpiece/ui/web/components/UniversalImageUpload.tsx","../src/showmasterpiece/ui/web/components/CartPage.tsx","../src/showmasterpiece/ui/web/components/CartModal.tsx","../src/showmasterpiece/ui/web/components/CartButton.tsx","../src/showmasterpiece/ui/web/components/CollectionList.tsx","../src/showmasterpiece/types/booking.ts","../src/showmasterpiece/ui/web/components/BookingAdminPanel.tsx","../src/showmasterpiece/ui/web/components/BookingModal.tsx","../src/showmasterpiece/ui/web/components/BookingPage.tsx","../src/showmasterpiece/ui/web/components/CartHistoryPage.tsx","../src/showmasterpiece/ui/web/components/DeadlinePopup.tsx","../src/showmasterpiece/ui/web/components/PopupConfigManagement.tsx","../src/showmasterpiece/ui/web/components/SystemConfigManager.tsx","../src/showmasterpiece/ui/web/components/AddConfigItemDialog.tsx","../src/showmasterpiece/ui/web/components/DeleteConfirmDialog.tsx","../src/showmasterpiece/ui/web/pages/ShowMasterPiecesPage.tsx","../src/showmasterpiece/ui/web/pages/config/page.tsx","../src/showmasterpiece/ui/web/pages/history/page.tsx"],"names":["init_hooks","useCartContext","useState","useEffect","React","Check","Minus","Plus","ShoppingCart","useRef","ImageIcon","Card","Badge","ShoppingBag","Book","CardContent","Button","Eye","ChevronLeft","ChevronRight","useCallback","Grid3x3","X","init_masterpiecesService","init_masterpiecesConfigService","init_cartService","init_bookingService","init_bookingAdminService","init_cartHistoryService","__require","getAllCollections","moveCollectionUp","moveCollectionDown","updateCollectionOrder","GenericOrderManager","getArtworksByCollection","moveArtworkUp","moveArtworkDown","updateArtworkOrder","updateCartItem","removeFromCart","batchBooking","clearCart","useDeadlinePopup","error","Trash2","useMemo","UniversalExportClient","bookings","Calendar","Clock","CheckCircle","Package","Search","RefreshCw","UniversalExportButton","Download","XCircle","Save","Edit","Modal","useBooking","useBookingForm","BookingService","totalPrice","theme","AlertTriangle","Info","currentConfig","Settings","EyeOff","Database","Loader","init_CartContext","useMasterpieces","useAuth","getConfig","normalizeHomeTabConfig","getCategoryDisplayName","CartProvider","ArrowLeft","Link","History","UserMenu","CardHeader","CardTitle","CardDescription","Tabs","TabsList","TabsTrigger","AuthProvider","updateConfig","resetConfig","createCollection","updateCollection","deleteCollection","addArtworkToCollection","updateArtwork","deleteArtwork","useMasterpiecesConfig","updateBookingStatus","deleteBooking","exportBookings","useBookingAdmin","buildDefaultHomeTabConfig","createCategory","Image","Bell","Cog","TabsContent","RotateCcw","Label","Input","Textarea","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","ArrowUpDown","AuthGuard","User"],"mappings":"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","file":"chunk-MLP74E3O.js","sourcesContent":["/**\n * ShowMasterpiece 模块 - 添加到购物车按钮组件\n * \n * 用于将画集添加到购物车的按钮组件\n * \n * @fileoverview 添加到购物车按钮组件\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { ShoppingCart, Plus, Minus, Check } from 'lucide-react';\nimport { useCartContext } from '../../../logic/hooks';\nimport { ArtCollection } from '../types';\n\n/**\n * 添加到购物车按钮组件属性\n */\ninterface AddToCartButtonProps {\n /** 画集信息 */\n collection: ArtCollection;\n \n /** 用户ID */\n userId: number;\n \n /** 按钮样式类名 */\n className?: string;\n \n /** 按钮大小 */\n size?: 'sm' | 'md' | 'lg';\n \n /** 是否显示数量选择器 */\n showQuantitySelector?: boolean;\n}\n\n/**\n * 添加到购物车按钮组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const AddToCartButton: React.FC<AddToCartButtonProps> = ({\n collection,\n userId,\n className = '',\n size = 'md',\n showQuantitySelector = false,\n}) => {\n const { cart, addToCart: addToCartContext, updateCartItem: updateCartItemContext, removeFromCart: removeFromCartContext, loading } = useCartContext();\n const [quantity, setQuantity] = useState(1);\n const [isAdded, setIsAdded] = useState(false);\n\n // 检查当前画集是否已在购物车中\n const cartItem = cart.items.find(item => item.collectionId === collection.id);\n const isInCart = !!cartItem;\n const currentQuantity = cartItem?.quantity || 0;\n\n // 按钮尺寸样式\n const sizeStyles = {\n sm: 'px-2 py-1 text-sm',\n md: 'px-3 py-2',\n lg: 'px-4 py-3 text-lg',\n };\n\n // 当购物车数据更新时,同步本地状态\n useEffect(() => {\n if (cartItem) {\n setQuantity(cartItem.quantity);\n setIsAdded(true);\n } else {\n setQuantity(1);\n setIsAdded(false);\n }\n }, [cartItem]);\n\n /**\n * 处理添加到购物车\n */\n const handleAddToCart = async () => {\n try {\n if (isInCart) {\n // 如果已在购物车中,增加数量 (暂时简化为添加新项)\n // TODO: 实现数量更新逻辑\n await addToCartContext({\n collectionId: collection.id,\n quantity: quantity,\n collection // 传递完整的画集信息\n });\n } else {\n // 如果不在购物车中,添加新项\n await addToCartContext({\n collectionId: collection.id,\n quantity,\n collection // 传递完整的画集信息\n });\n }\n setIsAdded(true);\n } catch (error) {\n console.error('添加到购物车失败:', error);\n }\n };\n\n /**\n * 处理数量变化\n */\n const handleQuantityChange = (newQuantity: number) => {\n if (newQuantity >= 1) {\n setQuantity(newQuantity);\n }\n };\n\n /**\n * 处理购物车中商品数量变化\n */\n const handleCartQuantityChange = async (newQuantity: number) => {\n try {\n if (newQuantity <= 0) {\n // 如果数量为0或负数,从购物车中移除\n await removeFromCartContext({\n collectionId: collection.id\n });\n } else {\n // 否则更新数量\n await updateCartItemContext({\n collectionId: collection.id,\n quantity: newQuantity\n });\n }\n } catch (error) {\n console.error('更新购物车数量失败:', error);\n }\n };\n\n return (\n <div className={`flex flex-col gap-2 ${className}`}>\n {isInCart ? (\n // 已在购物车中的状态\n <div className=\"flex flex-col gap-2\">\n {/* 已添加状态按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n // 点击\"已加入购物车\"按钮时不执行任何操作,只阻止事件冒泡\n }}\n disabled={loading}\n className={`flex items-center justify-center gap-2 rounded-lg font-medium transition-colors ${sizeStyles[size]} bg-green-600 text-white disabled:opacity-50`}\n >\n <Check size={16} />\n <span>已加入购物车</span>\n </button>\n \n {/* 数量控制控件 */}\n <div className=\"flex items-center justify-center border border-gray-300 rounded-lg bg-white\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleCartQuantityChange(currentQuantity - 1);\n }}\n disabled={loading}\n className=\"px-2 py-1 hover:bg-gray-50 disabled:opacity-50 transition-colors\"\n >\n <Minus size={14} />\n </button>\n <span className=\"px-3 py-1 min-w-[2rem] text-center font-medium\">\n {currentQuantity}\n </span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleCartQuantityChange(currentQuantity + 1);\n }}\n disabled={loading}\n className=\"px-2 py-1 hover:bg-gray-50 transition-colors\"\n >\n <Plus size={14} />\n </button>\n </div>\n </div>\n ) : (\n // 未在购物车中的状态\n <div className=\"flex flex-col gap-2\">\n {/* 数量选择器 */}\n {showQuantitySelector && (\n <div className=\"flex items-center justify-center border border-gray-300 rounded-lg bg-white\">\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleQuantityChange(quantity - 1);\n }}\n disabled={quantity <= 1 || loading}\n className=\"px-2 py-1 hover:bg-gray-50 disabled:opacity-50 transition-colors\"\n >\n <Minus size={14} />\n </button>\n <span className=\"px-3 py-1 min-w-[2rem] text-center font-medium\">{quantity}</span>\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleQuantityChange(quantity + 1);\n }}\n disabled={loading}\n className=\"px-2 py-1 hover:bg-gray-50 transition-colors\"\n >\n <Plus size={14} />\n </button>\n </div>\n )}\n\n {/* 添加到购物车按钮 */}\n <button\n onClick={(e) => {\n e.stopPropagation();\n handleAddToCart();\n }}\n disabled={loading}\n className={`flex items-center justify-center gap-2 rounded-lg font-medium transition-colors ${sizeStyles[size]} bg-blue-600 text-white hover:bg-blue-700 disabled:opacity-50`}\n >\n <ShoppingCart size={16} />\n <span>加入购物车</span>\n </button>\n </div>\n )}\n </div>\n );\n}; \n","/**\n * 画集卡片组件 (CollectionCard) - Tailwind CSS 版本\n * \n * 这是一个用于展示单个画集信息的卡片组件,主要用于画集列表页面。\n * \n * 主要功能:\n * - 画集封面图片展示(支持懒加载)\n * - 画集基本信息显示(标题、编号、分类、描述等)\n * - 作品页数统计显示\n * - 点击进入画集浏览\n * \n * 性能优化特性:\n * - 图片懒加载(Intersection Observer API)\n * - 加载状态和错误处理\n * - Tailwind CSS 样式\n * \n * @component\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { Book, Eye, ImageIcon, ShoppingBag } from 'lucide-react';\nimport { ArtCollection, CollectionCategory } from '../types';\nimport { AddToCartButton } from './AddToCartButton';\nimport { Card, CardContent, Badge, Button } from '@/components';\n\n/**\n * CollectionCard 组件的 Props 接口\n */\ninterface CollectionCardProps {\n /** 要展示的画集数据 */\n collection: ArtCollection;\n /** 用户ID */\n userId: number;\n /** 用户选择画集时的回调函数 */\n onSelect: (collection: ArtCollection) => void;\n}\n\n/**\n * 画集卡片组件主体\n * \n * @param props - 组件属性\n * @param props.collection - 画集数据对象\n * @param props.userId - 用户ID\n * @param props.onSelect - 选择画集的回调函数\n * @returns React函数组件\n */\nexport const CollectionCard: React.FC<CollectionCardProps> = ({ \n collection, \n userId,\n onSelect \n}) => {\n // ===== 状态管理 =====\n \n /** 图片是否正在加载 */\n const [imageLoading, setImageLoading] = useState(true);\n \n /** 图片是否加载失败 */\n const [imageError, setImageError] = useState(false);\n \n /** 是否应该开始加载图片(懒加载控制) */\n const [shouldLoadImage, setShouldLoadImage] = useState(false);\n \n /** 卡片DOM元素的引用,用于懒加载观察 */\n const cardRef = useRef<HTMLDivElement>(null);\n\n // ===== 懒加载逻辑 =====\n \n /**\n * 使用 Intersection Observer API 实现图片懒加载\n * 当卡片进入视口时开始加载图片,提升页面性能\n */\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n // 卡片进入视口,开始加载图片\n setShouldLoadImage(true);\n // 停止观察,避免重复触发\n observer.unobserve(entry.target);\n }\n });\n },\n { \n rootMargin: '50px', // 提前50px开始加载,提升用户体验\n threshold: 0.1 // 10%的卡片可见时触发\n }\n );\n\n // 开始观察卡片元素\n if (cardRef.current) {\n observer.observe(cardRef.current);\n }\n\n // 清理函数:组件卸载时停止观察\n return () => {\n if (cardRef.current) {\n observer.unobserve(cardRef.current);\n }\n };\n }, []);\n\n // ===== 图片处理函数 =====\n \n /**\n * 图片加载成功处理函数\n * 隐藏加载状态,显示图片\n */\n const handleImageLoad = () => {\n setImageLoading(false);\n setImageError(false);\n };\n\n /**\n * 图片加载失败处理函数\n * 隐藏加载状态,显示错误状态\n */\n const handleImageError = () => {\n setImageLoading(false);\n setImageError(true);\n };\n\n // ===== 渲染函数 =====\n \n /**\n * 渲染图片加载状态\n */\n const renderImageLoading = () => (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"w-8 h-8 border-2 border-prussian-blue-300 border-t-moonstone rounded-full animate-spin\"></div>\n </div>\n );\n\n /**\n * 渲染图片错误状态\n */\n const renderImageError = () => (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-2 text-prussian-blue-600 text-sm text-center p-4\">\n <ImageIcon size={32} className=\"text-prussian-blue-500\" />\n <span>图片加载失败</span>\n </div>\n );\n\n /**\n * 渲染画集封面图片\n */\n const renderCoverImage = () => {\n if (!shouldLoadImage) {\n return renderImageLoading();\n }\n\n if (imageError || !collection.coverImage) {\n return renderImageError();\n }\n console.log('🔍 [CollectionCard] 渲染封面图片:', collection.coverImage, 'collection:', collection);\n return (\n <img\n src={collection.coverImage}\n alt={collection.title}\n className={`w-full h-full object-contain transition-opacity duration-300 ${\n imageLoading ? 'opacity-0 absolute' : 'opacity-100'\n }`}\n onLoad={handleImageLoad}\n onError={handleImageError}\n />\n );\n };\n\n /**\n * 格式化价格显示\n */\n const formatPrice = (price?: number): string => {\n if (price === undefined || price === null) {\n return '价格待定';\n }\n if (price === 0) {\n return '免费';\n }\n return `¥${price}`;\n };\n\n /**\n * 判断是否为商品类型\n */\n const isProduct = collection.category !== CollectionCategory.COLLECTION;\n\n return (\n <Card\n ref={cardRef}\n className={`overflow-hidden transition-all duration-300 transform w-full max-w-sm mx-auto group border-prussian-blue-200/30 shadow-lg hover:shadow-xl bg-gradient-to-br from-white to-prussian-blue-900/5 ${\n !(collection.pages && collection.pages.length > 0) \n ? 'cursor-default' \n : 'cursor-pointer hover:-translate-y-1 hover:shadow-moonstone/20 hover:border-moonstone/40'\n }`}\n onClick={(collection.pages && collection.pages.length > 0) ? () => onSelect(collection) : undefined}\n >\n {/* 图片容器 - B5尺寸适配 */}\n <div className=\"relative w-full bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 flex items-center justify-center overflow-hidden aspect-[1/1.414]\">\n {/* 图片覆盖层 */}\n <div className=\"absolute inset-0 bg-gradient-to-t from-rich-black/60 via-oxford-blue/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300\"></div>\n \n {/* 画集徽章 */}\n <div className=\"absolute bottom-4 left-4 z-10\">\n <Badge \n variant=\"secondary\" \n className=\"bg-moonstone/90 text-white backdrop-blur-sm border-none hover:bg-cerulean/90 transition-colors shadow-lg\"\n >\n {isProduct ? (\n <>\n <ShoppingBag size={16} className=\"mr-1\" />\n 商品\n </>\n ) : (\n <>\n <Book size={16} className=\"mr-1\" />\n {collection.pages.length} 页\n </>\n )}\n </Badge>\n </div>\n\n {/* 封面图片 */}\n {renderCoverImage()}\n </div>\n\n {/* 内容区域 */}\n <CardContent className=\"p-6\">\n {/* 标题 */}\n <h3 className=\"text-xl font-bold text-rich-black mb-2 line-clamp-2 group-hover:text-moonstone transition-colors\">\n {collection.title}\n </h3>\n \n {/* 编号 */}\n <p className=\"text-prussian-blue-600 text-sm mb-1\">\n 编号:{collection.number}\n </p>\n \n {/* 分类 */}\n {collection.category && (\n <p className=\"text-prussian-blue-600 text-sm mb-1\">\n 分类:{collection.category.displayName}\n </p>\n )}\n \n {/* 价格 */}\n <p className=\"text-prussian-blue-700 text-sm mb-2 font-medium\">\n 价格:{formatPrice(collection.price)}\n </p>\n \n {/* 描述 */}\n {collection.description && (\n <p className=\"text-prussian-blue-500 text-sm mb-4 line-clamp-2\">\n {collection.description}\n </p>\n )}\n \n {/* 操作按钮 */}\n <div className=\"flex gap-2\">\n {/* 查看按钮 - 有作品内容时显示 */}\n {collection.pages && collection.pages.length > 0 && (\n <Button\n className=\"flex-1 bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white gap-2 shadow-lg transition-all duration-300 hover:shadow-moonstone/30\"\n onClick={(e) => {\n e.stopPropagation();\n onSelect(collection);\n }}\n >\n <Eye size={16} />\n 查看详情\n </Button>\n )}\n \n {/* 加入购物车按钮 - 没有作品内容时占满宽度 */}\n <AddToCartButton\n collection={collection}\n userId={userId}\n className={!(collection.pages && collection.pages.length > 0) ? \"w-full\" : \"flex-1\"}\n size=\"md\"\n />\n </div>\n </CardContent>\n </Card>\n );\n}; ","import React, { useState, useEffect } from 'react';\nimport { ChevronLeft, ChevronRight, ImageIcon } from 'lucide-react';\nimport { ArtworkPage } from '../types';\nimport { Card, CardContent } from '@/components';\nimport { Button } from '@/components';\nimport { Badge } from '@/components';\n\ninterface ArtworkViewerProps {\n artwork: ArtworkPage;\n collectionId: number; // 添加collectionId\n onNext: () => void;\n onPrev: () => void;\n canGoNext: boolean;\n canGoPrev: boolean;\n}\n\nexport const ArtworkViewer: React.FC<ArtworkViewerProps> = ({\n artwork,\n collectionId,\n onNext,\n onPrev,\n canGoNext,\n canGoPrev\n}) => {\n const [imageLoading, setImageLoading] = useState(true);\n const [imageError, setImageError] = useState(false);\n const [imageSrc, setImageSrc] = useState<string>('');\n\n // 🚀 图片加载逻辑 - 优先使用imageUrl,不再支持Base64\n useEffect(() => {\n const loadImage = async () => {\n setImageLoading(true);\n setImageError(false);\n \n try {\n // 优先使用image(通过通用文件服务或API获取)\n if (artwork.image) {\n // 直接使用image,不再需要转换为blob\n setImageSrc(artwork.image);\n setImageLoading(false);\n return;\n }\n \n // 如果没有imageUrl,尝试使用fileId构建URL\n if (artwork.fileId) {\n const imageUrl = `/api/showmasterpiece/collections/${collectionId}/artworks/${artwork.id}/image`;\n setImageSrc(imageUrl);\n setImageLoading(false);\n return;\n }\n \n throw new Error('无图片数据');\n } catch (error) {\n console.error('图片加载失败:', error);\n setImageError(true);\n } finally {\n setImageLoading(false);\n }\n };\n\n loadImage();\n }, [artwork.id, artwork.image, artwork.fileId]); // 当作品ID或图片URL变化时重新加载\n\n const handleImageLoad = () => {\n setImageLoading(false);\n setImageError(false);\n };\n\n const handleImageError = () => {\n setImageLoading(false);\n setImageError(true);\n };\n\n const retryImageLoad = () => {\n setImageError(false);\n setImageLoading(true);\n // 重新触发useEffect中的图片加载逻辑\n const currentSrc = imageSrc;\n setImageSrc('');\n setTimeout(() => {\n if (currentSrc.startsWith('blob:')) {\n URL.revokeObjectURL(currentSrc);\n }\n }, 100);\n };\n\n return (\n <Card className=\"w-full max-w-full box-border mx-auto shadow-lg border-prussian-blue-200/30 bg-gradient-to-br from-white to-prussian-blue-900/5\">\n <CardContent className=\"p-6 lg:p-5 md:p-4 sm:p-3\">\n <div className=\"relative min-h-[600px] flex items-center justify-center bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 rounded-lg overflow-hidden lg:min-h-[500px] md:min-h-[450px] sm:min-h-[350px] sm:rounded-md\">\n {/* 图片加载状态 */}\n {imageLoading && (\n <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center justify-center gap-4 text-prussian-blue-600 text-center p-4\">\n <div className=\"w-10 h-10 border-[3px] border-prussian-blue-300 border-t-moonstone rounded-full animate-spin\"></div>\n <p>加载中...</p>\n </div>\n )}\n\n {/* 图片错误状态 */}\n {imageError && (\n <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center justify-center gap-4 text-prussian-blue-600 text-center p-4\">\n <ImageIcon size={48} className=\"text-prussian-blue-500\" />\n <p>图片加载失败</p>\n <Button \n onClick={retryImageLoad}\n className=\"bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300\"\n >\n 重试\n </Button>\n </div>\n )}\n\n {/* 主图片 - 只有在有图片源且未出错时才显示 */}\n {imageSrc && !imageError && (\n <img\n src={imageSrc}\n alt={artwork.title}\n className={`w-full h-[600px] object-contain rounded-lg bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 transition-opacity duration-300 select-none lg:h-[500px] md:h-[450px] sm:h-[350px] sm:rounded-md ${imageLoading ? 'opacity-0 absolute' : ''}`}\n style={{ WebkitUserDrag: 'none', touchAction: 'pinch-zoom' } as React.CSSProperties}\n onLoad={handleImageLoad}\n onError={handleImageError}\n />\n )}\n \n {/* 翻页按钮 */}\n <Button\n onClick={onPrev}\n disabled={!canGoPrev}\n size=\"icon\"\n variant=\"secondary\"\n className=\"absolute top-1/2 left-4 transform -translate-y-1/2 bg-white/95 backdrop-blur-sm shadow-lg hover:bg-moonstone-900/10 hover:scale-105 hover:shadow-xl disabled:opacity-40 z-10 rounded-full p-3 border-prussian-blue-200 hover:border-moonstone/40 md:left-3 sm:left-2\"\n aria-label=\"上一张\"\n >\n <ChevronLeft size={24} />\n </Button>\n \n <Button\n onClick={onNext}\n disabled={!canGoNext}\n size=\"icon\"\n variant=\"secondary\"\n className=\"absolute top-1/2 right-4 transform -translate-y-1/2 bg-white/95 backdrop-blur-sm shadow-lg hover:bg-moonstone-900/10 hover:scale-105 hover:shadow-xl disabled:opacity-40 z-10 rounded-full p-3 border-prussian-blue-200 hover:border-moonstone/40 md:right-3 sm:right-2\"\n aria-label=\"下一张\"\n >\n <ChevronRight size={24} />\n </Button>\n </div>\n \n {/* 作品信息 */}\n <div className=\"mt-6 w-full max-w-full box-border lg:mt-5 md:mt-5 sm:mt-4\">\n <div className=\"space-y-3\">\n <h2 className=\"text-2xl font-bold text-rich-black leading-tight lg:text-xl md:text-xl sm:text-lg sm:leading-5\">\n {artwork.title}\n </h2>\n \n <div className=\"flex flex-wrap gap-2\">\n <Badge variant=\"outline\" className=\"border-moonstone/30 text-cerulean bg-moonstone-900/5\">\n 编号:{artwork.number}\n </Badge>\n \n {artwork.createdTime && (\n <Badge variant=\"outline\" className=\"border-moonstone/30 text-cerulean bg-moonstone-900/5\">\n 创作时间:{artwork.createdTime}\n </Badge>\n )}\n \n {artwork.theme && (\n <Badge variant=\"outline\" className=\"border-moonstone/30 text-cerulean bg-moonstone-900/5\">\n 主题:{artwork.theme}\n </Badge>\n )}\n </div>\n \n {artwork.description && (\n <p className=\"text-base text-prussian-blue-700 leading-relaxed sm:text-sm sm:leading-6\">\n {artwork.description}\n </p>\n )}\n </div>\n </div>\n </CardContent>\n </Card>\n );\n}; ","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { ChevronLeft, ChevronRight, ImageIcon, Grid3x3, X } from 'lucide-react';\nimport { ArtworkPage } from '../types';\nimport { Card, CardContent, Button, Badge } from '@/components';\n\ninterface MobileAlbumViewerProps {\n artworks: ArtworkPage[];\n collectionId: number;\n currentIndex: number;\n onIndexChange: (index: number) => void;\n onNext: () => void;\n onPrev: () => void;\n canGoNext: boolean;\n canGoPrev: boolean;\n}\n\ninterface TouchState {\n startX: number;\n startY: number;\n currentX: number;\n currentY: number;\n isDragging: boolean;\n startTime: number;\n}\n\nexport const MobileAlbumViewer: React.FC<MobileAlbumViewerProps> = ({\n artworks,\n collectionId,\n currentIndex,\n onIndexChange,\n onNext,\n onPrev,\n canGoNext,\n canGoPrev\n}) => {\n const [imageLoading, setImageLoading] = useState(true);\n const [imageError, setImageError] = useState(false);\n const [imageSrc, setImageSrc] = useState<string>('');\n const [showThumbnails, setShowThumbnails] = useState(false);\n const [touchState, setTouchState] = useState<TouchState>({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n isDragging: false,\n startTime: 0\n });\n\n const imageContainerRef = useRef<HTMLDivElement>(null);\n const thumbnailsRef = useRef<HTMLDivElement>(null);\n\n const currentArtwork = artworks[currentIndex];\n\n // 图片加载逻辑\n useEffect(() => {\n if (!currentArtwork) return;\n\n const loadImage = async () => {\n setImageLoading(true);\n setImageError(false);\n \n try {\n if (currentArtwork.image) {\n setImageSrc(currentArtwork.image);\n setImageLoading(false);\n return;\n }\n \n if (currentArtwork.fileId) {\n const imageUrl = `/api/showmasterpiece/collections/${collectionId}/artworks/${currentArtwork.id}/image`;\n setImageSrc(imageUrl);\n setImageLoading(false);\n return;\n }\n \n throw new Error('无图片数据');\n } catch (error) {\n console.error('图片加载失败:', error);\n setImageError(true);\n } finally {\n setImageLoading(false);\n }\n };\n\n loadImage();\n }, [currentArtwork, collectionId]);\n\n // 触摸事件处理\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n const touch = e.touches[0];\n if (!touch) return;\n setTouchState({\n startX: touch.clientX,\n startY: touch.clientY,\n currentX: touch.clientX,\n currentY: touch.clientY,\n isDragging: true,\n startTime: Date.now()\n });\n }, []);\n\n const handleTouchMove = useCallback((e: React.TouchEvent) => {\n if (!touchState.isDragging) return;\n \n const touch = e.touches[0];\n if (!touch) return;\n const deltaX = touch.clientX - touchState.startX;\n const deltaY = touch.clientY - touchState.startY;\n \n // 如果主要是水平滑动,阻止默认行为以避免页面滚动\n if (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 10) {\n e.preventDefault();\n }\n \n setTouchState(prev => ({\n ...prev,\n currentX: touch.clientX,\n currentY: touch.clientY\n }));\n }, [touchState.isDragging, touchState.startX, touchState.startY]);\n\n const handleTouchEnd = useCallback(() => {\n if (!touchState.isDragging) return;\n \n const deltaX = touchState.currentX - touchState.startX;\n const deltaY = touchState.currentY - touchState.startY;\n const deltaTime = Date.now() - touchState.startTime;\n \n // 判断是否为有效的滑动手势\n const isHorizontalSwipe = Math.abs(deltaX) > Math.abs(deltaY);\n const isSignificantMove = Math.abs(deltaX) > 50;\n const isFastSwipe = deltaTime < 300 && Math.abs(deltaX) > 30;\n \n if (isHorizontalSwipe && (isSignificantMove || isFastSwipe)) {\n if (deltaX > 0 && canGoPrev) {\n // 向右滑动,显示上一张\n onPrev();\n } else if (deltaX < 0 && canGoNext) {\n // 向左滑动,显示下一张\n onNext();\n }\n }\n \n setTouchState({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n isDragging: false,\n startTime: 0\n });\n }, [touchState, canGoNext, canGoPrev, onNext, onPrev]);\n\n // 键盘导航\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowLeft' && canGoPrev) {\n onPrev();\n } else if (e.key === 'ArrowRight' && canGoNext) {\n onNext();\n } else if (e.key === 'Escape') {\n setShowThumbnails(false);\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [canGoNext, canGoPrev, onNext, onPrev]);\n\n // 缩略图滚动到当前项\n useEffect(() => {\n if (showThumbnails && thumbnailsRef.current) {\n const thumbnailElement = thumbnailsRef.current.children[currentIndex] as HTMLElement;\n if (thumbnailElement) {\n thumbnailElement.scrollIntoView({ \n behavior: 'smooth', \n block: 'nearest',\n inline: 'center'\n });\n }\n }\n }, [currentIndex, showThumbnails]);\n\n const handleImageLoad = () => {\n setImageLoading(false);\n setImageError(false);\n };\n\n const handleImageError = () => {\n setImageLoading(false);\n setImageError(true);\n };\n\n const retryImageLoad = () => {\n setImageError(false);\n setImageLoading(true);\n const currentSrc = imageSrc;\n setImageSrc('');\n setTimeout(() => {\n if (currentSrc.startsWith('blob:')) {\n URL.revokeObjectURL(currentSrc);\n }\n }, 100);\n };\n\n const toggleThumbnails = () => {\n setShowThumbnails(!showThumbnails);\n };\n\n const selectThumbnail = (index: number) => {\n onIndexChange(index);\n setShowThumbnails(false);\n };\n\n if (!currentArtwork) {\n return (\n <div className=\"flex items-center justify-center w-full h-full text-white\">\n <span>暂无可展示的作品</span>\n </div>\n );\n }\n\n return (\n <div className=\"relative w-full h-full bg-gradient-to-br from-rich-black to-oxford-blue\">\n {/* 主图片查看器 */}\n <div \n ref={imageContainerRef}\n className=\"relative w-full h-screen bg-gradient-to-br from-rich-black to-oxford-blue flex items-center justify-center\"\n onTouchStart={handleTouchStart}\n onTouchMove={handleTouchMove}\n onTouchEnd={handleTouchEnd}\n >\n {/* 图片加载状态 */}\n {imageLoading && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-rich-black/50\">\n <div className=\"flex flex-col items-center gap-4 text-white\">\n <div className=\"w-10 h-10 border-[3px] border-prussian-blue-300 border-t-moonstone rounded-full animate-spin\"></div>\n <p>加载中...</p>\n </div>\n </div>\n )}\n\n {/* 图片错误状态 */}\n {imageError && (\n <div className=\"absolute inset-0 flex items-center justify-center bg-rich-black/50\">\n <div className=\"flex flex-col items-center gap-4 text-white text-center p-4\">\n <ImageIcon size={48} className=\"text-moonstone\" />\n <p>图片加载失败</p>\n <Button \n onClick={retryImageLoad}\n className=\"bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300\"\n >\n 重试\n </Button>\n </div>\n </div>\n )}\n\n {/* 主图片 */}\n {imageSrc && !imageError && (\n <img\n src={imageSrc}\n alt={currentArtwork.title}\n className={`max-w-full max-h-full object-contain transition-opacity duration-300 select-none ${imageLoading ? 'opacity-0' : 'opacity-100'}`}\n style={{ \n WebkitUserDrag: 'none', \n touchAction: 'pinch-zoom',\n userSelect: 'none'\n } as React.CSSProperties}\n onLoad={handleImageLoad}\n onError={handleImageError}\n />\n )}\n\n {/* 导航按钮 */}\n <Button\n onClick={onPrev}\n disabled={!canGoPrev}\n size=\"icon\"\n variant=\"secondary\"\n className=\"absolute top-1/2 left-4 transform -translate-y-1/2 bg-rich-black/70 backdrop-blur-sm text-white border-moonstone/30 hover:bg-oxford-blue/80 disabled:opacity-40 z-10 rounded-full w-12 h-12 shadow-lg\"\n aria-label=\"上一张\"\n >\n <ChevronLeft size={24} />\n </Button>\n \n <Button\n onClick={onNext}\n disabled={!canGoNext}\n size=\"icon\"\n variant=\"secondary\"\n className=\"absolute top-1/2 right-4 transform -translate-y-1/2 bg-rich-black/70 backdrop-blur-sm text-white border-moonstone/30 hover:bg-oxford-blue/80 disabled:opacity-40 z-10 rounded-full w-12 h-12 shadow-lg\"\n aria-label=\"下一张\"\n >\n <ChevronRight size={24} />\n </Button>\n\n {/* 顶部控制栏 */}\n <div className=\"absolute top-0 left-0 right-0 bg-gradient-to-b from-rich-black/80 via-oxford-blue/40 to-transparent p-4 z-20\">\n <div className=\"flex items-center justify-between text-white\">\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"secondary\" className=\"bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm\">\n {currentIndex + 1} / {artworks.length}\n </Badge>\n </div>\n <Button\n onClick={toggleThumbnails}\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-white hover:bg-moonstone/30 rounded-full w-10 h-10 backdrop-blur-sm\"\n aria-label=\"显示缩略图\"\n >\n <Grid3x3 size={20} />\n </Button>\n </div>\n </div>\n\n {/* 底部信息栏 */}\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-rich-black/80 via-oxford-blue/40 to-transparent p-4 z-20\">\n <div className=\"text-white\">\n <h2 className=\"text-xl font-bold mb-2\">{currentArtwork.title}</h2>\n <div className=\"flex flex-wrap gap-2 mb-2\">\n <Badge variant=\"secondary\" className=\"bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm\">\n 编号:{currentArtwork.number}\n </Badge>\n {currentArtwork.createdTime && (\n <Badge variant=\"secondary\" className=\"bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm\">\n 创作时间:{currentArtwork.createdTime}\n </Badge>\n )}\n {currentArtwork.theme && (\n <Badge variant=\"secondary\" className=\"bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm\">\n 主题:{currentArtwork.theme}\n </Badge>\n )}\n </div>\n {currentArtwork.description && (\n <p className=\"text-sm text-white/90 leading-relaxed\">\n {currentArtwork.description}\n </p>\n )}\n </div>\n </div>\n </div>\n\n {/* 缩略图网格覆盖层 */}\n {showThumbnails && (\n <div className=\"absolute inset-0 bg-gradient-to-br from-rich-black/95 to-oxford-blue/90 backdrop-blur-sm z-30 flex flex-col\">\n {/* 缩略图头部 */}\n <div className=\"flex items-center justify-between p-4 border-b border-moonstone/30\">\n <h3 className=\"text-white text-lg font-semibold\">选择图片</h3>\n <Button\n onClick={() => setShowThumbnails(false)}\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-white hover:bg-moonstone/30 rounded-full\"\n >\n <X size={20} />\n </Button>\n </div>\n\n {/* 缩略图网格 */}\n <div \n ref={thumbnailsRef}\n className=\"flex-1 p-4 overflow-y-auto grid grid-cols-3 sm:grid-cols-4 md:grid-cols-5 lg:grid-cols-6 gap-2 content-start\"\n >\n {artworks.map((artwork, index) => (\n <button\n key={artwork.id}\n onClick={() => selectThumbnail(index)}\n className={`relative aspect-square rounded-lg overflow-hidden border-2 transition-all ${\n index === currentIndex \n ? 'border-moonstone scale-95 shadow-lg shadow-moonstone/30' \n : 'border-prussian-blue-300/30 hover:border-moonstone/50'\n }`}\n >\n <img\n src={artwork.image || `/api/showmasterpiece/collections/${collectionId}/artworks/${artwork.id}/image`}\n alt={artwork.title}\n className=\"w-full h-full object-cover\"\n />\n {index === currentIndex && (\n <div className=\"absolute inset-0 bg-moonstone/20 flex items-center justify-center\">\n <div className=\"w-6 h-6 bg-moonstone rounded-full flex items-center justify-center shadow-lg\">\n <div className=\"w-2 h-2 bg-white rounded-full\"></div>\n </div>\n </div>\n )}\n <div className=\"absolute bottom-0 left-0 right-0 bg-gradient-to-t from-rich-black/80 to-transparent p-1\">\n <div className=\"text-white text-xs text-center truncate\">\n {index + 1}\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { ImageIcon } from 'lucide-react';\nimport { ArtworkPage } from '../types';\n\ninterface ThumbnailSidebarProps {\n pages: ArtworkPage[];\n currentPage: number;\n onPageSelect: (pageIndex: number) => void;\n}\n\ninterface ThumbnailItemProps {\n page: ArtworkPage;\n index: number;\n isActive: boolean;\n onSelect: () => void;\n}\n\n// 🚀 懒加载缩略图组件\nconst ThumbnailItem: React.FC<ThumbnailItemProps> = ({ page, index, isActive, onSelect }) => {\n const [imageLoading, setImageLoading] = useState(true);\n const [imageError, setImageError] = useState(false);\n const [imageSrc, setImageSrc] = useState<string>('');\n const [isVisible, setIsVisible] = useState(false);\n\n // 使用Intersection Observer实现真正的懒加载\n useEffect(() => {\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n setIsVisible(true);\n observer.unobserve(entry.target);\n }\n });\n },\n { threshold: 0.1 }\n );\n\n const element = document.getElementById(`thumbnail-${page.id}`);\n if (element) {\n observer.observe(element);\n }\n\n return () => {\n if (element) {\n observer.unobserve(element);\n }\n };\n }, [page.id]);\n\n // 当组件可见时才加载图片\n useEffect(() => {\n if (!isVisible) return;\n\n const loadThumbnail = async () => {\n setImageLoading(true);\n setImageError(false);\n\n try {\n // 如果已有图片数据,直接使用\n if (page.image && page.image.trim() !== '') {\n setImageSrc(page.image);\n setImageLoading(false);\n return;\n }\n\n // 否则直接使用image\n if (page.image) {\n setImageSrc(page.image);\n } else {\n throw new Error('无图片数据');\n }\n } catch (error) {\n console.error('缩略图加载失败:', error);\n setImageError(true);\n } finally {\n setImageLoading(false);\n }\n };\n\n loadThumbnail();\n\n // 清理函数 - 不再需要清理blob URL\n return () => {\n // 不再使用blob URL,无需清理\n };\n }, [isVisible, page.id, page.image]);\n\n const handleImageLoad = () => {\n setImageLoading(false);\n setImageError(false);\n };\n\n const handleImageError = () => {\n setImageLoading(false);\n setImageError(true);\n };\n\n return (\n <button\n id={`thumbnail-${page.id}`}\n onClick={onSelect}\n className={`w-full p-2 border-2 border-prussian-blue-200/30 rounded-lg bg-gradient-to-br from-white to-prussian-blue-900/5 cursor-pointer transition-all duration-200 min-h-[44px] flex items-center justify-center hover:border-moonstone/40 hover:bg-moonstone-900/10 focus:outline-none focus:ring-2 focus:ring-moonstone focus:ring-offset-2 lg:flex-shrink-0 lg:min-w-[220px] lg:max-w-[220px] lg:p-3.5 md:min-w-[200px] md:max-w-[200px] md:p-3 md:min-h-12 sm:min-w-[180px] sm:max-w-[180px] sm:p-2.5 sm:rounded-md ${isActive ? 'border-moonstone bg-moonstone-900/10 shadow-lg shadow-moonstone/20' : ''}`}\n aria-label={`查看第 ${index + 1} 页:${page.title}`}\n >\n <div className=\"relative w-16 h-20 flex items-center justify-center bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 rounded border border-prussian-blue-200/20 overflow-hidden flex-shrink-0 lg:w-11 lg:h-15 md:w-10 md:h-14 sm:w-9 sm:h-13 sm:rounded-sm\">\n {/* 加载状态 */}\n {imageLoading && (\n <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex items-center justify-center\">\n <div className=\"w-4 h-4 border border-prussian-blue-300 border-t-moonstone rounded-full animate-spin\"></div>\n </div>\n )}\n\n {/* 错误状态 */}\n {imageError && (\n <div className=\"absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex items-center justify-center text-prussian-blue-400 text-xs\">\n <ImageIcon size={20} />\n </div>\n )}\n\n {/* 缩略图 */}\n {imageSrc && !imageError && (\n <img\n src={imageSrc}\n alt={page.title}\n className={`w-full h-full object-cover transition-opacity duration-300 ${imageLoading ? 'opacity-0 absolute' : ''}`}\n onLoad={handleImageLoad}\n onError={handleImageError}\n />\n )}\n </div>\n \n {/* 作品名称和编号信息 */}\n <div className=\"text-left flex-1 min-w-0 lg:flex lg:flex-col lg:gap-1 lg:ml-3.5 md:ml-3 sm:ml-2.5\">\n <h4 className=\"font-medium text-sm text-rich-black mb-1 overflow-hidden text-ellipsis whitespace-nowrap leading-tight lg:text-xs md:text-xs sm:text-xs sm:mb-0.5\">{page.title}</h4>\n <p className=\"text-xs text-prussian-blue-600 mb-0 overflow-hidden text-ellipsis whitespace-nowrap lg:text-xs md:text-xs sm:text-xs\">{page.number}</p>\n </div> \n </button>\n );\n};\n\nexport const ThumbnailSidebar: React.FC<ThumbnailSidebarProps> = ({\n pages,\n currentPage,\n onPageSelect\n}) => {\n return (\n <div className=\"bg-gradient-to-br from-white to-prussian-blue-900/5 rounded-2xl shadow-2xl border border-prussian-blue-200/30 p-6 w-full max-w-full box-border mb-0 lg:p-5 lg:mb-4 md:p-4 md:mb-4 md:rounded-xl sm:p-3.5 sm:rounded-xl\">\n <div className=\"flex justify-between items-center mb-4 lg:mb-3.5 md:mb-3 sm:mb-2.5\">\n <h3 className=\"text-lg font-semibold text-rich-black mb-0 leading-tight lg:text-base md:text-base sm:text-sm\">作品列表</h3>\n <span className=\"text-sm text-cerulean font-medium lg:text-sm md:text-sm sm:text-xs\">\n {currentPage + 1} / {pages.length}\n </span>\n </div>\n \n <div className=\"flex flex-col gap-3 max-h-[600px] overflow-y-auto scrollbar-thin scrollbar-thumb-moonstone/50 scrollbar-track-prussian-blue-100/30 lg:flex-row lg:gap-4 lg:max-h-none lg:overflow-x-auto lg:overflow-y-hidden lg:pb-2.5 lg:scroll-snap-x lg:scroll-smooth md:gap-3.5 md:pb-2 sm:gap-2.5 sm:pb-1.5\">\n {pages.map((page, index) => (\n <ThumbnailItem\n key={page.id}\n page={page}\n index={index}\n isActive={index === currentPage}\n onSelect={() => onPageSelect(index)}\n />\n ))}\n </div>\n </div>\n );\n}; ","/**\n * ShowMasterpiece 模块 - Services 导出\n * \n * 这个文件导出了ShowMasterpiece模块中所有的服务类和API调用函数。\n * 这些服务都采用了模块化设计,具有以下特点:\n * - 完全自包含,封装API调用逻辑\n * - 支持TypeScript类型检查\n * - 统一的错误处理机制\n * - 遵循前端服务层最佳实践\n * \n * 服务分类:\n * - 数据服务:用于数据获取和操作\n * - 业务服务:用于特定业务功能封装\n * - 工具服务:用于通用功能支持\n * - 配置服务:用于配置管理\n */\n\n/** \n * 画集数据服务\n * \n * 提供美术作品前端API服务,主要用于画集数据的获取和查询。\n * 这是一个静态服务类,提供面向对象的API调用接口。\n * \n * 主要功能:\n * - 画集数据的获取和查询\n * - 搜索和筛选功能\n * - 分类和标签管理\n * - 推荐算法\n * \n * 设计特点:\n * - 使用静态方法,无需实例化\n * - 统一的错误处理\n * - 支持多种查询方式\n * - TypeScript类型安全\n * \n * @example\n * ```tsx\n * const collections = await MasterpiecesService.getAllCollections();\n * const filtered = await MasterpiecesService.getCollectionsByCategory(category);\n * ```\n */\nexport { MasterpiecesService, getMasterpieces } from './masterpiecesService';\n\n/** \n * 画集配置管理服务\n * \n * 提供画集和作品配置管理的完整API调用功能,用于后台管理界面。\n * 包含所有与美术作品相关的CRUD操作和配置管理。\n * \n * 主要功能:\n * - 系统配置的读取和更新\n * - 画集的增删改查操作\n * - 作品的增删改查操作\n * - 拖拽排序功能\n * - 分类和标签管理\n * \n * 导出内容:\n * - 配置管理:getConfig, updateConfig, resetConfig\n * - 画集管理:getAllCollections, createCollection, updateCollection, deleteCollection\n * - 画集排序:updateCollectionOrder, moveCollection, moveCollectionUp, moveCollectionDown\n * - 作品管理:addArtworkToCollection, updateArtwork, deleteArtwork, getArtworksByCollection\n * - 作品排序:updateArtworkOrder, moveArtwork, moveArtworkUp, moveArtworkDown\n * - 分类标签:getCategories, getTags, getCollectionsOverview\n * \n * @example\n * ```tsx\n * const config = await getConfig();\n * const collection = await createCollection(formData);\n * await updateCollectionOrder(orderData);\n * ```\n */\nexport { \n // 配置管理\n getConfig,\n updateConfig,\n resetConfig,\n \n // 画集管理\n getAllCollections,\n createCollection,\n updateCollection,\n deleteCollection,\n updateCollectionOrder,\n moveCollection,\n moveCollectionUp,\n moveCollectionDown,\n \n // 作品管理\n addArtworkToCollection,\n updateArtwork,\n deleteArtwork,\n getArtworksByCollection,\n updateArtworkOrder,\n moveArtwork,\n moveArtworkUp,\n moveArtworkDown,\n \n // 分类和标签\n getCategories,\n createCategory,\n getTags,\n getCollectionsOverview\n} from './masterpiecesConfigService';\n\n/** \n * 购物车服务\n * \n * 提供购物车功能的前端本地存储服务,支持购物车操作和批量预订处理。\n * 包含购物车的完整生命周期管理。\n * \n * 主要功能:\n * - 添加商品到购物车\n * - 更新购物车商品数量\n * - 从购物车移除商品\n * - 清空购物车\n * - 批量预订处理\n * \n * 导出内容:\n * - CartService 类 - 完整的购物车服务类\n * - 便捷函数:getCart, addToCart, updateCartItem, removeFromCart, clearCart, batchBooking\n * \n * @example\n * ```tsx\n * const cart = await getCart(userId);\n * await addToCart({ collectionId, quantity, userId });\n * const result = await batchBooking(bookingData);\n * ```\n */\nexport { \n CartService,\n getCart,\n addToCart,\n updateCartItem,\n removeFromCart,\n clearCart,\n batchBooking\n} from './cartService';\n\n/** \n * 预订服务\n * \n * 提供画集预订功能的前端API调用服务,用于用户预订画集的完整流程。\n * 包含预订的创建、查询、更新等功能。\n * \n * 主要功能:\n * - 创建预订\n * - 查询预订列表\n * - 更新预订状态\n * - 获取画集简略信息\n * - 预订数据管理\n * \n * 导出内容:\n * - BookingService 类 - 完整的预订服务类\n * - 便捷函数:createBooking, getBookings, getBooking, updateBooking, deleteBooking, getBookableCollections\n * \n * @example\n * ```tsx\n * const collections = await getBookableCollections();\n * const booking = await createBooking(bookingData);\n * const bookings = await getBookings(params);\n * ```\n */\nexport { \n BookingService,\n createBooking,\n getBookings,\n getBooking,\n updateBooking,\n deleteBooking,\n getBookableCollections\n} from './bookingService';\n\n/** \n * 预订管理服务\n * \n * 提供预订管理功能的API调用服务,主要用于管理员查看和管理所有用户的预订信息。\n * 包含预订数据获取、统计信息、状态管理等功能。\n * \n * 主要功能:\n * - 获取所有预订数据\n * - 预订统计信息\n * - 预订状态更新\n * - 预订数据导出\n * - 强制刷新缓存\n * \n * 导出内容:\n * - BookingAdminService 类 - 完整的预订管理服务类\n * - 类型定义:BookingAdminData, BookingAdminStats, BookingAdminResponse, BookingAdminQueryParams\n * - 便捷函数:getAllBookings, getBookingStats, updateBookingStatus, deleteBooking, exportBookings\n * \n * @example\n * ```tsx\n * const bookings = await getAllBookings(params);\n * const stats = await getBookingStats();\n * await updateBookingStatus(id, status);\n * ```\n */\nexport { \n BookingAdminService,\n getAllBookings,\n getBookingStats,\n forceRefreshAllBookings,\n forceRefreshBookingStats,\n updateBookingStatus as updateBookingAdminStatus,\n deleteBooking as deleteBookingAdmin,\n exportBookings\n} from './bookingAdminService';\n\n/** \n * 预订管理类型定义\n * \n * 导出预订管理相关的TypeScript类型定义,确保类型安全。\n * \n * @example\n * ```tsx\n * const handleBookings = (data: BookingAdminData[]) => {\n * // 处理预订数据\n * };\n * ```\n */\nexport type {\n BookingAdminData,\n BookingAdminStats,\n BookingAdminResponse,\n BookingAdminQueryParams\n} from './bookingAdminService';\n\n/** \n * 购物车历史服务\n * \n * 提供购物车历史记录管理的API调用服务,用于用户查看和管理购物车历史。\n * 包含历史记录的增删改查和统计功能。\n * \n * 主要功能:\n * - 购物车历史记录查询\n * - 历史记录状态管理\n * - 历史数据统计\n * - 历史记录清理\n * \n * 导出内容:\n * - CartHistoryService 类 - 完整的历史记录服务类\n * - 便捷函数:getCartHistory, updateBookingStatus, deleteHistoryRecord, clearUserHistory, getAllHistory, getStatistics, saveCartHistory\n * \n * @example\n * ```tsx\n * const history = await getCartHistory(userId, params);\n * const stats = await getStatistics(userId);\n * await saveCartHistory(historyItem);\n * ```\n */\nexport { \n CartHistoryService,\n getCartHistory,\n updateBookingStatus as updateCartHistoryBookingStatus,\n deleteHistoryRecord,\n clearUserHistory,\n getAllHistory,\n getStatistics,\n saveCartHistory\n} from './cartHistoryService';\n\n/** \n * 文件服务\n * \n * 为ShowMasterpiece模块提供特定的文件服务配置和帮助函数。\n * 包含文件上传、图片处理、存储模式检查等功能。\n * \n * 主要功能:\n * - 获取文件服务配置\n * - 上传作品图片\n * - 获取图片URL\n * - 存储模式检查\n * - 存储模式显示名称\n * \n * @example\n * ```tsx\n * const config = await getShowMasterpieceFileConfig();\n * const result = await uploadArtworkImage(file, collectionId);\n * const imageUrl = await getArtworkImageUrl(fileId);\n * const useUniversal = await shouldUseUniversalFileService();\n * ```\n */\nexport { \n getShowMasterpieceFileConfig,\n uploadArtworkImage,\n getArtworkImageUrl,\n shouldUseUniversalFileService,\n getStorageModeDisplayName,\n clearConfigCache,\n refreshFileServiceConfig\n} from './fileService';\n\n/** \n * 导出配置服务\n * \n * 提供数据导出相关的配置和字段定义,主要用于预订数据的导出功能。\n * 包含导出字段配置和默认导出设置。\n * \n * 主要功能:\n * - 预订导出字段配置\n * - 默认导出配置设置\n * - 导出格式定义\n * \n * @example\n * ```tsx\n * import { BOOKING_EXPORT_FIELDS, DEFAULT_BOOKING_EXPORT_CONFIG } from '@/modules/showmasterpiece';\n * \n * const exportConfig = {\n * ...DEFAULT_BOOKING_EXPORT_CONFIG,\n * fields: BOOKING_EXPORT_FIELDS.filter(field => field.key !== 'sensitive_data')\n * };\n * ```\n */\nexport { \n BOOKING_EXPORT_FIELDS,\n DEFAULT_BOOKING_EXPORT_CONFIG\n} from './exportConfig';\n","/**\n * 通用文件服务配置管理\n */\n\n// 手动加载环境变量\nif (typeof window === 'undefined') {\n try {\n require('dotenv').config({ path: require('path').join(process.cwd(), '.env.local') });\n } catch (error) {\n console.warn('⚠️ [ConfigManager] 无法加载.env.local文件:', error);\n }\n}\n\nimport type {\n UniversalFileServiceConfig,\n StorageType,\n CDNType,\n LocalStorageConfig,\n AliyunOSSConfig,\n AliyunCDNConfig,\n StorageConfig,\n CDNConfig\n} from '../types';\n\n/**\n * 默认配置\n */\nconst DEFAULT_CONFIG: UniversalFileServiceConfig = {\n defaultStorage: 'aliyun-oss', // 修改默认存储为OSS\n storageProviders: {\n 'local': {\n type: 'local',\n enabled: false, // 默认禁用本地存储\n rootPath: process.env.FILE_STORAGE_PATH || 'uploads',\n baseUrl: process.env.FILE_BASE_URL || '/uploads'\n } as LocalStorageConfig,\n 'aliyun-oss': {\n type: 'aliyun-oss',\n enabled: true, // 默认启用OSS\n region: '',\n bucket: '',\n accessKeyId: '',\n accessKeySecret: ''\n } as AliyunOSSConfig,\n 'aws-s3': {\n type: 'aws-s3',\n enabled: false\n } as StorageConfig,\n 'qcloud-cos': {\n type: 'qcloud-cos',\n enabled: false\n } as StorageConfig\n },\n defaultCDN: 'none',\n cdnProviders: {\n 'none': {\n type: 'none',\n enabled: false\n } as CDNConfig,\n 'aliyun-cdn': {\n type: 'aliyun-cdn',\n enabled: false,\n domain: '',\n accessKeyId: '',\n accessKeySecret: ''\n } as AliyunCDNConfig,\n 'aws-cloudfront': {\n type: 'aws-cloudfront',\n enabled: false\n } as CDNConfig,\n 'qcloud-cdn': {\n type: 'qcloud-cdn',\n enabled: false\n } as CDNConfig\n },\n maxFileSize: parseInt(process.env.MAX_FILE_SIZE || '104857600'), // 100MB\n allowedMimeTypes: [\n // 图片类型\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/svg+xml',\n // 音频类型\n 'audio/mpeg',\n 'audio/wav',\n 'audio/ogg',\n 'audio/mp4',\n 'audio/aac',\n // 视频类型\n 'video/mp4',\n 'video/avi',\n 'video/mov',\n 'video/webm',\n 'video/mkv',\n // 文档类型\n 'application/pdf',\n 'text/plain',\n 'application/json',\n 'application/javascript',\n 'text/css',\n 'text/html',\n 'text/markdown',\n // 压缩文件\n 'application/zip',\n 'application/x-zip-compressed',\n 'application/x-rar-compressed',\n 'application/x-7z-compressed',\n // 3D模型文件\n 'application/octet-stream', // PMD/PMX文件\n 'model/gltf+json',\n 'model/gltf-binary'\n ],\n enableProcessing: process.env.ENABLE_FILE_PROCESSING === 'true',\n processingQueueSize: parseInt(process.env.PROCESSING_QUEUE_SIZE || '10'),\n cache: {\n metadataTTL: parseInt(process.env.METADATA_CACHE_TTL || '3600'), // 1小时\n urlTTL: parseInt(process.env.URL_CACHE_TTL || '1800') // 30分钟\n }\n};\n\n/**\n * 配置管理器\n */\nexport class FileServiceConfigManager {\n private config: UniversalFileServiceConfig;\n\n constructor(customConfig?: Partial<UniversalFileServiceConfig>) {\n this.config = this.mergeConfig(DEFAULT_CONFIG, customConfig);\n this.validateConfig();\n }\n\n /**\n * 获取完整配置\n */\n getConfig(): UniversalFileServiceConfig {\n return { ...this.config };\n }\n\n /**\n * 获取存储提供者配置\n */\n getStorageConfig(type: StorageType): StorageConfig | undefined {\n return this.config.storageProviders[type];\n }\n\n /**\n * 获取CDN提供者配置\n */\n getCDNConfig(type: CDNType): CDNConfig | undefined {\n return this.config.cdnProviders[type];\n }\n\n /**\n * 更新配置\n */\n updateConfig(updates: Partial<UniversalFileServiceConfig>): void {\n this.config = this.mergeConfig(this.config, updates);\n this.validateConfig();\n }\n\n /**\n * 启用存储提供者\n */\n enableStorageProvider(type: StorageType, config?: Partial<StorageConfig>): void {\n if (this.config.storageProviders[type]) {\n this.config.storageProviders[type] = {\n ...this.config.storageProviders[type],\n ...config,\n enabled: true\n };\n }\n }\n\n /**\n * 禁用存储提供者\n */\n disableStorageProvider(type: StorageType): void {\n if (this.config.storageProviders[type]) {\n this.config.storageProviders[type].enabled = false;\n }\n }\n\n /**\n * 启用CDN提供者\n */\n enableCDNProvider(type: CDNType, config?: Partial<CDNConfig>): void {\n if (this.config.cdnProviders[type]) {\n this.config.cdnProviders[type] = {\n ...this.config.cdnProviders[type],\n ...config,\n enabled: true\n };\n this.config.defaultCDN = type;\n }\n }\n\n /**\n * 禁用CDN提供者\n */\n disableCDNProvider(type: CDNType): void {\n if (this.config.cdnProviders[type]) {\n this.config.cdnProviders[type].enabled = false;\n if (this.config.defaultCDN === type) {\n this.config.defaultCDN = 'none';\n }\n }\n }\n\n /**\n * 从环境变量加载阿里云OSS配置\n */\n loadAliyunOSSFromEnv(): void {\n const config: Partial<AliyunOSSConfig> = {\n region: process.env.ALIYUN_OSS_REGION,\n bucket: process.env.ALIYUN_OSS_BUCKET,\n accessKeyId: process.env.ALIYUN_OSS_ACCESS_KEY_ID,\n accessKeySecret: process.env.ALIYUN_OSS_ACCESS_KEY_SECRET,\n customDomain: process.env.ALIYUN_OSS_CUSTOM_DOMAIN,\n secure: process.env.ALIYUN_OSS_SECURE === 'true',\n internal: process.env.ALIYUN_OSS_INTERNAL === 'true'\n };\n\n // 检查必需的配置项\n console.log('🔍 [ConfigManager] 阿里云OSS配置:', {\n region: config.region,\n bucket: config.bucket,\n accessKeyId: config.accessKeyId ? '***' : '未设置',\n accessKeySecret: config.accessKeySecret ? '***' : '未设置',\n customDomain: config.customDomain || '未设置'\n });\n if (config.region && config.bucket && config.accessKeyId && config.accessKeySecret) {\n this.enableStorageProvider('aliyun-oss', config);\n this.config.defaultStorage = 'aliyun-oss';\n console.log('✅ [ConfigManager] 从环境变量加载阿里云OSS配置成功');\n } else {\n console.warn('⚠️ [ConfigManager] 阿里云OSS环境变量配置不完整');\n }\n }\n\n /**\n * 从配置管理模块加载阿里云OSS配置\n */\n async loadAliyunOSSFromConfigManager(): Promise<void> {\n // sa2kit: configManager 未迁移,保持空实现\n return;\n }\n\n /**\n * 从环境变量加载阿里云CDN配置\n */\n loadAliyunCDNFromEnv(): void {\n const config: Partial<AliyunCDNConfig> = {\n domain: process.env.ALIYUN_CDN_DOMAIN,\n accessKeyId: process.env.ALIYUN_CDN_ACCESS_KEY_ID,\n accessKeySecret: process.env.ALIYUN_CDN_ACCESS_KEY_SECRET,\n region: process.env.ALIYUN_CDN_REGION\n };\n\n // 检查必需的配置项\n if (config.domain && config.accessKeyId && config.accessKeySecret) {\n this.enableCDNProvider('aliyun-cdn', config);\n console.log('✅ [ConfigManager] 从环境变量加载阿里云CDN配置成功');\n } else {\n // CDN配置是可选的,不输出警告\n console.log('ℹ️ [ConfigManager] 阿里云CDN未配置,将使用默认存储方式');\n }\n }\n\n /**\n * 验证配置有效性\n */\n private validateConfig(): void {\n // 检查默认存储提供者是否启用\n const defaultStorageConfig = this.config.storageProviders[this.config.defaultStorage];\n if (!defaultStorageConfig || !defaultStorageConfig.enabled) {\n console.warn(`⚠️ [ConfigManager] 默认存储提供者 ${this.config.defaultStorage} 未启用`);\n }\n\n // 检查文件大小限制\n if (this.config.maxFileSize <= 0) {\n throw new Error('文件大小限制必须大于0');\n }\n\n // 检查处理队列大小\n if (this.config.processingQueueSize <= 0) {\n throw new Error('处理队列大小必须大于0');\n }\n\n // 检查缓存TTL\n if (this.config.cache.metadataTTL <= 0 || this.config.cache.urlTTL <= 0) {\n throw new Error('缓存TTL必须大于0');\n }\n }\n\n /**\n * 合并配置\n */\n private mergeConfig(\n base: UniversalFileServiceConfig,\n override?: Partial<UniversalFileServiceConfig>\n ): UniversalFileServiceConfig {\n if (!override) return { ...base };\n\n return {\n ...base,\n ...override,\n storageProviders: {\n ...base.storageProviders,\n ...(override.storageProviders || {})\n },\n cdnProviders: {\n ...base.cdnProviders,\n ...(override.cdnProviders || {})\n },\n cache: {\n ...base.cache,\n ...(override.cache || {})\n }\n };\n }\n}\n\n/**\n * 创建默认配置管理器\n */\nexport async function createFileServiceConfig(customConfig?: Partial<UniversalFileServiceConfig>): Promise<FileServiceConfigManager> {\n const configManager = new FileServiceConfigManager(customConfig);\n \n // 尝试从环境变量加载云服务配置\n await configManager.loadAliyunOSSFromEnv();\n await configManager.loadAliyunCDNFromEnv();\n await configManager.loadAliyunOSSFromConfigManager();\n return configManager;\n}\n\n/**\n * 创建配置管理器(优先从配置管理模块加载)\n */\nexport async function createFileServiceConfigWithConfigManager(customConfig?: Partial<UniversalFileServiceConfig>): Promise<FileServiceConfigManager> {\n const configManager = new FileServiceConfigManager(customConfig);\n \n // 优先从配置管理模块加载配置\n await configManager.loadAliyunOSSFromConfigManager();\n \n // 如果配置管理模块没有配置,则从环境变量加载\n const ossConfig = configManager.getStorageConfig('aliyun-oss');\n if (!ossConfig || !ossConfig.enabled) {\n configManager.loadAliyunOSSFromEnv();\n }\n \n // 检查OSS配置是否有效\n const finalOssConfig = configManager.getStorageConfig('aliyun-oss');\n if (!finalOssConfig || !finalOssConfig.enabled || !validateAliyunOSSConfig(finalOssConfig as AliyunOSSConfig)) {\n console.warn('⚠️ [ConfigManager] OSS配置无效或未启用,启用本地存储作为备用方案');\n // 启用本地存储作为备用\n configManager.enableStorageProvider('local');\n configManager.updateConfig({ defaultStorage: 'local' });\n console.log('ℹ️ [ConfigManager] 已启用本地存储作为备用方案');\n } else {\n // OSS配置有效,确保使用OSS作为默认存储\n configManager.updateConfig({ defaultStorage: 'aliyun-oss' });\n console.log('✅ [ConfigManager] 使用阿里云OSS作为默认存储');\n \n // 同时启用本地存储作为备用\n configManager.enableStorageProvider('local');\n console.log('ℹ️ [ConfigManager] 同时启用本地存储作为备用方案');\n }\n \n configManager.loadAliyunCDNFromEnv();\n \n return configManager;\n}\n\n/**\n * 获取默认配置\n */\nexport function getDefaultConfig(): UniversalFileServiceConfig {\n return { ...DEFAULT_CONFIG };\n}\n\n/**\n * 验证阿里云OSS配置\n */\nexport function validateAliyunOSSConfig(config: AliyunOSSConfig): boolean {\n return !!(\n config.region &&\n config.bucket &&\n config.accessKeyId &&\n config.accessKeySecret\n );\n}\n\n/**\n * 验证阿里云CDN配置\n */\nexport function validateAliyunCDNConfig(config: AliyunCDNConfig): boolean {\n return !!(\n config.domain &&\n config.accessKeyId &&\n config.accessKeySecret\n );\n}\n\n/**\n * 格式化文件大小显示\n */\nexport function formatFileSize(bytes: number): string {\n if (bytes === 0) return '0 B';\n \n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n \n return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n}\n\n/**\n * 检查文件类型是否支持\n */\nexport function isMimeTypeSupported(mimeType: string, allowedTypes: string[]): boolean {\n if (allowedTypes.length === 0) return true;\n return allowedTypes.includes(mimeType);\n}\n\n/**\n * 生成存储提供者显示名称\n */\nexport function getStorageProviderDisplayName(type: StorageType): string {\n const names: Record<StorageType, string> = {\n 'local': '本地存储',\n 'aliyun-oss': '阿里云OSS',\n 'aws-s3': 'AWS S3',\n 'qcloud-cos': '腾讯云COS'\n };\n \n return names[type] || type;\n}\n\n/**\n * 生成CDN提供者显示名称\n */\nexport function getCDNProviderDisplayName(type: CDNType): string {\n const names: Record<CDNType, string> = {\n 'none': '无CDN',\n 'aliyun-cdn': '阿里云CDN',\n 'aws-cloudfront': 'AWS CloudFront',\n 'qcloud-cdn': '腾讯云CDN'\n };\n \n return names[type] || type;\n} ","/**\n * ShowMasterpiece模块 - 文件服务配置\n * \n * 为ShowMasterpiece模块提供特定的文件服务配置和帮助函数\n */\n\nimport { createFileServiceConfig, createFileServiceConfigWithConfigManager } from '@/services/universalFile/config';\n\nimport type { LocalStorageConfig, AliyunOSSConfig, StorageConfig } from '@/services/universalFile/types';\n\n// 缓存ConfigManager实例,避免重复创建\nlet cachedConfigManager: Awaited<ReturnType<typeof createFileServiceConfigWithConfigManager>> | null = null;\n\n/**\n * 从showmasterpiece独立配置获取OSS配置\n */\nasync function getShowmasterpieceOSSConfig() {\n try {\n console.log('🎨 [ShowMasterpiece] 尝试从独立配置读取OSS配置...');\n \n const environment = process.env.NODE_ENV === 'production' ? 'production' : 'development';\n console.log(`🎨 [ShowMasterpiece] 当前环境: ${environment}`);\n \n // 检查是否在服务器端环境\n if (typeof window !== 'undefined') {\n // 客户端环境:通过API读取配置\n console.log('🌐 [ShowMasterpiece] 客户端环境,通过API读取配置');\n \n const configKeys = 'ALIYUN_OSS_REGION,ALIYUN_OSS_BUCKET,ALIYUN_OSS_ACCESS_KEY_ID,ALIYUN_OSS_ACCESS_KEY_SECRET,ALIYUN_OSS_CUSTOM_DOMAIN,ALIYUN_OSS_SECURE,ALIYUN_OSS_INTERNAL';\n const response = await fetch(`/api/showmasterpiece/config/items?environment=${environment}&keys=${configKeys}`);\n \n if (!response.ok) {\n console.warn('⚠️ [ShowMasterpiece] 读取独立配置API失败:', response.status);\n return null;\n }\n \n const data = await response.json();\n if (!data.success || !data.items) {\n console.warn('⚠️ [ShowMasterpiece] 独立配置API响应异常:', data);\n return null;\n }\n\n // 将配置项数组转换为对象\n const configMap: Record<string, string> = {};\n data.items.forEach((item: any) => {\n if (item.value) {\n configMap[item.key] = item.value;\n }\n });\n\n const ossConfig = {\n region: configMap['ALIYUN_OSS_REGION'],\n bucket: configMap['ALIYUN_OSS_BUCKET'],\n accessKeyId: configMap['ALIYUN_OSS_ACCESS_KEY_ID'],\n accessKeySecret: configMap['ALIYUN_OSS_ACCESS_KEY_SECRET'],\n customDomain: configMap['ALIYUN_OSS_CUSTOM_DOMAIN'],\n secure: configMap['ALIYUN_OSS_SECURE'] === 'true',\n internal: configMap['ALIYUN_OSS_INTERNAL'] === 'true'\n };\n\n console.log('🎨 [ShowMasterpiece] 独立配置读取结果:', {\n region: ossConfig.region || '未配置',\n bucket: ossConfig.bucket || '未配置',\n accessKeyId: ossConfig.accessKeyId ? '***' : '未配置',\n accessKeySecret: ossConfig.accessKeySecret ? '***' : '未配置',\n customDomain: ossConfig.customDomain || '未配置',\n secure: ossConfig.secure,\n internal: ossConfig.internal\n });\n\n // 检查必要配置是否完整\n if (ossConfig.region && ossConfig.bucket && ossConfig.accessKeyId && ossConfig.accessKeySecret) {\n console.log('✅ [ShowMasterpiece] 独立配置完整,将使用独立OSS配置');\n return ossConfig;\n } else {\n console.log('⚠️ [ShowMasterpiece] 独立配置不完整,将回退到公共配置');\n console.log('🔍 [ShowMasterpiece] 缺失配置项:', {\n region: !ossConfig.region,\n bucket: !ossConfig.bucket,\n accessKeyId: !ossConfig.accessKeyId,\n accessKeySecret: !ossConfig.accessKeySecret\n });\n return null;\n }\n } else {\n // 服务器端环境:当前 sa2kit 未提供独立配置服务,回退到默认配置\n console.log('🖥️ [ShowMasterpiece] 服务器端环境,使用默认配置回退');\n return null;\n }\n } catch (error) {\n console.warn('⚠️ [ShowMasterpiece] 读取独立配置失败:', error);\n return null;\n }\n}\n\n/**\n * 获取缓存的ConfigManager实例\n */\nasync function getCachedConfigManager() {\n if (!cachedConfigManager) {\n // 尝试从showmasterpiece独立配置创建配置管理器\n const showmasterpieceOSSConfig = await getShowmasterpieceOSSConfig();\n \n if (showmasterpieceOSSConfig) {\n console.log('🎨 [ShowMasterpiece] 使用独立OSS配置创建配置管理器');\n \n // 使用独立配置创建配置管理器\n cachedConfigManager = await createFileServiceConfig({\n defaultStorage: 'aliyun-oss',\n storageProviders: {\n 'local': {\n type: 'local',\n enabled: false,\n rootPath: 'uploads',\n baseUrl: '/uploads'\n } as LocalStorageConfig,\n 'aliyun-oss': {\n type: 'aliyun-oss',\n enabled: true,\n ...showmasterpieceOSSConfig\n } as AliyunOSSConfig,\n 'aws-s3': {\n type: 'aws-s3',\n enabled: false\n } as StorageConfig,\n 'qcloud-cos': {\n type: 'qcloud-cos',\n enabled: false\n } as StorageConfig\n }\n });\n } else {\n console.log('🎨 [ShowMasterpiece] 独立配置不完整,使用默认配置');\n // 使用默认配置(主要从环境变量读取)\n cachedConfigManager = await createFileServiceConfig({\n defaultStorage: 'local', // 默认使用本地存储\n storageProviders: {\n 'local': {\n type: 'local',\n enabled: true,\n rootPath: 'uploads',\n baseUrl: '/uploads'\n } as LocalStorageConfig,\n 'aliyun-oss': {\n type: 'aliyun-oss',\n enabled: false // 如果独立配置失败,禁用OSS\n } as AliyunOSSConfig,\n 'aws-s3': {\n type: 'aws-s3',\n enabled: false\n } as StorageConfig,\n 'qcloud-cos': {\n type: 'qcloud-cos',\n enabled: false\n } as StorageConfig\n }\n });\n }\n }\n return cachedConfigManager;\n}\n\n/**\n * 获取ShowMasterpiece模块的文件服务配置\n */\nexport async function getShowMasterpieceFileConfig() {\n const configManager = await getCachedConfigManager();\n \n // 检查是否有OSS配置,如果有则优先使用OSS\n const config = configManager.getConfig();\n const ossConfig = config.storageProviders['aliyun-oss'];\n \n if (ossConfig && ossConfig.enabled) {\n console.log('✅ [ShowMasterpiece] 使用阿里云OSS存储');\n return configManager;\n } else {\n console.log('ℹ️ [ShowMasterpiece] OSS未配置,使用本地存储');\n return configManager;\n }\n}\n\n/**\n * 上传ShowMasterpiece作品图片\n */\nexport async function uploadArtworkImage(file: File, collectionId?: number): Promise<{\n fileId: string;\n accessUrl: string;\n}> {\n console.log('🎨 [ShowMasterpiece] 开始上传作品图片:', file.name);\n\n // 创建FormData\n const formData = new FormData();\n formData.append('file', file);\n formData.append('moduleId', 'showmasterpiece');\n formData.append('businessId', collectionId ? `collection-${collectionId}` : 'artwork');\n\n // 为作品图片生成包含扩展名的路径,确保被正确识别为图片文件\n const timestamp = Date.now();\n const randomId = Math.random().toString(36).substr(2, 9);\n const extension = file.name.split('.').pop()?.toLowerCase() || 'jpg';\n const basePath = collectionId ? `showmasterpiece/collection-${collectionId}` : 'showmasterpiece/artwork';\n formData.append('folderPath', `${basePath}/${timestamp}_${randomId}.${extension}`);\n formData.append('needsProcessing', 'true');\n \n // 调用通用文件上传API\n const response = await fetch('/api/universal-file/upload', {\n method: 'POST',\n body: formData,\n });\n \n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || `HTTP ${response.status}: ${response.statusText}`);\n }\n \n const result = await response.json();\n \n if (!result.success) {\n throw new Error(result.error || '上传失败');\n }\n \n console.log('✅ [ShowMasterpiece] 作品图片上传成功:', {\n fileId: result.data.fileId,\n accessUrl: result.data.accessUrl\n });\n \n return {\n fileId: result.data.fileId,\n accessUrl: result.data.accessUrl\n };\n}\n\n/**\n * 获取作品图片访问URL\n */\nexport async function getArtworkImageUrl(fileId: string): Promise<string> {\n console.log('🔗 [ShowMasterpiece] 获取作品图片URL:', fileId);\n \n const response = await fetch(`/api/universal-file/${fileId}`);\n \n if (!response.ok) {\n throw new Error(`获取文件URL失败: HTTP ${response.status}`);\n }\n \n const result = await response.json();\n \n if (!result.success) {\n throw new Error(result.error || '获取文件URL失败');\n }\n \n return result.data.accessUrl;\n}\n\n/**\n * 检查是否应该使用通用文件服务\n * \n * 策略:\n * 1. 如果已经配置了OSS,新上传默认使用文件服务\n * 2. 如果只有本地存储,可以选择使用文件服务进行统一管理\n * 3. 兼容旧的Base64存储方式\n */\nexport async function shouldUseUniversalFileService(): Promise<boolean> {\n try {\n const configManager = await getCachedConfigManager();\n \n const config = configManager.getConfig();\n const ossConfig = config.storageProviders['aliyun-oss'];\n \n // 如果OSS已配置且启用,推荐使用文件服务\n if (ossConfig && ossConfig.enabled) {\n return true;\n }\n \n // 即使只有本地存储,也推荐使用文件服务进行统一管理\n // 这样可以享受文件去重、缓存、统计等功能\n return true;\n \n } catch (error) {\n console.warn('⚠️ [ShowMasterpiece] 检查文件服务配置失败:', error);\n return false;\n }\n}\n\n/**\n * 获取存储模式显示名称\n */\nexport async function getStorageModeDisplayName(): Promise<string> {\n const shouldUse = await shouldUseUniversalFileService();\n if (shouldUse) {\n const configManager = await getCachedConfigManager();\n \n const config = configManager.getConfig();\n const ossConfig = config.storageProviders['aliyun-oss'];\n \n if (ossConfig && ossConfig.enabled) {\n return '阿里云OSS + CDN (独立配置)';\n } else {\n return '本地存储 + 文件服务';\n }\n } else {\n return 'Base64数据库存储';\n }\n}\n\n/**\n * 清除配置缓存\n * \n * 当配置更新后调用此函数,强制重新读取配置\n */\nexport function clearConfigCache(): void {\n console.log('🧹 [ShowMasterpiece] 清除配置缓存');\n cachedConfigManager = null;\n}\n\n/**\n * 强制刷新配置\n * \n * 清除缓存并重新获取配置\n */\nexport async function refreshFileServiceConfig() {\n console.log('🔄 [ShowMasterpiece] 强制刷新文件服务配置');\n clearConfigCache();\n const configManager = await getCachedConfigManager();\n \n // 如果是使用独立配置,确保重新初始化Provider(仅在服务器端)\n if (typeof window === 'undefined') {\n try {\n const config = configManager.getConfig() as any;\n const ossConfig = config?.storageProviders?.['aliyun-oss'];\n \n if (ossConfig && ossConfig.enabled) {\n console.log('🔄 [ShowMasterpiece] 重新初始化OSS Provider以应用新配置');\n // 创建新的文件服务实例以确保Provider使用最新配置\n const { UniversalFileService } = await import('../../universalFile/server/UniversalFileService');\n const fileService = new UniversalFileService(config as any);\n await fileService.initialize();\n \n // 重新初始化Provider\n await (fileService as any).reinitializeStorageProviders?.();\n }\n } catch (error) {\n console.warn('⚠️ [ShowMasterpiece] 重新初始化Provider失败:', error);\n }\n }\n \n return configManager;\n} \n","/**\n * ShowMasterpiece 模块 - 导出配置\n * \n * 定义预订信息的导出字段配置\n */\n\nimport type { ExportField } from '@/universalExport';\n\n/**\n * 预订信息导出字段定义\n */\nexport const BOOKING_EXPORT_FIELDS: ExportField[] = [\n {\n key: 'id',\n label: '预订ID',\n type: 'number',\n enabled: true,\n required: true,\n description: '预订记录的唯一标识',\n alignment: 'center',\n },\n {\n key: 'collectionId',\n label: '画集ID',\n type: 'number',\n enabled: true,\n required: true,\n description: '画集的唯一标识',\n alignment: 'center',\n },\n {\n key: 'qqNumber',\n label: 'QQ号',\n type: 'string',\n enabled: true,\n required: false,\n description: '用户的QQ号码',\n alignment: 'left',\n },\n {\n key: 'phoneNumber',\n label: '手机号',\n type: 'string',\n enabled: true,\n required: false,\n description: '用户的手机号码',\n alignment: 'left',\n },\n\n {\n key: 'collectionTitle',\n label: '画集标题',\n type: 'string',\n enabled: true,\n required: true,\n description: '预订的画集标题',\n alignment: 'left',\n },\n {\n key: 'collectionNumber',\n label: '画集编号',\n type: 'string',\n enabled: true,\n required: true,\n description: '画集的编号',\n alignment: 'left',\n },\n {\n key: 'collectionPrice',\n label: '画集价格',\n type: 'number',\n enabled: true,\n required: true,\n description: '画集的价格',\n alignment: 'right',\n formatter: (value: any) => `¥${Number(value).toFixed(2)}`,\n },\n {\n key: 'status',\n label: '预订状态',\n type: 'string',\n enabled: true,\n required: true,\n description: '预订的当前状态',\n alignment: 'center',\n formatter: (value: any) => {\n const statusMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消',\n };\n return statusMap[value] || value;\n },\n },\n {\n key: 'quantity',\n label: '预订数量',\n type: 'number',\n enabled: true,\n required: true,\n description: '预订的数量',\n alignment: 'center',\n },\n {\n key: 'price',\n label: '单价',\n type: 'number',\n enabled: true,\n required: true,\n description: '单个画集的价格',\n alignment: 'right',\n formatter: (value: any) => `¥${Number(value).toFixed(2)}`,\n },\n {\n key: 'totalPrice',\n label: '总价格',\n type: 'number',\n enabled: true,\n required: true,\n description: '总价格(单价 × 数量)',\n alignment: 'right',\n formatter: (value: any) => `¥${Number(value).toFixed(2)}`,\n },\n {\n key: 'notes',\n label: '用户备注',\n type: 'string',\n enabled: true,\n required: false,\n description: '用户提交的备注信息',\n alignment: 'left',\n },\n {\n key: 'pickupMethod',\n label: '领取方式',\n type: 'string',\n enabled: true,\n required: false,\n description: '用户选择的领取方式',\n alignment: 'left',\n },\n {\n key: 'adminNotes',\n label: '管理员备注',\n type: 'string',\n enabled: true,\n required: false,\n description: '管理员添加的备注信息',\n alignment: 'left',\n },\n\n {\n key: 'createdAt',\n label: '创建时间',\n type: 'date',\n enabled: true,\n required: true,\n description: '预订创建的时间',\n alignment: 'center',\n formatter: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n },\n {\n key: 'updatedAt',\n label: '更新时间',\n type: 'date',\n enabled: true,\n required: true,\n description: '预订最后更新的时间',\n alignment: 'center',\n formatter: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n },\n {\n key: 'confirmedAt',\n label: '确认时间',\n type: 'date',\n enabled: true,\n required: false,\n description: '预订确认的时间',\n alignment: 'center',\n formatter: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n },\n {\n key: 'completedAt',\n label: '完成时间',\n type: 'date',\n enabled: true,\n required: false,\n description: '预订完成的时间',\n alignment: 'center',\n formatter: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n },\n {\n key: 'cancelledAt',\n label: '取消时间',\n type: 'date',\n enabled: true,\n required: false,\n description: '预订取消的时间',\n alignment: 'center',\n formatter: (value: any) => {\n if (!value) return '';\n const date = new Date(value);\n return date.toLocaleString('zh-CN');\n },\n },\n {\n key: 'userTotalPrice',\n label: '用户总价',\n type: 'number',\n enabled: false, // 默认不启用,需要勾选才启用\n required: false,\n description: '根据QQ号和手机号统一匹配的该用户所有预订商品的总价格',\n alignment: 'right',\n formatter: (value: any) => `¥${Number(value || 0).toFixed(2)}`,\n },\n];\n\n/**\n * 默认导出配置\n */\nexport const DEFAULT_BOOKING_EXPORT_CONFIG = {\n id: 'default_booking_export',\n name: '预订信息导出',\n description: '导出所有预订信息为Excel格式,支持QQ号和手机号合并单元格',\n format: 'excel' as const,\n fields: BOOKING_EXPORT_FIELDS,\n grouping: {\n enabled: true,\n fields: [\n {\n key: 'phoneNumber',\n label: '手机号',\n mode: 'merge' as const,\n valueProcessing: 'first' as const,\n showGroupHeader: false,\n mergeCells: true\n },\n {\n key: 'qqNumber',\n label: 'QQ号',\n mode: 'merge' as const,\n valueProcessing: 'first' as const,\n showGroupHeader: false,\n mergeCells: true\n },\n {\n key: 'userTotalPrice',\n label: '用户总价',\n mode: 'merge' as const,\n valueProcessing: 'first' as const,\n showGroupHeader: false,\n mergeCells: true\n }\n ],\n preserveOrder: true,\n nullValueHandling: 'separate' as const,\n },\n fileNameTemplate: '预订信息_{date}',\n includeHeader: true,\n delimiter: ',',\n encoding: 'utf-8',\n addBOM: true,\n maxRows: undefined,\n createdAt: new Date(),\n updatedAt: new Date(),\n moduleId: 'showmasterpiece',\n businessId: 'bookings',\n}; \n","'use client';\n\nimport React from 'react';\nimport { GenericOrderManager } from '@/components/GenericOrderManager';\nimport { \n getAllCollections,\n updateCollectionOrder,\n moveCollectionUp,\n moveCollectionDown\n} from '../services';\nimport type { ArtCollection } from '../types';\n\ninterface CollectionOrderManagerV2Props {\n onOrderChanged?: () => void;\n moveCollectionUp?: (id: number) => Promise<void>;\n moveCollectionDown?: (id: number) => Promise<void>;\n updateCollectionOrder?: (orders: { id: number; displayOrder: number }[]) => Promise<void>;\n}\n\nexport function CollectionOrderManagerV2({ \n onOrderChanged, \n moveCollectionUp: propMoveCollectionUp,\n moveCollectionDown: propMoveCollectionDown,\n updateCollectionOrder: propUpdateCollectionOrder\n}: CollectionOrderManagerV2Props) {\n // 定义操作函数\n const operations = {\n loadItems: async (): Promise<ArtCollection[]> => {\n console.log('📚 [画集排序V2] 开始加载画集数据...');\n const data = await getAllCollections();\n console.log('📚 [画集排序V2] 画集数据加载完成:', {\n collectionsCount: data.length,\n collections: data.map(c => ({ id: c.id, title: c.title }))\n });\n return data;\n },\n\n moveItemUp: async (id: number): Promise<void> => {\n console.log('⬆️ [画集排序V2] 执行上移操作:', id);\n if (propMoveCollectionUp) {\n await propMoveCollectionUp(id);\n } else {\n await moveCollectionUp(id);\n }\n },\n\n moveItemDown: async (id: number): Promise<void> => {\n console.log('⬇️ [画集排序V2] 执行下移操作:', id);\n if (propMoveCollectionDown) {\n await propMoveCollectionDown(id);\n } else {\n await moveCollectionDown(id);\n }\n },\n\n updateItemOrder: async (orders: { id: number; order: number }[]): Promise<void> => {\n console.log('💾 [画集排序V2] 批量更新顺序:', orders);\n const total = orders.length;\n const collectionOrders = orders.map(order => ({\n id: order.id,\n displayOrder: total - order.order\n }));\n if (propUpdateCollectionOrder) {\n await propUpdateCollectionOrder(collectionOrders);\n } else {\n await updateCollectionOrder(collectionOrders);\n }\n }\n };\n\n // 定义渲染函数\n const renderCollection = (collection: ArtCollection, index: number, isFirst: boolean, isLast: boolean) => {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', flex: 1 }}>\n <img\n src={collection.coverImage || '/placeholder-image.png'}\n alt={collection.title}\n style={{\n width: '60px',\n height: '60px',\n objectFit: 'cover',\n borderRadius: '6px',\n border: '1px solid #e5e7eb'\n }}\n />\n <div style={{ flex: 1, minWidth: 0 }}>\n <h4 style={{ \n margin: '0 0 4px 0', \n color: '#1f2937', \n fontSize: '16px', \n fontWeight: 600,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }}>\n {collection.title}\n </h4>\n <p style={{\n fontSize: 13,\n color: '#64748b',\n marginBottom: 2,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }}>\n 编号:{collection.number}\n </p>\n {collection.category && (\n <span style={{\n display: 'inline-block',\n padding: '2px 8px',\n background: '#dbeafe',\n color: '#1e40af',\n fontSize: '12px',\n fontWeight: 500,\n borderRadius: '12px'\n }}>\n {collection.category}\n </span>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <GenericOrderManager\n operations={operations}\n renderItem={renderCollection}\n title=\"画集排序管理\"\n description=\"拖拽或使用按钮调整画集在前台的显示顺序\"\n onOrderChanged={onOrderChanged}\n emptyMessage=\"暂无画集数据\"\n loadingMessage=\"加载画集数据...\"\n />\n );\n} \n","'use client';\n\nimport React from 'react';\nimport { Image as ImageIcon } from 'lucide-react';\nimport { GenericOrderManager } from '@/components/GenericOrderManager';\nimport { \n getArtworksByCollection,\n updateArtworkOrder,\n moveArtworkUp,\n moveArtworkDown\n} from '../services';\nimport type { ArtworkPage } from '../types';\n\ninterface ArtworkOrderManagerV2Props {\n collectionId: number;\n onOrderChanged?: () => void;\n moveArtworkUp?: (collectionId: number, id: number) => Promise<void>;\n moveArtworkDown?: (collectionId: number, id: number) => Promise<void>;\n updateArtworkOrder?: (collectionId: number, orders: { id: number; pageOrder: number }[]) => Promise<void>;\n}\n\ntype ArtworkWithOrder = ArtworkPage & { pageOrder: number };\n\nexport function ArtworkOrderManagerV2({ \n collectionId, \n onOrderChanged,\n moveArtworkUp: propMoveArtworkUp,\n moveArtworkDown: propMoveArtworkDown,\n updateArtworkOrder: propUpdateArtworkOrder\n}: ArtworkOrderManagerV2Props) {\n // 定义操作函数\n const operations = {\n loadItems: async (): Promise<ArtworkWithOrder[]> => {\n console.log('📋 [作品排序V2] 开始加载作品数据...', { collectionId });\n const data = await getArtworksByCollection(collectionId);\n console.log('📋 [作品排序V2] 加载作品数据完成:', {\n collectionId,\n artworksCount: data.length,\n artworks: data.map(a => ({ id: a.id, title: a.title, pageOrder: a.pageOrder }))\n });\n return data;\n },\n\n moveItemUp: async (id: number): Promise<void> => {\n console.log('⬆️ [作品排序V2] 执行上移操作:', { collectionId, artworkId: id });\n if (propMoveArtworkUp) {\n await propMoveArtworkUp(collectionId, id);\n } else {\n await moveArtworkUp(collectionId, id);\n }\n },\n\n moveItemDown: async (id: number): Promise<void> => {\n console.log('⬇️ [作品排序V2] 执行下移操作:', { collectionId, artworkId: id });\n if (propMoveArtworkDown) {\n await propMoveArtworkDown(collectionId, id);\n } else {\n await moveArtworkDown(collectionId, id);\n }\n },\n\n updateItemOrder: async (orders: { id: number; order: number }[]): Promise<void> => {\n console.log('💾 [作品排序V2] 批量更新顺序:', { collectionId, orders });\n \n // 直接使用传入的order值作为pageOrder\n const artworkOrders = orders.map((order) => {\n console.log(`转换映射: id=${order.id}, order=${order.order}, pageOrder=${order.order}`);\n return {\n id: order.id,\n pageOrder: order.order // 直接使用传入的order值\n };\n });\n \n console.log('💾 [作品排序V2] 转换后的pageOrder:', { \n collectionId, \n artworkOrders: artworkOrders.map(ao => ({ id: ao.id, pageOrder: ao.pageOrder }))\n });\n \n if (propUpdateArtworkOrder) {\n await propUpdateArtworkOrder(collectionId, artworkOrders);\n } else {\n await updateArtworkOrder(collectionId, artworkOrders);\n }\n }\n };\n\n // 定义渲染函数\n const renderArtwork = (artwork: ArtworkWithOrder, index: number, isFirst: boolean, isLast: boolean) => {\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '12px', flex: 1 }}>\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '80px',\n height: '80px',\n borderRadius: '6px',\n border: '1px solid #e5e7eb',\n overflow: 'hidden',\n background: '#f9fafb',\n flexShrink: 0\n }}>\n {artwork.image ? (\n <img\n src={artwork.image}\n alt={artwork.title}\n style={{\n width: '100%',\n height: '100%',\n objectFit: 'cover'\n }}\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.style.display = 'none';\n const placeholder = target.parentElement?.querySelector('.placeholder') as HTMLElement;\n if (placeholder) {\n placeholder.style.display = 'flex';\n }\n }}\n />\n ) : (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n color: '#9ca3af',\n background: '#f3f4f6'\n }}>\n <ImageIcon size={24} />\n </div>\n )}\n <div className=\"placeholder\" style={{ \n display: 'none',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n color: '#9ca3af',\n background: '#f3f4f6'\n }}>\n <ImageIcon size={24} />\n </div>\n </div>\n \n <div style={{ flex: 1, minWidth: 0 }}>\n <h4 style={{ \n margin: '0 0 4px 0', \n color: '#1f2937', \n fontSize: '16px', \n fontWeight: 600,\n lineHeight: 1.4,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }}>\n {artwork.title}\n </h4>\n <p style={{ \n margin: '0 0 4px 0', \n color: '#6b7280', \n fontSize: '14px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }}>\n 编号:{artwork.number}\n </p>\n {artwork.createdTime && (\n <p style={{ \n margin: '0 0 4px 0', \n color: '#6b7280', \n fontSize: '14px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }}>\n 创作时间:{artwork.createdTime}\n </p>\n )}\n {artwork.theme && (\n <span style={{\n display: 'inline-block',\n background: '#dbeafe',\n color: '#1d4ed8',\n fontSize: '12px',\n padding: '2px 6px',\n borderRadius: '4px',\n marginRight: '6px'\n }}>\n {artwork.theme}\n </span>\n )}\n </div>\n </div>\n );\n };\n\n return (\n <GenericOrderManager\n operations={operations}\n renderItem={renderArtwork}\n title=\"作品排序管理\"\n description=\"拖拽或使用按钮调整作品在画集中的显示顺序\"\n onOrderChanged={onOrderChanged}\n emptyMessage=\"暂无作品数据\"\n loadingMessage=\"加载作品数据...\"\n />\n );\n} ","/**\n * 通用图片上传组件\n * 使用通用文件服务,支持阿里云OSS存储\n * 可在画集封面和作品图片之间复用\n *\n * 修复记录:\n * - 2026-01-19: 修复封面图片上传覆盖问题\n * 为封面图片生成唯一文件夹路径(包含时间戳和随机ID),避免新画集覆盖历史画集的封面图片\n * - 2026-01-19: 修复图片链接过期问题\n * 为封面图片路径添加文件扩展名,确保被正确识别为图片文件,避免生成带过期时间的签名URL\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\n\ninterface UniversalImageUploadProps {\n /** 当前图片值(URL) */\n value?: string;\n /** 通用文件服务的文件ID */\n fileId?: string;\n /** 值变化回调,返回包含image和fileId的对象 */\n onChange: (data: { image?: string; fileId?: string }) => void;\n /** 占位符文本 */\n placeholder?: string;\n /** 标签文本 */\n label?: string;\n /** 是否禁用 */\n disabled?: boolean;\n /** 业务类型:cover(封面) 或 artwork(作品) */\n businessType?: 'cover' | 'artwork';\n /** 是否显示调试信息 */\n showDebugInfo?: boolean;\n /** 是否显示测试按钮 */\n showTestButton?: boolean;\n /** 自定义样式类名 */\n className?: string;\n}\n\nexport const UniversalImageUpload: React.FC<UniversalImageUploadProps> = ({\n value,\n fileId,\n onChange,\n placeholder = \"上传图片\",\n label = \"图片\",\n disabled = false,\n businessType = 'cover',\n showDebugInfo = false,\n showTestButton = false,\n className = ''\n}) => {\n const [uploading, setUploading] = useState(false);\n const [inputId] = useState(() => `universal-image-upload-${Math.random().toString(36).substr(2, 9)}`);\n\n // 组件挂载时的初始化\n useEffect(() => {\n // 组件初始化逻辑(已移除调试信息)\n }, [inputId, businessType]);\n\n // 处理通用文件服务上传\n const handleUniversalUpload = async (file: File) => {\n setUploading(true);\n try {\n // 创建FormData\n const formData = new FormData();\n formData.append('file', file);\n formData.append('moduleId', 'showmasterpiece');\n formData.append('businessId', businessType);\n\n // 为封面图片生成唯一的文件夹路径,避免覆盖历史文件\n // 路径包含文件扩展名,确保被正确识别为图片文件\n if (businessType === 'cover') {\n const timestamp = Date.now();\n const randomId = Math.random().toString(36).substr(2, 9);\n // 获取文件扩展名,默认为.jpg\n const extension = file.name.split('.').pop()?.toLowerCase() || 'jpg';\n formData.append('folderPath', `showmasterpiece/cover/${timestamp}_${randomId}.${extension}`);\n }\n\n formData.append('needsProcessing', 'true');\n \n // 调用通用文件上传API\n const response = await fetch('/api/universal-file/upload', {\n method: 'POST',\n body: formData,\n });\n \n if (!response.ok) {\n const errorData = await response.json();\n throw new Error(errorData.error || `HTTP ${response.status}`);\n }\n \n const result = await response.json();\n \n if (!result.success) {\n throw new Error(result.error || '上传失败');\n }\n \n // 更新状态为使用新的文件服务\n onChange({\n image: result.data.accessUrl, // 使用访问URL\n fileId: result.data.fileId\n });\n \n } catch (error) {\n // 上传失败时的友好提示\n alert(`文件上传失败: ${error instanceof Error ? error.message : '未知错误'}`);\n throw error;\n } finally {\n setUploading(false);\n }\n };\n\n // 处理文件选择\n const handleFileSelect = async (file: File) => {\n await handleUniversalUpload(file);\n };\n\n // 渲染文件上传界面\n const renderUploadArea = () => {\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const file = e.target.files?.[0];\n if (file) {\n handleFileSelect(file);\n }\n };\n\n const handleTestClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const input = document.getElementById(inputId) as HTMLInputElement;\n if (input) {\n input.click();\n }\n };\n\n const handleDivClick = (e: React.MouseEvent) => {\n // 处理div点击事件\n };\n\n return (\n <div \n className=\"border-2 border-dashed border-slate-300 rounded-xl p-8 text-center hover:border-blue-400 hover:bg-slate-50 transition-all duration-200 cursor-pointer\"\n onClick={handleDivClick}\n style={{ position: 'relative', zIndex: 1 }}\n >\n {/* 文件选择器 */}\n <input\n type=\"file\"\n accept=\"image/*\"\n onChange={handleInputChange}\n disabled={disabled || uploading}\n id={inputId}\n style={{ \n position: 'absolute', \n top: 0, \n left: 0, \n width: '100%', \n height: '100%', \n opacity: 0, \n cursor: 'pointer',\n zIndex: 10\n }}\n />\n \n {/* 显示内容 */}\n <div className=\"text-slate-500 pointer-events-none\">\n {uploading ? (\n <>\n <div className=\"animate-spin w-10 h-10 border-3 border-blue-500 border-t-transparent rounded-full mx-auto mb-3\"></div>\n <p className=\"text-sm font-medium\">正在上传到云存储...</p>\n </>\n ) : (\n <>\n <svg className=\"w-16 h-16 mx-auto mb-4 text-slate-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12\" />\n </svg>\n <p className=\"text-lg font-semibold text-slate-700 mb-2\">{placeholder}</p>\n <p className=\"text-sm text-slate-600 mb-1\">支持 JPG、PNG、GIF、WebP 格式</p>\n <p className=\"text-xs text-blue-600\">\n 自动上传到云存储,享受CDN加速\n </p>\n </>\n )}\n </div>\n </div>\n );\n };\n\n // 渲染预览\n const renderPreview = () => {\n if (!value && !fileId) {\n return null;\n }\n\n const imageUrl = value || (fileId ? `/api/universal-file/${fileId}` : '');\n\n return (\n <div className=\"mt-4\">\n <div className=\"relative inline-block group\">\n <img\n src={imageUrl}\n alt={`${businessType === 'cover' ? '封面' : '作品'}预览`}\n className=\"max-w-full h-auto max-h-64 rounded-xl border-2 border-slate-200 shadow-sm\"\n onError={(e) => {\n e.currentTarget.style.display = 'none';\n }}\n />\n <button\n type=\"button\"\n onClick={() => onChange({ image: undefined, fileId: undefined })}\n className=\"absolute -top-3 -right-3 bg-red-500 text-white rounded-full w-7 h-7 flex items-center justify-center hover:bg-red-600 transition-colors shadow-lg opacity-0 group-hover:opacity-100\"\n title=\"删除图片\"\n >\n <svg className=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n </div>\n );\n };\n\n return (\n <div className={className}>\n {/* 标签 */}\n {label && (\n <label className=\"block text-sm font-medium text-slate-700 mb-3\">\n {label}\n </label>\n )}\n \n {/* 上传状态指示 */}\n {fileId && (\n <div className=\"mb-3 p-3 bg-emerald-50 border border-emerald-200 rounded-lg text-sm text-emerald-700\">\n <div className=\"flex items-center gap-2\">\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clipRule=\"evenodd\" />\n </svg>\n <span>图片已上传到云存储</span>\n </div>\n </div>\n )}\n \n {/* 上传区域 */}\n {renderUploadArea()}\n \n {/* 预览区域 */}\n {renderPreview()}\n \n {/* 说明文字 */}\n <div className=\"mt-3 text-xs text-slate-500\">\n {businessType === 'cover' ? '封面图片' : '作品图片'}将自动上传到云存储并通过CDN分发,提供更好的性能和用户体验\n </div>\n </div>\n );\n}; ","/**\n * ShowMasterpiece 模块 - 购物车页面组件\n * \n * 完整的购物车页面,包含:\n * - 购物车商品列表展示\n * - 商品数量调整\n * - 商品移除功能\n * - 批量预订表单\n * - 提交和状态管理\n * \n * @fileoverview 购物车页面组件\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport { useCartContext, useDeadlinePopup } from '../../../logic/hooks';\nimport { CartItem } from '../types/cart';\nimport { Trash2, Plus, Minus, ShoppingBag } from 'lucide-react';\nimport { DeadlinePopupManager } from './';\n\n/**\n * 购物车页面组件属性\n */\ninterface CartPageProps {\n /** 用户ID */\n userId: number;\n \n /** 关闭回调 */\n onClose?: () => void;\n}\n\n/**\n * 购物车页面组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const CartPage: React.FC<CartPageProps> = ({ userId, onClose }) => {\n // 使用购物车Context(活动感知)\n const {\n cart,\n loading,\n error,\n updateCartItem,\n removeFromCart,\n batchBooking,\n refreshCart,\n clearCart,\n } = useCartContext();\n\n // 使用限时弹窗Hook\n const {\n configs: popupConfigs,\n hasPopup,\n loading: popupLoading,\n closePopup,\n confirmPopup,\n cancelPopup,\n temporaryClosePopup,\n triggerCheck,\n } = useDeadlinePopup('showmasterpiece', 'cart_checkout');\n\n // 本地状态\n const [isCheckingOut, setIsCheckingOut] = useState(false);\n const [checkoutSuccess, setCheckoutSuccess] = useState(false);\n const [formData, setFormData] = useState({\n qqNumber: '',\n phoneNumber: '',\n notes: '',\n pickupMethod: '',\n });\n const [formErrors, setFormErrors] = useState<{\n qqNumber?: string;\n phoneNumber?: string;\n notes?: string;\n pickupMethod?: string;\n }>({});\n\n /**\n * 处理表单字段更新\n */\n const handleFormChange = (field: string, value: string | boolean) => {\n setFormData(prev => ({ ...prev, [field]: value }));\n \n // 清除对应字段的错误\n if (formErrors[field as keyof typeof formErrors]) {\n setFormErrors(prev => ({ ...prev, [field]: undefined }));\n }\n };\n\n /**\n * 验证表单\n */\n const validateForm = (): boolean => {\n const errors: { qqNumber?: string; phoneNumber?: string; notes?: string; pickupMethod?: string } = {};\n\n // 验证QQ号(必填)\n if (!formData.qqNumber.trim()) {\n errors.qqNumber = '请输入QQ号';\n } else if (!/^\\d{5,11}$/.test(formData.qqNumber.trim())) {\n errors.qqNumber = 'QQ号格式不正确';\n }\n\n // 验证手机号(必填)\n if (!formData.phoneNumber.trim()) {\n errors.phoneNumber = '请输入手机号';\n } else {\n const phoneRegex = /^1[3-9]\\d{9}$/;\n if (!phoneRegex.test(formData.phoneNumber.trim())) {\n errors.phoneNumber = '手机号格式不正确';\n }\n }\n\n // 验证备注信息(必填)\n if (!formData.notes.trim()) {\n errors.notes = '请填写备注信息';\n }\n\n // 验证领取方式(必填)\n if (!formData.pickupMethod.trim()) {\n errors.pickupMethod = '请填写领取方式';\n }\n\n setFormErrors(errors);\n return Object.keys(errors).length === 0;\n };\n\n /**\n * 填充测试数据(仅开发环境)\n */\n const handleFillTestData = () => {\n if (process.env.NODE_ENV !== 'development') {\n return;\n }\n \n setFormData({\n qqNumber: '123456789',\n phoneNumber: '13800138000',\n notes: '这是测试预订数据,请在开发测试中使用。\\n(1) 测试QQ号: 123456789\\n(2) 测试手机号: 13800138000\\n(3) 测试备注信息',\n pickupMethod: '现场到913北京场现场领取(天津南开现场不设置现场领取点)\\n[1] 是(现场)\\n[2] 否(邮寄)'\n });\n \n console.log('🧪 [CartPage] 已填充测试数据');\n };\n\n /**\n * 处理批量预订提交\n */\n const handleCheckout = async (e: React.FormEvent) => {\n e.preventDefault();\n \n if (!validateForm()) {\n return;\n }\n\n // 每次提交都重新检查弹窗(重要:不依赖缓存状态)\n console.log('🔔 [CartPage] 检查限时弹窗...');\n const triggeredPopups = await triggerCheck();\n \n if (triggeredPopups.length > 0) {\n console.log(`🔔 [CartPage] 检测到 ${triggeredPopups.length} 个需要显示的弹窗,暂停提交`);\n \n // 检查是否有阻断类型的弹窗\n const hasBlockingPopup = triggeredPopups.some(popup => popup.blockProcess);\n if (hasBlockingPopup) {\n console.log('🚫 [CartPage] 检测到阻断类型弹窗,必须处理后才能继续');\n }\n return; // 停止提交,让用户查看弹窗\n }\n\n console.log('✅ [CartPage] 无弹窗需要显示,继续提交');\n await performCheckout();\n };\n\n /**\n * 执行实际的购物车提交\n */\n const performCheckout = async () => {\n setIsCheckingOut(true);\n \n try {\n const result = await batchBooking({\n qqNumber: formData.qqNumber,\n phoneNumber: formData.phoneNumber,\n items: cart.items,\n notes: formData.notes || undefined,\n pickupMethod: formData.pickupMethod\n });\n setCheckoutSuccess(true);\n console.log('✅ [CartPage] 批量预订提交成功:', result);\n } catch (error) {\n console.error('❌ [CartPage] 批量预订失败:', error);\n } finally {\n setIsCheckingOut(false);\n }\n };\n\n /**\n * 处理弹窗确认后继续提交\n */\n const handlePopupConfirm = async (configId: string) => {\n console.log('✅ [CartPage] 用户确认弹窗:', configId);\n \n // 查找对应的弹窗配置\n const popupConfig = popupConfigs.find(config => config.id === configId);\n \n if (popupConfig?.blockProcess) {\n // 如果是阻断流程的弹窗,确认后停止提交\n console.log('🚫 [CartPage] 阻断类型弹窗,确认后停止提交');\n // 对于阻断弹窗,只临时关闭当前显示,不添加到dismissedPopups中\n // 这样下次提交时还会重新检查阻断条件\n temporaryClosePopup(configId);\n return;\n } else {\n // 如果是非阻断流程的弹窗,确认后可以继续提交\n console.log('✅ [CartPage] 提醒类型弹窗,确认后继续提交');\n confirmPopup(configId);\n \n // 如果所有弹窗都已处理,继续提交\n if (popupConfigs.length === 1) {\n await performCheckout();\n }\n }\n };\n\n /**\n * 处理弹窗取消\n */\n const handlePopupCancel = (configId: string) => {\n console.log('❌ [CartPage] 用户取消弹窗,停止提交:', configId);\n \n // 查找对应的弹窗配置\n const popupConfig = popupConfigs.find(config => config.id === configId);\n \n if (popupConfig?.blockProcess) {\n // 对于阻断弹窗,临时关闭不影响下次检查\n temporaryClosePopup(configId);\n } else {\n // 对于提醒弹窗,正常取消\n cancelPopup(configId);\n }\n };\n\n /**\n * 处理重新购物\n */\n const handleContinueShopping = () => {\n setCheckoutSuccess(false);\n setFormData({ qqNumber: '', phoneNumber: '', notes: '', pickupMethod: '' });\n setFormErrors({});\n if (onClose) {\n onClose();\n }\n };\n\n /**\n * 成功状态渲染\n */\n if (checkoutSuccess) {\n return (\n <div className=\"max-w-2xl mx-auto p-6\">\n <div className=\"text-center\">\n <div className=\"text-green-500 text-6xl mb-4\">✅</div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-4\">批量预订提交成功!</h2>\n <p className=\"text-gray-600 mb-6\">\n 您的批量预订已成功提交,我们会尽快与您联系确认。\n </p>\n <button\n onClick={handleContinueShopping}\n className=\"w-full bg-blue-600 text-white py-2 px-4 rounded-lg hover:bg-blue-700 transition-colors\"\n >\n 继续购物\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"max-w-4xl mx-auto p-3 sm:p-6\">\n {/* 页面标题 */}\n <div className=\"text-center mb-6 sm:mb-8\">\n <h1 className=\"text-2xl sm:text-3xl font-bold text-gray-900 mb-2\">购物车</h1>\n <p className=\"text-sm sm:text-base text-gray-600\">管理您选择的谷子,确认后批量预订</p>\n </div>\n\n {/* 错误提示 */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3 sm:p-4 mb-4 sm:mb-6\">\n <div className=\"flex\">\n <div className=\"text-red-400 mr-3 flex-shrink-0\">\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">操作失败</h3>\n <p className=\"text-sm text-red-700 mt-1 break-words\">{error}</p>\n </div>\n </div>\n </div>\n )}\n\n {/* 购物车为空状态 */}\n {cart.items.length === 0 && !loading && (\n <div className=\"text-center py-8 sm:py-12\">\n <ShoppingBag className=\"w-12 h-12 sm:w-16 sm:h-16 text-gray-400 mx-auto mb-4\" />\n <h3 className=\"text-base sm:text-lg font-medium text-gray-900 mb-2\">购物车为空</h3>\n <p className=\"text-sm sm:text-base text-gray-600 mb-6\">您还没有添加任何谷子到购物车</p>\n <button\n onClick={onClose}\n className=\"bg-blue-600 text-white px-4 py-3 sm:py-2 rounded-lg hover:bg-blue-700 transition-colors text-base\"\n >\n 继续浏览谷子\n </button>\n </div>\n )}\n\n {/* 购物车商品列表 */}\n {cart.items.length > 0 && (\n <div className=\"space-y-6\">\n {/* 商品列表 */}\n <div className=\"bg-white rounded-lg shadow-sm border\">\n {cart.items.map((item: CartItem) => (\n <div key={item.collectionId} className=\"flex flex-col sm:flex-row items-start sm:items-center p-3 sm:p-4 border-b last:border-b-0 gap-3 sm:gap-4\">\n {/* 商品图片 */}\n {item.collection.coverImage ? (\n <img\n src={item.collection.coverImage}\n alt={item.collection.title}\n className=\"w-16 h-16 sm:w-16 sm:h-16 object-cover rounded-md flex-shrink-0\"\n />\n ) : (\n <div className=\"w-16 h-16 sm:w-16 sm:h-16 bg-gray-100 rounded-md flex-shrink-0 flex items-center justify-center text-gray-400 text-xs\">\n 暂无图片\n </div>\n )}\n \n {/* 商品信息 */}\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"font-semibold text-gray-900 text-sm sm:text-base line-clamp-2\">{item.collection.title}</h3>\n <p className=\"text-xs sm:text-sm text-gray-600\">编号:{item.collection.number}</p>\n <p className=\"text-xs sm:text-sm text-gray-600\">\n 价格:{(item.collection as any).price ? `¥${(item.collection as any).price}` : '价格待定'}\n </p>\n </div>\n \n {/* 数量控制和小计 - 移动端垂直布局 */}\n <div className=\"flex flex-col sm:flex-row items-center gap-2 sm:gap-4 w-full sm:w-auto\">\n {/* 数量控制 */}\n <div className=\"flex items-center space-x-2\">\n <button\n onClick={() => updateCartItem({ collectionId: item.collectionId, quantity: item.quantity - 1 })}\n disabled={loading}\n className=\"w-10 h-10 sm:w-8 sm:h-8 rounded-full border border-gray-300 flex items-center justify-center hover:bg-gray-50 disabled:opacity-50\"\n >\n <Minus size={18} className=\"sm:w-4 sm:h-4\" />\n </button>\n <span className=\"w-16 sm:w-12 text-center font-medium text-sm sm:text-base\">{item.quantity}</span>\n <button\n onClick={() => updateCartItem({ collectionId: item.collectionId, quantity: item.quantity + 1 })}\n disabled={loading}\n className=\"w-10 h-10 sm:w-8 sm:h-8 rounded-full border border-gray-300 flex items-center justify-center hover:bg-gray-50 disabled:opacity-50\"\n >\n <Plus size={18} className=\"sm:w-4 sm:h-4\" />\n </button>\n </div>\n \n {/* 小计 */}\n <div className=\"text-center sm:text-right\">\n <p className=\"font-semibold text-gray-900 text-sm sm:text-base\">\n ¥{((item.collection as any).price || 0) * item.quantity}\n </p>\n </div>\n </div>\n \n {/* 删除按钮 */}\n <button\n onClick={() => removeFromCart({ collectionId: item.collectionId })}\n disabled={loading}\n className=\"text-red-500 hover:text-red-700 disabled:opacity-50 p-2 sm:p-1\"\n >\n <Trash2 size={20} className=\"sm:w-5 sm:h-5\" />\n </button>\n </div>\n ))}\n </div>\n\n {/* 购物车统计 */}\n <div className=\"bg-gray-50 rounded-lg p-3 sm:p-4\">\n <div className=\"flex justify-between items-center mb-2\">\n <span className=\"text-sm sm:text-base text-gray-600\">商品总数:</span>\n <span className=\"text-sm sm:text-base font-semibold\">{cart.totalQuantity}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm sm:text-base text-gray-600\">总价格:</span>\n <span className=\"text-lg sm:text-xl font-bold text-blue-600\">¥{cart.totalPrice}</span>\n </div>\n </div>\n\n {/* 批量预订表单 */}\n <div className=\"bg-white rounded-lg shadow-sm border p-4 sm:p-6\">\n <div className=\"flex justify-between items-center mb-4\">\n <h3 className=\"text-base sm:text-lg font-semibold text-gray-900\">批量预订信息</h3>\n {/* 开发环境测试数据按钮 */}\n {process.env.NODE_ENV === 'development' && (\n <button\n type=\"button\"\n onClick={handleFillTestData}\n className=\"px-3 py-1 text-xs bg-yellow-100 text-yellow-800 rounded-md hover:bg-yellow-200 transition-colors\"\n >\n 填充测试数据\n </button>\n )}\n </div>\n \n <form onSubmit={handleCheckout} className=\"space-y-4\">\n {/* QQ号输入 */}\n <div>\n <label htmlFor=\"qqNumber\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n QQ号 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n id=\"qqNumber\"\n value={formData.qqNumber}\n onChange={(e) => handleFormChange('qqNumber', e.target.value)}\n className={`w-full px-3 py-3 sm:py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 text-base ${\n formErrors.qqNumber ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder=\"请输入您的QQ号\"\n disabled={isCheckingOut}\n />\n {formErrors.qqNumber && (\n <p className=\"mt-1 text-sm text-red-600\">{formErrors.qqNumber}</p>\n )}\n </div>\n\n {/* 手机号输入 */}\n <div>\n <label htmlFor=\"phoneNumber\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n 手机号 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"tel\"\n id=\"phoneNumber\"\n value={formData.phoneNumber}\n onChange={(e) => handleFormChange('phoneNumber', e.target.value)}\n className={`w-full px-3 py-3 sm:py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 text-base ${\n formErrors.phoneNumber ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder=\"请输入您的手机号\"\n disabled={isCheckingOut}\n />\n {formErrors.phoneNumber && (\n <p className=\"mt-1 text-sm text-red-600\">{formErrors.phoneNumber}</p>\n )}\n </div>\n\n {/* 备注信息 */}\n <div>\n <label htmlFor=\"notes\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n 备注信息 <span className=\"text-red-500\">*</span>\n </label>\n <textarea\n id=\"notes\"\n value={formData.notes}\n onChange={(e) => handleFormChange('notes', e.target.value)}\n rows={8}\n className={`w-full px-3 py-3 sm:py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 text-base min-h-[160px] sm:min-h-[140px] ${\n formErrors.notes ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder={`您在葱韵环京的哪个群(方便我们联系您)\n(1)葱韵环京ComicUniverse\n(2)葱韵环京外星开拓群\n(3)葱韵环京比邻星\n(4)葱韵环京华东群\n(5)葱韵环京天津群\n(6)葱韵环京·四维空间`}\n disabled={isCheckingOut}\n />\n {formErrors.notes && (\n <p className=\"mt-1 text-sm text-red-600\">{formErrors.notes}</p>\n )}\n </div>\n\n {/* 领取方式 */}\n <div>\n <label htmlFor=\"pickupMethod\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n 收货信息 <span className=\"text-red-500\">*</span>\n </label>\n <textarea\n id=\"pickupMethod\"\n value={formData.pickupMethod}\n onChange={(e) => handleFormChange('pickupMethod', e.target.value)}\n rows={4}\n className={`w-full px-3 py-3 sm:py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 text-base min-h-[120px] ${\n formErrors.pickupMethod ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder={`请填写2月10号以后能收到货的地址\n(1)收件人\n(2)收件地址\n(3)收件手机号`}\n disabled={isCheckingOut}\n />\n {formErrors.pickupMethod && (\n <p className=\"mt-1 text-sm text-red-600\">{formErrors.pickupMethod}</p>\n )}\n </div>\n\n {/* 操作按钮 */}\n <div className=\"flex flex-col sm:flex-row gap-3 sm:gap-4 pt-4\">\n <button\n type=\"button\"\n onClick={clearCart}\n disabled={loading || isCheckingOut}\n className=\"flex-1 bg-gray-200 text-gray-800 py-3 sm:py-2 px-4 rounded-lg hover:bg-gray-300 transition-colors disabled:opacity-50 text-base\"\n >\n 清空购物车\n </button>\n <button\n type=\"submit\"\n disabled={loading || isCheckingOut || cart.items.length === 0}\n className={`flex-1 py-3 sm:py-2 px-4 rounded-lg font-medium transition-colors text-base ${\n loading || isCheckingOut || cart.items.length === 0\n ? 'bg-gray-400 text-gray-600 cursor-not-allowed'\n : 'bg-blue-600 text-white hover:bg-blue-700'\n }`}\n >\n {isCheckingOut ? '提交中...' : '批量预订'}\n </button>\n </div>\n </form>\n </div>\n </div>\n )}\n\n {/* 加载状态 */}\n {loading && (\n <div className=\"text-center py-8 sm:py-12\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto mb-4\"></div>\n <p className=\"text-sm sm:text-base text-gray-600\">加载中...</p>\n </div>\n )}\n\n {/* 限时弹窗管理器 */}\n {hasPopup && (\n <DeadlinePopupManager\n configs={popupConfigs}\n onClose={closePopup}\n onConfirm={handlePopupConfirm}\n onCancel={handlePopupCancel}\n />\n )}\n </div>\n );\n}; \n","/**\n * ShowMasterpiece 模块 - 购物车弹窗组件\n *\n * @fileoverview 购物车弹窗组件\n */\n\n'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { CartPage } from './CartPage';\n\n/**\n * 购物车弹窗组件属性\n */\ninterface CartModalProps {\n /** 用户ID */\n userId: number;\n \n /** 是否显示弹窗 */\n isOpen: boolean;\n \n /** 关闭弹窗回调 */\n onClose: () => void;\n \n /** 弹窗标题 */\n title?: string;\n \n /** 弹窗宽度 */\n width?: number | string;\n \n /** 弹窗高度 */\n height?: number | string;\n \n}\n\n/**\n * 购物车弹窗组件\n *\n * @param props 组件属性\n * @returns React组件\n */\nexport const CartModal: React.FC<CartModalProps> = ({\n userId,\n isOpen,\n onClose,\n title = '购物车',\n width = '90vw',\n height = '90vh',\n}) => {\n const [mounted, setMounted] = useState(false);\n\n // 确保在客户端渲染\n useEffect(() => {\n setMounted(true);\n }, []);\n\n // 弹窗显示/隐藏时控制底层页面滚动\n useEffect(() => {\n if (isOpen && mounted) {\n // 弹窗打开时,禁止底层页面滚动\n document.body.style.overflow = 'hidden';\n document.body.style.paddingRight = 'var(--scrollbar-width, 0px)';\n } else {\n // 弹窗关闭时,恢复底层页面滚动\n document.body.style.overflow = '';\n document.body.style.paddingRight = '';\n }\n\n // 组件卸载时恢复\n return () => {\n document.body.style.overflow = '';\n document.body.style.paddingRight = '';\n };\n }, [isOpen, mounted]);\n\n // 处理遮罩层点击\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n };\n\n // 拦截滚轮事件穿透\n const handleWheelPrevent = (e: React.WheelEvent) => {\n const target = e.target as HTMLElement;\n\n // 检查是否滚动到顶部/底部\n const isAtTop = target.scrollTop === 0;\n const isAtBottom = target.scrollHeight - target.scrollTop === target.clientHeight;\n\n // 如果在顶部向上滚动 或 在底部向下滚动,阻止事件默认行为\n if ((isAtTop && e.deltaY < 0) || (isAtBottom && e.deltaY > 0)) {\n e.preventDefault();\n e.stopPropagation();\n }\n };\n\n // 拦截触摸滚动事件穿透\n const handleTouchPrevent = (e: React.TouchEvent) => {\n const target = e.target as HTMLElement;\n\n // 检查是否滚动到顶部/底部\n const isAtTop = target.scrollTop === 0;\n const isAtBottom = target.scrollHeight - target.scrollTop === target.clientHeight;\n\n // 如果已经到顶或到底,阻止触摸移动事件穿透\n if (isAtTop || isAtBottom) {\n e.stopPropagation();\n }\n };\n\n // 如果未挂载或未打开,不渲染\n if (!isOpen || !mounted) return null;\n\n return (\n <>\n {/* 遮罩层 */}\n <div\n className=\"fixed top-0 left-0 right-0 bottom-0 w-screen h-screen bg-black/50 backdrop-blur-sm flex items-center justify-center z-[999] p-4\"\n style={{ margin: 0 }}\n onClick={handleOverlayClick}\n // 拦截遮罩层的滚动事件\n onWheel={(e) => {\n e.preventDefault();\n e.stopPropagation();\n }}\n >\n {/* 模态框主体 */}\n <div\n className=\"bg-white rounded-2xl shadow-xl w-full max-w-6xl max-h-[95vh] overflow-hidden relative flex flex-col\"\n onClick={(e) => e.stopPropagation()}\n >\n {/* 头部 */}\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-gray-100\">\n <h2 className=\"text-xl font-semibold text-gray-800\">{title}</h2>\n {/* 关闭按钮 */}\n <button\n className=\"bg-transparent border-none text-gray-500 cursor-pointer p-2 rounded-lg transition-all hover:bg-gray-100 hover:text-gray-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 min-w-9 min-h-9 flex items-center justify-center\"\n onClick={onClose}\n >\n <X size={20} />\n </button>\n </div>\n\n {/* 内容区域 - 增加滚动事件拦截 */}\n <div\n className=\"flex-1 overflow-auto\" // 改为 overflow-auto 更合适\n onWheel={handleWheelPrevent} // 拦截滚轮穿透\n onTouchMove={handleTouchPrevent} // 处理移动端触摸滚动\n >\n <CartPage userId={userId} onClose={onClose} />\n </div>\n </div>\n </div>\n </>\n );\n};\n","/**\n * ShowMasterpiece 模块 - 购物车按钮组件\n * \n * 显示购物车图标和商品数量的按钮组件,点击可打开购物车弹窗\n * \n * @fileoverview 购物车按钮组件\n */\n\n'use client';\n\nimport React from 'react';\nimport { ShoppingCart } from 'lucide-react';\nimport { useCartContext } from '../../../logic/hooks';\n\n/**\n * 购物车按钮组件属性\n */\ninterface CartButtonProps {\n /** 用户ID */\n userId: number;\n \n /** 点击回调 */\n onClick: () => void;\n \n /** 按钮样式类名 */\n className?: string;\n \n /** 是否显示商品数量 */\n showBadge?: boolean;\n}\n\n/**\n * 购物车按钮组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const CartButton: React.FC<CartButtonProps> = ({\n userId,\n onClick,\n className = '',\n showBadge = true,\n}) => {\n const { cart } = useCartContext();\n\n return (\n <button\n onClick={onClick}\n className={`relative bg-blue-600 text-white px-4 py-2 rounded-lg hover:bg-blue-700 transition-colors flex items-center gap-2 ${className}`}\n >\n <ShoppingCart size={16} />\n <span>购物车</span>\n \n {/* 商品数量徽章 */}\n {showBadge && cart.totalQuantity > 0 && (\n <span className=\"absolute -top-2 -right-2 bg-red-500 text-white text-xs rounded-full w-5 h-5 flex items-center justify-center font-medium\">\n {cart.totalQuantity > 99 ? '99+' : cart.totalQuantity}\n </span>\n )}\n </button>\n );\n}; \n","/**\n * ShowMasterpiece 模块 - 画集列表组件\n * \n * 用于预订页面展示画集简略信息,包括:\n * - 画集封面和标题\n * - 艺术家信息\n * - 价格显示\n * - 选择功能\n * \n * @fileoverview 画集列表组件\n */\n\n'use client';\n\nimport React from 'react';\nimport { CollectionSummary } from '../types/booking';\n\n/**\n * 画集列表组件属性\n */\ninterface CollectionListProps {\n /** 画集列表 */\n collections: CollectionSummary[];\n \n /** 当前选中的画集ID */\n selectedCollectionId?: number;\n \n /** 选择画集回调 */\n onSelectCollection?: (collectionId: number) => void;\n \n /** 加载状态 */\n loading?: boolean;\n \n /** 是否禁用选择 */\n disabled?: boolean;\n}\n\n/**\n * 画集列表组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const CollectionList: React.FC<CollectionListProps> = ({\n collections,\n selectedCollectionId,\n onSelectCollection,\n loading = false,\n disabled = false,\n}) => {\n /**\n * 处理画集选择\n * \n * @param collectionId 画集ID\n */\n const handleCollectionSelect = (collectionId: number) => {\n if (!disabled && onSelectCollection) {\n onSelectCollection(collectionId);\n }\n };\n\n /**\n * 格式化价格显示\n * \n * @param price 价格\n * @returns 格式化后的价格字符串\n */\n const formatPrice = (price?: number): string => {\n if (price === undefined || price === null) {\n return '价格待定';\n }\n if (price === 0) {\n return '免费';\n }\n return `¥${price}`;\n };\n\n /**\n * 加载状态渲染\n */\n if (loading) {\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {Array.from({ length: 6 }).map((_, index) => (\n <div key={index} className=\"bg-gray-100 rounded-lg p-4 animate-pulse\">\n <div className=\"w-full h-48 bg-gray-200 rounded-md mb-3\"></div>\n <div className=\"h-4 bg-gray-200 rounded mb-2\"></div>\n <div className=\"h-3 bg-gray-200 rounded mb-2\"></div>\n <div className=\"h-3 bg-gray-200 rounded w-1/2\"></div>\n </div>\n ))}\n </div>\n );\n }\n\n /**\n * 空状态渲染\n */\n if (collections.length === 0) {\n return (\n <div className=\"text-center py-12\">\n <div className=\"text-gray-400 text-6xl mb-4\">🎨</div>\n <h3 className=\"text-lg font-medium text-gray-900 mb-2\">暂无可用画集</h3>\n <p className=\"text-gray-500\">当前没有可预订的画集,请稍后再试</p>\n </div>\n );\n }\n\n return (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4\">\n {collections.map((collection) => (\n <div\n key={collection.id}\n className={`\n relative bg-white rounded-lg shadow-md overflow-hidden cursor-pointer\n transition-all duration-200 hover:shadow-lg\n ${selectedCollectionId === collection.id \n ? 'ring-2 ring-blue-500 shadow-lg' \n : 'hover:ring-1 hover:ring-gray-300'\n }\n ${disabled ? 'opacity-60 cursor-not-allowed' : ''}\n `}\n onClick={() => handleCollectionSelect(collection.id)}\n >\n {/* 选中状态指示器 */}\n {selectedCollectionId === collection.id && (\n <div className=\"absolute top-2 right-2 z-10\">\n <div className=\"bg-blue-500 text-white rounded-full w-6 h-6 flex items-center justify-center\">\n <svg className=\"w-4 h-4\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n </div>\n )}\n\n {/* 画集封面 */}\n <div className=\"relative h-48 overflow-hidden\">\n <img\n src={collection.coverImage}\n alt={collection.title}\n className=\"w-full h-full object-cover transition-transform duration-200 hover:scale-105\"\n onError={(e) => {\n const target = e.target as HTMLImageElement;\n target.src = '/images/placeholder-artwork.jpg';\n }}\n />\n \n {/* 价格标签 */}\n <div className=\"absolute bottom-2 left-2\">\n <span className=\"bg-black bg-opacity-75 text-white px-2 py-1 rounded text-sm font-medium\">\n {formatPrice(collection.price)}\n </span>\n </div>\n </div>\n\n {/* 画集信息 */}\n <div className=\"p-4\">\n <h3 className=\"font-semibold text-gray-900 mb-1 line-clamp-2\">\n {collection.title}\n </h3>\n <p className=\"text-sm text-gray-600 mb-2\">\n 编号:{collection.number}\n </p>\n {collection.description && (\n <p className=\"text-sm text-gray-500 line-clamp-2\">\n {collection.description}\n </p>\n )}\n </div>\n\n {/* 选择提示 */}\n {!disabled && (\n <div className=\"absolute inset-0 bg-blue-500 bg-opacity-0 hover:bg-opacity-10 transition-all duration-200 flex items-center justify-center\">\n <span className=\"text-blue-600 font-medium opacity-0 hover:opacity-100 transition-opacity duration-200\">\n 点击选择\n </span>\n </div>\n )}\n </div>\n ))}\n </div>\n );\n}; ","/**\n * ShowMasterpiece 模块 - 预订功能类型定义\n * \n * 定义了画集预订功能相关的TypeScript类型,包括:\n * - 预订数据模型\n * - API请求和响应类型\n * - 表单数据类型\n * - 状态枚举\n * \n * @fileoverview 预订功能类型定义\n */\n\nimport { ArtCollection } from './index';\n\n/**\n * 预订状态枚举\n */\nexport type BookingStatus = 'pending' | 'confirmed' | 'completed' | 'cancelled';\n\n/**\n * 预订状态显示文本映射\n */\nexport const BOOKING_STATUS_LABELS: Record<BookingStatus, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\n/**\n * 预订状态颜色映射\n */\nexport const BOOKING_STATUS_COLORS: Record<BookingStatus, string> = {\n pending: 'bg-yellow-100 text-yellow-800',\n confirmed: 'bg-blue-100 text-blue-800',\n completed: 'bg-green-100 text-green-800',\n cancelled: 'bg-red-100 text-red-800'\n};\n\n/**\n * 预订数据模型\n */\nexport interface Booking {\n /** 预订ID */\n id: number;\n \n /** 画集ID */\n collectionId: number;\n \n /** 用户QQ号 */\n qqNumber: string;\n \n /** 用户手机号 */\n phoneNumber?: string;\n \n /** 预订数量 */\n quantity: number;\n \n /** 预订状态 */\n status: BookingStatus;\n \n /** 预订备注 */\n notes?: string;\n \n /** 管理员备注 */\n adminNotes?: string;\n \n /** 预订时间 */\n createdAt: string;\n \n /** 更新时间 */\n updatedAt: string;\n \n /** 确认时间 */\n confirmedAt?: string;\n \n /** 完成时间 */\n completedAt?: string;\n \n /** 取消时间 */\n cancelledAt?: string;\n \n /** 关联的画集信息 */\n collection?: ArtCollection;\n}\n\n/**\n * 创建预订请求数据\n */\nexport interface CreateBookingRequest {\n /** 画集ID */\n collectionId: number;\n \n /** 用户QQ号 */\n qqNumber: string;\n \n /** 用户手机号 */\n phoneNumber: string;\n \n /** 预订数量 */\n quantity: number;\n \n /** 预订备注 */\n notes?: string;\n}\n\n/**\n * 更新预订请求数据\n */\nexport interface UpdateBookingRequest {\n /** 预订状态 */\n status?: BookingStatus;\n \n /** 管理员备注 */\n adminNotes?: string;\n}\n\n/**\n * 预订列表查询参数\n */\nexport interface BookingListParams {\n /** 画集ID过滤 */\n collectionId?: number;\n \n /** QQ号过滤 */\n qqNumber?: string;\n \n /** 手机号过滤 */\n phoneNumber?: string;\n \n /** 状态过滤 */\n status?: BookingStatus;\n \n /** 页码 */\n page?: number;\n \n /** 每页数量 */\n limit?: number;\n}\n\n/**\n * 预订列表响应\n */\nexport interface BookingListResponse {\n /** 预订列表 */\n bookings: Booking[];\n \n /** 总数 */\n total: number;\n \n /** 当前页 */\n page: number;\n \n /** 每页数量 */\n limit: number;\n \n /** 总页数 */\n totalPages: number;\n}\n\n/**\n * 预订表单数据\n */\nexport interface BookingFormData {\n /** 画集ID */\n collectionId: number;\n \n /** 用户QQ号 */\n qqNumber: string;\n \n /** 用户手机号 */\n phoneNumber: string;\n \n /** 预订数量 */\n quantity: number;\n \n /** 预订备注 */\n notes: string;\n}\n\n/**\n * 画集简略信息(用于预订页面展示)\n */\nexport interface CollectionSummary {\n /** 画集ID */\n id: number;\n \n /** 画集标题 */\n title: string;\n \n /** 编号 */\n number: string;\n \n /** 封面图片 */\n coverImage: string;\n \n /** 价格(单位:元) */\n price?: number;\n \n /** 画集描述 */\n description?: string;\n}\n\n/**\n * 预订页面状态\n */\nexport interface BookingPageState {\n /** 画集列表 */\n collections: CollectionSummary[];\n \n /** 加载状态 */\n loading: boolean;\n \n /** 错误信息 */\n error?: string;\n \n /** 提交状态 */\n submitting: boolean;\n \n /** 提交成功状态 */\n submitted: boolean;\n} ","/**\n * ShowMasterpiece 模块 - 预订管理面板组件\n * \n * 管理员查看所有用户预订信息的面板组件\n * \n * @fileoverview 预订管理面板组件\n */\n\n'use client';\n\nimport React, { useState, useMemo, useCallback } from 'react';\nimport { Calendar, User, Package, Clock, CheckCircle, XCircle, RefreshCw, Eye, Edit, Save, X, Trash2, Download, Settings, Search } from 'lucide-react';\nimport { BookingAdminData, BookingAdminStats, BookingAdminQueryParams, BOOKING_EXPORT_FIELDS, DEFAULT_BOOKING_EXPORT_CONFIG } from '../services';\nimport { BookingStatus, BOOKING_STATUS_LABELS, BOOKING_STATUS_COLORS } from '../types/booking';\nimport { ExportResult, UniversalExportButton, UniversalExportClient } from '@/universalExport';\n\n/**\n * 预订管理面板组件属性\n */\ninterface BookingAdminPanelProps {\n /** 预订数据列表 */\n bookings: BookingAdminData[];\n /** 统计信息 */\n stats: BookingAdminStats;\n /** 加载状态 */\n loading: boolean;\n /** 错误信息 */\n error?: string;\n /** 搜索参数 */\n searchParams: BookingAdminQueryParams;\n /** 刷新数据回调 */\n onRefresh: () => void;\n /** 搜索预订数据回调 */\n onSearch: (params: BookingAdminQueryParams) => Promise<void>;\n /** 清除搜索条件回调 */\n onClearSearch: () => void;\n /** 更新预订状态回调 */\n onUpdateStatus: (id: number, status: BookingStatus, adminNotes?: string) => Promise<void>;\n /** 删除预订回调 */\n onDeleteBooking: (id: number) => Promise<void>;\n /** 导出预订数据回调 */\n onExportBookings: (format?: 'csv' | 'excel') => Promise<void>;\n}\n\n/**\n * 预订管理面板组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const BookingAdminPanel: React.FC<BookingAdminPanelProps> = ({\n bookings,\n stats,\n loading,\n error,\n searchParams,\n onRefresh,\n onSearch,\n onClearSearch,\n onUpdateStatus,\n onDeleteBooking,\n onExportBookings,\n}) => {\n const [selectedBooking, setSelectedBooking] = useState<BookingAdminData | null>(null);\n const [filterStatus, setFilterStatus] = useState<BookingStatus | 'all'>(searchParams.status || 'all');\n const [editingBooking, setEditingBooking] = useState<number | null>(null);\n const [editForm, setEditForm] = useState<{ status: BookingStatus; adminNotes: string }>({\n status: 'pending',\n adminNotes: '',\n });\n \n // 分页状态\n const [currentPage, setCurrentPage] = useState(1);\n const [pageSize, setPageSize] = useState(10); // 每页显示数量\n \n // 搜索表单状态\n const [searchForm, setSearchForm] = useState<BookingAdminQueryParams>({\n qqNumber: searchParams.qqNumber || '',\n phoneNumber: searchParams.phoneNumber || '',\n status: searchParams.status || 'all'\n });\n\n // 创建导出客户端实例\n const exportService = useMemo(() => new UniversalExportClient(), []);\n\n // 用户价格结算功能状态\n const [enableUserPriceCalculation, setEnableUserPriceCalculation] = useState(false);\n\n // 计算用户价格结算的辅助函数\n const calculateUserTotalPrices = useCallback((bookings: BookingAdminData[]) => {\n const userPriceMap = new Map<string, number>();\n\n // 根据QQ号和手机号的组合来分组计算总价\n bookings.forEach(booking => {\n const userKey = `${booking.qqNumber || ''}_${booking.phoneNumber || ''}`;\n const currentPrice = userPriceMap.get(userKey) || 0;\n userPriceMap.set(userKey, currentPrice + (booking.totalPrice || 0));\n });\n\n return userPriceMap;\n }, []);\n\n // 自定义导出处理函数\n const handleCustomExport = useCallback(async (config: any) => {\n try {\n console.log('🚀 [BookingAdminPanel] 开始自定义导出:', {\n configId: config.id,\n format: config.format,\n bookingsLength: bookings.length,\n enableUserPriceCalculation,\n });\n\n // 计算用户总价映射(如果启用)\n const userPriceMap = enableUserPriceCalculation ? calculateUserTotalPrices(bookings) : null;\n\n // 准备导出数据\n const exportData = bookings.map(booking => {\n const baseData = {\n id: booking.id,\n collectionId: booking.collectionId,\n qqNumber: booking.qqNumber || '',\n phoneNumber: booking.phoneNumber || '',\n collectionTitle: booking.collection?.title || '未知画集',\n collectionNumber: booking.collection?.number || '',\n collectionPrice: booking.collection?.price || 0,\n status: booking.status,\n quantity: booking.quantity,\n price: booking.price,\n totalPrice: booking.totalPrice,\n notes: booking.notes || '',\n pickupMethod: booking.pickupMethod || '',\n adminNotes: booking.adminNotes || '',\n createdAt: booking.createdAt,\n updatedAt: booking.updatedAt,\n confirmedAt: booking.confirmedAt,\n completedAt: booking.completedAt,\n cancelledAt: booking.cancelledAt,\n };\n\n // 如果启用了用户价格结算,添加用户总价字段\n if (enableUserPriceCalculation && userPriceMap) {\n const userKey = `${booking.qqNumber || ''}_${booking.phoneNumber || ''}`;\n return {\n ...baseData,\n userTotalPrice: userPriceMap.get(userKey) || 0,\n };\n }\n\n return baseData;\n });\n\n console.log('📊 [BookingAdminPanel] 导出数据准备完成:', {\n exportDataLength: exportData.length,\n sampleData: exportData.slice(0, 2),\n });\n\n // 根据是否启用用户价格结算来调整导出配置\n const exportConfig = {\n ...config,\n fields: config.fields.map((field: any) => {\n // 如果是 userTotalPrice 字段,根据勾选状态启用或禁用\n if (field.key === 'userTotalPrice') {\n return {\n ...field,\n enabled: enableUserPriceCalculation,\n };\n }\n return field;\n }),\n grouping: enableUserPriceCalculation ? {\n ...config.grouping,\n fields: [\n ...config.grouping.fields,\n {\n key: 'userTotalPrice',\n label: '用户总价',\n mode: 'merge' as const,\n valueProcessing: 'first' as const,\n showGroupHeader: false,\n mergeCells: true\n }\n ]\n } : config.grouping,\n };\n\n // 直接调用API\n const response = await fetch('/api/universal-export/export', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n config: exportConfig,\n data: exportData,\n customFileName: `预订信息_${new Date().toISOString().split('T')[0]}${enableUserPriceCalculation ? '_含用户总价' : ''}`,\n // 不传递分页参数,避免导出时被分页限制\n pagination: undefined,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.error || `导出失败: ${response.statusText}`);\n }\n\n // 解析JSON响应\n const responseData = await response.json();\n\n if (responseData.result && responseData.result.fileData) {\n // 有文件数据,使用base64数据创建blob并下载\n console.log('📁 [BookingAdminPanel] 检测到文件数据,开始下载');\n const { fileData, fileName } = responseData.result;\n\n // 将base64转换为blob\n const binaryString = atob(fileData);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n\n // 根据文件扩展名确定MIME类型\n const getMimeType = (filename: string): string => {\n const extension = filename.split('.').pop()?.toLowerCase();\n switch (extension) {\n case 'csv':\n return 'text/csv; charset=utf-8';\n case 'xlsx':\n case 'xls':\n return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n case 'json':\n return 'application/json; charset=utf-8';\n default:\n return 'application/octet-stream';\n }\n };\n\n const blob = new Blob([bytes], { type: getMimeType(fileName) });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n\n console.log('✅ [BookingAdminPanel] 文件下载完成:', { fileName, fileSize: bytes.length });\n } else {\n // 没有文件数据,只返回结果信息\n console.log('✅ [BookingAdminPanel] 导出完成:', responseData);\n }\n\n } catch (error) {\n console.error('❌ [BookingAdminPanel] 自定义导出失败:', error);\n throw error;\n }\n }, [bookings, enableUserPriceCalculation, calculateUserTotalPrices]);\n\n // 数据源函数(保留用于其他用途)\n const dataSource = useMemo(() => async () => {\n const firstBooking = bookings[0];\n console.log('📊 [BookingAdminPanel] dataSource 开始执行:', {\n bookingsLength: bookings.length,\n bookingsKeys: firstBooking ? Object.keys(firstBooking) : [],\n firstBookingPickupMethod: firstBooking?.pickupMethod ?? '无数据',\n enableUserPriceCalculation,\n });\n\n // 计算用户总价映射(如果启用)\n const userPriceMap = enableUserPriceCalculation ? calculateUserTotalPrices(bookings) : null;\n\n const mappedData = bookings.map(booking => {\n // 根据实际API返回的数据结构进行映射\n const baseMapped = {\n id: booking.id,\n collectionId: booking.collectionId,\n qqNumber: booking.qqNumber || '',\n phoneNumber: booking.phoneNumber || '',\n collectionTitle: booking.collection?.title || '未知画集',\n collectionNumber: booking.collection?.number || '未知编号',\n collectionPrice: booking.collection?.price || 0,\n status: booking.status,\n quantity: booking.quantity,\n price: booking.collection?.price || 0, // 使用画集价格作为单价\n totalPrice: booking.totalPrice || (booking.collection?.price || 0) * booking.quantity,\n notes: booking.notes || '',\n pickupMethod: booking.pickupMethod || '', // 添加领取方式字段\n adminNotes: booking.adminNotes || '',\n createdAt: booking.createdAt,\n updatedAt: booking.updatedAt,\n confirmedAt: booking.confirmedAt || '',\n completedAt: booking.completedAt || '',\n cancelledAt: booking.cancelledAt || '',\n };\n\n // 如果启用了用户价格结算,添加用户总价字段\n if (enableUserPriceCalculation && userPriceMap) {\n const userKey = `${booking.qqNumber || ''}_${booking.phoneNumber || ''}`;\n return {\n ...baseMapped,\n userTotalPrice: userPriceMap.get(userKey) || 0,\n };\n }\n\n return baseMapped;\n });\n\n console.log('📊 [BookingAdminPanel] 数据映射完成:', {\n totalRows: mappedData.length,\n sampleRow: mappedData[0],\n pickupMethodSamples: mappedData.slice(0, 3).map((row, idx) => ({\n index: idx,\n id: row.id,\n pickupMethod: row.pickupMethod,\n originalPickupMethod: bookings[idx]?.pickupMethod,\n }))\n });\n\n return mappedData;\n }, [bookings, enableUserPriceCalculation, calculateUserTotalPrices]);\n\n /**\n * 获取状态信息\n */\n const getStatusInfo = (status: BookingStatus) => {\n return {\n label: BOOKING_STATUS_LABELS[status],\n color: BOOKING_STATUS_COLORS[status],\n };\n };\n\n /**\n * 过滤预订数据\n */\n const filteredBookings = bookings.filter(booking => {\n if (filterStatus === 'all') return true;\n return booking.status === filterStatus;\n });\n\n /**\n * 分页计算\n */\n const totalItems = filteredBookings.length;\n const totalPages = Math.ceil(totalItems / pageSize);\n const startIndex = (currentPage - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n const paginatedBookings = filteredBookings.slice(startIndex, endIndex);\n\n /**\n * 处理页码变化\n */\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n };\n\n /**\n * 处理页面大小变化\n */\n const handlePageSizeChange = (size: number) => {\n setPageSize(size);\n setCurrentPage(1); // 重置到第一页\n };\n\n /**\n * 格式化时间\n */\n const formatTime = (timeString: string) => {\n return new Date(timeString).toLocaleString('zh-CN');\n };\n\n /**\n * 处理编辑预订\n */\n const handleEditBooking = (booking: BookingAdminData) => {\n setEditingBooking(booking.id);\n setEditForm({\n status: booking.status,\n adminNotes: booking.adminNotes || '',\n });\n };\n\n /**\n * 处理保存编辑\n */\n const handleSaveEdit = async () => {\n if (editingBooking) {\n try {\n console.log('保存编辑:', { bookingId: editingBooking, status: editForm.status, adminNotes: editForm.adminNotes });\n await onUpdateStatus(editingBooking, editForm.status, editForm.adminNotes);\n console.log('编辑保存成功');\n setEditingBooking(null);\n setEditForm({ status: 'pending', adminNotes: '' });\n } catch (error) {\n console.error('保存编辑失败:', error);\n // 保持编辑状态,让用户看到错误\n }\n }\n };\n\n /**\n * 处理取消编辑\n */\n const handleCancelEdit = () => {\n setEditingBooking(null);\n setEditForm({ status: 'pending', adminNotes: '' });\n };\n\n /**\n * 处理删除预订\n */\n const handleDeleteBooking = async (bookingId: number) => {\n if (confirm('确定要删除这个预订吗?此操作不可撤销。')) {\n try {\n await onDeleteBooking(bookingId);\n console.log('预订删除成功');\n } catch (error) {\n console.error('删除预订失败:', error);\n // 错误已经在hook中处理,这里不需要额外处理\n }\n }\n };\n\n /**\n * 处理导出预订数据\n */\n const handleExportBookings = async () => {\n try {\n await onExportBookings('csv');\n console.log('预订数据导出成功');\n } catch (error) {\n console.error('导出预订数据失败:', error);\n // 错误已经在hook中处理,这里不需要额外处理\n }\n };\n\n /**\n * 处理搜索表单提交\n */\n const handleSearchSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n const params: BookingAdminQueryParams = {};\n \n if (searchForm.qqNumber?.trim()) {\n params.qqNumber = searchForm.qqNumber.trim();\n }\n if (searchForm.phoneNumber?.trim()) {\n params.phoneNumber = searchForm.phoneNumber.trim();\n }\n if (searchForm.status && searchForm.status !== 'all') {\n params.status = searchForm.status;\n }\n \n console.log('🔍 [BookingAdminPanel] 提交搜索参数:', {\n searchForm,\n params,\n timestamp: new Date().toISOString()\n });\n \n // 重置分页到第一页\n setCurrentPage(1);\n \n await onSearch(params);\n };\n\n /**\n * 处理清除搜索\n */\n const handleClearSearch = async () => {\n setSearchForm({\n qqNumber: '',\n phoneNumber: '',\n status: 'all'\n });\n setFilterStatus('all');\n // 重置分页到第一页\n setCurrentPage(1);\n await onClearSearch();\n };\n\n /**\n * 处理状态过滤\n */\n const handleStatusFilter = async (status: BookingStatus | 'all') => {\n setFilterStatus(status);\n setSearchForm(prev => ({ ...prev, status }));\n \n // 重置分页到第一页\n setCurrentPage(1);\n \n // 保持当前的QQ号和手机号搜索条件,只更新状态过滤\n const params: BookingAdminQueryParams = {};\n \n if (searchForm.qqNumber?.trim()) {\n params.qqNumber = searchForm.qqNumber.trim();\n }\n if (searchForm.phoneNumber?.trim()) {\n params.phoneNumber = searchForm.phoneNumber.trim();\n }\n if (status && status !== 'all') {\n params.status = status;\n }\n \n await onSearch(params);\n };\n\n return (\n <div className=\"space-y-6\">\n {/* 统计卡片 */}\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-3 sm:gap-4\">\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4 sm:p-6\">\n <div className=\"flex items-center\">\n <div className=\"p-2 bg-blue-100 rounded-lg\">\n <Calendar size={20} className=\"text-blue-600 sm:w-6 sm:h-6\" />\n </div>\n <div className=\"ml-3 sm:ml-4\">\n <h3 className=\"text-lg sm:text-2xl font-bold text-slate-800\">{stats.totalBookings}</h3>\n <p className=\"text-xs sm:text-sm text-slate-600\">总预订数</p>\n </div>\n </div>\n </div>\n \n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4 sm:p-6\">\n <div className=\"flex items-center\">\n <div className=\"p-2 bg-yellow-100 rounded-lg\">\n <Clock size={20} className=\"text-yellow-600 sm:w-6 sm:h-6\" />\n </div>\n <div className=\"ml-3 sm:ml-4\">\n <h3 className=\"text-lg sm:text-2xl font-bold text-slate-800\">{stats.pendingBookings}</h3>\n <p className=\"text-xs sm:text-sm text-slate-600\">待确认</p>\n </div>\n </div>\n </div>\n \n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4 sm:p-6\">\n <div className=\"flex items-center\">\n <div className=\"p-2 bg-green-100 rounded-lg\">\n <CheckCircle size={20} className=\"text-green-600 sm:w-6 sm:h-6\" />\n </div>\n <div className=\"ml-3 sm:ml-4\">\n <h3 className=\"text-lg sm:text-2xl font-bold text-slate-800\">{stats.completedBookings}</h3>\n <p className=\"text-xs sm:text-sm text-slate-600\">已完成</p>\n </div>\n </div>\n </div>\n \n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4 sm:p-6\">\n <div className=\"flex items-center\">\n <div className=\"p-2 bg-purple-100 rounded-lg\">\n <Package size={20} className=\"text-purple-600 sm:w-6 sm:h-6\" />\n </div>\n <div className=\"ml-3 sm:ml-4\">\n <h3 className=\"text-lg sm:text-2xl font-bold text-slate-800\">¥{stats.totalRevenue}</h3>\n <p className=\"text-xs sm:text-sm text-slate-600\">总收入</p>\n </div>\n </div>\n </div>\n </div>\n\n {/* 搜索栏 */}\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4\">\n <form onSubmit={handleSearchSubmit} className=\"space-y-4\">\n <div className=\"flex flex-col sm:flex-row gap-4\">\n {/* QQ号搜索 */}\n <div className=\"flex-1\">\n <label htmlFor=\"searchQqNumber\" className=\"block text-sm font-medium text-slate-700 mb-2\">\n QQ号搜索\n </label>\n <input\n type=\"text\"\n id=\"searchQqNumber\"\n value={searchForm.qqNumber}\n onChange={(e) => setSearchForm(prev => ({ ...prev, qqNumber: e.target.value }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"输入QQ号进行搜索\"\n />\n </div>\n \n {/* 手机号搜索 */}\n <div className=\"flex-1\">\n <label htmlFor=\"searchPhoneNumber\" className=\"block text-sm font-medium text-slate-700 mb-2\">\n 手机号搜索\n </label>\n <input\n type=\"tel\"\n id=\"searchPhoneNumber\"\n value={searchForm.phoneNumber}\n onChange={(e) => setSearchForm(prev => ({ ...prev, phoneNumber: e.target.value }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"输入手机号进行搜索\"\n />\n </div>\n \n {/* 状态过滤 */}\n <div className=\"flex-1\">\n <label htmlFor=\"searchStatus\" className=\"block text-sm font-medium text-slate-700 mb-2\">\n 状态过滤\n </label>\n <select\n id=\"searchStatus\"\n value={searchForm.status}\n onChange={(e) => setSearchForm(prev => ({ ...prev, status: e.target.value as BookingStatus | 'all' }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value=\"all\">全部状态</option>\n <option value=\"pending\">待确认</option>\n <option value=\"confirmed\">已确认</option>\n <option value=\"completed\">已完成</option>\n <option value=\"cancelled\">已取消</option>\n </select>\n </div>\n </div>\n \n {/* 搜索按钮 */}\n <div className=\"flex gap-2\">\n <button\n type=\"submit\"\n disabled={loading}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors disabled:opacity-50\"\n >\n <Search size={16} />\n 搜索\n </button>\n <button\n type=\"button\"\n onClick={handleClearSearch}\n disabled={loading}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-slate-100 text-slate-700 rounded-lg font-medium hover:bg-slate-200 transition-colors disabled:opacity-50\"\n >\n <X size={16} />\n 清除\n </button>\n </div>\n </form>\n </div>\n\n {/* 操作栏 */}\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n <div className=\"flex flex-wrap gap-2\">\n <button\n className={`px-3 py-2 text-sm sm:text-base rounded-lg font-medium transition-colors ${\n filterStatus === 'all' \n ? 'bg-blue-600 text-white' \n : 'bg-slate-100 text-slate-700 hover:bg-slate-200'\n }`}\n onClick={() => handleStatusFilter('all')}\n >\n 全部\n </button>\n <button\n className={`px-3 py-2 text-sm sm:text-base rounded-lg font-medium transition-colors ${\n filterStatus === 'pending' \n ? 'bg-blue-600 text-white' \n : 'bg-slate-100 text-slate-700 hover:bg-slate-200'\n }`}\n onClick={() => handleStatusFilter('pending')}\n >\n 待确认\n </button>\n <button\n className={`px-3 py-2 text-sm sm:text-base rounded-lg font-medium transition-colors ${\n filterStatus === 'confirmed' \n ? 'bg-blue-600 text-white' \n : 'bg-slate-100 text-slate-700 hover:bg-slate-200'\n }`}\n onClick={() => handleStatusFilter('confirmed')}\n >\n 已确认\n </button>\n <button\n className={`px-3 py-2 text-sm sm:text-base rounded-lg font-medium transition-colors ${\n filterStatus === 'completed' \n ? 'bg-blue-600 text-white' \n : 'bg-slate-100 text-slate-700 hover:bg-slate-200'\n }`}\n onClick={() => handleStatusFilter('completed')}\n >\n 已完成\n </button>\n <button\n className={`px-3 py-2 text-sm sm:text-base rounded-lg font-medium transition-colors ${\n filterStatus === 'cancelled' \n ? 'bg-blue-600 text-white' \n : 'bg-slate-100 text-slate-700 hover:bg-slate-200'\n }`}\n onClick={() => handleStatusFilter('cancelled')}\n >\n 已取消\n </button>\n </div>\n \n <div className=\"flex flex-col sm:flex-row gap-2 w-full sm:w-auto\">\n <button\n onClick={onRefresh}\n disabled={loading}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors disabled:opacity-50\"\n >\n <RefreshCw size={16} className={loading ? 'animate-spin' : ''} />\n 刷新\n </button>\n\n {/* 用户价格结算勾选框 */}\n <div className=\"flex items-center gap-2 px-3 py-2 bg-white border border-slate-200 rounded-lg\">\n <input\n type=\"checkbox\"\n id=\"enableUserPriceCalculation\"\n checked={enableUserPriceCalculation}\n onChange={(e) => setEnableUserPriceCalculation(e.target.checked)}\n className=\"w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 rounded focus:ring-blue-500 focus:ring-2\"\n />\n <label\n htmlFor=\"enableUserPriceCalculation\"\n className=\"text-sm font-medium text-slate-700 cursor-pointer\"\n title=\"勾选后导出Excel时会添加一列用户总价(根据QQ号+手机号唯一匹配)\"\n >\n 包含用户总价\n </label>\n </div>\n\n <UniversalExportButton\n exportService={exportService}\n moduleId=\"showmasterpiece\"\n businessId=\"bookings\"\n availableFields={BOOKING_EXPORT_FIELDS.map(field => ({\n ...field,\n enabled: field.key === 'userTotalPrice' ? enableUserPriceCalculation : field.enabled,\n }))}\n dataSource={dataSource}\n defaultConfig={(() => {\n const config = {\n ...DEFAULT_BOOKING_EXPORT_CONFIG,\n fields: DEFAULT_BOOKING_EXPORT_CONFIG.fields.map(field => ({\n ...field,\n enabled: field.key === 'userTotalPrice' ? enableUserPriceCalculation : field.enabled,\n })),\n grouping: enableUserPriceCalculation ? {\n ...DEFAULT_BOOKING_EXPORT_CONFIG.grouping,\n fields: [\n ...DEFAULT_BOOKING_EXPORT_CONFIG.grouping.fields,\n {\n key: 'userTotalPrice',\n label: '用户总价',\n mode: 'merge' as const,\n valueProcessing: 'first' as const,\n showGroupHeader: false,\n mergeCells: true\n }\n ]\n } : DEFAULT_BOOKING_EXPORT_CONFIG.grouping,\n };\n console.log('🔍 [BookingAdminPanel] 传递的默认配置:', {\n id: config.id,\n format: config.format,\n hasGrouping: !!config.grouping,\n groupingEnabled: config.grouping?.enabled,\n groupingFields: config.grouping?.fields?.map(f => ({ key: f.key, mergeCells: f.mergeCells })) || [],\n enableUserPriceCalculation,\n });\n return config;\n })()}\n buttonText=\"导出数据\"\n variant=\"primary\"\n size=\"md\"\n disabled={loading}\n onExportSuccess={(result: ExportResult) => {\n console.log('✅ [BookingAdminPanel] UniversalExportButton 导出成功:', result);\n }}\n onExportError={(error: string) => {\n console.error('❌ [BookingAdminPanel] UniversalExportButton 导出失败:', error);\n }}\n />\n\n {/* 备用导出按钮 - 直接调用API */}\n <button\n onClick={async () => {\n try {\n await handleCustomExport(DEFAULT_BOOKING_EXPORT_CONFIG);\n console.log('✅ [BookingAdminPanel] 自定义导出成功');\n } catch (error) {\n console.error('❌ [BookingAdminPanel] 自定义导出失败:', error);\n alert(`导出失败: ${error instanceof Error ? error.message : '未知错误'}`);\n }\n }}\n disabled={loading || bookings.length === 0}\n className=\"flex items-center gap-2 px-4 py-2 bg-green-600 text-white rounded-lg font-medium hover:bg-green-700 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <Download size={16} />\n 直接导出 ({bookings.length}条)\n </button>\n </div>\n </div>\n </div>\n\n {/* 错误提示 */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"text-red-400 mr-3 flex-shrink-0\">\n <XCircle size={20} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">加载失败</h3>\n <p className=\"text-sm text-red-700 mt-1 break-words\">{error}</p>\n </div>\n </div>\n </div>\n )}\n\n {/* 预订列表 */}\n <div className=\"space-y-4\">\n {paginatedBookings.length === 0 ? (\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-8 sm:p-12 text-center\">\n <Calendar size={40} className=\"text-slate-400 mx-auto mb-4 sm:w-12 sm:h-12\" />\n <h3 className=\"text-base sm:text-lg font-medium text-slate-800 mb-2\">暂无预订数据</h3>\n <p className=\"text-sm sm:text-base text-slate-600\">\n {totalItems === 0 ? '当前筛选条件下没有找到预订数据' : '当前页无数据'}\n </p>\n </div>\n ) : (\n paginatedBookings.map((booking) => {\n const statusInfo = getStatusInfo(booking.status);\n \n return (\n <div key={booking.id} className=\"bg-white rounded-lg shadow-sm border border-slate-200 overflow-hidden\">\n <div className=\"p-4 sm:p-6\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4 mb-4\">\n <div className=\"flex items-start gap-3 sm:gap-4\">\n {booking.collection.coverImage ? (\n <img\n src={booking.collection.coverImage}\n alt={booking.collection.title}\n className=\"w-12 h-12 sm:w-16 sm:h-16 object-cover rounded-lg flex-shrink-0\"\n />\n ) : (\n <div className=\"w-12 h-12 sm:w-16 sm:h-16 bg-slate-100 rounded-lg flex-shrink-0 flex items-center justify-center text-slate-400 text-xs\">\n 暂无\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-base sm:text-lg font-semibold text-slate-800 truncate\">{booking.collection.title}</h3>\n <p className=\"text-sm text-slate-600\">编号:{booking.collection.number}</p>\n <p className=\"text-sm text-slate-600\">QQ号:{booking.qqNumber}</p>\n {booking.phoneNumber && (\n <p className=\"text-sm text-slate-600\">手机号:{booking.phoneNumber}</p>\n )}\n </div>\n </div>\n \n <div className=\"text-left sm:text-right\">\n <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${statusInfo.color}`}>\n {statusInfo.label}\n </span>\n <p className=\"text-sm text-slate-500 mt-1\"># {booking.id}</p>\n </div>\n </div>\n \n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-4 mb-4\">\n <div>\n <p className=\"text-xs text-slate-500\">数量</p>\n <p className=\"text-sm font-medium text-slate-800\">{booking.quantity}</p>\n </div>\n <div>\n <p className=\"text-xs text-slate-500\">单价</p>\n <p className=\"text-sm font-medium text-slate-800\">¥{booking.collection.price}</p>\n </div>\n <div>\n <p className=\"text-xs text-slate-500\">总价</p>\n <p className=\"text-sm font-medium text-slate-800\">¥{booking.totalPrice}</p>\n </div>\n <div>\n <p className=\"text-xs text-slate-500\">预订时间</p>\n <p className=\"text-sm font-medium text-slate-800\">{formatTime(booking.createdAt)}</p>\n </div>\n </div>\n \n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-4 mb-4\">\n <div>\n <p className=\"text-xs text-slate-500\">QQ号</p>\n <p className=\"text-sm font-medium text-slate-800\">{booking.qqNumber}</p>\n </div>\n <div>\n <p className=\"text-xs text-slate-500\">手机号</p>\n <p className=\"text-sm font-medium text-slate-800\">{booking.phoneNumber}</p>\n </div>\n </div>\n \n {/* 时间字段 */}\n <div className=\"grid grid-cols-2 sm:grid-cols-3 gap-4 mb-4\">\n {booking.confirmedAt && (\n <div>\n <p className=\"text-xs text-slate-500\">确认时间</p>\n <p className=\"text-sm font-medium text-green-800\">{formatTime(booking.confirmedAt)}</p>\n </div>\n )}\n {booking.completedAt && (\n <div>\n <p className=\"text-xs text-slate-500\">完成时间</p>\n <p className=\"text-sm font-medium text-blue-800\">{formatTime(booking.completedAt)}</p>\n </div>\n )}\n {booking.cancelledAt && (\n <div>\n <p className=\"text-xs text-slate-500\">取消时间</p>\n <p className=\"text-sm font-medium text-red-800\">{formatTime(booking.cancelledAt)}</p>\n </div>\n )}\n </div>\n \n {(booking.notes || booking.adminNotes ||booking.pickupMethod) && (\n <div className=\"mb-4\">\n {booking.pickupMethod && (\n <div className=\"mb-2\">\n <p className=\"text-xs text-slate-500\">领取方式\n 请填写2月10号以后能收到货的地址\n (1)收件人\n (2)收件地址\n (3)收件手机号\n </p>\n <p className=\"text-sm text-slate-700\">{booking.pickupMethod}</p>\n </div>\n )}\n {booking.notes && (\n <div className=\"mb-2\">\n <p className=\"text-xs text-slate-500\">用户备注:\n (1)葱韵环京ComicUniverse\n (2)葱韵环京外星开拓群\n (3)葱韵环京比邻星\n (4)葱韵环京华东群\n (5)葱韵环京天津群\n (6)葱韵环京·四维空间\n </p>\n <p className=\"text-sm text-slate-700\">{booking.notes}</p>\n </div>\n )}\n {booking.adminNotes && (\n <div>\n <p className=\"text-xs text-slate-500\">管理员备注</p>\n <p className=\"text-sm text-slate-700\">{booking.adminNotes}</p>\n </div>\n )}\n </div>\n )}\n \n <div className=\"flex flex-col sm:flex-row gap-2\">\n {editingBooking === booking.id ? (\n <>\n <select\n value={editForm.status}\n onChange={(e) => setEditForm(prev => ({ ...prev, status: e.target.value as BookingStatus }))}\n className=\"flex-1 px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value=\"pending\">待确认</option>\n <option value=\"confirmed\">已确认</option>\n <option value=\"completed\">已完成</option>\n <option value=\"cancelled\">已取消</option>\n </select>\n <input\n type=\"text\"\n value={editForm.adminNotes}\n onChange={(e) => setEditForm(prev => ({ ...prev, adminNotes: e.target.value }))}\n placeholder=\"管理员备注\"\n className=\"flex-1 px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n <button\n onClick={handleSaveEdit}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-green-600 text-white rounded-lg font-medium hover:bg-green-700 transition-colors\"\n >\n <Save size={16} />\n 保存\n </button>\n <button\n onClick={handleCancelEdit}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-slate-100 text-slate-700 rounded-lg font-medium hover:bg-slate-200 transition-colors\"\n >\n <X size={16} />\n 取消\n </button>\n </>\n ) : (\n <>\n <button\n onClick={() => handleEditBooking(booking)}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors\"\n >\n <Edit size={16} />\n 编辑\n </button>\n <button\n onClick={() => handleDeleteBooking(booking.id)}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-red-600 text-white rounded-lg font-medium hover:bg-red-700 transition-colors\"\n >\n <Trash2 size={16} />\n 删除\n </button>\n </>\n )}\n </div>\n </div>\n </div>\n );\n })\n )}\n </div>\n\n {/* 分页组件 */}\n {totalItems > 0 && (\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-4 sm:p-6\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n {/* 分页信息 */}\n <div className=\"flex items-center gap-4\">\n <div className=\"text-sm text-slate-600\">\n 共 {totalItems} 条记录,第 {currentPage} / {totalPages} 页\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-slate-600\">每页显示</span>\n <select\n value={pageSize}\n onChange={(e) => handlePageSizeChange(Number(e.target.value))}\n className=\"px-2 py-1 border border-slate-300 rounded text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value={5}>5</option>\n <option value={10}>10</option>\n <option value={20}>20</option>\n <option value={50}>50</option>\n </select>\n <span className=\"text-sm text-slate-600\">条</span>\n </div>\n </div>\n\n {/* 分页按钮 */}\n <div className=\"flex items-center gap-2\">\n {/* 上一页 */}\n <button\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className=\"px-3 py-1 text-sm border border-slate-300 rounded hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white\"\n >\n 上一页\n </button>\n\n {/* 页码 */}\n <div className=\"flex items-center gap-1\">\n {Array.from({ length: Math.min(totalPages, 7) }, (_, index) => {\n let pageNum;\n \n if (totalPages <= 7) {\n // 总页数小于等于7,显示所有页码\n pageNum = index + 1;\n } else {\n // 总页数大于7,显示部分页码\n if (currentPage <= 4) {\n // 当前页在前4页\n if (index < 5) {\n pageNum = index + 1;\n } else if (index === 5) {\n return <span key={index} className=\"px-2 text-slate-400\">...</span>;\n } else {\n pageNum = totalPages;\n }\n } else if (currentPage >= totalPages - 3) {\n // 当前页在后4页\n if (index === 0) {\n pageNum = 1;\n } else if (index === 1) {\n return <span key={index} className=\"px-2 text-slate-400\">...</span>;\n } else {\n pageNum = totalPages - 5 + index;\n }\n } else {\n // 当前页在中间\n if (index === 0) {\n pageNum = 1;\n } else if (index === 1) {\n return <span key={index} className=\"px-2 text-slate-400\">...</span>;\n } else if (index >= 2 && index <= 4) {\n pageNum = currentPage - 3 + index;\n } else if (index === 5) {\n return <span key={index} className=\"px-2 text-slate-400\">...</span>;\n } else {\n pageNum = totalPages;\n }\n }\n }\n\n return (\n <button\n key={index}\n onClick={() => handlePageChange(pageNum)}\n className={`px-3 py-1 text-sm border rounded ${\n pageNum === currentPage\n ? 'bg-blue-500 text-white border-blue-500'\n : 'border-slate-300 hover:bg-slate-50'\n }`}\n >\n {pageNum}\n </button>\n );\n })}\n </div>\n\n {/* 下一页 */}\n <button\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className=\"px-3 py-1 text-sm border border-slate-300 rounded hover:bg-slate-50 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white\"\n >\n 下一页\n </button>\n </div>\n </div>\n\n {/* 移动端简化分页 */}\n <div className=\"sm:hidden\">\n <div className=\"flex items-center justify-between pt-4 border-t border-slate-200\">\n <button\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n className=\"flex items-center gap-2 px-4 py-2 text-sm bg-slate-100 rounded hover:bg-slate-200 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-slate-100\"\n >\n 上一页\n </button>\n \n <span className=\"text-sm text-slate-600\">\n {currentPage} / {totalPages}\n </span>\n \n <button\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n className=\"flex items-center gap-2 px-4 py-2 text-sm bg-slate-100 rounded hover:bg-slate-200 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-slate-100\"\n >\n 下一页\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* 预订详情弹窗 */}\n {selectedBooking && (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50\">\n <div className=\"bg-white rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-hidden\">\n <div className=\"flex items-center justify-between p-4 sm:p-6 border-b border-slate-200\">\n <h2 className=\"text-lg sm:text-xl font-semibold text-slate-800\">预订详情</h2>\n <button\n onClick={() => setSelectedBooking(null)}\n className=\"text-slate-400 hover:text-slate-600 text-2xl font-bold leading-none p-1\"\n >\n ×\n </button>\n </div>\n \n <div className=\"p-4 sm:p-6 overflow-y-auto max-h-[calc(90vh-140px)]\">\n <div className=\"space-y-6\">\n {/* 画集信息 */}\n <div>\n <h3 className=\"text-base sm:text-lg font-semibold text-slate-800 mb-3\">画集信息</h3>\n <div className=\"flex items-start gap-3 sm:gap-4\">\n {selectedBooking.collection.coverImage ? (\n <img\n src={selectedBooking.collection.coverImage}\n alt={selectedBooking.collection.title}\n className=\"w-16 h-16 sm:w-20 sm:h-20 object-cover rounded-lg flex-shrink-0\"\n />\n ) : (\n <div className=\"w-16 h-16 sm:w-20 sm:h-20 bg-slate-100 rounded-lg flex-shrink-0 flex items-center justify-center text-slate-400 text-xs\">\n 暂无图片\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"font-medium text-slate-800 truncate\">{selectedBooking.collection.title}</h4>\n <p className=\"text-sm text-slate-600\">编号:{selectedBooking.collection.number}</p>\n <p className=\"text-sm text-slate-600\">价格:¥{selectedBooking.collection.price || '待定'}</p>\n </div>\n </div>\n </div>\n \n {/* 预订信息 */}\n <div>\n <h3 className=\"text-base sm:text-lg font-semibold text-slate-800 mb-3\">预订信息</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4\">\n <div>\n <p className=\"text-sm text-slate-500\">预订ID</p>\n <p className=\"font-medium text-slate-800\">#{selectedBooking.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">QQ号</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.qqNumber}</p>\n </div>\n {selectedBooking.phoneNumber && (\n <div>\n <p className=\"text-sm text-slate-500\">手机号</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.phoneNumber}</p>\n </div>\n )}\n <div>\n <p className=\"text-sm text-slate-500\">预订数量</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.quantity}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">总价格</p>\n <p className=\"font-medium text-slate-800\">¥{selectedBooking.totalPrice}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">状态</p>\n <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusInfo(selectedBooking.status).color}`}>\n {getStatusInfo(selectedBooking.status).label}\n </span>\n </div>\n </div>\n </div>\n \n {/* 时间信息 */}\n <div>\n <h3 className=\"text-base sm:text-lg font-semibold text-slate-800 mb-3\">时间信息</h3>\n <div className=\"space-y-2\">\n <div>\n <p className=\"text-sm text-slate-500\">预订时间</p>\n <p className=\"text-sm font-medium text-slate-800\">{formatTime(selectedBooking.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">更新时间</p>\n <p className=\"text-sm font-medium text-slate-800\">{formatTime(selectedBooking.updatedAt)}</p>\n </div>\n {selectedBooking.confirmedAt && (\n <div>\n <p className=\"text-sm text-slate-500\">确认时间</p>\n <p className=\"text-sm font-medium text-slate-800\">{formatTime(selectedBooking.confirmedAt)}</p>\n </div>\n )}\n {selectedBooking.completedAt && (\n <div>\n <p className=\"text-sm text-slate-500\">完成时间</p>\n <p className=\"text-sm font-medium text-slate-800\">{formatTime(selectedBooking.completedAt)}</p>\n </div>\n )}\n {selectedBooking.cancelledAt && (\n <div>\n <p className=\"text-sm text-slate-500\">取消时间</p>\n <p className=\"text-sm font-medium text-slate-800\">{formatTime(selectedBooking.cancelledAt)}</p>\n </div>\n )}\n </div>\n </div>\n \n {/* 备注信息 */}\n {selectedBooking.notes && (\n <div>\n <h3 className=\"text-base sm:text-lg font-semibold text-slate-800 mb-3\">用户备注</h3>\n <p className=\"text-sm text-slate-800 bg-slate-50 p-4 rounded-lg break-words\">{selectedBooking.notes}</p>\n </div>\n )}\n \n {selectedBooking.adminNotes && (\n <div>\n <h3 className=\"text-base sm:text-lg font-semibold text-slate-800 mb-3\">管理员备注</h3>\n <p className=\"text-sm text-slate-800 bg-slate-50 p-4 rounded-lg break-words\">{selectedBooking.adminNotes}</p>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}; \n","/**\n * ShowMasterpiece 模块 - 预订弹窗组件\n * \n * 使用现有的Modal组件包装预订页面,提供弹窗形式的预订功能\n * \n * @fileoverview 预订弹窗组件\n */\n\n'use client';\n\nimport React from 'react';\nimport { Modal } from '@/components';\nimport { BookingPage } from './';\n\n/**\n * 预订弹窗组件属性\n */\ninterface BookingModalProps {\n /** 是否显示弹窗 */\n isOpen: boolean;\n \n /** 关闭弹窗回调 */\n onClose: () => void;\n \n /** 弹窗标题 */\n title?: string;\n \n /** 弹窗宽度 */\n width?: number | string;\n \n /** 弹窗高度 */\n height?: number | string;\n}\n\n/**\n * 预订弹窗组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const BookingModal: React.FC<BookingModalProps> = ({\n isOpen,\n onClose,\n title = '预订画集',\n width = '90vw',\n height = '90vh',\n}) => {\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={title}\n width={width}\n maskClosable={false}\n className=\"max-w-6xl\"\n >\n <BookingPage onClose={onClose} />\n </Modal>\n );\n}; \n","/**\n * ShowMasterpiece 模块 - 预订页面组件\n * \n * 完整的预订页面,包含:\n * - 画集列表展示和选择\n * - 预订表单(QQ号、数量、备注)\n * - 提交和状态管理\n * \n * @fileoverview 预订页面组件\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport { CollectionList } from './CollectionList';\nimport { useBooking, useBookingForm } from '../../../logic/hooks';\nimport { CollectionSummary } from '../types/booking';\n\n/**\n * 预订页面组件属性\n */\ninterface BookingPageProps {\n /** 关闭回调 */\n onClose?: () => void;\n}\n\n/**\n * 预订页面组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const BookingPage: React.FC<BookingPageProps> = ({ onClose }) => {\n // 使用自定义Hook\n const {\n collections,\n loading,\n error,\n submitting,\n submitted,\n submitBooking,\n resetSubmission,\n clearError,\n } = useBooking();\n\n const {\n formData,\n errors,\n updateField,\n validateForm,\n resetForm,\n } = useBookingForm();\n\n // 本地状态\n const [step, setStep] = useState<'select' | 'form'>('select');\n\n /**\n * 处理画集选择\n * \n * @param collectionId 画集ID\n */\n const handleCollectionSelect = (collectionId: number) => {\n updateField('collectionId', collectionId);\n setStep('form');\n };\n\n /**\n * 处理表单提交\n */\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n \n if (!validateForm()) {\n return;\n }\n\n await submitBooking(formData);\n };\n\n /**\n * 处理重新预订\n */\n const handleNewBooking = () => {\n resetForm();\n resetSubmission();\n setStep('select');\n };\n\n /**\n * 处理返回选择\n */\n const handleBackToSelect = () => {\n setStep('select');\n clearError();\n };\n\n /**\n * 获取选中的画集信息\n */\n const selectedCollection = collections.find(c => c.id === formData.collectionId);\n\n /**\n * 成功状态渲染\n */\n if (submitted) {\n return (\n <div className=\"max-w-2xl mx-auto p-6\">\n <div className=\"text-center\">\n <div className=\"text-green-500 text-6xl mb-4\">✅</div>\n <h2 className=\"text-2xl font-bold text-gray-900 mb-4\">预订提交成功!</h2>\n <p className=\"text-gray-600 mb-6\">\n 您的预订已成功提交,我们会尽快与您联系确认。\n </p>\n <div className=\"space-y-3\">\n <button\n onClick={handleNewBooking}\n className=\"w-full bg-blue-600 text-white py-2 px-4 rounded-lg hover:bg-blue-700 transition-colors\"\n >\n 继续预订其他画集\n </button>\n {onClose && (\n <button\n onClick={onClose}\n className=\"w-full bg-gray-200 text-gray-800 py-2 px-4 rounded-lg hover:bg-gray-300 transition-colors\"\n >\n 关闭\n </button>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"max-w-4xl mx-auto p-6\">\n {/* 页面标题 */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-3xl font-bold text-gray-900 mb-2\">预订画集</h1>\n <p className=\"text-gray-600\">选择您喜欢的画集并填写预订信息</p>\n </div>\n\n {/* 错误提示 */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 mb-6\">\n <div className=\"flex\">\n <div className=\"text-red-400 mr-3\">\n <svg className=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z\" clipRule=\"evenodd\" />\n </svg>\n </div>\n <div>\n <h3 className=\"text-sm font-medium text-red-800\">提交失败</h3>\n <p className=\"text-sm text-red-700 mt-1\">{error}</p>\n </div>\n </div>\n </div>\n )}\n\n {/* 步骤指示器 */}\n <div className=\"flex items-center justify-center mb-8\">\n <div className=\"flex items-center\">\n <div className={`w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium ${\n step === 'select' ? 'bg-blue-600 text-white' : 'bg-green-500 text-white'\n }`}>\n {step === 'select' ? '1' : '✓'}\n </div>\n <div className={`ml-2 ${step === 'select' ? 'text-blue-600' : 'text-green-600'}`}>\n 选择画集\n </div>\n </div>\n <div className=\"w-16 h-0.5 bg-gray-300 mx-4\"></div>\n <div className=\"flex items-center\">\n <div className={`w-8 h-8 rounded-full flex items-center justify-center text-sm font-medium ${\n step === 'form' ? 'bg-blue-600 text-white' : 'bg-gray-300 text-gray-600'\n }`}>\n 2\n </div>\n <div className={`ml-2 ${step === 'form' ? 'text-blue-600' : 'text-gray-500'}`}>\n 填写信息\n </div>\n </div>\n </div>\n\n {/* 画集选择步骤 */}\n {step === 'select' && (\n <div>\n <div className=\"mb-6\">\n <h2 className=\"text-xl font-semibold text-gray-900 mb-2\">选择要预订的画集</h2>\n <p className=\"text-gray-600\">点击下方画集卡片进行选择</p>\n </div>\n <CollectionList\n collections={collections}\n loading={loading}\n onSelectCollection={handleCollectionSelect}\n />\n </div>\n )}\n\n {/* 预订表单步骤 */}\n {step === 'form' && selectedCollection && (\n <div className=\"max-w-2xl mx-auto\">\n <div className=\"mb-6\">\n <button\n onClick={handleBackToSelect}\n className=\"text-blue-600 hover:text-blue-800 flex items-center mb-4\"\n >\n <svg className=\"w-4 h-4 mr-1\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n 返回选择画集\n </button>\n \n <h2 className=\"text-xl font-semibold text-gray-900 mb-4\">填写预订信息</h2>\n \n {/* 选中的画集信息 */}\n <div className=\"bg-gray-50 rounded-lg p-4 mb-6\">\n <div className=\"flex items-center\">\n {selectedCollection.coverImage ? (\n <img\n src={selectedCollection.coverImage}\n alt={selectedCollection.title}\n className=\"w-16 h-16 object-cover rounded-md mr-4\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-gray-100 rounded-md mr-4 flex items-center justify-center text-gray-400 text-xs\">\n 暂无图片\n </div>\n )}\n <div>\n <h3 className=\"font-semibold text-gray-900\">{selectedCollection.title}</h3>\n <p className=\"text-sm text-gray-600\">编号:{selectedCollection.number}</p>\n <p className=\"text-sm text-gray-600\">\n 价格:{selectedCollection.price ? `¥${selectedCollection.price}` : '价格待定'}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* 预订表单 */}\n <form onSubmit={handleSubmit} className=\"space-y-6\">\n {/* QQ号输入 */}\n <div>\n <label htmlFor=\"qqNumber\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n QQ号 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n id=\"qqNumber\"\n value={formData.qqNumber}\n onChange={(e) => updateField('qqNumber', e.target.value)}\n className={`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.qqNumber ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder=\"请输入您的QQ号\"\n disabled={submitting}\n />\n {errors.qqNumber && (\n <p className=\"mt-1 text-sm text-red-600\">{errors.qqNumber}</p>\n )}\n </div>\n\n {/* 手机号输入 */}\n <div>\n <label htmlFor=\"phoneNumber\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n 手机号\n </label>\n <input\n type=\"tel\"\n id=\"phoneNumber\"\n value={formData.phoneNumber}\n onChange={(e) => updateField('phoneNumber', e.target.value)}\n className={`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.phoneNumber ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder=\"请输入您的手机号(可选)\"\n disabled={submitting}\n />\n {errors.phoneNumber && (\n <p className=\"mt-1 text-sm text-red-600\">{errors.phoneNumber}</p>\n )}\n </div>\n\n {/* 预订数量 */}\n <div>\n <label htmlFor=\"quantity\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n 预订数量 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"number\"\n id=\"quantity\"\n min=\"1\"\n value={formData.quantity}\n onChange={(e) => updateField('quantity', parseInt(e.target.value) || 1)}\n className={`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.quantity ? 'border-red-300' : 'border-gray-300'\n }`}\n placeholder=\"请输入预订数量\"\n disabled={submitting}\n />\n {errors.quantity && (\n <p className=\"mt-1 text-sm text-red-600\">{errors.quantity}</p>\n )}\n </div>\n\n {/* 备注信息 */}\n <div>\n <label htmlFor=\"notes\" className=\"block text-sm font-medium text-gray-700 mb-2\">\n 备注信息\n </label>\n <textarea\n id=\"notes\"\n value={formData.notes}\n onChange={(e) => updateField('notes', e.target.value)}\n rows={4}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"请输入备注信息(可选)\"\n disabled={submitting}\n />\n </div>\n\n {/* 提交按钮 */}\n <div className=\"pt-4\">\n <button\n type=\"submit\"\n disabled={submitting}\n className={`w-full py-3 px-4 rounded-lg font-medium transition-colors ${\n submitting\n ? 'bg-gray-400 text-gray-600 cursor-not-allowed'\n : 'bg-blue-600 text-white hover:bg-blue-700'\n }`}\n >\n {submitting ? '提交中...' : '提交预订'}\n </button>\n </div>\n </form>\n </div>\n )}\n </div>\n );\n}; \n","/**\n * ShowMasterpiece 模块 - 用户预订历史记录页面组件\n * \n * 用户查看自己的预订历史记录\n * \n * @fileoverview 用户预订历史记录页面组件\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { Calendar, Package, Clock, CheckCircle, XCircle, Trash2, RefreshCw, Eye } from 'lucide-react';\nimport { Booking } from '../types/booking';\nimport { BookingService } from '../services';\n\n/**\n * 用户预订历史记录页面组件属性\n */\ninterface CartHistoryPageProps {\n /** 用户QQ号 */\n qqNumber: string;\n /** 用户手机号 */\n phoneNumber: string;\n}\n\n/**\n * 状态显示信息\n */\nconst STATUS_INFO = {\n pending: { label: '待确认', color: 'bg-yellow-100 text-yellow-800' },\n confirmed: { label: '已确认', color: 'bg-blue-100 text-blue-800' },\n completed: { label: '已完成', color: 'bg-green-100 text-green-800' },\n cancelled: { label: '已取消', color: 'bg-red-100 text-red-800' }\n};\n\n/**\n * 用户预订历史记录页面组件\n * \n * @param props 组件属性\n * @returns React组件\n */\nexport const CartHistoryPage: React.FC<CartHistoryPageProps> = ({\n qqNumber,\n phoneNumber\n}) => {\n const [bookings, setBookings] = useState<Booking[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [error, setError] = useState<string | undefined>(undefined);\n const [selectedBooking, setSelectedBooking] = useState<Booking | null>(null);\n\n /**\n * 加载预订历史记录\n */\n const loadBookings = async () => {\n try {\n setLoading(true);\n setError(undefined);\n \n console.log('🔄 开始查询用户预订信息:', { qqNumber, phoneNumber });\n \n // 调用预订查询API\n const response = await BookingService.getBookings({\n qqNumber: qqNumber,\n phoneNumber: phoneNumber\n });\n \n setBookings(response.bookings || []);\n \n console.log('✅ 用户预订信息查询成功:', { \n totalBookings: response.bookings?.length || 0,\n qqNumber,\n phoneNumber\n });\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 };\n\n /**\n * 删除预订记录\n */\n const handleDeleteBooking = async (bookingId: number) => {\n if (confirm('确定要删除这条预订记录吗?此操作不可撤销。')) {\n try {\n await BookingService.deleteBooking(bookingId);\n console.log('预订记录删除成功');\n \n // 重新加载预订记录\n await loadBookings();\n } catch (error) {\n console.error('删除预订记录失败:', error);\n alert('删除预订记录失败');\n }\n }\n };\n\n /**\n * 格式化时间\n */\n const formatTime = (dateString: string) => {\n return new Date(dateString).toLocaleString('zh-CN');\n };\n\n /**\n * 获取状态显示信息\n */\n const getStatusInfo = (status: Booking['status']) => {\n return STATUS_INFO[status] || STATUS_INFO.pending;\n };\n\n /**\n * 组件挂载时加载数据\n */\n useEffect(() => {\n loadBookings();\n }, [qqNumber, phoneNumber]);\n\n // 计算统计信息\n const totalBookings = bookings.length;\n const totalQuantity = bookings.reduce((sum, booking) => sum + booking.quantity, 0);\n const totalPrice = bookings.reduce((sum, booking) => {\n const price = booking.collection?.price || 0;\n return sum + (price * booking.quantity);\n }, 0);\n const completedBookings = bookings.filter(booking => booking.status === 'completed').length;\n\n return (\n <div className=\"space-y-6\">\n {/* 页面标题 */}\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold text-slate-800\">我的预订历史</h1>\n <p className=\"text-slate-600 mt-1\">\n QQ: {qqNumber} | 手机: {phoneNumber}\n </p>\n </div>\n <div className=\"flex gap-2\">\n <button\n onClick={loadBookings}\n disabled={loading}\n className=\"flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg font-medium hover:bg-blue-700 transition-colors disabled:opacity-50\"\n >\n <RefreshCw size={16} className={loading ? 'animate-spin' : ''} />\n 刷新\n </button>\n </div>\n </div>\n </div>\n\n {/* 统计信息 */}\n {totalBookings > 0 && (\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-6\">\n <div className=\"grid grid-cols-2 lg:grid-cols-4 gap-4\">\n <div className=\"text-center\">\n <div className=\"text-2xl font-bold text-slate-800\">{totalBookings}</div>\n <div className=\"text-sm text-slate-600\">总预订次数</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl font-bold text-slate-800\">{totalQuantity}</div>\n <div className=\"text-sm text-slate-600\">总预订数量</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl font-bold text-slate-800\">¥{totalPrice}</div>\n <div className=\"text-sm text-slate-600\">总预订金额</div>\n </div>\n <div className=\"text-center\">\n <div className=\"text-2xl font-bold text-slate-800\">{completedBookings}</div>\n <div className=\"text-sm text-slate-600\">已完成</div>\n </div>\n </div>\n </div>\n )}\n\n {/* 错误提示 */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"text-red-400 mr-3 flex-shrink-0\">\n <XCircle size={20} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-sm font-medium text-red-800\">查询失败</h3>\n <p className=\"text-sm text-red-700 mt-1\">{error}</p>\n </div>\n </div>\n </div>\n )}\n\n {/* 预订记录列表 */}\n <div className=\"space-y-4\">\n {loading ? (\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-8 text-center\">\n <RefreshCw size={40} className=\"text-slate-400 mx-auto mb-4 animate-spin\" />\n <h3 className=\"text-lg font-medium text-slate-800 mb-2\">加载中...</h3>\n <p className=\"text-slate-600\">正在获取您的预订历史记录</p>\n </div>\n ) : totalBookings === 0 ? (\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-8 text-center\">\n <Calendar size={40} className=\"text-slate-400 mx-auto mb-4\" />\n <h3 className=\"text-lg font-medium text-slate-800 mb-2\">暂无预订记录</h3>\n <p className=\"text-slate-600\">您还没有提交过任何预订</p>\n </div>\n ) : (\n bookings.map((booking) => {\n const statusInfo = getStatusInfo(booking.status);\n const totalPrice = (booking.collection?.price || 0) * booking.quantity;\n \n return (\n <div key={booking.id} className=\"bg-white rounded-lg shadow-sm border border-slate-200 overflow-hidden\">\n <div className=\"p-6\">\n <div className=\"flex flex-col sm:flex-row sm:items-start sm:justify-between gap-4 mb-4\">\n <div className=\"flex items-start gap-4\">\n <img\n src={booking.collection?.coverImage || ''}\n alt={booking.collection?.title || '未知画集'}\n className=\"w-16 h-16 object-cover rounded-lg flex-shrink-0\"\n />\n <div className=\"min-w-0 flex-1\">\n <h3 className=\"text-lg font-semibold text-slate-800\">\n {booking.collection?.title || '未知画集'}\n </h3>\n <p className=\"text-sm text-slate-600\">\n 编号:{booking.collection?.number || '未知编号'}\n </p>\n <p className=\"text-sm text-slate-600\">\n 预订时间:{formatTime(booking.createdAt)}\n </p>\n <p className=\"text-sm text-slate-600\">\n 数量:{booking.quantity} | 总价:¥{totalPrice}\n </p>\n </div>\n </div>\n \n <div className=\"text-left sm:text-right\">\n <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${statusInfo.color}`}>\n {statusInfo.label}\n </span>\n <p className=\"text-sm text-slate-500 mt-1\">\n 预订ID: {booking.id}\n </p>\n </div>\n </div>\n \n {/* 备注信息 */}\n {booking.notes && (\n <div className=\"mb-4\">\n <p className=\"text-sm text-slate-500\">备注</p>\n <p className=\"text-sm text-slate-800 bg-slate-50 p-3 rounded-lg break-words\">\n {booking.notes}\n </p>\n </div>\n )}\n \n {/* 管理员备注 */}\n {booking.adminNotes && (\n <div className=\"mb-4\">\n <p className=\"text-sm text-slate-500\">管理员备注</p>\n <p className=\"text-sm text-slate-800 bg-blue-50 p-3 rounded-lg break-words\">\n {booking.adminNotes}\n </p>\n </div>\n )}\n \n {/* 操作按钮 */}\n <div className=\"flex flex-col sm:flex-row gap-2\">\n <button\n onClick={() => setSelectedBooking(booking)}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-slate-100 text-slate-700 rounded-lg font-medium hover:bg-slate-200 transition-colors\"\n >\n <Eye size={16} />\n 查看详情\n </button>\n <button\n onClick={() => handleDeleteBooking(booking.id)}\n className=\"flex items-center justify-center gap-2 px-4 py-2 bg-red-100 text-red-700 rounded-lg font-medium hover:bg-red-200 transition-colors\"\n >\n <Trash2 size={16} />\n 删除记录\n </button>\n </div>\n </div>\n </div>\n );\n })\n )}\n </div>\n\n {/* 详情弹窗 */}\n {selectedBooking && (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50\">\n <div className=\"bg-white rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-hidden\">\n <div className=\"flex items-center justify-between p-6 border-b border-slate-200\">\n <h2 className=\"text-xl font-semibold text-slate-800\">预订详情</h2>\n <button\n onClick={() => setSelectedBooking(null)}\n className=\"text-slate-400 hover:text-slate-600 text-2xl font-bold leading-none\"\n >\n ×\n </button>\n </div>\n \n <div className=\"p-6 overflow-y-auto max-h-[calc(90vh-140px)]\">\n <div className=\"space-y-6\">\n {/* 基本信息 */}\n <div>\n <h3 className=\"text-lg font-semibold text-slate-800 mb-3\">基本信息</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <p className=\"text-sm text-slate-500\">预订ID</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.id}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">预订时间</p>\n <p className=\"font-medium text-slate-800\">{formatTime(selectedBooking.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">QQ号</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.qqNumber}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">手机号</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.phoneNumber}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">状态</p>\n <span className={`inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusInfo(selectedBooking.status).color}`}>\n {getStatusInfo(selectedBooking.status).label}\n </span>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">数量</p>\n <p className=\"font-medium text-slate-800\">{selectedBooking.quantity}</p>\n </div>\n </div>\n </div>\n \n {/* 画集详情 */}\n {selectedBooking.collection && (\n <div>\n <h3 className=\"text-lg font-semibold text-slate-800 mb-3\">画集详情</h3>\n <div className=\"flex items-center gap-4 p-4 bg-slate-50 rounded-lg\">\n {selectedBooking.collection.coverImage ? (\n <img\n src={selectedBooking.collection.coverImage}\n alt={selectedBooking.collection.title}\n className=\"w-16 h-16 object-cover rounded-lg flex-shrink-0\"\n />\n ) : (\n <div className=\"w-16 h-16 bg-slate-100 rounded-lg flex-shrink-0 flex items-center justify-center text-slate-400 text-xs\">\n 暂无图片\n </div>\n )}\n <div className=\"min-w-0 flex-1\">\n <h4 className=\"font-medium text-slate-800\">{selectedBooking.collection.title}</h4>\n <p className=\"text-sm text-slate-600\">编号:{selectedBooking.collection.number}</p>\n <p className=\"text-sm text-slate-600\">单价:¥{selectedBooking.collection.price || '待定'}</p>\n </div>\n <div className=\"text-right\">\n <p className=\"font-medium text-slate-800\">数量:{selectedBooking.quantity}</p>\n <p className=\"font-medium text-slate-800\">\n 总价:¥{(selectedBooking.collection.price || 0) * selectedBooking.quantity}\n </p>\n </div>\n </div>\n </div>\n )}\n \n {/* 备注信息 */}\n {selectedBooking.notes && (\n <div>\n <h3 className=\"text-lg font-semibold text-slate-800 mb-3\">用户备注</h3>\n <p className=\"text-slate-800 bg-slate-50 p-4 rounded-lg break-words\">\n {selectedBooking.notes}\n </p>\n </div>\n )}\n \n {/* 管理员备注 */}\n {selectedBooking.adminNotes && (\n <div>\n <h3 className=\"text-lg font-semibold text-slate-800 mb-3\">管理员备注</h3>\n <p className=\"text-slate-800 bg-blue-50 p-4 rounded-lg break-words\">\n {selectedBooking.adminNotes}\n </p>\n </div>\n )}\n \n {/* 时间信息 */}\n <div>\n <h3 className=\"text-lg font-semibold text-slate-800 mb-3\">时间信息</h3>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <p className=\"text-sm text-slate-500\">创建时间</p>\n <p className=\"font-medium text-slate-800\">{formatTime(selectedBooking.createdAt)}</p>\n </div>\n <div>\n <p className=\"text-sm text-slate-500\">更新时间</p>\n <p className=\"font-medium text-slate-800\">{formatTime(selectedBooking.updatedAt)}</p>\n </div>\n {selectedBooking.confirmedAt && (\n <div>\n <p className=\"text-sm text-slate-500\">确认时间</p>\n <p className=\"font-medium text-slate-800\">{formatTime(selectedBooking.confirmedAt)}</p>\n </div>\n )}\n {selectedBooking.completedAt && (\n <div>\n <p className=\"text-sm text-slate-500\">完成时间</p>\n <p className=\"font-medium text-slate-800\">{formatTime(selectedBooking.completedAt)}</p>\n </div>\n )}\n {selectedBooking.cancelledAt && (\n <div>\n <p className=\"text-sm text-slate-500\">取消时间</p>\n <p className=\"font-medium text-slate-800\">{formatTime(selectedBooking.cancelledAt)}</p>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}; ","/**\n * ShowMasterpiece 模块 - 限时弹窗组件\n * \n * 基于配置显示限时提醒弹窗\n * \n * @fileoverview 限时弹窗组件\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { AlertTriangle, Clock, Info, CheckCircle, XCircle } from 'lucide-react';\nimport { Modal } from '@/components';\nimport type { PopupConfig } from '../../../types/popup';\n\n/**\n * 限时弹窗组件属性\n */\ninterface DeadlinePopupProps {\n /** 弹窗配置 */\n config: PopupConfig;\n /** 是否显示弹窗 */\n isOpen: boolean;\n /** 关闭回调 */\n onClose: () => void;\n /** 确认回调 */\n onConfirm?: () => void;\n /** 取消回调 */\n onCancel?: () => void;\n}\n\n/**\n * 限时弹窗组件\n */\nexport const DeadlinePopup: React.FC<DeadlinePopupProps> = ({\n config,\n isOpen,\n onClose,\n onConfirm,\n onCancel,\n}) => {\n const [countdown, setCountdown] = useState<number>(0);\n\n // 获取主题图标\n const getThemeIcon = (theme: string = 'warning') => {\n const iconProps = { size: 24, className: 'flex-shrink-0' };\n \n switch (theme) {\n case 'warning':\n return <AlertTriangle {...iconProps} className=\"text-amber-500\" />;\n case 'info':\n return <Info {...iconProps} className=\"text-blue-500\" />;\n case 'error':\n return <XCircle {...iconProps} className=\"text-red-500\" />;\n case 'success':\n return <CheckCircle {...iconProps} className=\"text-green-500\" />;\n default:\n return <Clock {...iconProps} className=\"text-slate-500\" />;\n }\n };\n\n // 获取主题样式\n const getThemeStyles = (theme: string = 'warning') => {\n switch (theme) {\n case 'warning':\n return {\n bgColor: 'bg-amber-50',\n borderColor: 'border-amber-200',\n titleColor: 'text-amber-800',\n messageColor: 'text-amber-700',\n confirmButton: 'bg-amber-600 hover:bg-amber-700 text-white',\n };\n case 'info':\n return {\n bgColor: 'bg-blue-50',\n borderColor: 'border-blue-200',\n titleColor: 'text-blue-800',\n messageColor: 'text-blue-700',\n confirmButton: 'bg-blue-600 hover:bg-blue-700 text-white',\n };\n case 'error':\n return {\n bgColor: 'bg-red-50',\n borderColor: 'border-red-200',\n titleColor: 'text-red-800',\n messageColor: 'text-red-700',\n confirmButton: 'bg-red-600 hover:bg-red-700 text-white',\n };\n case 'success':\n return {\n bgColor: 'bg-green-50',\n borderColor: 'border-green-200',\n titleColor: 'text-green-800',\n messageColor: 'text-green-700',\n confirmButton: 'bg-green-600 hover:bg-green-700 text-white',\n };\n default:\n return {\n bgColor: 'bg-slate-50',\n borderColor: 'border-slate-200',\n titleColor: 'text-slate-800',\n messageColor: 'text-slate-700',\n confirmButton: 'bg-slate-600 hover:bg-slate-700 text-white',\n };\n }\n };\n\n // 自动关闭倒计时\n useEffect(() => {\n if (!isOpen || !config.displayConfig?.autoCloseSeconds) return;\n\n const autoCloseSeconds = config.displayConfig.autoCloseSeconds;\n setCountdown(autoCloseSeconds);\n\n const timer = setInterval(() => {\n setCountdown((prev) => {\n if (prev <= 1) {\n clearInterval(timer);\n onClose();\n return 0;\n }\n return prev - 1;\n });\n }, 1000);\n\n return () => clearInterval(timer);\n }, [isOpen, config.displayConfig?.autoCloseSeconds, onClose]);\n\n // 处理确认\n const handleConfirm = () => {\n onConfirm?.();\n onClose();\n };\n\n // 处理取消\n const handleCancel = () => {\n onCancel?.();\n onClose();\n };\n\n const { contentConfig, displayConfig } = config;\n const theme = contentConfig.theme || 'warning';\n const styles = getThemeStyles(theme);\n\n return (\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title=\"\"\n width={displayConfig?.width || 400}\n maskClosable={displayConfig?.maskClosable ?? true}\n zIndex={9999}\n >\n <div className={`${styles.bgColor} ${styles.borderColor} border rounded-lg p-6`}>\n {/* 图标和标题 */}\n <div className=\"flex items-start gap-4 mb-4\">\n {getThemeIcon(theme)}\n <div className=\"flex-1 min-w-0\">\n <h3 className={`text-lg font-semibold ${styles.titleColor} mb-2`}>\n {contentConfig.title}\n </h3>\n \n {/* 自动关闭倒计时 */}\n {countdown > 0 && (\n <div className=\"text-sm text-slate-500 mb-2\">\n <Clock size={14} className=\"inline mr-1\" />\n {countdown} 秒后自动关闭\n </div>\n )}\n </div>\n </div>\n\n {/* 弹窗内容 */}\n <div className={`${styles.messageColor} mb-6 leading-relaxed whitespace-pre-wrap`}>\n {contentConfig.message}\n </div>\n\n {/* 操作按钮 */}\n <div className=\"flex justify-end gap-3\">\n {contentConfig.showCancel !== false && (\n <button\n onClick={handleCancel}\n className=\"px-4 py-2 text-slate-600 hover:text-slate-700 transition-colors\"\n >\n {contentConfig.cancelText || '取消'}\n </button>\n )}\n <button\n onClick={handleConfirm}\n className={`px-4 py-2 rounded-md transition-colors ${styles.confirmButton}`}\n >\n {contentConfig.confirmText || '确定'}\n </button>\n </div>\n </div>\n </Modal>\n );\n};\n\n/**\n * 多弹窗管理组件\n */\ninterface DeadlinePopupManagerProps {\n /** 弹窗配置列表 */\n configs: PopupConfig[];\n /** 关闭回调 */\n onClose: (configId: string) => void;\n /** 确认回调 */\n onConfirm?: (configId: string) => void;\n /** 取消回调 */\n onCancel?: (configId: string) => void;\n}\n\nexport const DeadlinePopupManager: React.FC<DeadlinePopupManagerProps> = ({\n configs,\n onClose,\n onConfirm,\n onCancel,\n}) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n\n // 处理当前弹窗关闭\n const handleClose = () => {\n const currentConfig = configs[currentIndex];\n if (!currentConfig) return;\n onClose(currentConfig.id);\n \n // 显示下一个弹窗\n if (currentIndex < configs.length - 1) {\n setCurrentIndex(prev => prev + 1);\n }\n };\n\n // 处理确认\n const handleConfirm = () => {\n const currentConfig = configs[currentIndex];\n if (!currentConfig) return;\n onConfirm?.(currentConfig.id);\n handleClose();\n };\n\n // 处理取消\n const handleCancel = () => {\n const currentConfig = configs[currentIndex];\n if (!currentConfig) return;\n onCancel?.(currentConfig.id);\n handleClose();\n };\n\n // 重置索引当配置变化时\n useEffect(() => {\n if (configs.length === 0) {\n setCurrentIndex(0);\n } else if (currentIndex >= configs.length) {\n setCurrentIndex(0);\n }\n }, [configs.length, currentIndex]);\n\n if (configs.length === 0 || currentIndex >= configs.length) {\n return null;\n }\n\n const currentConfig = configs[currentIndex];\n if (!currentConfig) {\n return null;\n }\n\n return (\n <DeadlinePopup\n config={currentConfig}\n isOpen={true}\n onClose={handleClose}\n onConfirm={handleConfirm}\n onCancel={handleCancel}\n />\n );\n};\n\nexport default DeadlinePopup;\n","/**\n * ShowMasterpiece 模块 - 弹窗配置管理组件\n * \n * 提供弹窗配置的创建、编辑、删除和启用/禁用功能\n * \n * @fileoverview 弹窗配置管理组件\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { Plus, Edit, Trash2, Eye, EyeOff, Clock, AlertTriangle, Settings, Save, X } from 'lucide-react';\nimport { Modal } from '@/components';\nimport type { PopupConfig, NewPopupConfig } from '../../../types/popup';\n\n/**\n * 弹窗配置管理组件属性\n */\ninterface PopupConfigManagementProps {\n}\n\n/**\n * 弹窗配置管理组件\n */\nexport const PopupConfigManagement: React.FC<PopupConfigManagementProps> = () => {\n const [configs, setConfigs] = useState<PopupConfig[]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [showCreateModal, setShowCreateModal] = useState(false);\n const [editingConfig, setEditingConfig] = useState<PopupConfig | null>(null);\n\n // 表单状态\n const [formData, setFormData] = useState({\n name: '',\n description: '',\n type: 'deadline',\n enabled: false,\n triggerConfig: {\n deadlineTime: '',\n advanceMinutes: 0,\n triggerType: 'after_deadline' as 'after_deadline' | 'before_deadline' | 'always',\n },\n contentConfig: {\n title: '',\n message: '',\n confirmText: '确定',\n cancelText: '取消',\n showCancel: true,\n theme: 'warning' as 'warning' | 'info' | 'error' | 'success',\n },\n displayConfig: {\n width: 400,\n height: 'auto' as number | string,\n maskClosable: true,\n autoCloseSeconds: 0,\n },\n blockProcess: false,\n businessModule: 'showmasterpiece',\n businessScene: 'cart_checkout',\n sortOrder: '0',\n });\n\n /**\n * 加载弹窗配置列表\n */\n const loadConfigs = async () => {\n try {\n console.log('🔄 [PopupConfigManagement] 开始加载弹窗配置...');\n setLoading(true);\n setError(null);\n\n const url = '/api/showmasterpiece/popup-configs';\n \n console.log('📡 [PopupConfigManagement] 请求URL:', url);\n const response = await fetch(url);\n console.log('📡 [PopupConfigManagement] API响应状态:', response.status, response.statusText);\n \n const result = await response.json();\n console.log('📊 [PopupConfigManagement] API响应数据:', result);\n\n if (result.success) {\n console.log('✅ [PopupConfigManagement] 配置加载成功,数量:', result.data.length);\n setConfigs(result.data);\n } else {\n console.error('❌ [PopupConfigManagement] API返回失败:', result.error);\n setError(result.error || '加载配置失败');\n }\n } catch (err) {\n console.error('❌ [PopupConfigManagement] 加载弹窗配置失败:', err);\n setError('加载配置失败');\n } finally {\n setLoading(false);\n }\n };\n\n /**\n * 初始化加载数据\n */\n useEffect(() => {\n loadConfigs();\n }, []);\n\n /**\n * 重置表单\n */\n const resetForm = () => {\n setFormData({\n name: '',\n description: '',\n type: 'deadline',\n enabled: false,\n triggerConfig: {\n deadlineTime: '',\n advanceMinutes: 0,\n triggerType: 'after_deadline',\n },\n contentConfig: {\n title: '',\n message: '',\n confirmText: '确定',\n cancelText: '取消',\n showCancel: true,\n theme: 'warning',\n },\n displayConfig: {\n width: 400,\n height: 'auto',\n maskClosable: true,\n autoCloseSeconds: 0,\n },\n blockProcess: false,\n businessModule: 'showmasterpiece',\n businessScene: 'cart_checkout',\n sortOrder: '0',\n });\n };\n\n /**\n * 打开创建弹窗\n */\n const handleCreate = () => {\n resetForm();\n setEditingConfig(null);\n setShowCreateModal(true);\n };\n\n /**\n * 打开编辑弹窗\n */\n const handleEdit = (config: PopupConfig) => {\n setFormData({\n name: config.name,\n description: config.description || '',\n type: config.type,\n enabled: config.enabled ?? false,\n triggerConfig: {\n deadlineTime: config.triggerConfig.deadlineTime || '',\n advanceMinutes: config.triggerConfig.advanceMinutes || 0,\n triggerType: config.triggerConfig.triggerType,\n },\n contentConfig: {\n title: config.contentConfig.title,\n message: config.contentConfig.message,\n confirmText: config.contentConfig.confirmText || '确定',\n cancelText: config.contentConfig.cancelText || '取消',\n showCancel: config.contentConfig.showCancel ?? true,\n theme: config.contentConfig.theme || 'warning',\n },\n displayConfig: {\n width: config.displayConfig?.width || 400,\n height: config.displayConfig?.height || 'auto',\n maskClosable: config.displayConfig?.maskClosable ?? true,\n autoCloseSeconds: config.displayConfig?.autoCloseSeconds || 0,\n },\n blockProcess: config.blockProcess ?? false,\n businessModule: config.businessModule,\n businessScene: config.businessScene,\n sortOrder: config.sortOrder || '0',\n });\n setEditingConfig(config);\n setShowCreateModal(true);\n };\n\n /**\n * 保存配置\n */\n const handleSave = async () => {\n try {\n if (!formData.name.trim() || !formData.contentConfig.title.trim() || !formData.contentConfig.message.trim()) {\n alert('请填写必要信息:名称、弹窗标题和内容');\n return;\n }\n\n const url = editingConfig \n ? `/api/showmasterpiece/popup-configs/${editingConfig.id}`\n : '/api/showmasterpiece/popup-configs';\n \n const method = editingConfig ? 'PUT' : 'POST';\n\n const requestData = {\n ...formData,\n };\n \n console.log('💾 [PopupConfigManagement] 保存弹窗配置:', { requestData });\n\n const response = await fetch(url, {\n method,\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestData),\n });\n\n const result = await response.json();\n\n if (result.success) {\n await loadConfigs();\n setShowCreateModal(false);\n resetForm();\n setEditingConfig(null);\n } else {\n alert(result.error || '保存失败');\n }\n } catch (err) {\n console.error('保存配置失败:', err);\n alert('保存失败');\n }\n };\n\n /**\n * 删除配置\n */\n const handleDelete = async (config: PopupConfig) => {\n if (!confirm(`确定要删除配置\"${config.name}\"吗?`)) {\n return;\n }\n\n try {\n const response = await fetch(`/api/showmasterpiece/popup-configs/${config.id}`, {\n method: 'DELETE',\n });\n\n const result = await response.json();\n\n if (result.success) {\n await loadConfigs();\n } else {\n alert(result.error || '删除失败');\n }\n } catch (err) {\n console.error('删除配置失败:', err);\n alert('删除失败');\n }\n };\n\n /**\n * 切换启用状态\n */\n const handleToggle = async (config: PopupConfig) => {\n try {\n const requestBody = {\n enabled: !config.enabled,\n };\n\n console.log('🔄 [PopupConfigManagement] 切换弹窗配置状态:', {\n configId: config.id,\n configName: config.name,\n currentEnabled: config.enabled,\n newEnabled: !config.enabled,\n requestBody\n });\n\n const response = await fetch(`/api/showmasterpiece/popup-configs/${config.id}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody),\n });\n\n const result = await response.json();\n\n if (result.success) {\n await loadConfigs();\n } else {\n alert(result.error || '操作失败');\n }\n } catch (err) {\n console.error('切换状态失败:', err);\n alert('操作失败');\n }\n };\n\n /**\n * 格式化时间显示\n */\n const formatDeadlineTime = (triggerConfig: any) => {\n if (!triggerConfig.deadlineTime) return '无';\n return new Date(triggerConfig.deadlineTime).toLocaleString('zh-CN');\n };\n\n /**\n * 获取触发类型显示文本\n */\n const getTriggerTypeText = (triggerType: string) => {\n switch (triggerType) {\n case 'after_deadline':\n return '超过截止时间';\n case 'before_deadline':\n return '截止时间前';\n case 'always':\n return '总是显示';\n default:\n return triggerType;\n }\n };\n\n /**\n * 获取主题显示文本\n */\n const getThemeText = (theme: string) => {\n switch (theme) {\n case 'warning':\n return '警告';\n case 'info':\n return '信息';\n case 'error':\n return '错误';\n case 'success':\n return '成功';\n default:\n return theme;\n }\n };\n\n return (\n <div className=\"space-y-6\">\n {/* 头部 */}\n <div className=\"flex items-center justify-between\">\n <div>\n <h2 className=\"text-xl font-semibold text-slate-800\">弹窗配置管理</h2>\n <p className=\"text-sm text-slate-600 mt-1\">管理购物车提交时的限时提醒弹窗</p>\n {/* 调试信息 */}\n <div className=\"mt-2 text-xs text-slate-500\">\n 状态: {loading ? '加载中' : '已加载'} | 配置数量: {configs.length} | \n {error ? `错误: ${error}` : '正常'}\n </div>\n </div>\n <button\n onClick={handleCreate}\n className=\"flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors\"\n >\n <Plus size={16} />\n 创建配置\n </button>\n </div>\n\n {/* 错误提示 */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <p className=\"text-red-700\">{error}</p>\n </div>\n )}\n\n {/* 配置列表 */}\n {loading ? (\n <div className=\"text-center py-8\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto mb-4\"></div>\n <p className=\"text-slate-600\">加载中...</p>\n </div>\n ) : (\n <div className=\"bg-white rounded-lg border border-slate-200 overflow-hidden\">\n {configs.length === 0 ? (\n <div className=\"text-center py-8\">\n <Settings size={40} className=\"text-slate-400 mx-auto mb-4\" />\n <h3 className=\"text-lg font-medium text-slate-800 mb-2\">暂无配置</h3>\n <p className=\"text-slate-600 mb-4\">点击\"创建配置\"开始设置弹窗</p>\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead className=\"bg-slate-50\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-slate-500 uppercase tracking-wider\">\n 配置信息\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-slate-500 uppercase tracking-wider\">\n 触发条件\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-slate-500 uppercase tracking-wider\">\n 弹窗内容\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-slate-500 uppercase tracking-wider\">\n 流程控制\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-slate-500 uppercase tracking-wider\">\n 状态\n </th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-slate-500 uppercase tracking-wider\">\n 操作\n </th>\n </tr>\n </thead>\n <tbody className=\"bg-white divide-y divide-slate-200\">\n {configs.map((config) => (\n <tr key={config.id} className=\"hover:bg-slate-50\">\n <td className=\"px-6 py-4 whitespace-nowrap\">\n <div>\n <div className=\"text-sm font-medium text-slate-900\">\n {config.name}\n </div>\n {config.description && (\n <div className=\"text-sm text-slate-500\">\n {config.description}\n </div>\n )}\n <div className=\"text-xs text-slate-400 mt-1\">\n {config.businessModule} / {config.businessScene}\n </div>\n </div>\n </td>\n <td className=\"px-6 py-4 whitespace-nowrap\">\n <div className=\"text-sm text-slate-900\">\n {getTriggerTypeText(config.triggerConfig.triggerType)}\n </div>\n <div className=\"text-sm text-slate-500\">\n {formatDeadlineTime(config.triggerConfig)}\n </div>\n {(config.triggerConfig.advanceMinutes || 0) > 0 && (\n <div className=\"text-xs text-slate-400\">\n 提前 {config.triggerConfig.advanceMinutes} 分钟\n </div>\n )}\n </td>\n <td className=\"px-6 py-4\">\n <div>\n <div className=\"text-sm font-medium text-slate-900\">\n {config.contentConfig.title}\n </div>\n <div className=\"text-sm text-slate-500 max-w-xs truncate\">\n {config.contentConfig.message}\n </div>\n <div className=\"text-xs text-slate-400 mt-1\">\n 主题: {getThemeText(config.contentConfig.theme || 'warning')}\n </div>\n </div>\n </td>\n <td className=\"px-6 py-4 whitespace-nowrap\">\n <div className={`inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium ${\n config.blockProcess\n ? 'bg-red-100 text-red-800'\n : 'bg-blue-100 text-blue-800'\n }`}>\n {config.blockProcess ? (\n <>\n <AlertTriangle size={12} />\n 阻断提交\n </>\n ) : (\n <>\n <Clock size={12} />\n 仅提醒\n </>\n )}\n </div>\n </td>\n <td className=\"px-6 py-4 whitespace-nowrap\">\n <button\n onClick={() => handleToggle(config)}\n className={`inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium ${\n config.enabled\n ? 'bg-green-100 text-green-800'\n : 'bg-gray-100 text-gray-800'\n }`}\n >\n {config.enabled ? <Eye size={12} /> : <EyeOff size={12} />}\n {config.enabled ? '启用' : '禁用'}\n </button>\n </td>\n <td className=\"px-6 py-4 whitespace-nowrap text-sm font-medium\">\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => handleEdit(config)}\n className=\"text-blue-600 hover:text-blue-700\"\n >\n <Edit size={16} />\n </button>\n <button\n onClick={() => handleDelete(config)}\n className=\"text-red-600 hover:text-red-700\"\n >\n <Trash2 size={16} />\n </button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n </div>\n )}\n\n {/* 创建/编辑弹窗 */}\n {showCreateModal && (\n <Modal\n isOpen={showCreateModal}\n onClose={() => {\n setShowCreateModal(false);\n resetForm();\n setEditingConfig(null);\n }}\n title={editingConfig ? '编辑弹窗配置' : '创建弹窗配置'}\n width={600}\n maskClosable={false}\n >\n <div className=\"space-y-6 max-h-[70vh] overflow-y-auto\">\n {/* 基本信息 */}\n <div className=\"space-y-4\">\n <h4 className=\"font-medium text-slate-800\">基本信息</h4>\n \n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 配置名称 *\n </label>\n <input\n type=\"text\"\n value={formData.name}\n onChange={(e) => setFormData(prev => ({ ...prev, name: e.target.value }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"请输入配置名称\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 配置描述\n </label>\n <textarea\n value={formData.description}\n onChange={(e) => setFormData(prev => ({ ...prev, description: e.target.value }))}\n rows={2}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"请输入配置描述\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 业务场景 *\n </label>\n <select\n value={formData.businessScene}\n onChange={(e) => setFormData(prev => ({ ...prev, businessScene: e.target.value }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value=\"cart_checkout\">购物车提交</option>\n <option value=\"homepage_visit\">主页访问</option>\n <option value=\"collection_view\">画集浏览</option>\n <option value=\"artwork_detail\">作品详情</option>\n </select>\n <div className=\"text-xs text-slate-500 mt-1\">\n 选择弹窗在哪个场景下触发显示\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"enabled\"\n checked={formData.enabled}\n onChange={(e) => setFormData(prev => ({ ...prev, enabled: e.target.checked }))}\n className=\"rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor=\"enabled\" className=\"text-sm font-medium text-slate-700\">\n 启用此配置\n </label>\n </div>\n </div>\n\n {/* 触发条件 */}\n <div className=\"space-y-4\">\n <h4 className=\"font-medium text-slate-800\">触发条件</h4>\n \n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 触发类型\n </label>\n <select\n value={formData.triggerConfig.triggerType}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n triggerConfig: {\n ...prev.triggerConfig,\n triggerType: e.target.value as any,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value=\"after_deadline\">超过截止时间后显示</option>\n <option value=\"before_deadline\">截止时间前显示</option>\n <option value=\"always\">总是显示</option>\n </select>\n </div>\n\n {formData.triggerConfig.triggerType !== 'always' && (\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 截止时间\n </label>\n <input\n type=\"datetime-local\"\n value={formData.triggerConfig.deadlineTime}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n triggerConfig: {\n ...prev.triggerConfig,\n deadlineTime: e.target.value,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n )}\n\n {formData.triggerConfig.triggerType === 'before_deadline' && (\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 提前分钟数\n </label>\n <input\n type=\"number\"\n min=\"0\"\n value={formData.triggerConfig.advanceMinutes}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n triggerConfig: {\n ...prev.triggerConfig,\n advanceMinutes: parseInt(e.target.value) || 0,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"在截止时间前多少分钟显示\"\n />\n </div>\n )}\n </div>\n\n {/* 弹窗内容 */}\n <div className=\"space-y-4\">\n <h4 className=\"font-medium text-slate-800\">弹窗内容</h4>\n \n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 弹窗标题 *\n </label>\n <input\n type=\"text\"\n value={formData.contentConfig.title}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n contentConfig: {\n ...prev.contentConfig,\n title: e.target.value,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"请输入弹窗标题\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 弹窗内容 *\n </label>\n <textarea\n value={formData.contentConfig.message}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n contentConfig: {\n ...prev.contentConfig,\n message: e.target.value,\n }\n }))}\n rows={4}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n placeholder=\"请输入弹窗内容\"\n />\n </div>\n\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 确认按钮文本\n </label>\n <input\n type=\"text\"\n value={formData.contentConfig.confirmText}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n contentConfig: {\n ...prev.contentConfig,\n confirmText: e.target.value,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 取消按钮文本\n </label>\n <input\n type=\"text\"\n value={formData.contentConfig.cancelText}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n contentConfig: {\n ...prev.contentConfig,\n cancelText: e.target.value,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 弹窗主题\n </label>\n <select\n value={formData.contentConfig.theme}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n contentConfig: {\n ...prev.contentConfig,\n theme: e.target.value as any,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value=\"warning\">警告</option>\n <option value=\"info\">信息</option>\n <option value=\"error\">错误</option>\n <option value=\"success\">成功</option>\n </select>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"showCancel\"\n checked={formData.contentConfig.showCancel}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n contentConfig: {\n ...prev.contentConfig,\n showCancel: e.target.checked,\n }\n }))}\n className=\"rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor=\"showCancel\" className=\"text-sm font-medium text-slate-700\">\n 显示取消按钮\n </label>\n </div>\n </div>\n\n {/* 显示设置 */}\n <div className=\"space-y-4\">\n <h4 className=\"font-medium text-slate-800\">显示设置</h4>\n \n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 弹窗宽度 (px)\n </label>\n <input\n type=\"number\"\n min=\"200\"\n max=\"800\"\n value={formData.displayConfig.width}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n displayConfig: {\n ...prev.displayConfig,\n width: parseInt(e.target.value) || 400,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-1\">\n 自动关闭 (秒,0=不关闭)\n </label>\n <input\n type=\"number\"\n min=\"0\"\n max=\"60\"\n value={formData.displayConfig.autoCloseSeconds}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n displayConfig: {\n ...prev.displayConfig,\n autoCloseSeconds: parseInt(e.target.value) || 0,\n }\n }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <input\n type=\"checkbox\"\n id=\"maskClosable\"\n checked={formData.displayConfig.maskClosable}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n displayConfig: {\n ...prev.displayConfig,\n maskClosable: e.target.checked,\n }\n }))}\n className=\"rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor=\"maskClosable\" className=\"text-sm font-medium text-slate-700\">\n 允许点击遮罩关闭\n </label>\n </div>\n </div>\n </div>\n\n {/* 流程控制设置 */}\n <div>\n <h4 className=\"text-sm font-medium text-slate-800 mb-3\">流程控制</h4>\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-3\">\n <input\n type=\"checkbox\"\n id=\"blockProcess\"\n checked={formData.blockProcess}\n onChange={(e) => setFormData(prev => ({\n ...prev,\n blockProcess: e.target.checked,\n }))}\n className=\"rounded border-slate-300 text-blue-600 focus:ring-blue-500\"\n />\n <label htmlFor=\"blockProcess\" className=\"text-sm font-medium text-slate-700\">\n 阻断流程\n </label>\n </div>\n <div className=\"text-xs text-slate-500 pl-6\">\n • 启用时:弹窗显示后阻止用户继续提交,只有关闭弹窗才能停止操作<br/>\n • 禁用时:弹窗仅作为提醒,用户可以选择继续提交或取消\n </div>\n </div>\n </div>\n\n {/* 操作按钮 */}\n <div className=\"flex justify-end gap-3 mt-6 pt-4 border-t border-slate-200\">\n <button\n onClick={() => {\n setShowCreateModal(false);\n resetForm();\n setEditingConfig(null);\n }}\n className=\"px-4 py-2 text-slate-600 hover:text-slate-700 transition-colors\"\n >\n 取消\n </button>\n <button\n onClick={handleSave}\n className=\"flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors\"\n >\n <Save size={16} />\n {editingConfig ? '更新' : '创建'}\n </button>\n </div>\n </Modal>\n )}\n </div>\n );\n};\n\nexport default PopupConfigManagement;\n","/**\n * ShowMasterpiece模块 - 系统配置管理组件\n * \n * 从全局configManager复制并适配,专门为showmasterpiece模块使用\n * 用于模块独立化准备\n */\n\n'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { Save, Edit, Eye, EyeOff, CheckCircle, AlertTriangle, Loader, RefreshCw, Database, Server, Trash2, Plus } from 'lucide-react';\nimport { DeleteConfirmDialog, AddConfigItemDialog } from './';\nimport { clearConfigCache } from '../services';\n\ninterface ConfigItem {\n id: string;\n key: string;\n displayName: string;\n description: string;\n value: string;\n defaultValue: string;\n type: 'string' | 'number' | 'boolean' | 'password';\n isRequired: boolean;\n isSensitive: boolean;\n validation: string | null;\n sortOrder: number;\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\ntype Environment = 'development' | 'production';\n\nexport const SystemConfigManager: React.FC = () => {\n const [configItems, setConfigItems] = useState<ConfigItem[]>([]);\n const [loading, setLoading] = useState(true);\n const [saving, setSaving] = useState<string | null>(null);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [editingItem, setEditingItem] = useState<string | null>(null);\n const [editValues, setEditValues] = useState<{ [key: string]: string }>({});\n const [showSensitive, setShowSensitive] = useState<{ [key: string]: boolean }>({});\n const [message, setMessage] = useState<{ type: 'success' | 'error'; text: string } | null>(null);\n const [searchTerm, setSearchTerm] = useState('');\n const [currentEnvironment, setCurrentEnvironment] = useState<Environment>('development');\n \n // 删除确认对话框状态\n const [deleteDialog, setDeleteDialog] = useState<{\n isOpen: boolean;\n item: ConfigItem | null;\n }>({\n isOpen: false,\n item: null\n });\n\n // 新增配置项对话框状态\n const [addDialog, setAddDialog] = useState<{\n isOpen: boolean;\n }>({\n isOpen: false\n });\n\n // 加载配置项 - 使用showmasterpiece专用API\n const loadConfigItems = async (environment?: Environment) => {\n const env = environment || currentEnvironment;\n setLoading(true);\n try {\n const response = await fetch(`/api/showmasterpiece/config/items?environment=${env}`);\n const data = await response.json();\n \n if (data.items && Array.isArray(data.items)) {\n setConfigItems(data.items);\n } else {\n console.error('API响应格式错误:', data);\n setMessage({\n type: 'error',\n text: '加载配置项失败:响应格式错误'\n });\n }\n } catch (error) {\n console.error('加载配置项失败:', error);\n setMessage({\n type: 'error',\n text: '加载配置项时发生网络错误'\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 开始编辑\n const startEdit = (item: ConfigItem) => {\n setEditingItem(item.id);\n setEditValues({\n ...editValues,\n [item.id]: item.value\n });\n };\n\n // 取消编辑\n const cancelEdit = () => {\n setEditingItem(null);\n setEditValues({});\n };\n\n // 保存编辑\n const saveEdit = async (item: ConfigItem) => {\n const newValue = editValues[item.id];\n if (newValue === undefined) return;\n\n // 类型验证\n if (item.type === 'number' && isNaN(Number(newValue))) {\n setMessage({\n type: 'error',\n text: '请输入有效的数字'\n });\n return;\n }\n\n if (item.type === 'boolean' && !['true', 'false'].includes(newValue.toLowerCase())) {\n setMessage({\n type: 'error',\n text: '布尔值只能是 true 或 false'\n });\n return;\n }\n\n setSaving(item.id);\n try {\n const response = await fetch(`/api/showmasterpiece/config/items/${item.id}`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n value: newValue,\n environment: currentEnvironment,\n }),\n });\n\n const result = await response.json();\n \n if (result.success) {\n setMessage({\n type: 'success',\n text: '配置项更新成功'\n });\n \n // 更新本地状态\n setConfigItems(prev => prev.map(config => \n config.id === item.id \n ? { ...config, value: newValue }\n : config\n ));\n \n // 如果是OSS相关配置,清除文件服务缓存\n if (item.key.includes('ALIYUN_OSS')) {\n console.log('🧹 [SystemConfigManager] OSS配置已更新,清除文件服务缓存');\n clearConfigCache();\n }\n \n setEditingItem(null);\n setEditValues({});\n } else {\n setMessage({\n type: 'error',\n text: result.error || '更新失败'\n });\n }\n } catch (error) {\n console.error('保存配置项失败:', error);\n setMessage({\n type: 'error',\n text: '保存时发生网络错误'\n });\n } finally {\n setSaving(null);\n }\n };\n\n // 删除配置项\n const handleDeleteItem = async (item: ConfigItem) => {\n setDeleteDialog({ isOpen: true, item });\n };\n\n // 确认删除\n const confirmDelete = async () => {\n const item = deleteDialog.item;\n if (!item) return;\n\n setDeleting(item.id);\n try {\n const response = await fetch(`/api/showmasterpiece/config/items/${item.id}`, {\n method: 'DELETE',\n });\n\n const result = await response.json();\n \n if (result.success) {\n setMessage({\n type: 'success',\n text: '配置项删除成功'\n });\n \n // 从本地状态中移除\n setConfigItems(prev => prev.filter(config => config.id !== item.id));\n } else {\n setMessage({\n type: 'error',\n text: result.error || '删除失败'\n });\n }\n } catch (error) {\n console.error('删除配置项失败:', error);\n setMessage({\n type: 'error',\n text: '删除时发生网络错误'\n });\n } finally {\n setDeleting(null);\n setDeleteDialog({ isOpen: false, item: null });\n }\n };\n\n // 切换环境\n const handleEnvironmentChange = (env: Environment) => {\n setCurrentEnvironment(env);\n loadConfigItems(env);\n };\n\n // 切换敏感信息显示\n const toggleSensitive = (itemId: string) => {\n setShowSensitive(prev => ({\n ...prev,\n [itemId]: !prev[itemId]\n }));\n };\n\n // 过滤配置项\n const filteredItems = configItems.filter(item =>\n item.key.toLowerCase().includes(searchTerm.toLowerCase()) ||\n item.displayName.toLowerCase().includes(searchTerm.toLowerCase()) ||\n item.description.toLowerCase().includes(searchTerm.toLowerCase())\n );\n\n // 获取状态图标\n const getStatusIcon = (item: ConfigItem) => {\n if (item.isRequired && !item.value) {\n return <AlertTriangle className=\"text-red-500\" size={16} />;\n }\n if (item.value) {\n return <CheckCircle className=\"text-green-500\" size={16} />;\n }\n return <AlertTriangle className=\"text-yellow-500\" size={16} />;\n };\n\n // 获取类型显示\n const getTypeDisplay = (type: string) => {\n switch (type) {\n case 'string': return '文本';\n case 'number': return '数字';\n case 'boolean': return '布尔';\n case 'password': return '密码';\n default: return type;\n }\n };\n\n // 渲染值\n const renderValue = (item: ConfigItem) => {\n if (item.isSensitive && !showSensitive[item.id]) {\n return '••••••••';\n }\n \n if (!item.value) {\n return <span className=\"text-gray-400 italic\">未设置</span>;\n }\n \n return item.value;\n };\n\n // 组件挂载时加载数据\n useEffect(() => {\n loadConfigItems();\n }, []);\n\n // 清除消息\n useEffect(() => {\n if (message) {\n const timer = setTimeout(() => {\n setMessage(null);\n }, 5000);\n return () => clearTimeout(timer);\n }\n return undefined;\n }, [message]);\n\n return (\n <div className=\"space-y-6\">\n {/* 消息提示 */}\n {message && (\n <div className={`p-4 rounded-lg ${\n message.type === 'success' \n ? 'bg-green-50 border border-green-200 text-green-800' \n : 'bg-red-50 border border-red-200 text-red-800'\n }`}>\n {message.text}\n </div>\n )}\n\n {/* 控制面板 */}\n <div className=\"bg-white rounded-lg shadow-sm border border-gray-200 p-6\">\n <div className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4\">\n {/* 左侧控制 */}\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-4\">\n {/* 环境切换 */}\n <div className=\"flex items-center gap-2\">\n <label className=\"text-sm font-medium text-gray-700\">环境:</label>\n <select\n value={currentEnvironment}\n onChange={(e) => handleEnvironmentChange(e.target.value as Environment)}\n className=\"px-3 py-1 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n >\n <option value=\"development\">开发环境</option>\n <option value=\"production\">生产环境</option>\n </select>\n </div>\n\n {/* 搜索框 */}\n <div className=\"flex items-center gap-2\">\n <input\n type=\"text\"\n placeholder=\"搜索配置项...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"px-3 py-1 border border-gray-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-blue-500\"\n />\n </div>\n </div>\n\n {/* 右侧操作 */}\n <div className=\"flex items-center gap-2\">\n <button\n onClick={() => setAddDialog({ isOpen: true })}\n className=\"flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-md text-sm font-medium hover:bg-blue-700 transition-colors\"\n >\n <Plus size={16} />\n 新增配置\n </button>\n <button\n onClick={() => loadConfigItems()}\n disabled={loading}\n className=\"flex items-center gap-2 px-4 py-2 bg-gray-100 text-gray-700 rounded-md text-sm font-medium hover:bg-gray-200 transition-colors disabled:opacity-50\"\n >\n <RefreshCw size={16} className={loading ? 'animate-spin' : ''} />\n 刷新\n </button>\n </div>\n </div>\n </div>\n\n {/* 配置项统计 */}\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-4\">\n <div className=\"bg-white rounded-lg shadow-sm border border-gray-200 p-4\">\n <div className=\"flex items-center gap-3\">\n <Database className=\"text-blue-500\" size={20} />\n <div>\n <p className=\"text-sm text-gray-600\">总配置项</p>\n <p className=\"text-lg font-semibold text-gray-900\">{configItems.length}</p>\n </div>\n </div>\n </div>\n \n <div className=\"bg-white rounded-lg shadow-sm border border-gray-200 p-4\">\n <div className=\"flex items-center gap-3\">\n <CheckCircle className=\"text-green-500\" size={20} />\n <div>\n <p className=\"text-sm text-gray-600\">已配置</p>\n <p className=\"text-lg font-semibold text-gray-900\">\n {configItems.filter(item => item.value).length}\n </p>\n </div>\n </div>\n </div>\n \n <div className=\"bg-white rounded-lg shadow-sm border border-gray-200 p-4\">\n <div className=\"flex items-center gap-3\">\n <AlertTriangle className=\"text-yellow-500\" size={20} />\n <div>\n <p className=\"text-sm text-gray-600\">待配置</p>\n <p className=\"text-lg font-semibold text-gray-900\">\n {configItems.filter(item => item.isRequired && !item.value).length}\n </p>\n </div>\n </div>\n </div>\n </div>\n\n {/* 配置项列表 */}\n <div className=\"bg-white rounded-lg shadow-sm border border-gray-200\">\n {loading ? (\n <div className=\"p-8 text-center\">\n <Loader className=\"animate-spin mx-auto mb-4 text-blue-500\" size={32} />\n <p className=\"text-gray-600\">加载配置项中...</p>\n </div>\n ) : (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full\">\n <thead className=\"bg-gray-50 border-b border-gray-200\">\n <tr>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">状态</th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">配置项</th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">类型</th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">当前值</th>\n <th className=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">操作</th>\n </tr>\n </thead>\n <tbody className=\"bg-white divide-y divide-gray-200\">\n {filteredItems.map((item) => (\n <tr key={item.id} className=\"hover:bg-gray-50\">\n <td className=\"px-6 py-4 whitespace-nowrap\">\n {getStatusIcon(item)}\n </td>\n <td className=\"px-6 py-4\">\n <div>\n <div className=\"text-sm font-medium text-gray-900\">\n {item.displayName}\n {item.isRequired && <span className=\"text-red-500 ml-1\">*</span>}\n </div>\n <div className=\"text-sm text-gray-500\">{item.description}</div>\n <div className=\"text-xs text-gray-400 mt-1\">Key: {item.key}</div>\n </div>\n </td>\n <td className=\"px-6 py-4 whitespace-nowrap\">\n <span className=\"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-gray-100 text-gray-800\">\n {getTypeDisplay(item.type)}\n </span>\n </td>\n <td className=\"px-6 py-4\">\n {editingItem === item.id ? (\n <div className=\"flex items-center gap-2\">\n <input\n type={item.type === 'password' ? 'password' : 'text'}\n value={editValues[item.id] || ''}\n onChange={(e) => setEditValues(prev => ({\n ...prev,\n [item.id]: e.target.value\n }))}\n className=\"px-2 py-1 border border-gray-300 rounded text-sm focus:outline-none focus:ring-1 focus:ring-blue-500\"\n placeholder={item.defaultValue}\n />\n <button\n onClick={() => saveEdit(item)}\n disabled={saving === item.id}\n className=\"text-green-600 hover:text-green-700 disabled:opacity-50\"\n >\n {saving === item.id ? (\n <Loader size={16} className=\"animate-spin\" />\n ) : (\n <Save size={16} />\n )}\n </button>\n <button\n onClick={cancelEdit}\n className=\"text-gray-600 hover:text-gray-700\"\n >\n ×\n </button>\n </div>\n ) : (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-gray-900\">\n {renderValue(item)}\n </span>\n {item.isSensitive && (\n <button\n onClick={() => toggleSensitive(item.id)}\n className=\"text-gray-400 hover:text-gray-600\"\n >\n {showSensitive[item.id] ? <EyeOff size={14} /> : <Eye size={14} />}\n </button>\n )}\n </div>\n )}\n </td>\n <td className=\"px-6 py-4 whitespace-nowrap text-sm font-medium\">\n <div className=\"flex items-center gap-2\">\n {editingItem === item.id ? null : (\n <>\n <button\n onClick={() => startEdit(item)}\n className=\"text-blue-600 hover:text-blue-700\"\n >\n <Edit size={16} />\n </button>\n <button\n onClick={() => handleDeleteItem(item)}\n disabled={deleting === item.id}\n className=\"text-red-600 hover:text-red-700 disabled:opacity-50\"\n >\n {deleting === item.id ? (\n <Loader size={16} className=\"animate-spin\" />\n ) : (\n <Trash2 size={16} />\n )}\n </button>\n </>\n )}\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n \n {filteredItems.length === 0 && (\n <div className=\"p-8 text-center\">\n <p className=\"text-gray-600\">\n {searchTerm ? '未找到匹配的配置项' : '暂无配置项'}\n </p>\n </div>\n )}\n </div>\n )}\n </div>\n\n {/* 删除确认对话框 */}\n <DeleteConfirmDialog\n isOpen={deleteDialog.isOpen}\n item={deleteDialog.item}\n onConfirm={confirmDelete}\n onCancel={() => setDeleteDialog({ isOpen: false, item: null })}\n />\n\n {/* 新增配置项对话框 */}\n <AddConfigItemDialog\n isOpen={addDialog.isOpen}\n onSave={async (data) => {\n try {\n const response = await fetch('/api/showmasterpiece/config/items', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n\n const result = await response.json();\n \n if (result.success) {\n setMessage({\n type: 'success',\n text: '配置项创建成功'\n });\n await loadConfigItems();\n } else {\n setMessage({\n type: 'error',\n text: result.error || '创建失败'\n });\n }\n } catch (error) {\n console.error('创建配置项失败:', error);\n setMessage({\n type: 'error',\n text: '创建时发生网络错误'\n });\n }\n setAddDialog({ isOpen: false });\n }}\n onCancel={() => setAddDialog({ isOpen: false })}\n />\n </div>\n );\n};\n","/**\n * ShowMasterpiece模块 - 新增配置项对话框组件\n * \n * 从全局configManager复制并简化适配\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport { X, Plus, Save, Loader, AlertTriangle } from 'lucide-react';\n\ninterface ConfigItemFormData {\n key: string;\n displayName: string;\n description: string;\n value: string;\n defaultValue: string;\n type: 'string' | 'number' | 'boolean' | 'password';\n isRequired: boolean;\n isSensitive: boolean;\n validation: string;\n sortOrder: number;\n}\n\ninterface AddConfigItemDialogProps {\n isOpen: boolean;\n onSave: (data: ConfigItemFormData) => Promise<void>;\n onCancel: () => void;\n}\n\nexport const AddConfigItemDialog: React.FC<AddConfigItemDialogProps> = ({\n isOpen,\n onSave,\n onCancel\n}) => {\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [success, setSuccess] = useState<string | null>(null);\n\n const [formData, setFormData] = useState<ConfigItemFormData>({\n key: '',\n displayName: '',\n description: '',\n value: '',\n defaultValue: '',\n type: 'string',\n isRequired: false,\n isSensitive: false,\n validation: '',\n sortOrder: 0\n });\n\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n // 表单验证\n const validateForm = () => {\n const newErrors: Record<string, string> = {};\n\n if (!formData.key.trim()) {\n newErrors.key = '配置键不能为空';\n } else if (!/^[A-Z_][A-Z0-9_]*$/.test(formData.key)) {\n newErrors.key = '配置键只能包含大写字母、数字和下划线,且必须以字母或下划线开头';\n }\n\n if (!formData.displayName.trim()) {\n newErrors.displayName = '显示名称不能为空';\n }\n\n if (formData.type === 'number' && formData.value && isNaN(Number(formData.value))) {\n newErrors.value = '请输入有效的数字';\n }\n\n if (formData.type === 'boolean' && formData.value && !['true', 'false'].includes(formData.value.toLowerCase())) {\n newErrors.value = '请输入 true 或 false';\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n // 提交表单\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n \n if (!validateForm()) {\n return;\n }\n\n setSaving(true);\n setError(null);\n setSuccess(null);\n\n try {\n await onSave(formData);\n \n setSuccess('配置项创建成功!');\n \n // 重置表单\n setFormData({\n key: '',\n displayName: '',\n description: '',\n value: '',\n defaultValue: '',\n type: 'string',\n isRequired: false,\n isSensitive: false,\n validation: '',\n sortOrder: 0\n });\n setErrors({});\n \n // 延迟关闭对话框\n setTimeout(() => {\n onCancel();\n }, 1500);\n \n } catch (error) {\n console.error('创建配置项失败:', error);\n setError('创建配置项失败');\n } finally {\n setSaving(false);\n }\n };\n\n // 处理输入变化\n const handleInputChange = (field: string, value: string | number | boolean) => {\n setFormData(prev => ({\n ...prev,\n [field]: value\n }));\n \n // 清除错误\n if (errors[field]) {\n setErrors(prev => ({\n ...prev,\n [field]: ''\n }));\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n {/* 背景遮罩 */}\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n <div \n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"\n onClick={onCancel}\n ></div>\n\n {/* 对话框 */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full\">\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"sm:flex sm:items-start\">\n <div className=\"mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10\">\n <Plus className=\"h-6 w-6 text-blue-600\" />\n </div>\n <div className=\"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left w-full\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900 mb-4\">\n 新增配置项\n </h3>\n \n {/* 错误消息 */}\n {error && (\n <div className=\"mb-4 p-3 bg-red-50 border border-red-200 rounded-md\">\n <div className=\"flex items-center\">\n <AlertTriangle className=\"w-4 h-4 text-red-600 mr-2\" />\n <span className=\"text-sm text-red-800\">{error}</span>\n </div>\n </div>\n )}\n\n {/* 成功消息 */}\n {success && (\n <div className=\"mb-4 p-3 bg-green-50 border border-green-200 rounded-md\">\n <div className=\"flex items-center\">\n <span className=\"text-sm text-green-800\">{success}</span>\n </div>\n </div>\n )}\n\n {/* 表单 */}\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {/* 配置键 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 配置键 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n value={formData.key}\n onChange={(e) => handleInputChange('key', e.target.value.toUpperCase())}\n placeholder=\"例如: SHOWMASTER_CONFIG_KEY\"\n className={`w-full px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.key ? 'border-red-300' : 'border-gray-300'\n }`}\n disabled={saving}\n />\n {errors.key && (\n <p className=\"mt-1 text-sm text-red-600\">{errors.key}</p>\n )}\n <p className=\"mt-1 text-xs text-gray-500\">\n 只能包含大写字母、数字和下划线,且必须以字母或下划线开头\n </p>\n </div>\n\n {/* 显示名称 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 显示名称 <span className=\"text-red-500\">*</span>\n </label>\n <input\n type=\"text\"\n value={formData.displayName}\n onChange={(e) => handleInputChange('displayName', e.target.value)}\n placeholder=\"例如: ShowMaster配置项\"\n className={`w-full px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.displayName ? 'border-red-300' : 'border-gray-300'\n }`}\n disabled={saving}\n />\n {errors.displayName && (\n <p className=\"mt-1 text-sm text-red-600\">{errors.displayName}</p>\n )}\n </div>\n\n {/* 描述 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 描述\n </label>\n <textarea\n value={formData.description}\n onChange={(e) => handleInputChange('description', e.target.value)}\n placeholder=\"配置项的详细描述\"\n rows={3}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n disabled={saving}\n />\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {/* 配置类型 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 配置类型 <span className=\"text-red-500\">*</span>\n </label>\n <select\n value={formData.type}\n onChange={(e) => handleInputChange('type', e.target.value)}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n disabled={saving}\n >\n <option value=\"string\">字符串</option>\n <option value=\"number\">数字</option>\n <option value=\"boolean\">布尔值</option>\n <option value=\"password\">密码</option>\n </select>\n </div>\n\n {/* 排序 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 排序\n </label>\n <input\n type=\"number\"\n value={formData.sortOrder}\n onChange={(e) => handleInputChange('sortOrder', parseInt(e.target.value) || 0)}\n placeholder=\"0\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n disabled={saving}\n />\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {/* 配置值 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 配置值\n </label>\n {formData.type === 'boolean' ? (\n <select\n value={formData.value}\n onChange={(e) => handleInputChange('value', e.target.value)}\n className={`w-full px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.value ? 'border-red-300' : 'border-gray-300'\n }`}\n disabled={saving}\n >\n <option value=\"\">请选择</option>\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input\n type={formData.type === 'password' ? 'password' : formData.type === 'number' ? 'number' : 'text'}\n value={formData.value}\n onChange={(e) => handleInputChange('value', e.target.value)}\n placeholder=\"输入配置值\"\n className={`w-full px-3 py-2 border rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n errors.value ? 'border-red-300' : 'border-gray-300'\n }`}\n disabled={saving}\n />\n )}\n {errors.value && (\n <p className=\"mt-1 text-sm text-red-600\">{errors.value}</p>\n )}\n </div>\n\n {/* 默认值 */}\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-1\">\n 默认值\n </label>\n {formData.type === 'boolean' ? (\n <select\n value={formData.defaultValue}\n onChange={(e) => handleInputChange('defaultValue', e.target.value)}\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n disabled={saving}\n >\n <option value=\"\">请选择</option>\n <option value=\"true\">true</option>\n <option value=\"false\">false</option>\n </select>\n ) : (\n <input\n type={formData.type === 'password' ? 'password' : formData.type === 'number' ? 'number' : 'text'}\n value={formData.defaultValue}\n onChange={(e) => handleInputChange('defaultValue', e.target.value)}\n placeholder=\"输入默认值\"\n className=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\"\n disabled={saving}\n />\n )}\n </div>\n </div>\n\n {/* 选项 */}\n <div className=\"flex flex-wrap gap-6\">\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id=\"isRequired\"\n checked={formData.isRequired}\n onChange={(e) => handleInputChange('isRequired', e.target.checked)}\n className=\"h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded\"\n disabled={saving}\n />\n <label htmlFor=\"isRequired\" className=\"ml-2 block text-sm text-gray-900\">\n 必需配置项\n </label>\n </div>\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id=\"isSensitive\"\n checked={formData.isSensitive}\n onChange={(e) => handleInputChange('isSensitive', e.target.checked)}\n className=\"h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded\"\n disabled={saving}\n />\n <label htmlFor=\"isSensitive\" className=\"ml-2 block text-sm text-gray-900\">\n 敏感信息\n </label>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={saving}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {saving ? (\n <>\n <Loader className=\"w-4 h-4 mr-2 animate-spin\" />\n 创建中...\n </>\n ) : (\n <>\n <Save className=\"w-4 h-4 mr-2\" />\n 创建配置项\n </>\n )}\n </button>\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={saving}\n className=\"mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n 取消\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","/**\n * ShowMasterpiece模块 - 删除确认对话框组件\n * \n * 从全局configManager复制并适配\n */\n\n'use client';\n\nimport React from 'react';\nimport { AlertTriangle, Loader } from 'lucide-react';\n\ninterface ConfigItem {\n id: string;\n key: string;\n displayName: string;\n description: string;\n value: string;\n defaultValue: string;\n type: 'string' | 'number' | 'boolean' | 'password';\n isRequired: boolean;\n isSensitive: boolean;\n validation: string | null;\n sortOrder: number;\n isActive: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface DeleteConfirmDialogProps {\n isOpen: boolean;\n item: ConfigItem | null;\n onConfirm: () => void;\n onCancel: () => void;\n loading?: boolean;\n}\n\nexport const DeleteConfirmDialog: React.FC<DeleteConfirmDialogProps> = ({\n isOpen,\n item,\n onConfirm,\n onCancel,\n loading = false\n}) => {\n if (!isOpen || !item) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 overflow-y-auto\">\n {/* 背景遮罩 */}\n <div className=\"flex items-center justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0\">\n <div \n className=\"fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity\"\n onClick={onCancel}\n ></div>\n\n {/* 对话框 */}\n <div className=\"inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full\">\n <div className=\"bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4\">\n <div className=\"sm:flex sm:items-start\">\n <div className=\"mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-red-100 sm:mx-0 sm:h-10 sm:w-10\">\n <AlertTriangle className=\"h-6 w-6 text-red-600\" />\n </div>\n <div className=\"mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left\">\n <h3 className=\"text-lg leading-6 font-medium text-gray-900\">\n 删除配置项\n </h3>\n <div className=\"mt-2\">\n <p className=\"text-sm text-gray-500\">\n 确定要删除这个配置项吗?此操作不可撤销。\n </p>\n <p className=\"mt-2 text-sm font-medium text-gray-900\">\n <span className=\"font-mono bg-gray-100 px-2 py-1 rounded\">\n {item.displayName} ({item.key})\n </span>\n </p>\n </div>\n </div>\n </div>\n </div>\n <div className=\"bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse\">\n <button\n type=\"button\"\n onClick={onConfirm}\n disabled={loading}\n className=\"w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {loading ? (\n <>\n <Loader className=\"w-4 h-4 mr-2 animate-spin\" />\n 删除中...\n </>\n ) : (\n '删除'\n )}\n </button>\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={loading}\n className=\"mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n 取消\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n};\n","/**\n * ShowMasterpiece 主页面组件 - Tailwind CSS 版本\n * \n * 这是ShowMasterpiece模块的主要页面组件,提供完整的画集浏览体验。\n * 支持两种视图模式:画集列表视图和作品详情视图。\n * \n * 主要功能:\n * - 画集列表展示和搜索\n * - 画集详情浏览和作品查看\n * - 用户权限控制和认证\n * - 响应式设计和优化的用户体验\n * - 配置管理入口(需要管理员权限)\n * \n * 技术特点:\n * - 使用自定义Hook进行状态管理\n * - 集成认证系统,支持权限控制\n * - 动态配置加载,支持个性化设置\n * - 性能优化:使用useMemo缓存计算结果\n * - 使用 Tailwind CSS 进行样式管理\n * \n * @component\n */\n\n'use client';\n\nimport React, { useEffect, useState, useMemo } from 'react';\nimport { ArrowLeft, Settings, History } from 'lucide-react';\nimport Link from 'next/link';\nimport { useMasterpieces, useDeadlinePopup } from '../../../logic/hooks';\nimport { getConfig } from '../services';\nimport { MasterpiecesConfig, CollectionCategory, CollectionCategoryType, normalizeHomeTabConfig, getCategoryDisplayName } from '../types';\nimport { CollectionCard, ArtworkViewer, ThumbnailSidebar, MobileAlbumViewer, CartModal, CartButton, DeadlinePopupManager} from '../components';\nimport { CartProvider } from '../../../logic/contexts/CartContext';\nimport { AuthProvider, useAuth, UserMenu, CustomMenuItem } from '@/auth/legacy';\nimport { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, Badge, Tabs, TabsContent, TabsList, TabsTrigger } from '@/components';\n\n/**\n * ShowMasterpiece 内容组件\n * \n * 主要的业务逻辑组件,包含状态管理和视图渲染。\n * 需要在AuthProvider包装器内使用,以便访问认证状态。\n * \n * @returns React函数组件\n */\nfunction ShowMasterPiecesContent() {\n // ===== Hooks和状态管理 =====\n \n /**\n * 使用自定义Hook管理画集数据和浏览状态\n * 包含画集列表、当前选中画集、翻页操作等\n */\n const {\n collections, // 所有画集数据\n selectedCollection, // 当前选中的画集\n currentPage, // 当前作品页面索引\n loading, // 数据加载状态\n error, // 错误信息\n getCurrentArtwork, // 获取当前作品的方法\n canGoNext, // 是否可以下一页\n canGoPrev, // 是否可以上一页\n selectCollection, // 选择画集的方法\n nextPage, // 下一页方法\n prevPage, // 上一页方法\n goToPage, // 跳转到指定页面的方法\n backToGallery, // 返回画集列表的方法\n } = useMasterpieces();\n\n /** 获取用户认证状态和信息 */\n const { isAuthenticated, user } = useAuth();\n \n /** 系统配置状态 */\n const [config, setConfig] = useState<MasterpiecesConfig | null>(null);\n \n /** 购物车弹窗状态 */\n const [cartModalOpen, setCartModalOpen] = useState(false);\n \n /** 当前选中的分类 */\n const [selectedCategory, setSelectedCategory] = useState<CollectionCategoryType>(\n CollectionCategory.OTHER\n );\n \n /** 主页弹窗管理 */\n const {\n configs: popupConfigs,\n hasPopup,\n loading: popupLoading,\n error: popupError,\n triggerCheck,\n closePopup,\n confirmPopup,\n cancelPopup,\n } = useDeadlinePopup('showmasterpiece', 'homepage_visit');\n\n // ===== 配置加载 =====\n \n /**\n * 组件挂载时加载系统配置\n * 配置信息用于自定义页面标题、副标题等显示内容\n */\n useEffect(() => {\n const loadConfig = async () => {\n try {\n const configData = await getConfig();\n setConfig(configData);\n } catch (err) {\n console.error('Failed to load config:', err);\n }\n };\n loadConfig();\n }, []);\n \n /**\n * 组件挂载时检查是否需要显示主页弹窗\n */\n useEffect(() => {\n const checkHomepagePopups = async () => {\n try {\n console.log('🔔 [ShowMasterPieces] 检查主页弹窗...');\n await triggerCheck();\n } catch (err) {\n console.error('❌ [ShowMasterPieces] 检查主页弹窗失败:', err);\n }\n };\n\n // 延迟检查,确保页面完全加载\n const timer = setTimeout(checkHomepagePopups, 1000);\n return () => clearTimeout(timer);\n }, [triggerCheck]);\n\n const homeTabConfig = useMemo(\n () => normalizeHomeTabConfig(config?.homeTabConfig),\n [config?.homeTabConfig],\n );\n\n const visibleHomeTabs = useMemo(\n () => homeTabConfig.filter((item) => item.visible),\n [homeTabConfig],\n );\n\n const firstVisibleCategory = visibleHomeTabs[0]?.category ?? CollectionCategory.OTHER;\n\n useEffect(() => {\n const isSelectedVisible = visibleHomeTabs.some((tab) => tab.category === selectedCategory);\n if (!isSelectedVisible) {\n setSelectedCategory(firstVisibleCategory);\n }\n }, [visibleHomeTabs, selectedCategory, firstVisibleCategory]);\n\n // ===== 数据过滤 =====\n \n /**\n * 根据选中的分类过滤画集\n * 使用 useMemo 缓存过滤结果,避免重复计算\n */\n const filteredCollections = useMemo(() => {\n return collections.filter(collection => collection.category === selectedCategory);\n }, [collections, selectedCategory]);\n\n // ===== 权限控制 =====\n \n /**\n * 使用 useMemo 缓存权限检查结果,避免重复计算\n * \n * 权限判断逻辑:\n * - 必须已登录\n * - 用户角色为admin,或者\n * - 用户ID为1(临时管理员)\n */\n const hasAdminAccess = useMemo(() => {\n return isAuthenticated && (user?.role === 'admin' || user?.id === 1);\n }, [isAuthenticated, user?.role, user?.id]);\n\n // ===== 事件处理函数 =====\n \n /**\n * 处理配置按钮点击事件\n * 检查权限后跳转到配置页面\n */\n const handleConfigClick = () => {\n if (!hasAdminAccess) {\n alert('需要管理员权限才能访问配置页面');\n return;\n }\n window.location.href = '/testField/ShowMasterPieces/config';\n };\n\n /**\n * 处理购物车按钮点击事件\n * 打开购物车弹窗\n */\n const handleCartClick = () => {\n setCartModalOpen(true);\n };\n\n // ===== 弹窗处理函数 =====\n \n /**\n * 处理主页弹窗确认\n */\n const handleHomepagePopupConfirm = (configId: string) => {\n console.log('✅ [ShowMasterPieces] 用户确认主页弹窗:', configId);\n confirmPopup(configId);\n };\n\n /**\n * 处理主页弹窗取消\n */\n const handleHomepagePopupCancel = (configId: string) => {\n console.log('❌ [ShowMasterPieces] 用户取消主页弹窗:', configId);\n cancelPopup(configId);\n };\n\n // ===== 渲染函数 =====\n \n /**\n * 渲染加载状态\n */\n const renderLoading = () => (\n <div className=\"min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden\">\n <div className=\"flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4\">\n <div className=\"w-10 h-10 border-4 border-prussian-blue-300 border-t-moonstone rounded-full animate-spin\"></div>\n <p className=\"text-prussian-blue-600\">加载中...</p>\n </div>\n </div>\n );\n\n /**\n * 渲染错误状态\n */\n const renderError = () => (\n <div className=\"min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden\">\n <div className=\"flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4 text-center\">\n <p className=\"text-destructive text-lg\">加载失败:{error}</p>\n <Button \n onClick={() => window.location.reload()}\n className=\"bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300\"\n >\n 重试\n </Button>\n </div>\n </div>\n );\n\n /**\n * 渲染空状态\n */\n const renderEmptyState = () => (\n <div className=\"min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden\">\n <div className=\"flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4 text-center\">\n <div className=\"text-moonstone text-6xl mb-4\">🎨</div>\n <h3 className=\"text-xl font-semibold mb-2 text-rich-black\">暂无可用画集</h3>\n <p className=\"text-prussian-blue-600 mb-6\">当前没有可预订的画集,请稍后再试</p>\n {hasAdminAccess && (\n <Button \n asChild \n className=\"bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300\"\n >\n <a href=\"/testField/ShowMasterPieces/config\" className=\"gap-2\">\n <Settings size={20} />\n 前往配置页面\n </a>\n </Button>\n )}\n </div>\n </div>\n );\n\n // ===== 主渲染逻辑 =====\n \n // 加载状态\n if (loading) {\n return renderLoading();\n }\n\n // 错误状态\n if (error) {\n return renderError();\n }\n\n // 空状态\n if (!collections || collections.length === 0) {\n return renderEmptyState();\n }\n\n // 获取用户ID,临时默认为1(应该要求登录)\n const userId = user?.id || 1;\n\n const categoryList = visibleHomeTabs.map((tab) => ({\n category: tab.category,\n displayName: tab.description || tab.name || getCategoryDisplayName(tab.category),\n }));\n\n return (\n <CartProvider userId={userId}>\n <div className=\"min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden\">\n {/* 顶部导航 */}\n <div className=\"bg-white/95 backdrop-blur supports-[backdrop-filter]:bg-white/80 border-b border-prussian-blue-200/30 sticky top-0 z-50\">\n <div className=\"max-w-7xl mx-auto px-3 sm:px-4 py-3 sm:py-4\">\n <div className=\"flex items-center justify-between gap-2 sm:gap-4 min-h-[44px]\">\n {/* 左侧:返回按钮和标题 */}\n <div className=\"flex items-center gap-4 sm:gap-8 min-w-0 flex-1\">\n {selectedCollection && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={backToGallery}\n className=\"gap-1 sm:gap-2 min-h-[44px] min-w-[44px] flex-shrink-0\"\n >\n <ArrowLeft size={18} className=\"sm:w-5 sm:h-5\" />\n <span className=\"hidden sm:inline\">返回</span>\n </Button>\n )}\n <div className=\"text-center sm:text-left min-w-0 flex-1\">\n <div className=\"flex flex-col sm:flex-row sm:items-center gap-2\">\n <h1 className=\"text-lg sm:text-xl lg:text-2xl font-bold m-0 truncate text-rich-black\">\n {config?.heroTitle || '艺术画集展览'}\n </h1>\n </div>\n <p className=\"text-xs sm:text-sm text-prussian-blue-600 m-0 hidden sm:block truncate\">\n {config?.heroSubtitle || '探索精美的艺术作品,感受创作的魅力'}\n </p>\n </div>\n </div>\n\n {/* 右侧:用户菜单和操作按钮 */}\n <div className=\"flex items-center gap-3 sm:gap-4 flex-shrink-0\">\n {/* 历史记录链接 */}\n <Link\n href=\"/testField/ShowMasterPieces/history\"\n className=\"flex items-center gap-1 sm:gap-2 text-prussian-blue-600 hover:text-moonstone transition-colors p-1 sm:p-2 rounded-lg min-h-[44px] min-w-[44px] flex-shrink-0\"\n title=\"查看预订历史\"\n >\n <History size={18} className=\"sm:w-5 sm:h-5\" />\n <span className=\"hidden sm:inline\">历史记录</span>\n </Link>\n \n {/* 购物车按钮 */}\n <CartButton \n onClick={handleCartClick} \n className=\"relative p-1 sm:p-2 text-prussian-blue-600 hover:text-moonstone transition-colors\" \n userId={userId}\n />\n \n {/* 用户菜单 */}\n <UserMenu \n customMenuItems={hasAdminAccess ? [\n {\n id: 'showmasterpiece-admin',\n label: '画集管理',\n icon: Settings,\n onClick: handleConfigClick,\n requireAuth: true\n }\n ] : []}\n />\n </div>\n </div>\n </div>\n </div>\n\n {/* 主要内容区域 */}\n {selectedCollection ? (\n /* 手机相册风格的作品浏览视图 */\n <div className=\"fixed inset-0 top-[76px] z-40\">\n <MobileAlbumViewer\n artworks={selectedCollection.pages}\n collectionId={selectedCollection.id}\n currentIndex={currentPage}\n onIndexChange={goToPage}\n onNext={nextPage}\n onPrev={prevPage}\n canGoNext={canGoNext}\n canGoPrev={canGoPrev}\n />\n </div>\n ) : (\n <div className=\"max-w-7xl mx-auto p-3 sm:p-4 lg:p-6\">\n {/* 画集列表视图 */}\n <div className=\"space-y-6\">\n {/* 分类筛选 */}\n <Card>\n <CardHeader>\n <CardTitle>商品分类</CardTitle>\n <CardDescription>选择您感兴趣的商品类型</CardDescription>\n </CardHeader>\n <CardContent>\n <Tabs value={selectedCategory} onValueChange={(value) => setSelectedCategory(value as CollectionCategoryType)}>\n <TabsList className=\"grid grid-cols-3 lg:grid-cols-9 h-auto p-1 bg-moonstone-900/10\">\n {categoryList.map(({ category, displayName }) => (\n <TabsTrigger\n key={category}\n value={category}\n className=\"flex flex-col h-auto py-3 px-2 data-[state=active]:bg-gradient-to-r data-[state=active]:from-moonstone data-[state=active]:to-cerulean data-[state=active]:text-white data-[state=active]:shadow-lg transition-all duration-300\"\n >\n <span className=\"font-semibold text-xs\">{displayName}</span>\n <Badge variant=\"outline\" className=\"mt-1 text-xs border-moonstone/30 text-cerulean bg-moonstone-900/5\">\n {collections.filter(c => c.category === category).length}\n </Badge>\n </TabsTrigger>\n ))}\n </TabsList>\n </Tabs>\n </CardContent>\n </Card>\n\n {/* 画集网格 */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 sm:gap-6\">\n {filteredCollections.map((collection) => (\n <CollectionCard\n key={collection.id}\n collection={collection}\n userId={userId}\n onSelect={selectCollection}\n />\n ))}\n </div>\n \n {/* 空状态提示 */}\n {filteredCollections.length === 0 && collections.length > 0 && (\n <div className=\"text-center py-8 sm:py-12 px-4\">\n <div className=\"text-prussian-blue-400 text-base sm:text-lg mb-2\">\n 当前分类暂无内容\n </div>\n <p className=\"text-prussian-blue-500 text-xs sm:text-sm\">\n 请尝试选择其他分类查看\n </p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* 购物车弹窗 */}\n <CartModal \n isOpen={cartModalOpen} \n onClose={() => setCartModalOpen(false)} \n title=\"购物车\" \n userId={userId}\n />\n\n {/* 主页限时弹窗管理器 */}\n {hasPopup && (\n <DeadlinePopupManager\n configs={popupConfigs}\n onClose={closePopup}\n onConfirm={handleHomepagePopupConfirm}\n onCancel={handleHomepagePopupCancel}\n />\n )}\n </div>\n </CartProvider>\n );\n}\n\ninterface ShowMasterPiecesPageProps {\n /** Next.js 页面参数 */\n params?: Record<string, string>;\n /** Next.js 搜索参数 */\n searchParams?: Record<string, string | string[] | undefined>;\n}\n\n/**\n * ShowMasterpiece 主组件\n * \n * 提供认证上下文包装器,确保组件能够访问用户认证状态。\n * 这是模块的对外接口组件。\n * \n * @returns React函数组件\n */\nexport default function ShowMasterPieces(props: ShowMasterPiecesPageProps = {}) {\n return (\n <AuthProvider>\n <ShowMasterPiecesContent />\n </AuthProvider>\n );\n}\n\n// 导出组件和类型,供其他模块使用\nexport { ShowMasterPieces as ShowMasterPiecesPage };\nexport type { ShowMasterPiecesPageProps }; \n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { ArrowLeft, Settings, Database, Image, Tag, Save, RotateCcw, Plus, Edit, Trash2, ArrowUpDown, Calendar, RefreshCw, Bell, Cog } from 'lucide-react';\nimport { useMasterpiecesConfig, useBookingAdmin } from '../../../../logic/hooks';\nimport { ConfigFormData, CollectionFormData, ArtworkFormData, CollectionCategory, CollectionCategoryType, CategoryOption, buildDefaultHomeTabConfig, normalizeHomeTabConfig, getCategoryDisplayName } from '../../types';\nimport { \n UniversalImageUpload, \n CollectionOrderManagerV2 as CollectionOrderManager,\n ArtworkOrderManagerV2 as ArtworkOrderManager,\n BookingAdminPanel,\n PopupConfigManagement,\n SystemConfigManager\n} from '../../components';\nimport { shouldUseUniversalFileService, getStorageModeDisplayName, createCategory as createCategoryService } from '../../services';\nimport { AuthGuard, AuthProvider } from '@/auth/legacy';\nimport { \n Button, \n Input, \n Label, \n Textarea, \n Select, SelectContent, SelectItem, SelectTrigger, SelectValue,\n Card, CardContent, CardDescription, CardHeader, CardTitle,\n Tabs, TabsContent, TabsList, TabsTrigger,\n Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger,\n Badge,\n Separator,\n ScrollArea,\n AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger \n} from '@/components';\n\ntype TabType = 'general' | 'homeTabs' | 'collections' | 'artworks' | 'bookings' | 'popup' | 'system';\n\nfunction ConfigPageContent() {\n const {\n config,\n collections,\n categories,\n tags,\n loading,\n error,\n updateConfig,\n resetConfig,\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 refreshData,\n } = useMasterpiecesConfig();\n\n const [activeTab, setActiveTab] = useState<TabType>('general');\n const [selectedCollection, setSelectedCollection] = useState<number | null>(null);\n const [showCollectionForm, setShowCollectionForm] = useState(false);\n const [showArtworkForm, setShowArtworkForm] = useState(false);\n const [editingCollection, setEditingCollection] = useState<number | null>(null);\n const [editingArtwork, setEditingArtwork] = useState<{ collectionId: number; artworkId: number } | null>(null);\n const [showArtworkOrder, setShowArtworkOrder] = useState(false);\n const [showCollectionOrder, setShowCollectionOrder] = useState(false);\n const [newHomeTabCategory, setNewHomeTabCategory] = useState('');\n const [newHomeTabDescription, setNewHomeTabDescription] = useState('');\n const [categoryOptions, setCategoryOptions] = useState<CategoryOption[]>([]);\n\n // 预订管理Hook\n const {\n bookings,\n stats,\n loading: bookingLoading,\n error: bookingError,\n searchParams,\n refreshData: refreshBookingData,\n searchBookings,\n clearSearch,\n updateBookingStatus,\n deleteBooking,\n exportBookings,\n } = useBookingAdmin();\n\n // 检查是否使用通用文件服务\n const [useUniversalService, setUseUniversalService] = useState<boolean>(false);\n const [storageModeDisplay, setStorageModeDisplay] = useState<string>('检查中...');\n\n // 加载文件服务配置\n useEffect(() => {\n const loadFileServiceConfig = async () => {\n try {\n const shouldUse = await shouldUseUniversalFileService();\n const displayName = await getStorageModeDisplayName();\n setUseUniversalService(shouldUse);\n setStorageModeDisplay(displayName);\n } catch (error) {\n console.error('加载文件服务配置失败:', error);\n setUseUniversalService(false);\n setStorageModeDisplay('配置加载失败');\n }\n };\n loadFileServiceConfig();\n }, []);\n\n // 预订管理包装函数\n const handleBookingSearch = searchBookings;\n const handleBookingClearSearch = clearSearch;\n const handleBookingRefresh = refreshBookingData;\n\n // 配置表单状态\n const [configForm, setConfigForm] = useState<ConfigFormData>({\n siteName: config?.siteName || '',\n siteDescription: config?.siteDescription || '',\n heroTitle: config?.heroTitle || '',\n heroSubtitle: config?.heroSubtitle || '',\n maxCollectionsPerPage: config?.maxCollectionsPerPage || 9,\n enableSearch: config?.enableSearch || true,\n enableCategories: config?.enableCategories || true,\n defaultCategory: config?.defaultCategory || 'all',\n homeTabConfig: normalizeHomeTabConfig(config?.homeTabConfig),\n theme: config?.theme || 'light',\n language: config?.language || 'zh',\n });\n\n // 商品表单状态\n const [collectionForm, setCollectionForm] = useState<CollectionFormData>({\n title: '',\n number: '',\n coverImage: '',\n coverImageFileId: undefined,\n description: '',\n category: CollectionCategory.COLLECTION,\n tags: [],\n isPublished: true,\n price: undefined,\n });\n\n // 商品详情图表单状态\n const [artworkForm, setArtworkForm] = useState<ArtworkFormData>({\n title: '',\n number: '',\n image: '',\n description: '',\n createdTime: '',\n theme: '',\n });\n\n // 更新配置表单\n React.useEffect(() => {\n if (config) {\n setConfigForm({\n siteName: config.siteName,\n siteDescription: config.siteDescription || '',\n heroTitle: config.heroTitle,\n heroSubtitle: config.heroSubtitle || '',\n maxCollectionsPerPage: config.maxCollectionsPerPage,\n enableSearch: config.enableSearch,\n enableCategories: config.enableCategories,\n defaultCategory: config.defaultCategory,\n homeTabConfig: normalizeHomeTabConfig(config.homeTabConfig),\n theme: config.theme,\n language: config.language,\n });\n }\n }, [config]);\n\n React.useEffect(() => {\n setCategoryOptions(categories);\n }, [categories]);\n\n const handleHomeTabMove = (index: number, direction: -1 | 1) => {\n setConfigForm((prev) => {\n const items = [...prev.homeTabConfig];\n const targetIndex = index + direction;\n if (targetIndex < 0 || targetIndex >= items.length) {\n return prev;\n }\n const updated = [...items];\n const currentItem = updated[index];\n const targetItem = updated[targetIndex];\n if (!currentItem || !targetItem) {\n return prev;\n }\n updated[index] = targetItem;\n updated[targetIndex] = currentItem;\n const normalized = normalizeHomeTabConfig(\n updated.map((item, newIndex) => ({ ...item, order: newIndex })),\n );\n return { ...prev, homeTabConfig: normalized };\n });\n };\n\n const handleHomeTabToggle = (category: CollectionCategoryType) => {\n setConfigForm((prev) => {\n const updated = prev.homeTabConfig.map((item) =>\n item.category === category ? { ...item, visible: !item.visible } : item,\n );\n return { ...prev, homeTabConfig: normalizeHomeTabConfig(updated) };\n });\n };\n\n const handleResetHomeTabs = () => {\n setConfigForm((prev) => ({\n ...prev,\n homeTabConfig: buildDefaultHomeTabConfig(),\n }));\n setNewHomeTabCategory('');\n setNewHomeTabDescription('');\n };\n\n const handleSetAllHomeTabsVisible = (visible: boolean) => {\n setConfigForm((prev) => {\n const updated = prev.homeTabConfig.map((item) => ({\n ...item,\n visible,\n }));\n return { ...prev, homeTabConfig: normalizeHomeTabConfig(updated) };\n });\n };\n\n const handleAddHomeTab = async () => {\n const trimmed = newHomeTabCategory.trim();\n const trimmedDescription = newHomeTabDescription.trim();\n if (!trimmed) {\n alert('分类名称不能为空');\n setNewHomeTabCategory('');\n return;\n }\n const exists = configForm.homeTabConfig.some(\n (item) => item.category.toLowerCase() === trimmed.toLowerCase(),\n );\n if (exists) {\n alert('该分类已存在');\n setNewHomeTabCategory('');\n return;\n }\n const existingCategory = categoryOptions.find(\n (category) => category.name.toLowerCase() === trimmed.toLowerCase(),\n );\n const description = trimmedDescription || existingCategory?.description || '';\n if (!description) {\n alert('展示文案不能为空');\n return;\n }\n\n try {\n if (!existingCategory) {\n await createCategoryService(trimmed, description);\n setCategoryOptions((prev) => [...prev, { name: trimmed, description }]);\n }\n\n setConfigForm((prev) => {\n const updated = [\n ...prev.homeTabConfig,\n {\n name: trimmed,\n description,\n category: trimmed as CollectionCategoryType,\n visible: true,\n order: prev.homeTabConfig.length,\n },\n ];\n return { ...prev, homeTabConfig: normalizeHomeTabConfig(updated) };\n });\n setNewHomeTabCategory('');\n setNewHomeTabDescription('');\n } catch (error) {\n console.error('新增分类失败:', error);\n alert(error instanceof Error ? error.message : '新增分类失败');\n }\n };\n\n const handleRemoveHomeTab = (category: CollectionCategoryType) => {\n setConfigForm((prev) => {\n if (prev.homeTabConfig.length <= 1) {\n return prev;\n }\n const updated = prev.homeTabConfig.filter((item) => item.category !== category);\n return { ...prev, homeTabConfig: normalizeHomeTabConfig(updated) };\n });\n };\n\n // 商品详情图管理tab自动选择商品逻辑\n React.useEffect(() => {\n if (activeTab === 'artworks' && collections.length > 0) {\n // 检查当前选择的商品是否还存在\n if (selectedCollection && !collections.find(c => c.id === selectedCollection)) {\n console.log('⚠️ [配置页面] 当前选择的商品已不存在,重置选择');\n setSelectedCollection(null);\n setShowArtworkOrder(false);\n setShowArtworkForm(false);\n setEditingArtwork(null);\n }\n // 如果用户未选择商品,自动选择第一个\n else if (!selectedCollection) {\n const firstCollection = collections[0];\n if (firstCollection) {\n console.log('🎯 [配置页面] 商品详情图管理tab首次进入,自动选择第一个商品:', {\n selectedCollection: firstCollection.id,\n title: firstCollection.title\n });\n setSelectedCollection(firstCollection.id);\n }\n }\n // 如果用户已选择且商品存在,保留用户选择\n else {\n const currentCollection = collections.find(c => c.id === selectedCollection);\n console.log('✅ [配置页面] 保留用户选择的商品:', {\n selectedCollection: selectedCollection,\n title: currentCollection?.title\n });\n }\n }\n }, [activeTab, collections, selectedCollection]);\n\n // 当离开商品详情图管理tab时,重置相关UI状态但保留用户选择的商品\n React.useEffect(() => {\n if (activeTab !== 'artworks') {\n // 只重置UI状态,保留selectedCollection让用户下次进入时还能看到之前选择的商品\n if (showArtworkOrder || showArtworkForm || editingArtwork) {\n console.log('🔄 [配置页面] 离开商品详情图管理tab,重置UI状态但保留用户选择');\n setShowArtworkOrder(false);\n setShowArtworkForm(false);\n setEditingArtwork(null);\n }\n }\n }, [activeTab, showArtworkOrder, showArtworkForm, editingArtwork]);\n\n // 处理配置保存\n const handleSaveConfig = async () => {\n try {\n await updateConfig(configForm);\n alert('配置保存成功!');\n } catch (err) {\n alert('配置保存失败!');\n }\n };\n\n // 处理配置重置\n const handleResetConfig = async () => {\n if (confirm('确定要重置为默认配置吗?')) {\n try {\n await resetConfig();\n alert('配置重置成功!');\n } catch (err) {\n alert('配置重置失败!');\n }\n }\n };\n\n // 处理商品保存\n const handleSaveCollection = async () => {\n try {\n if (editingCollection) {\n await updateCollection(editingCollection, collectionForm);\n setEditingCollection(null);\n } else {\n await createCollection(collectionForm);\n }\n \n setShowCollectionForm(false);\n setCollectionForm({\n title: '',\n number: '',\n coverImage: '',\n coverImageFileId: undefined,\n description: '',\n category: CollectionCategory.COLLECTION,\n tags: [],\n isPublished: true,\n price: undefined,\n });\n alert('商品保存成功!');\n } catch (err) {\n alert('商品保存失败!');\n }\n };\n\n // 处理商品详情图保存\n const handleSaveArtwork = async () => {\n if (!selectedCollection) return;\n \n console.log('📝 [配置页面] 开始保存商品详情图:', {\n isEditing: !!editingArtwork,\n selectedCollection,\n title: artworkForm.title,\n number: artworkForm.number,\n imagePresent: !!artworkForm.image,\n imageSize: artworkForm.image ? `${artworkForm.image.length} chars` : 'null'\n });\n \n try {\n if (editingArtwork) {\n console.log('✏️ [配置页面] 执行商品详情图更新...', {\n collectionId: editingArtwork.collectionId,\n artworkId: editingArtwork.artworkId\n });\n await updateArtwork(editingArtwork.collectionId, editingArtwork.artworkId, artworkForm);\n setEditingArtwork(null);\n console.log('✅ [配置页面] 商品详情图更新完成');\n } else {\n console.log('➕ [配置页面] 执行商品详情图创建...', {\n collectionId: selectedCollection\n });\n await addArtworkToCollection(selectedCollection, artworkForm);\n console.log('✅ [配置页面] 商品详情图创建完成');\n }\n \n console.log('🧹 [配置页面] 清理表单状态...');\n setShowArtworkForm(false);\n setArtworkForm({\n title: '',\n number: '',\n image: '',\n fileId: undefined,\n description: '',\n createdTime: '',\n theme: '',\n });\n \n alert('商品详情图保存成功!');\n console.log('🎉 [配置页面] 商品详情图保存流程完成');\n \n } catch (err) {\n console.error('❌ [配置页面] 保存商品详情图时发生错误:', err);\n console.error('错误上下文:', {\n isEditing: !!editingArtwork,\n selectedCollection,\n artworkTitle: artworkForm.title,\n errorMessage: err instanceof Error ? err.message : '未知错误',\n stack: err instanceof Error ? err.stack : undefined\n });\n \n const errorMessage = err instanceof Error ? err.message : '商品详情图保存失败';\n alert(`商品详情图保存失败:${errorMessage}`);\n }\n };\n\n // 编辑商品\n const handleEditCollection = (collection: any) => {\n setCollectionForm({\n title: collection.title,\n number: collection.number,\n coverImage: collection.coverImage,\n coverImageFileId: collection.coverImageFileId || undefined,\n description: collection.description,\n category: (collection.category as CollectionCategoryType) || CollectionCategory.COLLECTION,\n tags: collection.tags || [],\n isPublished: collection.isPublished ?? true,\n price: collection.price,\n });\n setEditingCollection(collection.id);\n setShowCollectionForm(true);\n };\n\n // 编辑商品详情图\n const handleEditArtwork = (collectionId: number, artwork: any) => {\n setArtworkForm({\n title: artwork.title,\n number: artwork.number,\n image: artwork.image,\n fileId: artwork.fileId,\n description: artwork.description,\n createdTime: artwork.createdTime,\n theme: artwork.theme,\n });\n setEditingArtwork({ collectionId, artworkId: artwork.id });\n setShowArtworkForm(true);\n };\n\n // 切换商品详情图排序显示\n const handleToggleArtworkOrder = async () => {\n if (!selectedCollection) {\n alert('请先选择一个商品');\n return;\n }\n \n // 如果当前是排序模式,关闭时需要重新加载数据\n if (showArtworkOrder) {\n console.log('🔄 [配置页面] 关闭商品详情图排序,重新加载数据...');\n await refreshData();\n }\n \n setShowArtworkOrder(!showArtworkOrder);\n };\n\n // 切换商品排序显示\n const handleToggleCollectionOrder = async () => {\n // 如果当前是排序模式,关闭时需要重新加载数据\n if (showCollectionOrder) {\n console.log('🔄 [配置页面] 关闭商品排序,重新加载数据...');\n await refreshData();\n }\n \n setShowCollectionOrder(!showCollectionOrder);\n };\n\n // 加载状态\n if (loading) {\n return (\n <div className=\"min-h-screen bg-gradient-to-br from-slate-50 to-slate-200\">\n <div className=\"flex flex-col items-center justify-center min-h-[50vh] gap-4\">\n <div className=\"w-10 h-10 border-4 border-slate-200 border-t-blue-500 rounded-full animate-spin\"></div>\n <p className=\"text-slate-600\">加载中...</p>\n </div>\n </div>\n );\n }\n\n // 错误状态\n if (error) {\n return (\n <div className=\"min-h-screen bg-background\">\n <div className=\"flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4\">\n <p className=\"text-destructive text-lg\">加载失败:{error}</p>\n <Button onClick={refreshData}>\n 重试\n </Button>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"min-h-screen bg-background\">\n {/* 顶部导航 */}\n <div className=\"border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60\">\n <div className=\"max-w-7xl mx-auto px-6 py-4\">\n <div className=\"flex items-center gap-8\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => window.history.back()}\n className=\"gap-2\"\n >\n <ArrowLeft size={20} />\n 返回\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold\">商品展览配置管理</h1>\n <p className=\"text-sm text-muted-foreground\">管理展览的所有配置、商品和商品详情图</p>\n </div>\n\n </div>\n </div>\n </div>\n\n \n\n {/* 主要内容区域 */}\n <div className=\"max-w-7xl mx-auto p-6\">\n <Tabs value={activeTab} onValueChange={(value) => setActiveTab(value as TabType)} className=\"space-y-6\">\n <TabsList className=\"grid w-full grid-cols-8\">\n <TabsTrigger value=\"general\" className=\"flex items-center gap-2\">\n <Settings size={16} />\n 基础配置\n </TabsTrigger>\n <TabsTrigger value=\"homeTabs\" className=\"flex items-center gap-2\">\n <Settings size={16} />\n 首页Tab配置\n </TabsTrigger>\n <TabsTrigger value=\"collections\" className=\"flex items-center gap-2\">\n <Database size={16} />\n 商品管理\n </TabsTrigger>\n <TabsTrigger value=\"artworks\" className=\"flex items-center gap-2\">\n <Image size={16} />\n 商品详情管理\n </TabsTrigger>\n <TabsTrigger value=\"bookings\" className=\"flex items-center gap-2\">\n <Calendar size={16} />\n 预订管理\n </TabsTrigger>\n <TabsTrigger value=\"popup\" className=\"flex items-center gap-2\">\n <Bell size={16} />\n 弹窗配置\n </TabsTrigger>\n <TabsTrigger value=\"system\" className=\"flex items-center gap-2\">\n <Cog size={16} />\n 系统配置\n </TabsTrigger>\n </TabsList>\n <TabsContent value=\"general\" className=\"space-y-6\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle>基础配置</CardTitle>\n <CardDescription>配置网站的基本信息和显示选项</CardDescription>\n </div>\n <div className=\"flex gap-3\">\n <Button \n variant=\"outline\"\n onClick={handleResetConfig}\n className=\"gap-2\"\n >\n <RotateCcw size={16} />\n 重置默认\n </Button>\n <Button \n onClick={handleSaveConfig}\n className=\"gap-2\"\n >\n <Save size={16} />\n 保存配置\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <div className=\"space-y-2\">\n <Label htmlFor=\"siteName\">网站名称</Label>\n <Input\n id=\"siteName\"\n type=\"text\"\n value={configForm.siteName}\n onChange={(e) => setConfigForm(prev => ({ ...prev, siteName: e.target.value }))}\n placeholder=\"输入网站名称\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"siteDescription\">网站描述</Label>\n <Textarea\n id=\"siteDescription\"\n value={configForm.siteDescription}\n onChange={(e) => setConfigForm(prev => ({ ...prev, siteDescription: e.target.value }))}\n placeholder=\"输入网站描述\"\n rows={2}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"heroTitle\">主标题</Label>\n <Input\n id=\"heroTitle\"\n type=\"text\"\n value={configForm.heroTitle}\n onChange={(e) => setConfigForm(prev => ({ ...prev, heroTitle: e.target.value }))}\n placeholder=\"输入主标题\"\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"heroSubtitle\">副标题</Label>\n <Textarea\n id=\"heroSubtitle\"\n value={configForm.heroSubtitle}\n onChange={(e) => setConfigForm(prev => ({ ...prev, heroSubtitle: e.target.value }))}\n placeholder=\"输入副标题\"\n rows={2}\n />\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"maxCollections\">每页显示商品数量</Label>\n <Input\n id=\"maxCollections\"\n type=\"number\"\n value={configForm.maxCollectionsPerPage}\n onChange={(e) => setConfigForm(prev => ({ ...prev, maxCollectionsPerPage: parseInt(e.target.value) }))}\n min=\"1\"\n max=\"50\"\n />\n </div>\n <div className=\"space-y-2\">\n <Label htmlFor=\"theme\">主题</Label>\n <Select\n value={configForm.theme}\n onValueChange={(value) => setConfigForm(prev => ({ ...prev, theme: value as any }))}\n >\n <SelectTrigger>\n <SelectValue placeholder=\"选择主题\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"light\">浅色</SelectItem>\n <SelectItem value=\"dark\">深色</SelectItem>\n <SelectItem value=\"auto\">自动</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"space-y-2\">\n <Label htmlFor=\"language\">语言</Label>\n <Select\n value={configForm.language}\n onValueChange={(value) => setConfigForm(prev => ({ ...prev, language: value as any }))}\n >\n <SelectTrigger>\n <SelectValue placeholder=\"选择语言\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"zh\">中文</SelectItem>\n <SelectItem value=\"en\">English</SelectItem>\n </SelectContent>\n </Select>\n </div>\n\n <div className=\"flex items-center space-x-2\">\n <input\n id=\"enableSearch\"\n type=\"checkbox\"\n checked={configForm.enableSearch}\n onChange={(e) => setConfigForm(prev => ({ ...prev, enableSearch: e.target.checked }))}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <Label htmlFor=\"enableSearch\" className=\"text-sm font-medium\">\n 启用搜索功能\n </Label>\n </div>\n\n <div className=\"flex items-center space-x-2\">\n <input\n id=\"enableCategories\"\n type=\"checkbox\"\n checked={configForm.enableCategories}\n onChange={(e) => setConfigForm(prev => ({ ...prev, enableCategories: e.target.checked }))}\n className=\"h-4 w-4 rounded border-gray-300\"\n />\n <Label htmlFor=\"enableCategories\" className=\"text-sm font-medium\">\n 启用分类功能\n </Label>\n </div>\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"homeTabs\" className=\"space-y-6\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle>首页分类Tab配置</CardTitle>\n <CardDescription>管理首页分类Tab的显示顺序与显示/隐藏</CardDescription>\n </div>\n <div className=\"flex gap-3\">\n <Button variant=\"outline\" onClick={() => handleSetAllHomeTabsVisible(true)}>\n 全部显示\n </Button>\n <Button variant=\"outline\" onClick={() => handleSetAllHomeTabsVisible(false)}>\n 全部隐藏\n </Button>\n <Button variant=\"outline\" onClick={handleResetHomeTabs} className=\"gap-2\">\n <RotateCcw size={16} />\n 重置顺序\n </Button>\n <Button onClick={handleSaveConfig} className=\"gap-2\">\n <Save size={16} />\n 保存配置\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col lg:flex-row lg:items-end gap-3 mb-4\">\n <div className=\"flex-1 space-y-2\">\n <Label>分类名称</Label>\n <Input\n value={newHomeTabCategory}\n onChange={(e) => setNewHomeTabCategory(e.target.value)}\n placeholder=\"输入分类名称\"\n />\n <Label>展示文案</Label>\n <Input\n value={newHomeTabDescription}\n onChange={(e) => setNewHomeTabDescription(e.target.value)}\n placeholder=\"输入展示文案\"\n />\n </div>\n <Button onClick={handleAddHomeTab} className=\"gap-2\">\n <Plus size={16} />\n 新增Tab\n </Button>\n </div>\n\n <div className=\"space-y-2\">\n {configForm.homeTabConfig.map((item, index) => (\n <div\n key={item.category}\n className=\"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 p-3 border border-slate-200 rounded-lg bg-white\"\n >\n <div className=\"flex items-center gap-3\">\n <div className=\"flex flex-col\">\n <span className=\"text-sm font-semibold text-slate-800\">\n {item.description || item.name || getCategoryDisplayName(item.category)}\n </span>\n {item.description ? (\n <span className=\"text-xs text-slate-500\">{item.name || item.category}</span>\n ) : null}\n </div>\n {!item.visible && (\n <Badge variant=\"secondary\" className=\"text-xs\">\n 已隐藏\n </Badge>\n )}\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleHomeTabMove(index, -1)}\n disabled={index === 0}\n >\n 上移\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleHomeTabMove(index, 1)}\n disabled={index === configForm.homeTabConfig.length - 1}\n >\n 下移\n </Button>\n <Button\n variant={item.visible ? 'secondary' : 'default'}\n size=\"sm\"\n onClick={() => handleHomeTabToggle(item.category)}\n >\n {item.visible ? '隐藏' : '显示'}\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={() => handleRemoveHomeTab(item.category)}\n disabled={configForm.homeTabConfig.length <= 1}\n >\n 删除\n </Button>\n </div>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"collections\" className=\"space-y-6\">\n <Card>\n <CardHeader>\n <div className=\"flex items-center justify-between\">\n <div>\n <CardTitle>商品管理</CardTitle>\n <CardDescription>管理商品</CardDescription>\n </div>\n <div className=\"flex gap-3\">\n <Button\n onClick={() => {\n setCollectionForm({\n title: '',\n number: '',\n coverImage: '',\n description: '',\n category: CollectionCategory.COLLECTION,\n tags: [],\n isPublished: true,\n price: undefined,\n });\n setEditingCollection(null);\n setShowCollectionForm(true);\n }}\n className=\"gap-2\"\n >\n <Plus size={16} />\n 添加商品\n </Button>\n <Button\n variant=\"outline\"\n onClick={() => handleToggleCollectionOrder()}\n className=\"gap-2\"\n >\n <ArrowUpDown size={16} />\n {showCollectionOrder ? '关闭排序' : '商品排序'}\n </Button>\n </div>\n </div>\n </CardHeader>\n <CardContent>\n\n {showCollectionOrder && (\n <div className=\"mb-6 p-6 bg-white rounded-lg shadow-sm border border-slate-200\">\n <div className=\"mb-4\">\n <h3 className=\"text-xl font-semibold text-slate-800 mb-2\">商品排序管理</h3>\n <p className=\"text-slate-600\">\n 拖拽或使用按钮调整商品在前台的显示顺序\n </p>\n </div>\n <CollectionOrderManager\n moveCollectionUp={moveCollectionUp}\n moveCollectionDown={moveCollectionDown}\n updateCollectionOrder={updateCollectionOrder}\n onOrderChanged={async () => {\n console.log('🔄 [配置页面] 商品顺序已更新(排序组件内部已处理数据更新)');\n // 排序组件内部已经更新了数据,这里不需要额外操作\n }}\n />\n </div>\n )}\n\n {!showCollectionOrder && (\n <div>\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {collections.map((collection) => (\n <div key={collection.id} className=\"bg-white rounded-lg shadow-sm border border-slate-200 overflow-hidden hover:shadow-md transition-shadow\">\n <div className=\"h-48 bg-slate-100 overflow-hidden flex items-center justify-center\">\n {collection.coverImage ? (\n <img \n src={collection.coverImage} \n alt={collection.title} \n className=\"w-full h-full object-cover\"\n />\n ) : (\n <div className=\"text-slate-400 text-sm\">暂无封面</div>\n )}\n </div>\n <div className=\"p-4\">\n <h3 className=\"text-lg font-semibold text-slate-800 mb-2\">{collection.title}</h3>\n <p className=\"text-slate-600 text-sm mb-1\">编号:{collection.number}</p>\n <p className=\"text-slate-600 text-sm mb-1\">分类:{collection.category.displayName}</p>\n <p className=\"text-slate-600 text-sm mb-1\">价格:{collection.price ? `¥${collection.price}` : '免费'}</p>\n <p className=\"text-slate-600 text-sm mb-1\">商品详情图数量:{collection.pages.length}</p>\n <p className=\"text-slate-600 text-sm mb-3\">状态:{collection.isPublished ? '已发布' : '草稿'}</p>\n <div className=\"flex gap-2\">\n <button\n onClick={() => handleEditCollection(collection)}\n className=\"flex items-center gap-1 px-3 py-1 bg-blue-100 text-blue-700 border border-blue-200 rounded text-sm hover:bg-blue-200 transition-colors\"\n >\n <Edit size={14} />\n 编辑\n </button>\n <button\n onClick={async () => {\n if (confirm('确定要删除这个商品吗?')) {\n await deleteCollection(collection.id);\n }\n }}\n className=\"flex items-center gap-1 px-3 py-1 bg-red-100 text-red-700 border border-red-200 rounded text-sm hover:bg-red-200 transition-colors\"\n >\n <Trash2 size={14} />\n 删除\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )}\n </CardContent>\n </Card>\n </TabsContent>\n\n <TabsContent value=\"artworks\" className=\"space-y-6\">\n <div className=\"flex items-center justify-between mb-6\">\n <h2 className=\"text-2xl font-bold text-slate-800\">商品详情图管理</h2>\n <div className=\"flex gap-3\">\n <select\n value={selectedCollection || ''}\n onChange={(e) => setSelectedCollection(e.target.value ? parseInt(e.target.value) : null)}\n className=\"px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n >\n <option value=\"\">选择商品</option>\n {collections.map((collection) => (\n <option key={collection.id} value={collection.id}>\n {collection.title}\n </option>\n ))}\n </select>\n {selectedCollection && (\n <>\n <button\n onClick={() => {\n setArtworkForm({\n title: '',\n number: '',\n image: '',\n description: '',\n createdTime: '',\n theme: '',\n });\n setEditingArtwork(null);\n setShowArtworkForm(true);\n }}\n className=\"flex items-center gap-2 px-4 py-2 bg-blue-600 text-white border border-blue-600 rounded-lg font-medium hover:bg-blue-700 transition-colors\"\n >\n <Plus size={16} />\n 添加商品详情图\n </button>\n <button\n onClick={handleToggleArtworkOrder}\n className=\"flex items-center gap-2 px-4 py-2 bg-slate-100 text-slate-700 border border-slate-300 rounded-lg font-medium hover:bg-slate-200 transition-colors\"\n >\n <ArrowUpDown size={16} />\n {showArtworkOrder ? '关闭排序' : '商品详情图排序'}\n </button>\n </>\n )}\n </div>\n </div>\n\n {selectedCollection && showArtworkOrder && (\n <div className=\"mb-6 p-6 bg-white rounded-lg shadow-sm border border-slate-200\">\n <div className=\"mb-4\">\n <h3 className=\"text-xl font-semibold text-slate-800 mb-2\">商品详情图排序管理</h3>\n <p className=\"text-slate-600\">\n 拖拽或使用按钮调整商品详情图在商品中的显示顺序\n </p>\n </div>\n <ArtworkOrderManager\n collectionId={selectedCollection}\n moveArtworkUp={moveArtworkUp}\n moveArtworkDown={moveArtworkDown}\n updateArtworkOrder={updateArtworkOrder}\n onOrderChanged={async () => {\n console.log('🔄 [配置页面] 商品详情图顺序已更新(排序组件内部已处理数据更新)');\n // 排序组件内部已经更新了数据,这里不需要额外操作\n }}\n />\n </div>\n )}\n\n {selectedCollection && !showArtworkOrder && (\n <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6\">\n {collections\n .find(c => c.id === selectedCollection)\n ?.pages.map((artwork: any) => (\n <div key={artwork.id} className=\"bg-white rounded-lg shadow-sm border border-slate-200 overflow-hidden hover:shadow-md transition-shadow\">\n <div className=\"h-48 bg-slate-100 overflow-hidden\">\n {artwork.image && (\n <img \n src={artwork.image} \n alt={artwork.title} \n className=\"w-full h-full object-cover\"\n />\n )}\n </div>\n <div className=\"p-4\">\n <h4 className=\"text-lg font-semibold text-slate-800 mb-2\">{artwork.title}</h4>\n <p className=\"text-slate-600 text-sm mb-1\">编号:{artwork.number}</p>\n <p className=\"text-slate-600 text-sm mb-1\">创作时间:{artwork.createdTime}</p>\n <p className=\"text-slate-600 text-sm mb-1\">主题:{artwork.theme}</p>\n <p className=\"text-slate-600 text-sm mb-3 line-clamp-2\">{artwork.description}</p>\n <div className=\"flex gap-2\">\n <button\n onClick={() => handleEditArtwork(selectedCollection, artwork)}\n className=\"flex items-center gap-1 px-3 py-1 bg-blue-100 text-blue-700 border border-blue-200 rounded text-sm hover:bg-blue-200 transition-colors\"\n >\n <Edit size={14} />\n 编辑\n </button>\n <button\n onClick={() => {\n if (confirm('确定要删除这个商品详情图吗?')) {\n deleteArtwork(selectedCollection, artwork.id);\n }\n }}\n className=\"flex items-center gap-1 px-3 py-1 bg-red-100 text-red-700 border border-red-200 rounded text-sm hover:bg-red-200 transition-colors\"\n >\n <Trash2 size={14} />\n 删除\n </button>\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </TabsContent>\n\n <TabsContent value=\"bookings\" className=\"space-y-6\">\n <div className=\"flex items-center justify-between mb-6\">\n <div>\n <h2 className=\"text-2xl font-bold text-slate-800\">预订管理</h2>\n <p className=\"text-slate-600\">查看所有用户的预订信息</p>\n </div>\n <div className=\"flex gap-2\">\n <button\n onClick={refreshBookingData}\n disabled={bookingLoading}\n className=\"flex items-center gap-2 px-4 py-2 bg-blue-100 text-blue-700 rounded-lg font-medium hover:bg-blue-200 transition-colors disabled:opacity-50\"\n >\n <RefreshCw size={16} className={bookingLoading ? 'animate-spin' : ''} />\n 刷新数据\n </button>\n </div>\n </div>\n <BookingAdminPanel \n bookings={bookings}\n stats={stats}\n loading={bookingLoading}\n error={bookingError}\n searchParams={searchParams}\n onRefresh={handleBookingRefresh}\n onSearch={handleBookingSearch}\n onClearSearch={handleBookingClearSearch}\n onUpdateStatus={updateBookingStatus}\n onDeleteBooking={deleteBooking}\n onExportBookings={exportBookings}\n />\n </TabsContent>\n\n <TabsContent value=\"popup\" className=\"space-y-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-2xl font-bold text-slate-800 mb-2\">弹窗配置</h2>\n <p className=\"text-slate-600\">管理购物车提交时的限时提醒弹窗设置</p>\n </div>\n <PopupConfigManagement />\n </TabsContent>\n\n <TabsContent value=\"system\" className=\"space-y-6\">\n <div className=\"mb-6\">\n <h2 className=\"text-2xl font-bold text-slate-800 mb-2\">系统配置</h2>\n <p className=\"text-slate-600\">管理ShowMasterPieces模块的系统级配置项,为模块独立化做准备</p>\n <div className=\"mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg\">\n <div className=\"flex items-start gap-3\">\n <Cog className=\"text-blue-600 mt-0.5\" size={20} />\n <div>\n <h3 className=\"font-semibold text-blue-900\">配置说明</h3>\n <p className=\"text-blue-800 text-sm mt-1\">\n 这里的配置项将用于ShowMasterPieces模块的独立运行。\n 新创建的配置项会自动添加<code className=\"bg-blue-100 px-1 rounded\">SHOWMASTER_</code>前缀。\n </p>\n <p className=\"text-blue-700 text-xs mt-2\">\n 💡 提示:这些配置独立于全局配置,便于模块打包和部署。\n </p>\n </div>\n </div>\n </div>\n </div>\n <SystemConfigManager />\n </TabsContent>\n </Tabs>\n </div>\n\n {/* 商品表单弹窗 */}\n {showCollectionForm && (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50\">\n <div className=\"bg-white rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-hidden\">\n <div className=\"flex items-center justify-between p-6 border-b border-slate-200\">\n <h3 className=\"text-xl font-semibold text-slate-800\">{editingCollection ? '编辑商品' : '添加商品'}</h3>\n <button\n onClick={() => setShowCollectionForm(false)}\n className=\"text-slate-400 hover:text-slate-600 text-2xl font-bold leading-none\"\n >\n ×\n </button>\n </div>\n <div className=\"p-6 overflow-y-auto max-h-[calc(90vh-140px)]\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">标题</label>\n <input\n type=\"text\"\n value={collectionForm.title}\n onChange={(e) => setCollectionForm(prev => ({ ...prev, title: e.target.value }))}\n placeholder=\"输入商品标题\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">编号</label>\n <input\n type=\"text\"\n value={collectionForm.number}\n onChange={(e) => setCollectionForm(prev => ({ ...prev, number: e.target.value }))}\n placeholder=\"输入编号\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <UniversalImageUpload\n label=\"封面图片\"\n value={collectionForm.coverImage}\n fileId={collectionForm.coverImageFileId}\n onChange={(data: { image?: string; fileId?: string }) => setCollectionForm(prev => ({ \n ...prev, \n coverImage: data.image || '',\n coverImageFileId: data.fileId\n }))}\n placeholder=\"上传封面图片\"\n businessType=\"cover\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">描述</label>\n <textarea\n value={collectionForm.description}\n onChange={(e) => setCollectionForm(prev => ({ ...prev, description: e.target.value }))}\n placeholder=\"输入商品描述\"\n rows={3}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">分类</label>\n <select\n value={collectionForm.category}\n onChange={(e) => setCollectionForm(prev => ({ ...prev, category: e.target.value as CollectionCategoryType }))}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n >\n {categoryOptions.map((category) => (\n <option key={category.name} value={category.name}>\n {category.description || getCategoryDisplayName(category.name as CollectionCategoryType)}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">价格(元)</label>\n <input\n type=\"number\"\n value={collectionForm.price || ''}\n onChange={(e) => setCollectionForm(prev => ({ \n ...prev, \n price: e.target.value ? parseInt(e.target.value) : undefined \n }))}\n placeholder=\"输入价格(留空表示免费)\"\n min=\"0\"\n step=\"1\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={collectionForm.isPublished}\n onChange={(e) => setCollectionForm(prev => ({ ...prev, isPublished: e.target.checked }))}\n className=\"w-4 h-4 text-blue-600 border-slate-300 rounded focus:ring-blue-500\"\n />\n <span className=\"text-sm font-medium text-slate-700\">发布商品</span>\n </label>\n </div>\n </div>\n </div>\n <div className=\"flex justify-end gap-3 p-6 border-t border-slate-200\">\n <button\n onClick={() => setShowCollectionForm(false)}\n className=\"px-4 py-2 bg-slate-100 text-slate-700 border border-slate-300 rounded-lg font-medium hover:bg-slate-200 transition-colors\"\n >\n 取消\n </button>\n <button\n onClick={handleSaveCollection}\n className=\"px-4 py-2 bg-blue-600 text-white border border-blue-600 rounded-lg font-medium hover:bg-blue-700 transition-colors\"\n >\n 保存\n </button>\n </div>\n </div>\n </div>\n )}\n\n {/* 商品详情图表单弹窗 */}\n {showArtworkForm && (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50\">\n <div className=\"bg-white rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-hidden\">\n <div className=\"flex items-center justify-between p-6 border-b border-slate-200\">\n <h3 className=\"text-xl font-semibold text-slate-800\">{editingArtwork ? '编辑商品详情图' : '添加商品详情图'}</h3>\n <button\n onClick={() => setShowArtworkForm(false)}\n className=\"text-slate-400 hover:text-slate-600 text-2xl font-bold leading-none\"\n >\n ×\n </button>\n </div>\n <div className=\"p-6 overflow-y-auto max-h-[calc(90vh-140px)]\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">标题</label>\n <input\n type=\"text\"\n value={artworkForm.title}\n onChange={(e) => setArtworkForm(prev => ({ ...prev, title: e.target.value }))}\n placeholder=\"输入商品详情图标题\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">编号</label>\n <input\n type=\"text\"\n value={artworkForm.number}\n onChange={(e) => setArtworkForm(prev => ({ ...prev, number: e.target.value }))}\n placeholder=\"输入编号\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <UniversalImageUpload\n label=\"商品详情图图片\"\n value={artworkForm.image}\n fileId={artworkForm.fileId}\n onChange={(data: { image?: string; fileId?: string }) => setArtworkForm(prev => ({ \n ...prev, \n image: data.image,\n fileId: data.fileId\n }))}\n placeholder=\"上传商品详情图图片\"\n businessType=\"artwork\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">描述</label>\n <textarea\n value={artworkForm.description}\n onChange={(e) => setArtworkForm(prev => ({ ...prev, description: e.target.value }))}\n placeholder=\"输入商品详情图描述\"\n rows={3}\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">创作时间</label>\n <input\n type=\"text\"\n value={artworkForm.createdTime}\n onChange={(e) => setArtworkForm(prev => ({ ...prev, createdTime: e.target.value }))}\n placeholder=\"输入创作时间\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-slate-700 mb-2\">主题</label>\n <input\n type=\"text\"\n value={artworkForm.theme}\n onChange={(e) => setArtworkForm(prev => ({ ...prev, theme: e.target.value }))}\n placeholder=\"输入商品详情图主题\"\n className=\"w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n </div>\n </div>\n </div>\n <div className=\"flex justify-end gap-3 p-6 border-t border-slate-200\">\n <button\n onClick={() => setShowArtworkForm(false)}\n className=\"px-4 py-2 bg-slate-100 text-slate-700 border border-slate-300 rounded-lg font-medium hover:bg-slate-200 transition-colors\"\n >\n 取消\n </button>\n <button\n onClick={handleSaveArtwork}\n className=\"px-4 py-2 bg-blue-600 text-white border border-blue-600 rounded-lg font-medium hover:bg-blue-700 transition-colors\"\n >\n 保存\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n );\n}\n\nexport default function ConfigPage() {\n return (\n <AuthProvider>\n <AuthGuard>\n <ConfigPageContent />\n </AuthGuard>\n </AuthProvider>\n );\n} \n","/**\n * ShowMasterpiece 模块 - 用户购物车历史记录页面\n * \n * 用户输入QQ号和手机号查看自己的购物车历史记录\n * \n * @fileoverview 用户历史记录页面\n */\n\n'use client';\n\nimport React, { useState } from 'react';\nimport { CartHistoryPage } from '../../components';\nimport { User, Search, ArrowLeft } from 'lucide-react';\nimport Link from 'next/link';\n\n/**\n * 用户历史记录页面组件\n * \n * @returns React组件\n */\nexport default function UserHistoryPage() {\n const [formData, setFormData] = useState({\n qqNumber: '',\n phoneNumber: ''\n });\n const [formErrors, setFormErrors] = useState<{\n qqNumber?: string;\n phoneNumber?: string;\n }>({});\n const [isSubmitted, setIsSubmitted] = useState(false);\n\n /**\n * 处理表单字段更新\n */\n const handleFormChange = (field: string, value: string) => {\n setFormData(prev => ({ ...prev, [field]: value }));\n \n // 清除对应字段的错误\n if (formErrors[field as keyof typeof formErrors]) {\n setFormErrors(prev => ({ ...prev, [field]: undefined }));\n }\n };\n\n /**\n * 验证表单\n */\n const validateForm = (): boolean => {\n const errors: { qqNumber?: string; phoneNumber?: string } = {};\n\n if (!formData.qqNumber.trim()) {\n errors.qqNumber = '请输入QQ号';\n } else if (!/^\\d{5,11}$/.test(formData.qqNumber.trim())) {\n errors.qqNumber = 'QQ号格式不正确';\n }\n\n if (!formData.phoneNumber.trim()) {\n errors.phoneNumber = '请输入手机号';\n } else {\n const phoneRegex = /^1[3-9]\\d{9}$/;\n if (!phoneRegex.test(formData.phoneNumber.trim())) {\n errors.phoneNumber = '手机号格式不正确';\n }\n }\n\n setFormErrors(errors);\n return Object.keys(errors).length === 0;\n };\n\n /**\n * 处理表单提交\n */\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n \n if (validateForm()) {\n setIsSubmitted(true);\n }\n };\n\n /**\n * 返回查询页面\n */\n const handleBack = () => {\n setIsSubmitted(false);\n setFormData({ qqNumber: '', phoneNumber: '' });\n setFormErrors({});\n };\n\n return (\n <div className=\"min-h-screen bg-slate-50\">\n <div className=\"max-w-6xl mx-auto p-4 sm:p-6\">\n {/* 返回按钮 */}\n <div className=\"mb-6\">\n <Link\n href=\"/testField/ShowMasterPieces\"\n className=\"inline-flex items-center gap-2 text-slate-600 hover:text-slate-800 transition-colors\"\n >\n <ArrowLeft size={20} />\n 返回画集展示\n </Link>\n </div>\n\n {!isSubmitted ? (\n <div className=\"max-w-md mx-auto\">\n {/* 页面标题 */}\n <div className=\"text-center mb-8\">\n <div className=\"inline-flex items-center justify-center w-16 h-16 bg-blue-100 rounded-full mb-4\">\n <User size={32} className=\"text-blue-600\" />\n </div>\n <h1 className=\"text-2xl font-bold text-slate-800 mb-2\">查看预订历史</h1>\n <p className=\"text-slate-600\">\n 请输入您的QQ号和手机号查看预订历史记录\n </p>\n </div>\n\n {/* 查询表单 */}\n <div className=\"bg-white rounded-lg shadow-sm border border-slate-200 p-6\">\n <form onSubmit={handleSubmit} className=\"space-y-4\">\n {/* QQ号输入 */}\n <div>\n <label htmlFor=\"qqNumber\" className=\"block text-sm font-medium text-slate-700 mb-2\">\n QQ号\n </label>\n <input\n type=\"text\"\n id=\"qqNumber\"\n value={formData.qqNumber}\n onChange={(e) => handleFormChange('qqNumber', e.target.value)}\n className={`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n formErrors.qqNumber ? 'border-red-300' : 'border-slate-300'\n }`}\n placeholder=\"请输入QQ号\"\n />\n {formErrors.qqNumber && (\n <p className=\"mt-1 text-sm text-red-600\">{formErrors.qqNumber}</p>\n )}\n </div>\n\n {/* 手机号输入 */}\n <div>\n <label htmlFor=\"phoneNumber\" className=\"block text-sm font-medium text-slate-700 mb-2\">\n 手机号\n </label>\n <input\n type=\"tel\"\n id=\"phoneNumber\"\n value={formData.phoneNumber}\n onChange={(e) => handleFormChange('phoneNumber', e.target.value)}\n className={`w-full px-3 py-2 border rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 ${\n formErrors.phoneNumber ? 'border-red-300' : 'border-slate-300'\n }`}\n placeholder=\"请输入手机号\"\n />\n {formErrors.phoneNumber && (\n <p className=\"mt-1 text-sm text-red-600\">{formErrors.phoneNumber}</p>\n )}\n </div>\n\n {/* 提交按钮 */}\n <button\n type=\"submit\"\n className=\"w-full flex items-center justify-center gap-2 bg-blue-600 text-white py-2 px-4 rounded-lg font-medium hover:bg-blue-700 transition-colors\"\n >\n <Search size={16} />\n 查询历史记录\n </button>\n </form>\n\n {/* 说明信息 */}\n <div className=\"mt-6 p-4 bg-blue-50 rounded-lg\">\n <h3 className=\"text-sm font-medium text-blue-800 mb-2\">查询说明</h3>\n <ul className=\"text-sm text-blue-700 space-y-1\">\n <li>• 请输入您预订时使用的QQ号和手机号</li>\n <li>• 系统将显示您所有的预订历史记录</li>\n <li>• 您可以查看预订状态、商品详情等信息</li>\n <li>• 支持删除单条记录或清空所有记录</li>\n </ul>\n </div>\n </div>\n </div>\n ) : (\n <div>\n {/* 返回按钮 */}\n <div className=\"mb-6\">\n <button\n onClick={handleBack}\n className=\"inline-flex items-center gap-2 text-slate-600 hover:text-slate-800 transition-colors\"\n >\n <ArrowLeft size={20} />\n 返回查询\n </button>\n </div>\n\n {/* 历史记录页面 */}\n <CartHistoryPage\n qqNumber={formData.qqNumber}\n phoneNumber={formData.phoneNumber}\n />\n </div>\n )}\n </div>\n </div>\n );\n} "]}