sa2kit 1.6.44 → 1.6.45

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 (267) hide show
  1. package/dist/AliyunOSSProvider-2FARPAQD.js +15 -0
  2. package/dist/{AliyunOSSProvider-HCNGDJL7.js.map → AliyunOSSProvider-2FARPAQD.js.map} +1 -1
  3. package/dist/AliyunOSSProvider-UMVGVBDJ.mjs +9 -0
  4. package/dist/{AliyunOSSProvider-4W47OFEK.mjs.map → AliyunOSSProvider-UMVGVBDJ.mjs.map} +1 -1
  5. package/dist/CollisionBalls-BpHufX3H.d.mts +41 -0
  6. package/dist/CollisionBalls-BpHufX3H.d.ts +41 -0
  7. package/dist/ConfigService-QR67WYNK.mjs +4 -0
  8. package/dist/{ConfigService-V6ZK273Z.mjs.map → ConfigService-QR67WYNK.mjs.map} +1 -1
  9. package/dist/{ConfigService-3DIC6C3Q.js → ConfigService-UYC6ZTCM.js} +3 -3
  10. package/dist/{ConfigService-3DIC6C3Q.js.map → ConfigService-UYC6ZTCM.js.map} +1 -1
  11. package/dist/GenericOrderManager-e4WizpNf.d.mts +28 -0
  12. package/dist/GenericOrderManager-e4WizpNf.d.ts +28 -0
  13. package/dist/LocalStorageProvider-JQF5WK5H.js +15 -0
  14. package/dist/{LocalStorageProvider-PP7MA5OT.js.map → LocalStorageProvider-JQF5WK5H.js.map} +1 -1
  15. package/dist/LocalStorageProvider-PYOHETJV.mjs +9 -0
  16. package/dist/{LocalStorageProvider-3RVPCQB3.mjs.map → LocalStorageProvider-PYOHETJV.mjs.map} +1 -1
  17. package/dist/PMXParser-RLBDO7YK.mjs +4 -0
  18. package/dist/{PMXParser-RNVQL76A.mjs.map → PMXParser-RLBDO7YK.mjs.map} +1 -1
  19. package/dist/{PMXParser-2VTA737I.js → PMXParser-XHNO2KNI.js} +3 -3
  20. package/dist/{PMXParser-2VTA737I.js.map → PMXParser-XHNO2KNI.js.map} +1 -1
  21. package/dist/UniversalFileService-RBV6EN5J.js +15 -0
  22. package/dist/UniversalFileService-RBV6EN5J.js.map +1 -0
  23. package/dist/UniversalFileService-TNYKO6JN.mjs +9 -0
  24. package/dist/UniversalFileService-TNYKO6JN.mjs.map +1 -0
  25. package/dist/analytics/index.js +1 -1
  26. package/dist/analytics/index.mjs +1 -1
  27. package/dist/analytics/server/index.js +1 -1
  28. package/dist/analytics/server/index.mjs +1 -1
  29. package/dist/api/index.js +1 -1
  30. package/dist/api/index.mjs +1 -1
  31. package/dist/audioDetection/index.js +1 -1
  32. package/dist/audioDetection/index.mjs +1 -1
  33. package/dist/auth/client/index.js +1 -1
  34. package/dist/auth/client/index.mjs +1 -1
  35. package/dist/auth/components/index.js +1 -1
  36. package/dist/auth/components/index.mjs +1 -1
  37. package/dist/auth/hooks/index.js +1 -1
  38. package/dist/auth/hooks/index.mjs +1 -1
  39. package/dist/auth/index.js +1 -1
  40. package/dist/auth/index.mjs +1 -1
  41. package/dist/auth/middleware/index.js +1 -1
  42. package/dist/auth/middleware/index.mjs +1 -1
  43. package/dist/auth/routes/index.js +1 -1
  44. package/dist/auth/routes/index.mjs +1 -1
  45. package/dist/auth/schema/index.js +1 -1
  46. package/dist/auth/schema/index.mjs +1 -1
  47. package/dist/auth/services/index.js +1 -1
  48. package/dist/auth/services/index.mjs +1 -1
  49. package/dist/calendar/index.js +12 -12
  50. package/dist/calendar/index.mjs +5 -5
  51. package/dist/calendar/routes/index.js +1 -1
  52. package/dist/calendar/routes/index.mjs +1 -1
  53. package/dist/calendar/server.js +1 -1
  54. package/dist/calendar/server.mjs +1 -1
  55. package/dist/chunk-2PS5PIXV.mjs +443 -0
  56. package/dist/chunk-2PS5PIXV.mjs.map +1 -0
  57. package/dist/chunk-35CXIK5Y.js +277 -0
  58. package/dist/chunk-35CXIK5Y.js.map +1 -0
  59. package/dist/{chunk-GMIUSZXC.mjs → chunk-3JW4X3AC.mjs} +3 -3
  60. package/dist/{chunk-GMIUSZXC.mjs.map → chunk-3JW4X3AC.mjs.map} +1 -1
  61. package/dist/chunk-3M6T5KVD.js +453 -0
  62. package/dist/chunk-3M6T5KVD.js.map +1 -0
  63. package/dist/chunk-3TNR6IMC.js +168 -0
  64. package/dist/chunk-3TNR6IMC.js.map +1 -0
  65. package/dist/chunk-4NFOSCM6.js +34 -0
  66. package/dist/chunk-4NFOSCM6.js.map +1 -0
  67. package/dist/{chunk-3NHAT7D4.mjs → chunk-4VJQZSPU.mjs} +4 -3
  68. package/dist/chunk-4VJQZSPU.mjs.map +1 -0
  69. package/dist/{chunk-SCDDMIF6.js → chunk-4XXIBWCO.js} +66 -66
  70. package/dist/{chunk-SCDDMIF6.js.map → chunk-4XXIBWCO.js.map} +1 -1
  71. package/dist/chunk-6AHYPPUP.js +344 -0
  72. package/dist/chunk-6AHYPPUP.js.map +1 -0
  73. package/dist/{chunk-EGJPS7OL.mjs → chunk-6BJ76BYC.mjs} +3 -3
  74. package/dist/{chunk-EGJPS7OL.mjs.map → chunk-6BJ76BYC.mjs.map} +1 -1
  75. package/dist/chunk-76V7EKBX.mjs +796 -0
  76. package/dist/chunk-76V7EKBX.mjs.map +1 -0
  77. package/dist/chunk-ACLOJXXE.js +195 -0
  78. package/dist/chunk-ACLOJXXE.js.map +1 -0
  79. package/dist/chunk-AEXPAH7Z.mjs +32 -0
  80. package/dist/chunk-AEXPAH7Z.mjs.map +1 -0
  81. package/dist/chunk-CFGX3EKK.js +560 -0
  82. package/dist/chunk-CFGX3EKK.js.map +1 -0
  83. package/dist/chunk-D2HXMGXS.js +46 -0
  84. package/dist/chunk-D2HXMGXS.js.map +1 -0
  85. package/dist/chunk-DM2GUVUH.js +1201 -0
  86. package/dist/chunk-DM2GUVUH.js.map +1 -0
  87. package/dist/{chunk-ZWQJSZEY.js → chunk-DVENFCQY.js} +5 -4
  88. package/dist/chunk-DVENFCQY.js.map +1 -0
  89. package/dist/chunk-EONPKLEJ.mjs +163 -0
  90. package/dist/chunk-EONPKLEJ.mjs.map +1 -0
  91. package/dist/{chunk-L47ZOYHL.js → chunk-EUIXQPPU.js} +4 -4
  92. package/dist/{chunk-L47ZOYHL.js.map → chunk-EUIXQPPU.js.map} +1 -1
  93. package/dist/chunk-K7WNCB4V.mjs +554 -0
  94. package/dist/chunk-K7WNCB4V.mjs.map +1 -0
  95. package/dist/chunk-L4ZYBFB2.mjs +44 -0
  96. package/dist/chunk-L4ZYBFB2.mjs.map +1 -0
  97. package/dist/chunk-M4HGHTIC.js +820 -0
  98. package/dist/chunk-M4HGHTIC.js.map +1 -0
  99. package/dist/{chunk-HHVDOIPV.js → chunk-MZKATHB7.js} +4 -4
  100. package/dist/{chunk-HHVDOIPV.js.map → chunk-MZKATHB7.js.map} +1 -1
  101. package/dist/{chunk-UKT3PLON.mjs → chunk-NXQVTAOP.mjs} +3 -3
  102. package/dist/{chunk-UKT3PLON.mjs.map → chunk-NXQVTAOP.mjs.map} +1 -1
  103. package/dist/chunk-OBIPI4GU.mjs +266 -0
  104. package/dist/chunk-OBIPI4GU.mjs.map +1 -0
  105. package/dist/chunk-PAX4S7QM.mjs +94 -0
  106. package/dist/chunk-PAX4S7QM.mjs.map +1 -0
  107. package/dist/chunk-PXWDQFWV.mjs +192 -0
  108. package/dist/chunk-PXWDQFWV.mjs.map +1 -0
  109. package/dist/chunk-QROLPPXP.mjs +5797 -0
  110. package/dist/chunk-QROLPPXP.mjs.map +1 -0
  111. package/dist/chunk-TGNUEULF.mjs +1158 -0
  112. package/dist/chunk-TGNUEULF.mjs.map +1 -0
  113. package/dist/chunk-VBQFVXOW.mjs +2772 -0
  114. package/dist/chunk-VBQFVXOW.mjs.map +1 -0
  115. package/dist/chunk-VLZ5N6XZ.js +5888 -0
  116. package/dist/chunk-VLZ5N6XZ.js.map +1 -0
  117. package/dist/chunk-VTGPHE4Z.mjs +322 -0
  118. package/dist/chunk-VTGPHE4Z.mjs.map +1 -0
  119. package/dist/chunk-WMJKH4XE.mjs +30 -0
  120. package/dist/{chunk-BJTO5JO5.mjs.map → chunk-WMJKH4XE.mjs.map} +1 -1
  121. package/dist/chunk-XYQMAF7H.js +96 -0
  122. package/dist/chunk-XYQMAF7H.js.map +1 -0
  123. package/dist/chunk-Z3G3IXEF.js +2814 -0
  124. package/dist/chunk-Z3G3IXEF.js.map +1 -0
  125. package/dist/chunk-Z6ZWNWWR.js +35 -0
  126. package/dist/{chunk-DGUM43GV.js.map → chunk-Z6ZWNWWR.js.map} +1 -1
  127. package/dist/components/index.d.mts +378 -0
  128. package/dist/components/index.d.ts +378 -0
  129. package/dist/components/index.js +414 -0
  130. package/dist/components/index.js.map +1 -0
  131. package/dist/components/index.mjs +9 -0
  132. package/dist/components/index.mjs.map +1 -0
  133. package/dist/config/index.js +1 -1
  134. package/dist/config/index.mjs +1 -1
  135. package/dist/config/server/index.js +1 -1
  136. package/dist/config/server/index.mjs +1 -1
  137. package/dist/fileService-O3W6YXCI.mjs +4 -0
  138. package/dist/fileService-O3W6YXCI.mjs.map +1 -0
  139. package/dist/fileService-YUDIYOAS.js +13 -0
  140. package/dist/fileService-YUDIYOAS.js.map +1 -0
  141. package/dist/i18n/index.js +7 -7
  142. package/dist/i18n/index.mjs +1 -1
  143. package/dist/imageCrop/index.js +1 -1
  144. package/dist/imageCrop/index.mjs +1 -1
  145. package/dist/index.d.mts +9 -580
  146. package/dist/index.d.ts +9 -580
  147. package/dist/index.js +297 -956
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +103 -789
  150. package/dist/index.mjs.map +1 -1
  151. package/dist/logger/index.js +8 -8
  152. package/dist/logger/index.mjs +5 -2
  153. package/dist/mikuFireworks3D/index.js +1 -1
  154. package/dist/mikuFireworks3D/index.mjs +1 -1
  155. package/dist/mikuFireworks3D/server/index.js +1 -1
  156. package/dist/mikuFireworks3D/server/index.mjs +1 -1
  157. package/dist/mikuFusionGame/index.js +5 -5
  158. package/dist/mikuFusionGame/index.mjs +4 -4
  159. package/dist/mmd/admin/index.js +1 -1
  160. package/dist/mmd/admin/index.mjs +1 -1
  161. package/dist/mmd/index.js +2 -2
  162. package/dist/mmd/index.mjs +2 -2
  163. package/dist/mmd/server/index.js +1 -1
  164. package/dist/mmd/server/index.mjs +1 -1
  165. package/dist/music/index.js +1 -1
  166. package/dist/music/index.mjs +1 -1
  167. package/dist/music/server/index.js +1 -1
  168. package/dist/music/server/index.mjs +1 -1
  169. package/dist/navigation/index.d.mts +93 -0
  170. package/dist/navigation/index.d.ts +93 -0
  171. package/dist/navigation/index.js +29 -0
  172. package/dist/navigation/index.js.map +1 -0
  173. package/dist/navigation/index.mjs +4 -0
  174. package/dist/navigation/index.mjs.map +1 -0
  175. package/dist/popupConfig-BznThU1O.d.mts +330 -0
  176. package/dist/popupConfig-BznThU1O.d.ts +330 -0
  177. package/dist/portfolio/index.d.mts +57 -0
  178. package/dist/portfolio/index.d.ts +57 -0
  179. package/dist/portfolio/index.js +35 -0
  180. package/dist/portfolio/index.js.map +1 -0
  181. package/dist/portfolio/index.mjs +10 -0
  182. package/dist/portfolio/index.mjs.map +1 -0
  183. package/dist/request/index.js +1 -1
  184. package/dist/request/index.mjs +1 -1
  185. package/dist/showmasterpiece/index.d.mts +2524 -0
  186. package/dist/showmasterpiece/index.d.ts +2524 -0
  187. package/dist/showmasterpiece/index.js +9681 -0
  188. package/dist/showmasterpiece/index.js.map +1 -0
  189. package/dist/showmasterpiece/index.mjs +9631 -0
  190. package/dist/showmasterpiece/index.mjs.map +1 -0
  191. package/dist/showmasterpiece/migration/index.d.mts +120 -0
  192. package/dist/showmasterpiece/migration/index.d.ts +120 -0
  193. package/dist/showmasterpiece/migration/index.js +595 -0
  194. package/dist/showmasterpiece/migration/index.js.map +1 -0
  195. package/dist/showmasterpiece/migration/index.mjs +589 -0
  196. package/dist/showmasterpiece/migration/index.mjs.map +1 -0
  197. package/dist/showmasterpiece/scripts/index.d.mts +28 -0
  198. package/dist/showmasterpiece/scripts/index.d.ts +28 -0
  199. package/dist/showmasterpiece/scripts/index.js +327 -0
  200. package/dist/showmasterpiece/scripts/index.js.map +1 -0
  201. package/dist/showmasterpiece/scripts/index.mjs +325 -0
  202. package/dist/showmasterpiece/scripts/index.mjs.map +1 -0
  203. package/dist/showmasterpiece/server/index.d.mts +2698 -0
  204. package/dist/showmasterpiece/server/index.d.ts +2698 -0
  205. package/dist/showmasterpiece/server/index.js +179 -0
  206. package/dist/showmasterpiece/server/index.js.map +1 -0
  207. package/dist/showmasterpiece/server/index.mjs +6 -0
  208. package/dist/showmasterpiece/server/index.mjs.map +1 -0
  209. package/dist/storage/index.js +8 -8
  210. package/dist/storage/index.mjs +2 -2
  211. package/dist/testYourself/admin/index.js +1 -1
  212. package/dist/testYourself/admin/index.mjs +1 -1
  213. package/dist/testYourself/index.js +2 -2
  214. package/dist/testYourself/index.mjs +2 -2
  215. package/dist/testYourself/server/index.js +1 -1
  216. package/dist/testYourself/server/index.mjs +1 -1
  217. package/dist/universalExport/index.js +154 -1195
  218. package/dist/universalExport/index.js.map +1 -1
  219. package/dist/universalExport/index.mjs +2 -1157
  220. package/dist/universalExport/index.mjs.map +1 -1
  221. package/dist/universalExport/server/index.js +5 -3
  222. package/dist/universalExport/server/index.js.map +1 -1
  223. package/dist/universalExport/server/index.mjs +4 -2
  224. package/dist/universalExport/server/index.mjs.map +1 -1
  225. package/dist/universalFile/index.js +10 -7
  226. package/dist/universalFile/index.js.map +1 -1
  227. package/dist/universalFile/index.mjs +6 -2
  228. package/dist/universalFile/index.mjs.map +1 -1
  229. package/dist/universalFile/server/index.d.mts +592 -265
  230. package/dist/universalFile/server/index.d.ts +592 -265
  231. package/dist/universalFile/server/index.js +298 -5637
  232. package/dist/universalFile/server/index.js.map +1 -1
  233. package/dist/universalFile/server/index.mjs +8 -5559
  234. package/dist/universalFile/server/index.mjs.map +1 -1
  235. package/dist/utils/index.js +12 -12
  236. package/dist/utils/index.mjs +3 -3
  237. package/package.json +36 -1
  238. package/dist/AliyunOSSProvider-4W47OFEK.mjs +0 -6
  239. package/dist/AliyunOSSProvider-HCNGDJL7.js +0 -15
  240. package/dist/ConfigService-V6ZK273Z.mjs +0 -4
  241. package/dist/LocalStorageProvider-3RVPCQB3.mjs +0 -6
  242. package/dist/LocalStorageProvider-PP7MA5OT.js +0 -15
  243. package/dist/PMXParser-RNVQL76A.mjs +0 -4
  244. package/dist/chunk-25OFOKNF.js +0 -171
  245. package/dist/chunk-25OFOKNF.js.map +0 -1
  246. package/dist/chunk-3DXPQ4YV.mjs +0 -165
  247. package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
  248. package/dist/chunk-3NHAT7D4.mjs.map +0 -1
  249. package/dist/chunk-BJTO5JO5.mjs +0 -10
  250. package/dist/chunk-CIVO4R6N.mjs +0 -37
  251. package/dist/chunk-CIVO4R6N.mjs.map +0 -1
  252. package/dist/chunk-DGUM43GV.js +0 -12
  253. package/dist/chunk-HDMIOOZY.mjs +0 -546
  254. package/dist/chunk-HDMIOOZY.mjs.map +0 -1
  255. package/dist/chunk-HJ6MH7J7.js +0 -552
  256. package/dist/chunk-HJ6MH7J7.js.map +0 -1
  257. package/dist/chunk-KH6RQ4J5.js +0 -28
  258. package/dist/chunk-KH6RQ4J5.js.map +0 -1
  259. package/dist/chunk-Q5EDCKQA.js +0 -336
  260. package/dist/chunk-Q5EDCKQA.js.map +0 -1
  261. package/dist/chunk-YOTQG4NP.mjs +0 -314
  262. package/dist/chunk-YOTQG4NP.mjs.map +0 -1
  263. package/dist/chunk-ZGVB35L2.mjs +0 -25
  264. package/dist/chunk-ZGVB35L2.mjs.map +0 -1
  265. package/dist/chunk-ZRAW3HXA.js +0 -43
  266. package/dist/chunk-ZRAW3HXA.js.map +0 -1
  267. package/dist/chunk-ZWQJSZEY.js.map +0 -1
@@ -0,0 +1,2524 @@
1
+ import React__default, { ReactNode } from 'react';
2
+ export { G as GenericOrderManager } from '../GenericOrderManager-e4WizpNf.js';
3
+ import { P as PopupConfig } from '../popupConfig-BznThU1O.js';
4
+ import { e as ExportField } from '../types-DszP7SAQ.js';
5
+ import 'drizzle-orm';
6
+ import 'drizzle-orm/pg-core';
7
+
8
+ /**
9
+ * ShowMasterpiece 模块 - 购物车功能类型定义
10
+ *
11
+ * 定义了画集购物车功能相关的TypeScript类型,包括:
12
+ * - 购物车数据模型
13
+ * - API请求和响应类型
14
+ * - 购物车项数据类型
15
+ * - 状态枚举
16
+ *
17
+ * @fileoverview 购物车功能类型定义
18
+ */
19
+
20
+ /**
21
+ * 购物车项数据模型
22
+ */
23
+ interface CartItem {
24
+ /** 画集ID */
25
+ collectionId: number;
26
+ /** 画集信息 */
27
+ collection: ArtCollection;
28
+ /** 数量 */
29
+ quantity: number;
30
+ /** 添加时间 */
31
+ addedAt: Date;
32
+ }
33
+ /**
34
+ * 购物车数据模型
35
+ */
36
+ interface Cart {
37
+ /** 购物车项列表 */
38
+ items: CartItem[];
39
+ /** 总数量 */
40
+ totalQuantity: number;
41
+ /** 总价格 */
42
+ totalPrice: number;
43
+ }
44
+ /**
45
+ * 用户购物车历史记录项
46
+ */
47
+ interface CartHistoryItem {
48
+ /** 历史记录ID */
49
+ id: string;
50
+ /** 提交时间 */
51
+ submittedAt: Date;
52
+ /** 用户QQ号 */
53
+ qqNumber: string;
54
+ /** 用户手机号 */
55
+ phoneNumber: string;
56
+ /** 购物车项列表 */
57
+ items: CartItem[];
58
+ /** 总数量 */
59
+ totalQuantity: number;
60
+ /** 总价格 */
61
+ totalPrice: number;
62
+ /** 用户备注 */
63
+ notes?: string;
64
+ /** 领取方式 */
65
+ pickupMethod: string;
66
+ /** 预订状态 */
67
+ status: 'pending' | 'confirmed' | 'completed' | 'cancelled';
68
+ /** 预订ID列表 */
69
+ bookingIds?: number[];
70
+ }
71
+ /**
72
+ * 用户购物车历史记录
73
+ */
74
+ interface CartHistory {
75
+ /** 历史记录列表 */
76
+ records: CartHistoryItem[];
77
+ /** 总记录数 */
78
+ totalRecords: number;
79
+ }
80
+ /**
81
+ * 添加到购物车请求数据
82
+ */
83
+ interface AddToCartRequest {
84
+ /** 画集ID */
85
+ collectionId: number;
86
+ /** 数量 */
87
+ quantity: number;
88
+ }
89
+ /**
90
+ * 更新购物车项请求数据
91
+ */
92
+ interface UpdateCartItemRequest {
93
+ /** 画集ID */
94
+ collectionId: number;
95
+ /** 新数量 */
96
+ quantity: number;
97
+ }
98
+ /**
99
+ * 从购物车移除请求数据
100
+ */
101
+ interface RemoveFromCartRequest {
102
+ /** 画集ID */
103
+ collectionId: number;
104
+ }
105
+ /**
106
+ * 清空购物车请求数据
107
+ */
108
+ interface ClearCartRequest {
109
+ }
110
+ /**
111
+ * 购物车操作类型
112
+ */
113
+ type CartAction = {
114
+ type: 'ADD_ITEM';
115
+ payload: CartItem;
116
+ } | {
117
+ type: 'UPDATE_ITEM';
118
+ payload: {
119
+ collectionId: number;
120
+ quantity: number;
121
+ };
122
+ } | {
123
+ type: 'REMOVE_ITEM';
124
+ payload: number;
125
+ } | {
126
+ type: 'CLEAR_CART';
127
+ } | {
128
+ type: 'SET_CART';
129
+ payload: Cart;
130
+ };
131
+ /**
132
+ * 购物车状态
133
+ */
134
+ interface CartState {
135
+ /** 购物车数据 */
136
+ cart: Cart;
137
+ /** 加载状态 */
138
+ loading: boolean;
139
+ /** 错误信息 */
140
+ error?: string;
141
+ /** 是否显示购物车弹窗 */
142
+ isCartOpen: boolean;
143
+ }
144
+ /**
145
+ * 批量预订请求数据
146
+ */
147
+ interface BatchBookingRequest {
148
+ /** 用户QQ号 */
149
+ qqNumber: string;
150
+ /** 用户手机号 */
151
+ phoneNumber: string;
152
+ /** 预订项列表 */
153
+ items: {
154
+ /** 画集ID */
155
+ collectionId: number;
156
+ /** 数量 */
157
+ quantity: number;
158
+ }[];
159
+ /** 备注信息 */
160
+ notes?: string;
161
+ /** 领取方式 */
162
+ pickupMethod: string;
163
+ }
164
+ /**
165
+ * 批量预订响应数据
166
+ */
167
+ interface BatchBookingResponse {
168
+ /** 预订ID列表 */
169
+ bookingIds: number[];
170
+ /** 成功预订数量 */
171
+ successCount: number;
172
+ /** 失败预订数量 */
173
+ failCount: number;
174
+ /** 失败原因 */
175
+ failures?: {
176
+ collectionId: number;
177
+ reason: string;
178
+ }[];
179
+ }
180
+
181
+ /**
182
+ * ShowMasterpiece 模块 - 上下文类型定义
183
+ *
184
+ * 这个文件定义了ShowMasterpiece模块中所有上下文相关的TypeScript类型。
185
+ * 将类型定义独立出来可以避免循环依赖问题。
186
+ *
187
+ * @fileoverview 上下文类型定义
188
+ */
189
+
190
+ /**
191
+ * 购物车上下文状态接口
192
+ */
193
+ interface CartContextState {
194
+ /** 购物车数据 */
195
+ cart: Cart;
196
+ /** 加载状态 */
197
+ loading: boolean;
198
+ /** 错误信息 */
199
+ error: string | undefined;
200
+ /** 刷新购物车数据 */
201
+ refreshCart: () => Promise<void>;
202
+ /** 添加商品到购物车(活动感知) */
203
+ addToCart: (request: AddToCartRequest & {
204
+ collection?: any;
205
+ }) => Promise<void>;
206
+ /** 更新购物车商品数量(活动感知) */
207
+ updateCartItem: (request: UpdateCartItemRequest) => Promise<void>;
208
+ /** 从购物车移除商品(活动感知) */
209
+ removeFromCart: (request: RemoveFromCartRequest) => Promise<void>;
210
+ /** 批量预订购物车商品(活动感知) */
211
+ batchBooking: (request: BatchBookingRequest) => Promise<BatchBookingResponse>;
212
+ /** 清空购物车(活动感知) */
213
+ clearCart: () => Promise<void>;
214
+ }
215
+
216
+ /**
217
+ * ShowMasterpiece 模块类型定义
218
+ *
219
+ * 包含画集、作品、配置等相关的TypeScript类型定义
220
+ */
221
+ /**
222
+ * 画集分类枚举
223
+ *
224
+ * 定义画集的各种分类:
225
+ * - COLLECTION: 画集 - 用于展示艺术作品
226
+ * - ACRYLIC: 立牌 - 立牌制品
227
+ * - BADGE: 吧唧 - 徽章类商品
228
+ * - COLOR_PAPER: 色纸 - 彩色纸张制品
229
+ * - POSTCARD: 明信片 - 明信片类商品
230
+ * - LASER_TICKET: 镭射票 - 镭射票类商品
231
+ * - CANVAS_BAG: 帆布包 - 帆布包类商品
232
+ * - SUPPORT_STICK: 应援棒 - 应援棒类商品
233
+ * - OTHER: 挂件/钥匙扣 - 挂件/钥匙扣类商品
234
+ */
235
+ declare enum CollectionCategory {
236
+ /** 画集 - 用于展示艺术作品 */
237
+ COLLECTION = "collection",
238
+ /** 立牌 - 立牌制品 */
239
+ ACRYLIC = "acrylic",
240
+ /** 吧唧 - 徽章类商品 */
241
+ BADGE = "badge",
242
+ /** 色纸 - 彩色纸张制品 */
243
+ COLOR_PAPER = "color_paper",
244
+ /** 透卡 - 透明卡片制品 */
245
+ TRANSPARENT_CARD = "transparent_card",
246
+ /** 明信片 - 明信片类商品 */
247
+ POSTCARD = "postcard",
248
+ /** 镭射票 - 镭射票类商品 */
249
+ LASER_TICKET = "laser_ticket",
250
+ /** 帆布包 - 帆布包类商品 */
251
+ CANVAS_BAG = "canvas_bag",
252
+ /** 线圈笔记本 - 线圈装订笔记本 */
253
+ SPIRAL_NOTEBOOK = "spiral_notebook",
254
+ /** 鼠标垫 - 鼠标垫类商品 */
255
+ MOUSE_PAD = "mouse_pad",
256
+ /** 应援棒 - 应援棒类商品 */
257
+ SUPPORT_STICK = "support_stick",
258
+ /** 挂件/钥匙扣 - 挂件/钥匙扣类商品 */
259
+ KEYCHAIN = "keychain",
260
+ /** 其它 */
261
+ OTHER = "other"
262
+ }
263
+ /**
264
+ * 画集分类类型
265
+ * 使用枚举值作为类型
266
+ */
267
+ type CollectionCategoryType = `${CollectionCategory}` | string;
268
+ /**
269
+ * 分类信息接口
270
+ * 包含分类值和显示名称
271
+ */
272
+ interface CategoryInfo {
273
+ /** 分类值 */
274
+ value: CollectionCategoryType;
275
+ /** 显示名称 */
276
+ displayName: string;
277
+ /** 描述信息 */
278
+ description?: string;
279
+ }
280
+ /**
281
+ * 艺术作品页面数据结构
282
+ *
283
+ * 表示画集中的单个作品页面,包含图片、标题、描述等信息。
284
+ * 每个画集包含多个这样的作品页面。
285
+ */
286
+ interface ArtworkPage {
287
+ /** 作品的唯一标识符 */
288
+ id: number;
289
+ /** 作品标题 */
290
+ title: string;
291
+ /** 编号 */
292
+ number: string;
293
+ /** 作品图片(支持URL或base64编码) */
294
+ image: string;
295
+ /** 通用文件服务的图片文件ID(新架构,可选) */
296
+ fileId?: string;
297
+ /** 作品描述 */
298
+ description: string;
299
+ /** 创作时间(可选) */
300
+ createdTime?: string;
301
+ /** 作品主题(可选) */
302
+ theme?: string;
303
+ /** 作品年份(可选) */
304
+ year?: string;
305
+ /** 创作媒介(可选) */
306
+ medium?: string;
307
+ /** 作品尺寸(可选) */
308
+ dimensions?: string;
309
+ /** 在画集中的显示顺序 */
310
+ pageOrder: number;
311
+ /** 是否激活(可选,默认true) */
312
+ isActive?: boolean;
313
+ /** 创建时间(可选) */
314
+ createdAt?: string;
315
+ /** 更新时间(可选) */
316
+ updatedAt?: string;
317
+ }
318
+ /**
319
+ * 艺术画集数据结构
320
+ *
321
+ * 表示一个完整的艺术画集,包含多个作品页面和相关元数据。
322
+ * 这是系统中的核心数据模型之一。
323
+ */
324
+ interface ArtCollection {
325
+ /** 画集的唯一标识符 */
326
+ id: number;
327
+ /** 画集标题 */
328
+ title: string;
329
+ /** 编号 */
330
+ number: string;
331
+ /** 画集封面图片路径 */
332
+ coverImage: string;
333
+ /** 通用文件服务的封面图片文件ID(新架构,可选) */
334
+ coverImageFileId?: string;
335
+ /** 画集描述 */
336
+ description: string;
337
+ /** 画集包含的所有作品页面 */
338
+ pages: ArtworkPage[];
339
+ /** 画集分类(使用枚举值) */
340
+ category: CollectionCategoryType;
341
+ /** 画集标签列表(可选) */
342
+ tags?: string[];
343
+ /** 是否已发布(可选,默认true) */
344
+ isPublished?: boolean;
345
+ /** 画集价格(单位:元,可选) */
346
+ price?: number;
347
+ /** 创建时间(可选) */
348
+ createdAt?: string;
349
+ /** 更新时间(可选) */
350
+ updatedAt?: string;
351
+ }
352
+ /**
353
+ * 系统配置数据结构
354
+ *
355
+ * 存储ShowMasterpiece模块的全局配置信息,
356
+ * 包括网站设置、显示选项、功能开关等。
357
+ */
358
+ interface MasterpiecesConfig {
359
+ /** 网站名称 */
360
+ siteName: string;
361
+ /** 网站描述 */
362
+ siteDescription?: string;
363
+ /** 首页主标题 */
364
+ heroTitle: string;
365
+ /** 首页副标题 */
366
+ heroSubtitle?: string;
367
+ /** 每页显示的最大画集数量 */
368
+ maxCollectionsPerPage: number;
369
+ /** 是否启用搜索功能 */
370
+ enableSearch: boolean;
371
+ /** 是否启用分类功能 */
372
+ enableCategories: boolean;
373
+ /** 首页分类Tab配置 */
374
+ homeTabConfig: HomeTabConfigItem[];
375
+ /** 默认分类 */
376
+ defaultCategory: string;
377
+ /** 主题模式:light(浅色)、dark(深色)、auto(自动) */
378
+ theme: 'light' | 'dark' | 'auto';
379
+ /** 界面语言:zh(中文)、en(英文) */
380
+ language: 'zh' | 'en';
381
+ }
382
+ interface HomeTabConfigItem {
383
+ category: CollectionCategoryType;
384
+ visible: boolean;
385
+ order: number;
386
+ }
387
+ /**
388
+ * 画集表单数据结构
389
+ *
390
+ * 用于创建和编辑画集时的表单数据
391
+ */
392
+ interface CollectionFormData {
393
+ /** 画集标题 */
394
+ title: string;
395
+ /** 编号 */
396
+ number: string;
397
+ /** 封面图片 */
398
+ coverImage: string;
399
+ /** 通用文件服务的封面图片文件ID */
400
+ coverImageFileId?: string;
401
+ /** 画集描述 */
402
+ description: string;
403
+ /** 画集分类(使用枚举值) */
404
+ category: CollectionCategoryType;
405
+ /** 画集标签列表 */
406
+ tags: string[];
407
+ /** 是否已发布 */
408
+ isPublished: boolean;
409
+ /** 画集价格(单位:元,可选) */
410
+ price?: number;
411
+ }
412
+ /**
413
+ * 作品表单数据结构
414
+ *
415
+ * 用于创建和编辑作品时的表单数据
416
+ */
417
+ interface ArtworkFormData {
418
+ /** 作品标题 */
419
+ title: string;
420
+ /** 编号 */
421
+ number: string;
422
+ /** 作品图片 */
423
+ image?: string;
424
+ /** 通用文件服务的图片文件ID */
425
+ fileId?: string;
426
+ /** 作品描述 */
427
+ description: string;
428
+ /** 创作时间 */
429
+ createdTime: string;
430
+ /** 作品主题 */
431
+ theme: string;
432
+ }
433
+ /**
434
+ * 获取所有可用的画集分类
435
+ *
436
+ * @returns 分类枚举值数组
437
+ */
438
+ declare function getAvailableCategories(): CollectionCategoryType[];
439
+ /**
440
+ * 验证分类是否为有效值
441
+ *
442
+ * @param category - 要验证的分类值
443
+ * @returns 是否为有效分类
444
+ */
445
+ declare function isValidCategory(category: string): category is CollectionCategoryType;
446
+ /**
447
+ * 扩展 CollectionCategoryType,使其支持 displayName 属性访问
448
+ * 使用方式: collection.category.displayName
449
+ */
450
+ declare global {
451
+ interface String {
452
+ get displayName(): string;
453
+ get categoryInfo(): CategoryInfo;
454
+ }
455
+ }
456
+
457
+ /**
458
+ * 画集卡片组件 (CollectionCard) - Tailwind CSS 版本
459
+ *
460
+ * 这是一个用于展示单个画集信息的卡片组件,主要用于画集列表页面。
461
+ *
462
+ * 主要功能:
463
+ * - 画集封面图片展示(支持懒加载)
464
+ * - 画集基本信息显示(标题、编号、分类、描述等)
465
+ * - 作品页数统计显示
466
+ * - 点击进入画集浏览
467
+ *
468
+ * 性能优化特性:
469
+ * - 图片懒加载(Intersection Observer API)
470
+ * - 加载状态和错误处理
471
+ * - Tailwind CSS 样式
472
+ *
473
+ * @component
474
+ */
475
+
476
+ /**
477
+ * CollectionCard 组件的 Props 接口
478
+ */
479
+ interface CollectionCardProps {
480
+ /** 要展示的画集数据 */
481
+ collection: ArtCollection;
482
+ /** 用户ID */
483
+ userId: number;
484
+ /** 用户选择画集时的回调函数 */
485
+ onSelect: (collection: ArtCollection) => void;
486
+ }
487
+ /**
488
+ * 画集卡片组件主体
489
+ *
490
+ * @param props - 组件属性
491
+ * @param props.collection - 画集数据对象
492
+ * @param props.userId - 用户ID
493
+ * @param props.onSelect - 选择画集的回调函数
494
+ * @returns React函数组件
495
+ */
496
+ declare const CollectionCard: React__default.FC<CollectionCardProps>;
497
+
498
+ interface ArtworkViewerProps {
499
+ artwork: ArtworkPage;
500
+ collectionId: number;
501
+ onNext: () => void;
502
+ onPrev: () => void;
503
+ canGoNext: boolean;
504
+ canGoPrev: boolean;
505
+ }
506
+ declare const ArtworkViewer: React__default.FC<ArtworkViewerProps>;
507
+
508
+ interface MobileAlbumViewerProps {
509
+ artworks: ArtworkPage[];
510
+ collectionId: number;
511
+ currentIndex: number;
512
+ onIndexChange: (index: number) => void;
513
+ onNext: () => void;
514
+ onPrev: () => void;
515
+ canGoNext: boolean;
516
+ canGoPrev: boolean;
517
+ }
518
+ declare const MobileAlbumViewer: React__default.FC<MobileAlbumViewerProps>;
519
+
520
+ interface ThumbnailSidebarProps {
521
+ pages: ArtworkPage[];
522
+ currentPage: number;
523
+ onPageSelect: (pageIndex: number) => void;
524
+ }
525
+ declare const ThumbnailSidebar: React__default.FC<ThumbnailSidebarProps>;
526
+
527
+ interface CollectionOrderManagerV2Props {
528
+ onOrderChanged?: () => void;
529
+ moveCollectionUp?: (id: number) => Promise<void>;
530
+ moveCollectionDown?: (id: number) => Promise<void>;
531
+ updateCollectionOrder?: (orders: {
532
+ id: number;
533
+ displayOrder: number;
534
+ }[]) => Promise<void>;
535
+ }
536
+ declare function CollectionOrderManagerV2({ onOrderChanged, moveCollectionUp: propMoveCollectionUp, moveCollectionDown: propMoveCollectionDown, updateCollectionOrder: propUpdateCollectionOrder }: CollectionOrderManagerV2Props): React__default.JSX.Element;
537
+
538
+ interface ArtworkOrderManagerV2Props {
539
+ collectionId: number;
540
+ onOrderChanged?: () => void;
541
+ moveArtworkUp?: (collectionId: number, id: number) => Promise<void>;
542
+ moveArtworkDown?: (collectionId: number, id: number) => Promise<void>;
543
+ updateArtworkOrder?: (collectionId: number, orders: {
544
+ id: number;
545
+ pageOrder: number;
546
+ }[]) => Promise<void>;
547
+ }
548
+ declare function ArtworkOrderManagerV2({ collectionId, onOrderChanged, moveArtworkUp: propMoveArtworkUp, moveArtworkDown: propMoveArtworkDown, updateArtworkOrder: propUpdateArtworkOrder }: ArtworkOrderManagerV2Props): React__default.JSX.Element;
549
+
550
+ /**
551
+ * 通用图片上传组件
552
+ * 使用通用文件服务,支持阿里云OSS存储
553
+ * 可在画集封面和作品图片之间复用
554
+ *
555
+ * 修复记录:
556
+ * - 2026-01-19: 修复封面图片上传覆盖问题
557
+ * 为封面图片生成唯一文件夹路径(包含时间戳和随机ID),避免新画集覆盖历史画集的封面图片
558
+ * - 2026-01-19: 修复图片链接过期问题
559
+ * 为封面图片路径添加文件扩展名,确保被正确识别为图片文件,避免生成带过期时间的签名URL
560
+ */
561
+
562
+ interface UniversalImageUploadProps {
563
+ /** 当前图片值(URL) */
564
+ value?: string;
565
+ /** 通用文件服务的文件ID */
566
+ fileId?: string;
567
+ /** 值变化回调,返回包含image和fileId的对象 */
568
+ onChange: (data: {
569
+ image?: string;
570
+ fileId?: string;
571
+ }) => void;
572
+ /** 占位符文本 */
573
+ placeholder?: string;
574
+ /** 标签文本 */
575
+ label?: string;
576
+ /** 是否禁用 */
577
+ disabled?: boolean;
578
+ /** 业务类型:cover(封面) 或 artwork(作品) */
579
+ businessType?: 'cover' | 'artwork';
580
+ /** 是否显示调试信息 */
581
+ showDebugInfo?: boolean;
582
+ /** 是否显示测试按钮 */
583
+ showTestButton?: boolean;
584
+ /** 自定义样式类名 */
585
+ className?: string;
586
+ }
587
+ declare const UniversalImageUpload: React__default.FC<UniversalImageUploadProps>;
588
+
589
+ /**
590
+ * ShowMasterpiece 模块 - 购物车弹窗组件
591
+ *
592
+ * @fileoverview 购物车弹窗组件
593
+ */
594
+
595
+ /**
596
+ * 购物车弹窗组件属性
597
+ */
598
+ interface CartModalProps {
599
+ /** 用户ID */
600
+ userId: number;
601
+ /** 是否显示弹窗 */
602
+ isOpen: boolean;
603
+ /** 关闭弹窗回调 */
604
+ onClose: () => void;
605
+ /** 弹窗标题 */
606
+ title?: string;
607
+ /** 弹窗宽度 */
608
+ width?: number | string;
609
+ /** 弹窗高度 */
610
+ height?: number | string;
611
+ }
612
+ /**
613
+ * 购物车弹窗组件
614
+ *
615
+ * @param props 组件属性
616
+ * @returns React组件
617
+ */
618
+ declare const CartModal: React__default.FC<CartModalProps>;
619
+
620
+ /**
621
+ * ShowMasterpiece 模块 - 购物车页面组件
622
+ *
623
+ * 完整的购物车页面,包含:
624
+ * - 购物车商品列表展示
625
+ * - 商品数量调整
626
+ * - 商品移除功能
627
+ * - 批量预订表单
628
+ * - 提交和状态管理
629
+ *
630
+ * @fileoverview 购物车页面组件
631
+ */
632
+
633
+ /**
634
+ * 购物车页面组件属性
635
+ */
636
+ interface CartPageProps {
637
+ /** 用户ID */
638
+ userId: number;
639
+ /** 关闭回调 */
640
+ onClose?: () => void;
641
+ }
642
+ /**
643
+ * 购物车页面组件
644
+ *
645
+ * @param props 组件属性
646
+ * @returns React组件
647
+ */
648
+ declare const CartPage: React__default.FC<CartPageProps>;
649
+
650
+ /**
651
+ * ShowMasterpiece 模块 - 购物车按钮组件
652
+ *
653
+ * 显示购物车图标和商品数量的按钮组件,点击可打开购物车弹窗
654
+ *
655
+ * @fileoverview 购物车按钮组件
656
+ */
657
+
658
+ /**
659
+ * 购物车按钮组件属性
660
+ */
661
+ interface CartButtonProps {
662
+ /** 用户ID */
663
+ userId: number;
664
+ /** 点击回调 */
665
+ onClick: () => void;
666
+ /** 按钮样式类名 */
667
+ className?: string;
668
+ /** 是否显示商品数量 */
669
+ showBadge?: boolean;
670
+ }
671
+ /**
672
+ * 购物车按钮组件
673
+ *
674
+ * @param props 组件属性
675
+ * @returns React组件
676
+ */
677
+ declare const CartButton: React__default.FC<CartButtonProps>;
678
+
679
+ /**
680
+ * ShowMasterpiece 模块 - 添加到购物车按钮组件
681
+ *
682
+ * 用于将画集添加到购物车的按钮组件
683
+ *
684
+ * @fileoverview 添加到购物车按钮组件
685
+ */
686
+
687
+ /**
688
+ * 添加到购物车按钮组件属性
689
+ */
690
+ interface AddToCartButtonProps {
691
+ /** 画集信息 */
692
+ collection: ArtCollection;
693
+ /** 用户ID */
694
+ userId: number;
695
+ /** 按钮样式类名 */
696
+ className?: string;
697
+ /** 按钮大小 */
698
+ size?: 'sm' | 'md' | 'lg';
699
+ /** 是否显示数量选择器 */
700
+ showQuantitySelector?: boolean;
701
+ }
702
+ /**
703
+ * 添加到购物车按钮组件
704
+ *
705
+ * @param props 组件属性
706
+ * @returns React组件
707
+ */
708
+ declare const AddToCartButton: React__default.FC<AddToCartButtonProps>;
709
+
710
+ /**
711
+ * ShowMasterpiece 模块 - 预订功能类型定义
712
+ *
713
+ * 定义了画集预订功能相关的TypeScript类型,包括:
714
+ * - 预订数据模型
715
+ * - API请求和响应类型
716
+ * - 表单数据类型
717
+ * - 状态枚举
718
+ *
719
+ * @fileoverview 预订功能类型定义
720
+ */
721
+
722
+ /**
723
+ * 预订状态枚举
724
+ */
725
+ type BookingStatus = 'pending' | 'confirmed' | 'completed' | 'cancelled';
726
+ /**
727
+ * 预订数据模型
728
+ */
729
+ interface Booking {
730
+ /** 预订ID */
731
+ id: number;
732
+ /** 画集ID */
733
+ collectionId: number;
734
+ /** 用户QQ号 */
735
+ qqNumber: string;
736
+ /** 用户手机号 */
737
+ phoneNumber?: string;
738
+ /** 预订数量 */
739
+ quantity: number;
740
+ /** 预订状态 */
741
+ status: BookingStatus;
742
+ /** 预订备注 */
743
+ notes?: string;
744
+ /** 管理员备注 */
745
+ adminNotes?: string;
746
+ /** 预订时间 */
747
+ createdAt: string;
748
+ /** 更新时间 */
749
+ updatedAt: string;
750
+ /** 确认时间 */
751
+ confirmedAt?: string;
752
+ /** 完成时间 */
753
+ completedAt?: string;
754
+ /** 取消时间 */
755
+ cancelledAt?: string;
756
+ /** 关联的画集信息 */
757
+ collection?: ArtCollection;
758
+ }
759
+ /**
760
+ * 创建预订请求数据
761
+ */
762
+ interface CreateBookingRequest {
763
+ /** 画集ID */
764
+ collectionId: number;
765
+ /** 用户QQ号 */
766
+ qqNumber: string;
767
+ /** 用户手机号 */
768
+ phoneNumber: string;
769
+ /** 预订数量 */
770
+ quantity: number;
771
+ /** 预订备注 */
772
+ notes?: string;
773
+ }
774
+ /**
775
+ * 更新预订请求数据
776
+ */
777
+ interface UpdateBookingRequest {
778
+ /** 预订状态 */
779
+ status?: BookingStatus;
780
+ /** 管理员备注 */
781
+ adminNotes?: string;
782
+ }
783
+ /**
784
+ * 预订列表查询参数
785
+ */
786
+ interface BookingListParams {
787
+ /** 画集ID过滤 */
788
+ collectionId?: number;
789
+ /** QQ号过滤 */
790
+ qqNumber?: string;
791
+ /** 手机号过滤 */
792
+ phoneNumber?: string;
793
+ /** 状态过滤 */
794
+ status?: BookingStatus;
795
+ /** 页码 */
796
+ page?: number;
797
+ /** 每页数量 */
798
+ limit?: number;
799
+ }
800
+ /**
801
+ * 预订列表响应
802
+ */
803
+ interface BookingListResponse {
804
+ /** 预订列表 */
805
+ bookings: Booking[];
806
+ /** 总数 */
807
+ total: number;
808
+ /** 当前页 */
809
+ page: number;
810
+ /** 每页数量 */
811
+ limit: number;
812
+ /** 总页数 */
813
+ totalPages: number;
814
+ }
815
+ /**
816
+ * 预订表单数据
817
+ */
818
+ interface BookingFormData {
819
+ /** 画集ID */
820
+ collectionId: number;
821
+ /** 用户QQ号 */
822
+ qqNumber: string;
823
+ /** 用户手机号 */
824
+ phoneNumber: string;
825
+ /** 预订数量 */
826
+ quantity: number;
827
+ /** 预订备注 */
828
+ notes: string;
829
+ }
830
+ /**
831
+ * 画集简略信息(用于预订页面展示)
832
+ */
833
+ interface CollectionSummary {
834
+ /** 画集ID */
835
+ id: number;
836
+ /** 画集标题 */
837
+ title: string;
838
+ /** 编号 */
839
+ number: string;
840
+ /** 封面图片 */
841
+ coverImage: string;
842
+ /** 价格(单位:元) */
843
+ price?: number;
844
+ /** 画集描述 */
845
+ description?: string;
846
+ }
847
+
848
+ /**
849
+ * ShowMasterpiece 模块 - 画集列表组件
850
+ *
851
+ * 用于预订页面展示画集简略信息,包括:
852
+ * - 画集封面和标题
853
+ * - 艺术家信息
854
+ * - 价格显示
855
+ * - 选择功能
856
+ *
857
+ * @fileoverview 画集列表组件
858
+ */
859
+
860
+ /**
861
+ * 画集列表组件属性
862
+ */
863
+ interface CollectionListProps {
864
+ /** 画集列表 */
865
+ collections: CollectionSummary[];
866
+ /** 当前选中的画集ID */
867
+ selectedCollectionId?: number;
868
+ /** 选择画集回调 */
869
+ onSelectCollection?: (collectionId: number) => void;
870
+ /** 加载状态 */
871
+ loading?: boolean;
872
+ /** 是否禁用选择 */
873
+ disabled?: boolean;
874
+ }
875
+ /**
876
+ * 画集列表组件
877
+ *
878
+ * @param props 组件属性
879
+ * @returns React组件
880
+ */
881
+ declare const CollectionList: React__default.FC<CollectionListProps>;
882
+
883
+ /**
884
+ * MasterpiecesService - 美术作品前端API服务
885
+ *
886
+ * 这个文件提供了客户端与美术作品相关API的通信接口。
887
+ * 主要用于前端组件和Hook中调用后端API,获取和操作画集数据。
888
+ *
889
+ * 主要功能:
890
+ * - 画集数据的获取和查询
891
+ * - 搜索和筛选功能
892
+ * - 分类和标签管理
893
+ * - 推荐算法
894
+ *
895
+ * 设计特点:
896
+ * - 使用静态方法,无需实例化
897
+ * - 统一的错误处理
898
+ * - 支持多种查询方式
899
+ * - TypeScript类型安全
900
+ *
901
+ * @module MasterpiecesService
902
+ */
903
+
904
+ /**
905
+ * 获取美术作品画集列表(函数式API)
906
+ *
907
+ * 这是一个简单的函数式接口,用于获取所有画集数据。
908
+ * 主要为了保持向后兼容性而保留。
909
+ *
910
+ * @returns Promise<ArtCollection[]> 画集数组
911
+ * @throws {Error} 当API请求失败时抛出错误
912
+ *
913
+ * @deprecated 建议使用 MasterpiecesService.getAllCollections() 代替
914
+ */
915
+ declare const getMasterpieces: () => Promise<ArtCollection[]>;
916
+ /**
917
+ * 美术作品服务类
918
+ *
919
+ * 提供完整的美术作品数据访问接口,包括画集的获取、搜索、筛选等功能。
920
+ * 所有方法都是静态方法,可以直接调用,无需实例化。
921
+ *
922
+ * @example
923
+ * ```typescript
924
+ * // 获取所有画集
925
+ * const collections = await MasterpiecesService.getAllCollections();
926
+ *
927
+ * // 搜索画集
928
+ * const results = await MasterpiecesService.searchCollections('油画');
929
+ *
930
+ * // 按分类获取
931
+ * const paintings = await MasterpiecesService.getCollectionsByCategory('油画');
932
+ * ```
933
+ */
934
+ declare class MasterpiecesService {
935
+ /**
936
+ * 获取所有画集
937
+ *
938
+ * 从后端API获取所有可用的画集数据。
939
+ * 返回的数据包含完整的画集信息和作品页面。
940
+ *
941
+ * @returns Promise<ArtCollection[]> 所有画集的数组
942
+ * @throws {Error} 当API请求失败时抛出错误
943
+ *
944
+ * @example
945
+ * ```typescript
946
+ * try {
947
+ * const collections = await MasterpiecesService.getAllCollections();
948
+ * console.log(`共加载了 ${collections.length} 个画集`);
949
+ * } catch (error) {
950
+ * console.error('加载失败:', error.message);
951
+ * }
952
+ * ```
953
+ */
954
+ static getAllCollections(): Promise<ArtCollection[]>;
955
+ /**
956
+ * 根据ID获取特定画集
957
+ *
958
+ * 通过画集ID获取单个画集的详细信息。
959
+ * 内部实现是先获取所有画集,然后筛选出指定ID的画集。
960
+ *
961
+ * @param id - 画集的唯一标识符
962
+ * @returns Promise<ArtCollection | null> 找到的画集对象,如果不存在则返回null
963
+ *
964
+ * @example
965
+ * ```typescript
966
+ * const collection = await MasterpiecesService.getCollectionById(1);
967
+ * if (collection) {
968
+ * console.log(`找到画集: ${collection.title}`);
969
+ * } else {
970
+ * console.log('画集不存在');
971
+ * }
972
+ * ```
973
+ */
974
+ static getCollectionById(id: number): Promise<ArtCollection | null>;
975
+ /**
976
+ * 搜索画集
977
+ *
978
+ * 根据关键词在画集的多个字段中进行搜索,包括:
979
+ * - 画集标题
980
+ * - 艺术家姓名
981
+ * - 画集描述
982
+ * - 画集分类
983
+ * - 画集标签
984
+ *
985
+ * 搜索是大小写不敏感的,支持部分匹配。
986
+ *
987
+ * @param query - 搜索关键词
988
+ * @returns Promise<ArtCollection[]> 匹配的画集数组
989
+ *
990
+ * @example
991
+ * ```typescript
992
+ * // 搜索包含"山水"的画集
993
+ * const results = await MasterpiecesService.searchCollections('山水');
994
+ * console.log(`找到 ${results.length} 个相关画集`);
995
+ * ```
996
+ */
997
+ static searchCollections(query: string): Promise<ArtCollection[]>;
998
+ /**
999
+ * 根据分类获取画集
1000
+ *
1001
+ * 获取属于指定分类的所有画集。
1002
+ * 支持特殊值 'all' 来获取所有画集。
1003
+ *
1004
+ * @param category - 分类名称,或 'all' 表示所有分类
1005
+ * @returns Promise<ArtCollection[]> 该分类下的画集数组
1006
+ *
1007
+ * @example
1008
+ * ```typescript
1009
+ * // 获取油画分类的画集
1010
+ * const paintings = await MasterpiecesService.getCollectionsByCategory('油画');
1011
+ *
1012
+ * // 获取所有画集
1013
+ * const allCollections = await MasterpiecesService.getCollectionsByCategory('all');
1014
+ * ```
1015
+ */
1016
+ static getCollectionsByCategory(category: string): Promise<ArtCollection[]>;
1017
+ /**
1018
+ * 获取推荐画集
1019
+ *
1020
+ * 基于简单的推荐算法获取推荐的画集。
1021
+ * 当前算法:优先选择已发布的画集,按作品数量降序排列。
1022
+ *
1023
+ * @param limit - 返回的推荐画集数量,默认为3个
1024
+ * @returns Promise<ArtCollection[]> 推荐的画集数组
1025
+ *
1026
+ * @example
1027
+ * ```typescript
1028
+ * // 获取3个推荐画集
1029
+ * const recommended = await MasterpiecesService.getRecommendedCollections();
1030
+ *
1031
+ * // 获取5个推荐画集
1032
+ * const moreRecommended = await MasterpiecesService.getRecommendedCollections(5);
1033
+ * ```
1034
+ */
1035
+ static getRecommendedCollections(limit?: number): Promise<ArtCollection[]>;
1036
+ /**
1037
+ * 获取所有可用分类
1038
+ *
1039
+ * 从后端API获取所有已定义的画集分类列表。
1040
+ * 用于构建分类筛选器和下拉菜单。
1041
+ *
1042
+ * @returns Promise<string[]> 分类名称数组
1043
+ * @throws {Error} 当API请求失败时抛出错误
1044
+ *
1045
+ * @example
1046
+ * ```typescript
1047
+ * const categories = await MasterpiecesService.getCategories();
1048
+ * console.log('可用分类:', categories);
1049
+ * ```
1050
+ */
1051
+ static getCategories(): Promise<string[]>;
1052
+ /**
1053
+ * 获取所有可用标签
1054
+ *
1055
+ * 从后端API获取所有已定义的画集标签列表。
1056
+ * 用于构建标签筛选器和标签云。
1057
+ *
1058
+ * @returns Promise<string[]> 标签名称数组
1059
+ * @throws {Error} 当API请求失败时抛出错误
1060
+ *
1061
+ * @example
1062
+ * ```typescript
1063
+ * const tags = await MasterpiecesService.getTags();
1064
+ * console.log('可用标签:', tags);
1065
+ * ```
1066
+ */
1067
+ static getTags(): Promise<string[]>;
1068
+ }
1069
+
1070
+ declare const getConfig: () => Promise<MasterpiecesConfig>;
1071
+ declare const updateConfig: (configData: Partial<MasterpiecesConfig>) => Promise<MasterpiecesConfig>;
1072
+ declare const resetConfig: () => Promise<MasterpiecesConfig>;
1073
+ declare const getAllCollections: () => Promise<ArtCollection[]>;
1074
+ declare const createCollection: (collectionData: CollectionFormData) => Promise<ArtCollection>;
1075
+ declare const updateCollection: (id: number, collectionData: CollectionFormData) => Promise<ArtCollection>;
1076
+ declare const deleteCollection: (id: number) => Promise<void>;
1077
+ declare const updateCollectionOrder: (collectionOrders: {
1078
+ id: number;
1079
+ displayOrder: number;
1080
+ }[]) => Promise<void>;
1081
+ declare const moveCollection: (collectionId: number, targetOrder: number) => Promise<void>;
1082
+ declare const moveCollectionUp: (collectionId: number) => Promise<void>;
1083
+ declare const moveCollectionDown: (collectionId: number) => Promise<void>;
1084
+ declare const addArtworkToCollection: (collectionId: number, artworkData: ArtworkFormData) => Promise<ArtworkPage>;
1085
+ declare const updateArtwork: (collectionId: number, artworkId: number, artworkData: ArtworkFormData) => Promise<ArtworkPage>;
1086
+ declare const deleteArtwork: (collectionId: number, artworkId: number) => Promise<void>;
1087
+ declare const getArtworksByCollection: (collectionId: number) => Promise<(ArtworkPage & {
1088
+ pageOrder: number;
1089
+ })[]>;
1090
+ declare const updateArtworkOrder: (collectionId: number, artworkOrders: {
1091
+ id: number;
1092
+ pageOrder: number;
1093
+ }[]) => Promise<void>;
1094
+ declare const moveArtwork: (collectionId: number, artworkId: number, targetOrder: number) => Promise<void>;
1095
+ declare const moveArtworkUp: (collectionId: number, artworkId: number) => Promise<void>;
1096
+ declare const moveArtworkDown: (collectionId: number, artworkId: number) => Promise<void>;
1097
+ declare const getCategories: () => Promise<string[]>;
1098
+ declare const createCategory: (name: string, description?: string) => Promise<void>;
1099
+ declare const getTags: () => Promise<string[]>;
1100
+ declare function getCollectionsOverview(): Promise<Omit<ArtCollection, 'pages'>[]>;
1101
+
1102
+ /**
1103
+ * ShowMasterpiece 模块 - 购物车服务
1104
+ *
1105
+ * 提供购物车功能的前端本地存储服务,包括:
1106
+ * - 添加商品到购物车
1107
+ * - 更新购物车商品数量
1108
+ * - 从购物车移除商品
1109
+ * - 清空购物车
1110
+ * - 批量预订
1111
+ *
1112
+ * @fileoverview 购物车服务 - 本地存储版本
1113
+ */
1114
+
1115
+ /**
1116
+ * 购物车服务类
1117
+ *
1118
+ * 提供购物车功能相关的本地存储操作方法
1119
+ */
1120
+ declare class CartService {
1121
+ private static readonly BOOKING_URL;
1122
+ /**
1123
+ * 获取购物车数据
1124
+ *
1125
+ * @param userId 用户ID
1126
+ * @returns 购物车数据
1127
+ */
1128
+ static getCart(userId: number): Promise<Cart>;
1129
+ /**
1130
+ * 保存购物车数据到本地存储
1131
+ *
1132
+ * @param userId 用户ID
1133
+ * @param cart 购物车数据
1134
+ */
1135
+ private static saveCart;
1136
+ /**
1137
+ * 计算购物车总数量和总价格
1138
+ *
1139
+ * @param items 购物车商品项
1140
+ * @returns 总数量和总价格
1141
+ */
1142
+ private static calculateTotals;
1143
+ /**
1144
+ * 添加商品到购物车
1145
+ *
1146
+ * @param data 添加商品数据
1147
+ * @returns 更新后的购物车数据
1148
+ */
1149
+ static addToCart(data: AddToCartRequest & {
1150
+ userId: number;
1151
+ collection?: any;
1152
+ }): Promise<Cart>;
1153
+ /**
1154
+ * 更新购物车商品数量
1155
+ *
1156
+ * @param data 更新商品数据
1157
+ * @returns 更新后的购物车数据
1158
+ */
1159
+ static updateCartItem(data: UpdateCartItemRequest & {
1160
+ userId: number;
1161
+ }): Promise<Cart>;
1162
+ /**
1163
+ * 从购物车移除商品
1164
+ *
1165
+ * @param data 移除商品数据
1166
+ * @returns 更新后的购物车数据
1167
+ */
1168
+ static removeFromCart(data: RemoveFromCartRequest & {
1169
+ userId: number;
1170
+ }): Promise<Cart>;
1171
+ /**
1172
+ * 清空购物车
1173
+ *
1174
+ * @param userId 用户ID
1175
+ * @returns 清空后的购物车数据
1176
+ */
1177
+ static clearCart(userId: number): Promise<Cart>;
1178
+ /**
1179
+ * 批量预订购物车中的商品
1180
+ *
1181
+ * @param data 批量预订数据
1182
+ * @param cart 当前购物车数据(用于保存历史记录)
1183
+ * @returns 预订结果
1184
+ */
1185
+ static batchBooking(data: BatchBookingRequest, cart?: Cart): Promise<BatchBookingResponse>;
1186
+ }
1187
+ /**
1188
+ * 购物车服务函数集
1189
+ *
1190
+ * 提供函数式的API调用接口,作为服务类的补充。
1191
+ */
1192
+ /**
1193
+ * 获取购物车数据
1194
+ *
1195
+ * @param userId 用户ID
1196
+ * @returns 购物车数据
1197
+ */
1198
+ declare const getCart: (userId: number) => Promise<Cart>;
1199
+ /**
1200
+ * 添加商品到购物车
1201
+ *
1202
+ * @param data 添加商品数据
1203
+ * @returns 更新后的购物车数据
1204
+ */
1205
+ declare const addToCart: (data: AddToCartRequest & {
1206
+ userId: number;
1207
+ }) => Promise<Cart>;
1208
+ /**
1209
+ * 更新购物车商品数量
1210
+ *
1211
+ * @param data 更新商品数据
1212
+ * @returns 更新后的购物车数据
1213
+ */
1214
+ declare const updateCartItem: (data: UpdateCartItemRequest & {
1215
+ userId: number;
1216
+ }) => Promise<Cart>;
1217
+ /**
1218
+ * 从购物车移除商品
1219
+ *
1220
+ * @param data 移除商品数据
1221
+ * @returns 更新后的购物车数据
1222
+ */
1223
+ declare const removeFromCart: (data: RemoveFromCartRequest & {
1224
+ userId: number;
1225
+ }) => Promise<Cart>;
1226
+ /**
1227
+ * 清空购物车
1228
+ *
1229
+ * @param userId 用户ID
1230
+ * @returns 清空后的购物车数据
1231
+ */
1232
+ declare const clearCart: (userId: number) => Promise<Cart>;
1233
+ /**
1234
+ * 批量预订购物车中的商品
1235
+ *
1236
+ * @param data 批量预订数据
1237
+ * @param cart 当前购物车数据(用于保存历史记录)
1238
+ * @returns 预订结果
1239
+ */
1240
+ declare const batchBooking: (data: BatchBookingRequest, cart?: Cart) => Promise<BatchBookingResponse>;
1241
+
1242
+ /**
1243
+ * ShowMasterpiece 模块 - 预订服务
1244
+ *
1245
+ * 提供画集预订功能的前端API调用服务,包括:
1246
+ * - 创建预订
1247
+ * - 查询预订列表
1248
+ * - 更新预订状态
1249
+ * - 获取画集简略信息
1250
+ *
1251
+ * @fileoverview 预订服务
1252
+ */
1253
+
1254
+ /**
1255
+ * 预订服务类
1256
+ *
1257
+ * 提供预订功能相关的API调用方法,使用面向对象的方式封装HTTP请求。
1258
+ */
1259
+ declare class BookingService {
1260
+ private static readonly BASE_URL;
1261
+ /**
1262
+ * 创建新预订
1263
+ *
1264
+ * @param data 预订数据
1265
+ * @returns 创建的预订信息
1266
+ */
1267
+ static createBooking(data: CreateBookingRequest): Promise<Booking>;
1268
+ /**
1269
+ * 获取预订列表
1270
+ *
1271
+ * @param params 查询参数
1272
+ * @returns 预订列表和分页信息
1273
+ */
1274
+ static getBookings(params?: BookingListParams): Promise<BookingListResponse>;
1275
+ /**
1276
+ * 获取单个预订详情
1277
+ *
1278
+ * @param id 预订ID
1279
+ * @returns 预订详情
1280
+ */
1281
+ static getBooking(id: number): Promise<Booking>;
1282
+ /**
1283
+ * 更新预订状态
1284
+ *
1285
+ * @param id 预订ID
1286
+ * @param data 更新数据
1287
+ * @returns 更新后的预订信息
1288
+ */
1289
+ static updateBooking(id: number, data: UpdateBookingRequest): Promise<Booking>;
1290
+ /**
1291
+ * 删除预订
1292
+ *
1293
+ * @param id 预订ID
1294
+ */
1295
+ static deleteBooking(id: number): Promise<void>;
1296
+ /**
1297
+ * 获取可预订的画集列表
1298
+ *
1299
+ * @returns 画集简略信息列表
1300
+ */
1301
+ static getBookableCollections(): Promise<CollectionSummary[]>;
1302
+ }
1303
+ /**
1304
+ * 预订服务函数集
1305
+ *
1306
+ * 提供函数式的API调用接口,作为服务类的补充。
1307
+ */
1308
+ /**
1309
+ * 创建新预订
1310
+ *
1311
+ * @param data 预订数据
1312
+ * @returns 创建的预订信息
1313
+ */
1314
+ declare const createBooking: (data: CreateBookingRequest) => Promise<Booking>;
1315
+ /**
1316
+ * 获取预订列表
1317
+ *
1318
+ * @param params 查询参数
1319
+ * @returns 预订列表和分页信息
1320
+ */
1321
+ declare const getBookings: (params?: BookingListParams) => Promise<BookingListResponse>;
1322
+ /**
1323
+ * 获取单个预订详情
1324
+ *
1325
+ * @param id 预订ID
1326
+ * @returns 预订详情
1327
+ */
1328
+ declare const getBooking: (id: number) => Promise<Booking>;
1329
+ /**
1330
+ * 更新预订状态
1331
+ *
1332
+ * @param id 预订ID
1333
+ * @param data 更新数据
1334
+ * @returns 更新后的预订信息
1335
+ */
1336
+ declare const updateBooking: (id: number, data: UpdateBookingRequest) => Promise<Booking>;
1337
+ /**
1338
+ * 删除预订
1339
+ *
1340
+ * @param id 预订ID
1341
+ */
1342
+ declare const deleteBooking$1: (id: number) => Promise<void>;
1343
+ /**
1344
+ * 获取可预订的画集列表
1345
+ *
1346
+ * @returns 画集简略信息列表
1347
+ */
1348
+ declare const getBookableCollections: () => Promise<CollectionSummary[]>;
1349
+
1350
+ /**
1351
+ * ShowMasterpiece 模块 - 预订管理服务
1352
+ *
1353
+ * 提供预订管理相关的类型定义和服务函数
1354
+ *
1355
+ * @fileoverview 预订管理服务
1356
+ */
1357
+
1358
+ /**
1359
+ * 预订管理数据接口
1360
+ */
1361
+ interface BookingAdminData {
1362
+ /** 预订ID */
1363
+ id: number;
1364
+ /** 用户ID */
1365
+ userId: number;
1366
+ /** 用户名 */
1367
+ userName: string;
1368
+ /** 用户手机号 */
1369
+ userPhone: string;
1370
+ /** QQ号 */
1371
+ qqNumber?: string;
1372
+ /** 手机号 */
1373
+ phoneNumber?: string;
1374
+ /** 画集ID */
1375
+ collectionId: number;
1376
+ /** 画集标题 */
1377
+ collectionTitle: string;
1378
+ /** 画集编号 */
1379
+ collectionNumber: string;
1380
+ /** 画集信息 */
1381
+ collection: {
1382
+ /** 画集ID */
1383
+ id: number;
1384
+ /** 画集标题 */
1385
+ title: string;
1386
+ /** 画集编号 */
1387
+ number: string;
1388
+ /** 封面图片 */
1389
+ coverImage: string;
1390
+ /** 价格 */
1391
+ price: number;
1392
+ };
1393
+ /** 预订状态 */
1394
+ status: BookingStatus;
1395
+ /** 预订时间 */
1396
+ bookingTime: string;
1397
+ /** 更新时间 */
1398
+ updatedAt: string;
1399
+ /** 创建时间 */
1400
+ createdAt: string;
1401
+ /** 管理员备注 */
1402
+ adminNotes?: string;
1403
+ /** 用户备注 */
1404
+ notes?: string;
1405
+ /** 领取方式 */
1406
+ pickupMethod?: string;
1407
+ /** 数量 */
1408
+ quantity: number;
1409
+ /** 价格 */
1410
+ price: number;
1411
+ /** 总价格 */
1412
+ totalPrice: number;
1413
+ /** 确认时间 */
1414
+ confirmedAt?: string;
1415
+ /** 完成时间 */
1416
+ completedAt?: string;
1417
+ /** 取消时间 */
1418
+ cancelledAt?: string;
1419
+ }
1420
+ /**
1421
+ * 预订管理统计信息接口
1422
+ */
1423
+ interface BookingAdminStats {
1424
+ /** 总预订数 */
1425
+ totalBookings: number;
1426
+ /** 待处理预订数 */
1427
+ pendingBookings: number;
1428
+ /** 已确认预订数 */
1429
+ confirmedBookings: number;
1430
+ /** 已完成预订数 */
1431
+ completedBookings: number;
1432
+ /** 已取消预订数 */
1433
+ cancelledBookings: number;
1434
+ /** 总金额 */
1435
+ totalAmount: number;
1436
+ /** 总收入 */
1437
+ totalRevenue: number;
1438
+ /** 总数量 */
1439
+ totalQuantity: number;
1440
+ /** 今日新增预订数 */
1441
+ todayBookings: number;
1442
+ /** 本周新增预订数 */
1443
+ weekBookings: number;
1444
+ }
1445
+ /**
1446
+ * 预订管理接口响应类型
1447
+ */
1448
+ interface BookingAdminResponse {
1449
+ bookings: BookingAdminData[];
1450
+ stats: BookingAdminStats;
1451
+ }
1452
+ /**
1453
+ * 预订管理查询参数
1454
+ */
1455
+ interface BookingAdminQueryParams {
1456
+ /** QQ号搜索 */
1457
+ qqNumber?: string;
1458
+ /** 手机号搜索 */
1459
+ phoneNumber?: string;
1460
+ /** 状态过滤 */
1461
+ status?: BookingStatus | 'all';
1462
+ }
1463
+ /**
1464
+ * 预订管理服务类
1465
+ */
1466
+ declare class BookingAdminService {
1467
+ /**
1468
+ * 获取所有预订数据
1469
+ */
1470
+ static getAllBookings(params?: BookingAdminQueryParams): Promise<BookingAdminData[]>;
1471
+ /**
1472
+ * 强制刷新获取所有预订数据(绕过所有缓存)
1473
+ */
1474
+ static forceRefreshAllBookings(params?: BookingAdminQueryParams): Promise<BookingAdminData[]>;
1475
+ /**
1476
+ * 获取预订统计信息
1477
+ */
1478
+ static getBookingStats(params?: BookingAdminQueryParams): Promise<BookingAdminStats>;
1479
+ /**
1480
+ * 强制刷新获取预订统计信息(绕过所有缓存)
1481
+ */
1482
+ static forceRefreshBookingStats(params?: BookingAdminQueryParams): Promise<BookingAdminStats>;
1483
+ /**
1484
+ * 更新预订状态
1485
+ */
1486
+ static updateBookingStatus(bookingId: number, status: BookingStatus, adminNotes?: string): Promise<void>;
1487
+ /**
1488
+ * 删除预订
1489
+ */
1490
+ static deleteBooking(bookingId: number): Promise<void>;
1491
+ /**
1492
+ * 导出预订数据
1493
+ */
1494
+ static exportBookings(format?: 'csv' | 'excel'): Promise<Blob>;
1495
+ }
1496
+ declare const getAllBookings: typeof BookingAdminService.getAllBookings;
1497
+ declare const getBookingStats: typeof BookingAdminService.getBookingStats;
1498
+ declare const forceRefreshAllBookings: typeof BookingAdminService.forceRefreshAllBookings;
1499
+ declare const forceRefreshBookingStats: typeof BookingAdminService.forceRefreshBookingStats;
1500
+ declare const updateBookingStatus$1: typeof BookingAdminService.updateBookingStatus;
1501
+ declare const deleteBooking: typeof BookingAdminService.deleteBooking;
1502
+ declare const exportBookings: typeof BookingAdminService.exportBookings;
1503
+
1504
+ /**
1505
+ * ShowMasterpiece 模块 - 购物车历史记录服务
1506
+ *
1507
+ * 提供用户购物车历史记录功能,包括:
1508
+ * - 保存用户提交的购物车数据
1509
+ * - 获取用户历史记录
1510
+ * - 更新预订状态
1511
+ * - 本地存储管理
1512
+ *
1513
+ * @fileoverview 购物车历史记录服务
1514
+ */
1515
+
1516
+ /**
1517
+ * 购物车历史记录服务类
1518
+ *
1519
+ * 提供购物车历史记录相关的本地存储操作方法
1520
+ */
1521
+ declare class CartHistoryService {
1522
+ /**
1523
+ * 生成唯一ID
1524
+ */
1525
+ /**
1526
+ * 获取用户购物车历史记录
1527
+ *
1528
+ * @param qqNumber 用户QQ号
1529
+ * @param phoneNumber 用户手机号
1530
+ * @returns 购物车历史记录
1531
+ */
1532
+ static getCartHistory(qqNumber: string, phoneNumber: string): Promise<CartHistory>;
1533
+ /**
1534
+ * 保存购物车历史记录
1535
+ *
1536
+ * @param historyItem 历史记录项
1537
+ */
1538
+ static saveCartHistory(historyItem: Omit<CartHistoryItem, 'id'>): Promise<CartHistoryItem>;
1539
+ /**
1540
+ * 更新预订状态
1541
+ *
1542
+ * @param qqNumber 用户QQ号
1543
+ * @param phoneNumber 用户手机号
1544
+ * @param historyId 历史记录ID
1545
+ * @param status 新状态
1546
+ * @param bookingIds 预订ID列表
1547
+ */
1548
+ static updateBookingStatus(qqNumber: string, phoneNumber: string, historyId: string, status: CartHistoryItem['status'], bookingIds?: number[]): Promise<void>;
1549
+ /**
1550
+ * 删除历史记录
1551
+ *
1552
+ * @param qqNumber 用户QQ号
1553
+ * @param phoneNumber 用户手机号
1554
+ * @param historyId 历史记录ID
1555
+ */
1556
+ static deleteHistoryRecord(qqNumber: string, phoneNumber: string, historyId: string): Promise<void>;
1557
+ /**
1558
+ * 清空用户所有历史记录
1559
+ *
1560
+ * @param qqNumber 用户QQ号
1561
+ * @param phoneNumber 用户手机号
1562
+ */
1563
+ static clearUserHistory(qqNumber: string, phoneNumber: string): Promise<void>;
1564
+ /**
1565
+ * 获取所有历史记录(管理员功能)
1566
+ */
1567
+ static getAllHistory(): Promise<CartHistoryItem[]>;
1568
+ /**
1569
+ * 获取统计数据
1570
+ */
1571
+ static getStatistics(): Promise<{
1572
+ totalRecords: number;
1573
+ totalUsers: number;
1574
+ totalItems: number;
1575
+ totalRevenue: number;
1576
+ }>;
1577
+ }
1578
+ declare const getCartHistory: typeof CartHistoryService.getCartHistory;
1579
+ declare const updateBookingStatus: typeof CartHistoryService.updateBookingStatus;
1580
+ declare const deleteHistoryRecord: typeof CartHistoryService.deleteHistoryRecord;
1581
+ declare const clearUserHistory: typeof CartHistoryService.clearUserHistory;
1582
+ declare const getAllHistory: typeof CartHistoryService.getAllHistory;
1583
+ declare const getStatistics: typeof CartHistoryService.getStatistics;
1584
+ declare const saveCartHistory: (historyItem: Omit<CartHistoryItem, "id">) => Promise<CartHistoryItem>;
1585
+
1586
+ /**
1587
+ * 通用文件服务核心类型定义
1588
+ *
1589
+ * 定义了文件存储、CDN、处理器等核心接口和类型
1590
+ */
1591
+ /** 文件存储类型 */
1592
+ type StorageType = 'local' | 'aliyun-oss' | 'aws-s3' | 'qcloud-cos';
1593
+ /** CDN提供者类型 */
1594
+ type CDNType = 'none' | 'aliyun-cdn' | 'aws-cloudfront' | 'qcloud-cdn';
1595
+ /** 存储配置基础接口 */
1596
+ interface StorageConfig {
1597
+ /** 存储类型 */
1598
+ type: StorageType;
1599
+ /** 是否启用 */
1600
+ enabled: boolean;
1601
+ }
1602
+ /** CDN配置基础接口 */
1603
+ interface CDNConfig {
1604
+ /** CDN类型 */
1605
+ type: CDNType;
1606
+ /** 是否启用 */
1607
+ enabled: boolean;
1608
+ }
1609
+ /** 文件服务配置 */
1610
+ interface UniversalFileServiceConfig {
1611
+ /** 默认存储提供者 */
1612
+ defaultStorage: StorageType;
1613
+ /** 存储提供者配置 */
1614
+ storageProviders: Record<StorageType, StorageConfig>;
1615
+ /** 默认CDN提供者 */
1616
+ defaultCDN: CDNType;
1617
+ /** CDN提供者配置 */
1618
+ cdnProviders: Record<CDNType, CDNConfig>;
1619
+ /** 文件大小限制(字节) */
1620
+ maxFileSize: number;
1621
+ /** 允许的文件类型 */
1622
+ allowedMimeTypes: string[];
1623
+ /** 是否启用文件处理 */
1624
+ enableProcessing: boolean;
1625
+ /** 处理队列大小 */
1626
+ processingQueueSize: number;
1627
+ /** 缓存配置 */
1628
+ cache: {
1629
+ /** 元数据缓存TTL(秒) */
1630
+ metadataTTL: number;
1631
+ /** URL缓存TTL(秒) */
1632
+ urlTTL: number;
1633
+ };
1634
+ }
1635
+
1636
+ /**
1637
+ * 通用文件服务配置管理
1638
+ */
1639
+
1640
+ /**
1641
+ * 配置管理器
1642
+ */
1643
+ declare class FileServiceConfigManager {
1644
+ private config;
1645
+ constructor(customConfig?: Partial<UniversalFileServiceConfig>);
1646
+ /**
1647
+ * 获取完整配置
1648
+ */
1649
+ getConfig(): UniversalFileServiceConfig;
1650
+ /**
1651
+ * 获取存储提供者配置
1652
+ */
1653
+ getStorageConfig(type: StorageType): StorageConfig | undefined;
1654
+ /**
1655
+ * 获取CDN提供者配置
1656
+ */
1657
+ getCDNConfig(type: CDNType): CDNConfig | undefined;
1658
+ /**
1659
+ * 更新配置
1660
+ */
1661
+ updateConfig(updates: Partial<UniversalFileServiceConfig>): void;
1662
+ /**
1663
+ * 启用存储提供者
1664
+ */
1665
+ enableStorageProvider(type: StorageType, config?: Partial<StorageConfig>): void;
1666
+ /**
1667
+ * 禁用存储提供者
1668
+ */
1669
+ disableStorageProvider(type: StorageType): void;
1670
+ /**
1671
+ * 启用CDN提供者
1672
+ */
1673
+ enableCDNProvider(type: CDNType, config?: Partial<CDNConfig>): void;
1674
+ /**
1675
+ * 禁用CDN提供者
1676
+ */
1677
+ disableCDNProvider(type: CDNType): void;
1678
+ /**
1679
+ * 从环境变量加载阿里云OSS配置
1680
+ */
1681
+ loadAliyunOSSFromEnv(): void;
1682
+ /**
1683
+ * 从配置管理模块加载阿里云OSS配置
1684
+ */
1685
+ loadAliyunOSSFromConfigManager(): Promise<void>;
1686
+ /**
1687
+ * 从环境变量加载阿里云CDN配置
1688
+ */
1689
+ loadAliyunCDNFromEnv(): void;
1690
+ /**
1691
+ * 验证配置有效性
1692
+ */
1693
+ private validateConfig;
1694
+ /**
1695
+ * 合并配置
1696
+ */
1697
+ private mergeConfig;
1698
+ }
1699
+
1700
+ /**
1701
+ * ShowMasterpiece模块 - 文件服务配置
1702
+ *
1703
+ * 为ShowMasterpiece模块提供特定的文件服务配置和帮助函数
1704
+ */
1705
+ /**
1706
+ * 获取ShowMasterpiece模块的文件服务配置
1707
+ */
1708
+ declare function getShowMasterpieceFileConfig(): Promise<FileServiceConfigManager>;
1709
+ /**
1710
+ * 上传ShowMasterpiece作品图片
1711
+ */
1712
+ declare function uploadArtworkImage(file: File, collectionId?: number): Promise<{
1713
+ fileId: string;
1714
+ accessUrl: string;
1715
+ }>;
1716
+ /**
1717
+ * 获取作品图片访问URL
1718
+ */
1719
+ declare function getArtworkImageUrl(fileId: string): Promise<string>;
1720
+ /**
1721
+ * 检查是否应该使用通用文件服务
1722
+ *
1723
+ * 策略:
1724
+ * 1. 如果已经配置了OSS,新上传默认使用文件服务
1725
+ * 2. 如果只有本地存储,可以选择使用文件服务进行统一管理
1726
+ * 3. 兼容旧的Base64存储方式
1727
+ */
1728
+ declare function shouldUseUniversalFileService(): Promise<boolean>;
1729
+ /**
1730
+ * 获取存储模式显示名称
1731
+ */
1732
+ declare function getStorageModeDisplayName(): Promise<string>;
1733
+ /**
1734
+ * 清除配置缓存
1735
+ *
1736
+ * 当配置更新后调用此函数,强制重新读取配置
1737
+ */
1738
+ declare function clearConfigCache(): void;
1739
+ /**
1740
+ * 强制刷新配置
1741
+ *
1742
+ * 清除缓存并重新获取配置
1743
+ */
1744
+ declare function refreshFileServiceConfig(): Promise<FileServiceConfigManager>;
1745
+
1746
+ /**
1747
+ * ShowMasterpiece 模块 - 导出配置
1748
+ *
1749
+ * 定义预订信息的导出字段配置
1750
+ */
1751
+
1752
+ /**
1753
+ * 预订信息导出字段定义
1754
+ */
1755
+ declare const BOOKING_EXPORT_FIELDS: ExportField[];
1756
+ /**
1757
+ * 默认导出配置
1758
+ */
1759
+ declare const DEFAULT_BOOKING_EXPORT_CONFIG: {
1760
+ id: string;
1761
+ name: string;
1762
+ description: string;
1763
+ format: "excel";
1764
+ fields: ExportField[];
1765
+ grouping: {
1766
+ enabled: boolean;
1767
+ fields: {
1768
+ key: string;
1769
+ label: string;
1770
+ mode: "merge";
1771
+ valueProcessing: "first";
1772
+ showGroupHeader: boolean;
1773
+ mergeCells: boolean;
1774
+ }[];
1775
+ preserveOrder: boolean;
1776
+ nullValueHandling: "separate";
1777
+ };
1778
+ fileNameTemplate: string;
1779
+ includeHeader: boolean;
1780
+ delimiter: string;
1781
+ encoding: string;
1782
+ addBOM: boolean;
1783
+ maxRows: undefined;
1784
+ createdAt: Date;
1785
+ updatedAt: Date;
1786
+ moduleId: string;
1787
+ businessId: string;
1788
+ };
1789
+
1790
+ /**
1791
+ * ShowMasterpiece 模块 - 预订管理面板组件
1792
+ *
1793
+ * 管理员查看所有用户预订信息的面板组件
1794
+ *
1795
+ * @fileoverview 预订管理面板组件
1796
+ */
1797
+
1798
+ /**
1799
+ * 预订管理面板组件属性
1800
+ */
1801
+ interface BookingAdminPanelProps {
1802
+ /** 预订数据列表 */
1803
+ bookings: BookingAdminData[];
1804
+ /** 统计信息 */
1805
+ stats: BookingAdminStats;
1806
+ /** 加载状态 */
1807
+ loading: boolean;
1808
+ /** 错误信息 */
1809
+ error?: string;
1810
+ /** 搜索参数 */
1811
+ searchParams: BookingAdminQueryParams;
1812
+ /** 刷新数据回调 */
1813
+ onRefresh: () => void;
1814
+ /** 搜索预订数据回调 */
1815
+ onSearch: (params: BookingAdminQueryParams) => Promise<void>;
1816
+ /** 清除搜索条件回调 */
1817
+ onClearSearch: () => void;
1818
+ /** 更新预订状态回调 */
1819
+ onUpdateStatus: (id: number, status: BookingStatus, adminNotes?: string) => Promise<void>;
1820
+ /** 删除预订回调 */
1821
+ onDeleteBooking: (id: number) => Promise<void>;
1822
+ /** 导出预订数据回调 */
1823
+ onExportBookings: (format?: 'csv' | 'excel') => Promise<void>;
1824
+ }
1825
+ /**
1826
+ * 预订管理面板组件
1827
+ *
1828
+ * @param props 组件属性
1829
+ * @returns React组件
1830
+ */
1831
+ declare const BookingAdminPanel: React__default.FC<BookingAdminPanelProps>;
1832
+
1833
+ /**
1834
+ * ShowMasterpiece 模块 - 预订弹窗组件
1835
+ *
1836
+ * 使用现有的Modal组件包装预订页面,提供弹窗形式的预订功能
1837
+ *
1838
+ * @fileoverview 预订弹窗组件
1839
+ */
1840
+
1841
+ /**
1842
+ * 预订弹窗组件属性
1843
+ */
1844
+ interface BookingModalProps {
1845
+ /** 是否显示弹窗 */
1846
+ isOpen: boolean;
1847
+ /** 关闭弹窗回调 */
1848
+ onClose: () => void;
1849
+ /** 弹窗标题 */
1850
+ title?: string;
1851
+ /** 弹窗宽度 */
1852
+ width?: number | string;
1853
+ /** 弹窗高度 */
1854
+ height?: number | string;
1855
+ }
1856
+ /**
1857
+ * 预订弹窗组件
1858
+ *
1859
+ * @param props 组件属性
1860
+ * @returns React组件
1861
+ */
1862
+ declare const BookingModal: React__default.FC<BookingModalProps>;
1863
+
1864
+ /**
1865
+ * ShowMasterpiece 模块 - 预订页面组件
1866
+ *
1867
+ * 完整的预订页面,包含:
1868
+ * - 画集列表展示和选择
1869
+ * - 预订表单(QQ号、数量、备注)
1870
+ * - 提交和状态管理
1871
+ *
1872
+ * @fileoverview 预订页面组件
1873
+ */
1874
+
1875
+ /**
1876
+ * 预订页面组件属性
1877
+ */
1878
+ interface BookingPageProps {
1879
+ /** 关闭回调 */
1880
+ onClose?: () => void;
1881
+ }
1882
+ /**
1883
+ * 预订页面组件
1884
+ *
1885
+ * @param props 组件属性
1886
+ * @returns React组件
1887
+ */
1888
+ declare const BookingPage: React__default.FC<BookingPageProps>;
1889
+
1890
+ /**
1891
+ * ShowMasterpiece 模块 - 用户预订历史记录页面组件
1892
+ *
1893
+ * 用户查看自己的预订历史记录
1894
+ *
1895
+ * @fileoverview 用户预订历史记录页面组件
1896
+ */
1897
+
1898
+ /**
1899
+ * 用户预订历史记录页面组件属性
1900
+ */
1901
+ interface CartHistoryPageProps {
1902
+ /** 用户QQ号 */
1903
+ qqNumber: string;
1904
+ /** 用户手机号 */
1905
+ phoneNumber: string;
1906
+ }
1907
+ /**
1908
+ * 用户预订历史记录页面组件
1909
+ *
1910
+ * @param props 组件属性
1911
+ * @returns React组件
1912
+ */
1913
+ declare const CartHistoryPage: React__default.FC<CartHistoryPageProps>;
1914
+
1915
+ /**
1916
+ * ShowMasterpiece 模块 - 限时弹窗组件
1917
+ *
1918
+ * 基于配置显示限时提醒弹窗
1919
+ *
1920
+ * @fileoverview 限时弹窗组件
1921
+ */
1922
+
1923
+ /**
1924
+ * 限时弹窗组件属性
1925
+ */
1926
+ interface DeadlinePopupProps {
1927
+ /** 弹窗配置 */
1928
+ config: PopupConfig;
1929
+ /** 是否显示弹窗 */
1930
+ isOpen: boolean;
1931
+ /** 关闭回调 */
1932
+ onClose: () => void;
1933
+ /** 确认回调 */
1934
+ onConfirm?: () => void;
1935
+ /** 取消回调 */
1936
+ onCancel?: () => void;
1937
+ }
1938
+ /**
1939
+ * 限时弹窗组件
1940
+ */
1941
+ declare const DeadlinePopup: React__default.FC<DeadlinePopupProps>;
1942
+ /**
1943
+ * 多弹窗管理组件
1944
+ */
1945
+ interface DeadlinePopupManagerProps {
1946
+ /** 弹窗配置列表 */
1947
+ configs: PopupConfig[];
1948
+ /** 关闭回调 */
1949
+ onClose: (configId: string) => void;
1950
+ /** 确认回调 */
1951
+ onConfirm?: (configId: string) => void;
1952
+ /** 取消回调 */
1953
+ onCancel?: (configId: string) => void;
1954
+ }
1955
+ declare const DeadlinePopupManager: React__default.FC<DeadlinePopupManagerProps>;
1956
+
1957
+ /**
1958
+ * ShowMasterpiece 模块 - 弹窗配置管理组件
1959
+ *
1960
+ * 提供弹窗配置的创建、编辑、删除和启用/禁用功能
1961
+ *
1962
+ * @fileoverview 弹窗配置管理组件
1963
+ */
1964
+
1965
+ /**
1966
+ * 弹窗配置管理组件属性
1967
+ */
1968
+ interface PopupConfigManagementProps {
1969
+ }
1970
+ /**
1971
+ * 弹窗配置管理组件
1972
+ */
1973
+ declare const PopupConfigManagement: React__default.FC<PopupConfigManagementProps>;
1974
+
1975
+ /**
1976
+ * ShowMasterpiece模块 - 系统配置管理组件
1977
+ *
1978
+ * 从全局configManager复制并适配,专门为showmasterpiece模块使用
1979
+ * 用于模块独立化准备
1980
+ */
1981
+
1982
+ declare const SystemConfigManager: React__default.FC;
1983
+
1984
+ /**
1985
+ * ShowMasterpiece模块 - 新增配置项对话框组件
1986
+ *
1987
+ * 从全局configManager复制并简化适配
1988
+ */
1989
+
1990
+ interface ConfigItemFormData {
1991
+ key: string;
1992
+ displayName: string;
1993
+ description: string;
1994
+ value: string;
1995
+ defaultValue: string;
1996
+ type: 'string' | 'number' | 'boolean' | 'password';
1997
+ isRequired: boolean;
1998
+ isSensitive: boolean;
1999
+ validation: string;
2000
+ sortOrder: number;
2001
+ }
2002
+ interface AddConfigItemDialogProps {
2003
+ isOpen: boolean;
2004
+ onSave: (data: ConfigItemFormData) => Promise<void>;
2005
+ onCancel: () => void;
2006
+ }
2007
+ declare const AddConfigItemDialog: React__default.FC<AddConfigItemDialogProps>;
2008
+
2009
+ /**
2010
+ * ShowMasterpiece模块 - 删除确认对话框组件
2011
+ *
2012
+ * 从全局configManager复制并适配
2013
+ */
2014
+
2015
+ interface ConfigItem {
2016
+ id: string;
2017
+ key: string;
2018
+ displayName: string;
2019
+ description: string;
2020
+ value: string;
2021
+ defaultValue: string;
2022
+ type: 'string' | 'number' | 'boolean' | 'password';
2023
+ isRequired: boolean;
2024
+ isSensitive: boolean;
2025
+ validation: string | null;
2026
+ sortOrder: number;
2027
+ isActive: boolean;
2028
+ createdAt: string;
2029
+ updatedAt: string;
2030
+ }
2031
+ interface DeleteConfirmDialogProps {
2032
+ isOpen: boolean;
2033
+ item: ConfigItem | null;
2034
+ onConfirm: () => void;
2035
+ onCancel: () => void;
2036
+ loading?: boolean;
2037
+ }
2038
+ declare const DeleteConfirmDialog: React__default.FC<DeleteConfirmDialogProps>;
2039
+
2040
+ /**
2041
+ * ShowMasterpiece 主页面组件 - Tailwind CSS 版本
2042
+ *
2043
+ * 这是ShowMasterpiece模块的主要页面组件,提供完整的画集浏览体验。
2044
+ * 支持两种视图模式:画集列表视图和作品详情视图。
2045
+ *
2046
+ * 主要功能:
2047
+ * - 画集列表展示和搜索
2048
+ * - 画集详情浏览和作品查看
2049
+ * - 用户权限控制和认证
2050
+ * - 响应式设计和优化的用户体验
2051
+ * - 配置管理入口(需要管理员权限)
2052
+ *
2053
+ * 技术特点:
2054
+ * - 使用自定义Hook进行状态管理
2055
+ * - 集成认证系统,支持权限控制
2056
+ * - 动态配置加载,支持个性化设置
2057
+ * - 性能优化:使用useMemo缓存计算结果
2058
+ * - 使用 Tailwind CSS 进行样式管理
2059
+ *
2060
+ * @component
2061
+ */
2062
+
2063
+ interface ShowMasterPiecesPageProps {
2064
+ /** Next.js 页面参数 */
2065
+ params?: Record<string, string>;
2066
+ /** Next.js 搜索参数 */
2067
+ searchParams?: Record<string, string | string[] | undefined>;
2068
+ }
2069
+ /**
2070
+ * ShowMasterpiece 主组件
2071
+ *
2072
+ * 提供认证上下文包装器,确保组件能够访问用户认证状态。
2073
+ * 这是模块的对外接口组件。
2074
+ *
2075
+ * @returns React函数组件
2076
+ */
2077
+ declare function ShowMasterPieces(props?: ShowMasterPiecesPageProps): React__default.JSX.Element;
2078
+
2079
+ declare function ConfigPage(): React__default.JSX.Element;
2080
+
2081
+ /**
2082
+ * ShowMasterpiece 模块 - 用户购物车历史记录页面
2083
+ *
2084
+ * 用户输入QQ号和手机号查看自己的购物车历史记录
2085
+ *
2086
+ * @fileoverview 用户历史记录页面
2087
+ */
2088
+
2089
+ /**
2090
+ * 用户历史记录页面组件
2091
+ *
2092
+ * @returns React组件
2093
+ */
2094
+ declare function UserHistoryPage(): React__default.JSX.Element;
2095
+
2096
+ /**
2097
+ * useMasterpieces Hook 主体函数
2098
+ *
2099
+ * 提供画集数据管理和浏览状态管理的完整解决方案。
2100
+ * 包含状态管理、数据获取、缓存机制和用户交互功能。
2101
+ *
2102
+ */
2103
+ declare const useMasterpieces: () => {
2104
+ /** 所有画集数据 */
2105
+ collections: ArtCollection[];
2106
+ /** 当前选中的画集 */
2107
+ selectedCollection: ArtCollection | null;
2108
+ /** 当前页面索引 */
2109
+ currentPage: number;
2110
+ /** 加载状态 */
2111
+ loading: boolean;
2112
+ /** 错误信息 */
2113
+ error: string | null;
2114
+ /** 获取当前作品的方法 */
2115
+ getCurrentArtwork: () => ArtworkPage | null;
2116
+ /** 是否可以下一页 */
2117
+ canGoNext: boolean;
2118
+ /** 是否可以上一页 */
2119
+ canGoPrev: boolean;
2120
+ /** 选择画集 */
2121
+ selectCollection: (collection: ArtCollection) => void;
2122
+ /** 下一页 */
2123
+ nextPage: () => void;
2124
+ /** 上一页 */
2125
+ prevPage: () => void;
2126
+ /** 跳转到指定页 */
2127
+ goToPage: (pageIndex: number) => void;
2128
+ /** 返回画集列表 */
2129
+ backToGallery: () => void;
2130
+ /** 搜索画集 */
2131
+ searchCollections: (query: string) => Promise<void>;
2132
+ /** 加载画集数据 */
2133
+ loadCollections: (forceRefresh?: boolean) => Promise<void>;
2134
+ };
2135
+
2136
+ declare const useMasterpiecesConfig: () => {
2137
+ config: MasterpiecesConfig | null;
2138
+ collections: ArtCollection[];
2139
+ categories: string[];
2140
+ tags: string[];
2141
+ loading: boolean;
2142
+ error: string | null;
2143
+ refreshCounter: number;
2144
+ updateConfig: (configData: Partial<MasterpiecesConfig>) => Promise<void>;
2145
+ resetConfig: () => Promise<void>;
2146
+ createCollection: (collectionData: CollectionFormData) => Promise<void>;
2147
+ updateCollection: (id: number, collectionData: CollectionFormData) => Promise<void>;
2148
+ deleteCollection: (id: number) => Promise<void>;
2149
+ addArtworkToCollection: (collectionId: number, artworkData: ArtworkFormData) => Promise<void>;
2150
+ updateArtwork: (collectionId: number, artworkId: number, artworkData: ArtworkFormData) => Promise<void>;
2151
+ deleteArtwork: (collectionId: number, artworkId: number) => Promise<void>;
2152
+ moveArtworkUp: (collectionId: number, artworkId: number) => Promise<void>;
2153
+ moveArtworkDown: (collectionId: number, artworkId: number) => Promise<void>;
2154
+ updateArtworkOrder: (collectionId: number, artworkOrders: {
2155
+ id: number;
2156
+ pageOrder: number;
2157
+ }[]) => Promise<void>;
2158
+ moveCollectionUp: (collectionId: number) => Promise<void>;
2159
+ moveCollectionDown: (collectionId: number) => Promise<void>;
2160
+ updateCollectionOrder: (collectionOrders: {
2161
+ id: number;
2162
+ displayOrder: number;
2163
+ }[]) => Promise<void>;
2164
+ refreshData: () => Promise<{
2165
+ config: MasterpiecesConfig;
2166
+ collections: any;
2167
+ categories: string[];
2168
+ tags: string[];
2169
+ }>;
2170
+ };
2171
+
2172
+ /**
2173
+ * ShowMasterpiece 模块 - 购物车功能Hook
2174
+ *
2175
+ * 提供购物车功能相关的状态管理和业务逻辑,包括:
2176
+ * - 购物车状态管理
2177
+ * - 购物车操作(添加、更新、移除、清空)
2178
+ * - 批量预订处理
2179
+ * - 错误处理和加载状态
2180
+ *
2181
+ * @fileoverview 购物车功能Hook
2182
+ */
2183
+
2184
+ declare const cartUpdateEvents: EventTarget;
2185
+ declare const CART_UPDATE_EVENT = "cart-updated";
2186
+ declare const notifyCartUpdate: () => void;
2187
+ /**
2188
+ * 购物车Hook
2189
+ *
2190
+ * 管理购物车的状态和业务逻辑
2191
+ *
2192
+ * @param userId 用户ID
2193
+ * @returns 购物车状态和操作方法
2194
+ */
2195
+ declare function useCart(userId: number): {
2196
+ cart: Cart;
2197
+ loading: boolean;
2198
+ error: string | undefined;
2199
+ isCartOpen: boolean;
2200
+ loadCart: () => Promise<void>;
2201
+ addItemToCart: (request: AddToCartRequest & {
2202
+ userId: number;
2203
+ collection?: any;
2204
+ }) => Promise<void>;
2205
+ updateItemQuantity: (collectionId: number, quantity: number) => Promise<void>;
2206
+ removeItemFromCart: (collectionId: number) => Promise<void>;
2207
+ clearCartItems: () => Promise<void>;
2208
+ checkoutCart: (qqNumber: string, phoneNumber: string, notes?: string, pickupMethod?: string) => Promise<BatchBookingResponse>;
2209
+ openCart: () => void;
2210
+ closeCart: () => void;
2211
+ clearError: () => void;
2212
+ };
2213
+
2214
+ /**
2215
+ * ShowMasterpiece 模块 - 预订功能Hook
2216
+ *
2217
+ * 提供预订功能相关的状态管理和业务逻辑,包括:
2218
+ * - 预订表单状态管理
2219
+ * - 画集列表加载
2220
+ * - 预订提交处理
2221
+ * - 错误处理和加载状态
2222
+ *
2223
+ * @fileoverview 预订功能Hook
2224
+ */
2225
+
2226
+ /**
2227
+ * 预订页面Hook属性
2228
+ */
2229
+ interface UseBookingProps {
2230
+ }
2231
+ /**
2232
+ * 预订页面Hook
2233
+ *
2234
+ * 管理预订页面的状态和业务逻辑
2235
+ *
2236
+ * @param props Hook属性
2237
+ * @returns 预订页面状态和操作方法
2238
+ */
2239
+ declare function useBooking(_props?: UseBookingProps): {
2240
+ collections: CollectionSummary[];
2241
+ loading: boolean;
2242
+ error: string | undefined;
2243
+ submitting: boolean;
2244
+ submitted: boolean;
2245
+ loadCollections: () => Promise<void>;
2246
+ submitBooking: (formData: BookingFormData) => Promise<void>;
2247
+ resetSubmission: () => void;
2248
+ clearError: () => void;
2249
+ };
2250
+ /**
2251
+ * 预订表单Hook
2252
+ *
2253
+ * 管理预订表单的状态和验证
2254
+ *
2255
+ * @returns 表单状态和操作方法
2256
+ */
2257
+ declare function useBookingForm(): {
2258
+ formData: BookingFormData;
2259
+ errors: Partial<Record<keyof BookingFormData, string>>;
2260
+ updateField: (field: keyof BookingFormData, value: any) => void;
2261
+ validateForm: () => boolean;
2262
+ resetForm: () => void;
2263
+ };
2264
+
2265
+ /**
2266
+ * ShowMasterpiece 模块 - 预订管理Hook
2267
+ *
2268
+ * 提供预订管理功能的状态管理和数据获取逻辑,包括:
2269
+ * - 获取所有预订数据
2270
+ * - 预订统计信息
2271
+ * - 状态更新
2272
+ * - 加载和错误状态管理
2273
+ * - 用户搜索功能
2274
+ *
2275
+ * @fileoverview 预订管理Hook
2276
+ */
2277
+
2278
+ /**
2279
+ * 预订管理Hook返回值类型
2280
+ */
2281
+ interface UseBookingAdminReturn {
2282
+ /** 预订数据列表 */
2283
+ bookings: BookingAdminData[];
2284
+ /** 统计信息 */
2285
+ stats: BookingAdminStats;
2286
+ /** 加载状态 */
2287
+ loading: boolean;
2288
+ /** 错误信息 */
2289
+ error?: string;
2290
+ /** 搜索参数 */
2291
+ searchParams: BookingAdminQueryParams;
2292
+ /** 刷新数据 */
2293
+ refreshData: () => Promise<void>;
2294
+ /** 搜索预订数据 */
2295
+ searchBookings: (params: BookingAdminQueryParams) => Promise<void>;
2296
+ /** 清除搜索条件 */
2297
+ clearSearch: () => void;
2298
+ /** 更新预订状态 */
2299
+ updateBookingStatus: (id: number, status: BookingStatus, adminNotes?: string) => Promise<void>;
2300
+ /** 删除预订 */
2301
+ deleteBooking: (id: number) => Promise<void>;
2302
+ /** 导出预订数据 */
2303
+ exportBookings: (format?: 'csv' | 'excel') => Promise<void>;
2304
+ /** 清除错误 */
2305
+ clearError: () => void;
2306
+ }
2307
+ /**
2308
+ * 预订管理Hook
2309
+ *
2310
+ * 提供预订管理功能的状态管理和数据获取逻辑
2311
+ *
2312
+ * @returns 预订管理Hook返回值
2313
+ */
2314
+ declare const useBookingAdmin: () => UseBookingAdminReturn;
2315
+
2316
+ /**
2317
+ * ShowMasterpiece 模块 - 限时弹窗Hook
2318
+ *
2319
+ * 管理限时弹窗的显示逻辑
2320
+ *
2321
+ * @fileoverview 限时弹窗Hook
2322
+ */
2323
+
2324
+ /**
2325
+ * 限时弹窗Hook
2326
+ */
2327
+ declare function useDeadlinePopup(businessModule?: string, businessScene?: string): {
2328
+ checkPopups: (currentTime?: Date) => Promise<{
2329
+ id: string;
2330
+ description: string | null;
2331
+ createdAt: Date | null;
2332
+ updatedAt: Date | null;
2333
+ type: string;
2334
+ enabled: boolean | null;
2335
+ name: string;
2336
+ sortOrder: string | null;
2337
+ triggerConfig: {
2338
+ deadlineTime?: string;
2339
+ advanceMinutes?: number;
2340
+ triggerType: "after_deadline" | "before_deadline" | "always";
2341
+ };
2342
+ contentConfig: {
2343
+ title: string;
2344
+ message: string;
2345
+ confirmText?: string;
2346
+ cancelText?: string;
2347
+ showCancel?: boolean;
2348
+ theme?: "warning" | "info" | "error" | "success";
2349
+ };
2350
+ displayConfig: {
2351
+ width?: number;
2352
+ height?: number | string;
2353
+ maskClosable?: boolean;
2354
+ autoCloseSeconds?: number;
2355
+ } | null;
2356
+ blockProcess: boolean | null;
2357
+ businessModule: string;
2358
+ businessScene: string;
2359
+ }[]>;
2360
+ closePopup: (configId: string) => void;
2361
+ confirmPopup: (configId: string) => void;
2362
+ cancelPopup: (configId: string) => void;
2363
+ temporaryClosePopup: (configId: string) => void;
2364
+ resetDismissedPopups: () => void;
2365
+ triggerCheck: (currentTime?: Date) => Promise<{
2366
+ id: string;
2367
+ description: string | null;
2368
+ createdAt: Date | null;
2369
+ updatedAt: Date | null;
2370
+ type: string;
2371
+ enabled: boolean | null;
2372
+ name: string;
2373
+ sortOrder: string | null;
2374
+ triggerConfig: {
2375
+ deadlineTime?: string;
2376
+ advanceMinutes?: number;
2377
+ triggerType: "after_deadline" | "before_deadline" | "always";
2378
+ };
2379
+ contentConfig: {
2380
+ title: string;
2381
+ message: string;
2382
+ confirmText?: string;
2383
+ cancelText?: string;
2384
+ showCancel?: boolean;
2385
+ theme?: "warning" | "info" | "error" | "success";
2386
+ };
2387
+ displayConfig: {
2388
+ width?: number;
2389
+ height?: number | string;
2390
+ maskClosable?: boolean;
2391
+ autoCloseSeconds?: number;
2392
+ } | null;
2393
+ blockProcess: boolean | null;
2394
+ businessModule: string;
2395
+ businessScene: string;
2396
+ }[]>;
2397
+ /** 需要显示的弹窗配置 */
2398
+ configs: PopupConfig[];
2399
+ /** 是否正在加载 */
2400
+ loading: boolean;
2401
+ /** 错误信息 */
2402
+ error: string | null;
2403
+ /** 是否有弹窗显示 */
2404
+ hasPopup: boolean;
2405
+ };
2406
+
2407
+ /**
2408
+ * ShowMasterpiece 模块 - 购物车上下文Hook
2409
+ *
2410
+ * 提供购物车上下文状态的访问Hook,用于在组件中获取购物车相关的状态和操作。
2411
+ * 这个Hook必须在CartProvider包装的组件内使用。
2412
+ *
2413
+ * 主要功能:
2414
+ * - 获取购物车数据
2415
+ * - 获取加载状态
2416
+ * - 获取错误信息
2417
+ * - 提供刷新购物车的方法
2418
+ *
2419
+ * @fileoverview 购物车上下文Hook
2420
+ */
2421
+
2422
+ /**
2423
+ * 使用购物车上下文Hook
2424
+ *
2425
+ * 这个Hook用于在组件中访问购物车上下文状态。
2426
+ * 必须在CartProvider包装的组件内使用,否则会抛出错误。
2427
+ *
2428
+ * @returns 购物车上下文状态,包含购物车数据、加载状态、错误信息和刷新方法
2429
+ * @throws {Error} 当在CartProvider外部使用时抛出错误
2430
+ *
2431
+ * @example
2432
+ * ```tsx
2433
+ * function CartButton() {
2434
+ * const { cart, loading, error, refreshCart } = useCartContext();
2435
+ *
2436
+ * if (loading) return <div>加载中...</div>;
2437
+ * if (error) return <div>错误: {error}</div>;
2438
+ *
2439
+ * return (
2440
+ * <button onClick={refreshCart}>
2441
+ * 购物车 ({cart.totalQuantity})
2442
+ * </button>
2443
+ * );
2444
+ * }
2445
+ * ```
2446
+ */
2447
+ declare const useCartContext: () => CartContextState;
2448
+
2449
+ /**
2450
+ * ShowMasterpiece 模块 - 购物车上下文
2451
+ *
2452
+ * 提供购物车状态的全局管理,包括:
2453
+ * - 购物车数据状态
2454
+ * - 购物车数据刷新
2455
+ * - 购物车更新通知
2456
+ *
2457
+ * @fileoverview 购物车上下文
2458
+ */
2459
+
2460
+ /**
2461
+ * 购物车上下文提供者属性
2462
+ */
2463
+ interface CartProviderProps {
2464
+ children: ReactNode;
2465
+ userId: number;
2466
+ }
2467
+ /**
2468
+ * 购物车上下文提供者组件
2469
+ *
2470
+ * @param props 组件属性
2471
+ * @returns React组件
2472
+ */
2473
+ declare const CartProvider: React__default.FC<CartProviderProps>;
2474
+
2475
+ /**
2476
+ * ShowMasterpiece 模块 - 主入口文件
2477
+ *
2478
+ * 这是一个完整的美术作品展示模块,提供了从前端组件到后端API的完整解决方案。
2479
+ * 主要功能包括:
2480
+ * - 美术作品画集的展示和浏览
2481
+ * - 画集和作品的管理配置界面
2482
+ * - 拖拽排序功能
2483
+ * - 缩略图预览
2484
+ * - 数据持久化存储
2485
+ *
2486
+ * 架构特点:
2487
+ * - 前后端分离,支持服务端渲染
2488
+ * - 模块化设计,便于维护和扩展
2489
+ * - TypeScript严格类型检查
2490
+ * - CSS Modules样式隔离
2491
+ *
2492
+ * @version 1.0.0
2493
+ * @author Profile-v1 Team
2494
+ */
2495
+ /**
2496
+ * ShowMasterpiece 模块所有组件的统一导出
2497
+ *
2498
+ * 包含以下组件类别:
2499
+ * - 展示组件:CollectionCard, ArtworkViewer, ThumbnailSidebar
2500
+ * - 管理组件:CollectionOrderManager, ArtworkOrderManager
2501
+ * - 购物车组件:CartModal, CartPage, CartButton, AddToCartButton
2502
+ * - 预订组件:BookingModal, BookingPage, CollectionList, BookingAdminPanel
2503
+ * - 配置组件:SystemConfigManager, PopupConfigManagement
2504
+ * - 对话框组件:AddConfigItemDialog, DeleteConfirmDialog
2505
+ * - 弹窗组件:DeadlinePopup, DeadlinePopupManager
2506
+ * - 历史组件:CartHistoryPage
2507
+ * - 上传组件:UniversalImageUpload
2508
+ *
2509
+ * 使用方式:
2510
+ * ```typescript
2511
+ * import { CollectionCard, ArtworkViewer } from 'sa2kitsa2kit/showmasterpiece';
2512
+ * ```
2513
+ */
2514
+
2515
+ /**
2516
+ * 注意:预订管理相关的TypeScript类型定义现已通过 services 统一导出
2517
+ * 包括:BookingAdminData, BookingAdminStats, BookingAdminResponse, BookingAdminQueryParams
2518
+ */
2519
+ /** 模块版本号 */
2520
+ declare const SHOWMASTERPIECE_MODULE_VERSION = "1.0.0";
2521
+ /** 模块名称标识 */
2522
+ declare const SHOWMASTERPIECE_MODULE_NAME = "@profilesa2kitsa2kit/showmasterpiece";
2523
+
2524
+ export { AddConfigItemDialog, AddToCartButton, type AddToCartRequest, type ArtCollection, type ArtworkFormData, ArtworkOrderManagerV2 as ArtworkOrderManager, ArtworkOrderManagerV2, type ArtworkPage, ArtworkViewer, BOOKING_EXPORT_FIELDS, type BatchBookingRequest, type BatchBookingResponse, type BookingAdminData, BookingAdminPanel, type BookingAdminQueryParams, type BookingAdminResponse, BookingAdminService, type BookingAdminStats, BookingModal, BookingPage, BookingService, CART_UPDATE_EVENT, type Cart, type CartAction, CartButton, CartHistoryPage, CartHistoryService, type CartItem, CartModal, CartPage, CartProvider, CartService, type CartState, type ClearCartRequest, CollectionCard, CollectionCategory, type CollectionCategoryType, type CollectionFormData, CollectionList, CollectionOrderManagerV2 as CollectionOrderManager, CollectionOrderManagerV2, DEFAULT_BOOKING_EXPORT_CONFIG, DeadlinePopup, DeadlinePopupManager, DeleteConfirmDialog, type MasterpiecesConfig, MasterpiecesService, MobileAlbumViewer, PopupConfigManagement, type RemoveFromCartRequest, SHOWMASTERPIECE_MODULE_NAME, SHOWMASTERPIECE_MODULE_VERSION, ConfigPage as ShowMasterPiecesConfigPage, UserHistoryPage as ShowMasterPiecesHistoryPage, ShowMasterPieces as ShowMasterPiecesPage, SystemConfigManager, ThumbnailSidebar, UniversalImageUpload, type UpdateCartItemRequest, addArtworkToCollection, addToCart, batchBooking, cartUpdateEvents, clearCart, clearConfigCache, clearUserHistory, createBooking, createCategory, createCollection, deleteArtwork, deleteBooking$1 as deleteBooking, deleteBooking as deleteBookingAdmin, deleteCollection, deleteHistoryRecord, exportBookings, forceRefreshAllBookings, forceRefreshBookingStats, getAllBookings, getAllCollections, getAllHistory, getArtworkImageUrl, getArtworksByCollection, getAvailableCategories, getBookableCollections, getBooking, getBookingStats, getBookings, getCart, getCartHistory, getCategories, getCollectionsOverview, getConfig, getMasterpieces, getShowMasterpieceFileConfig, getStatistics, getStorageModeDisplayName, getTags, isValidCategory, moveArtwork, moveArtworkDown, moveArtworkUp, moveCollection, moveCollectionDown, moveCollectionUp, notifyCartUpdate, refreshFileServiceConfig, removeFromCart, resetConfig, saveCartHistory, shouldUseUniversalFileService, updateArtwork, updateArtworkOrder, updateBooking, updateBookingStatus$1 as updateBookingAdminStatus, updateBookingStatus as updateCartHistoryBookingStatus, updateCartItem, updateCollection, updateCollectionOrder, updateConfig, uploadArtworkImage, useBooking, useBookingAdmin, useBookingForm, useCart, useCartContext, useDeadlinePopup, useMasterpieces, useMasterpiecesConfig };