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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/showmasterpiece/ui/miniapp/components/PageHeader.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CategoryTabs.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CollectionCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/BookingSteps.tsx","../../../../src/showmasterpiece/ui/miniapp/components/FormField.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CartItemCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/HistoryRecordCard.tsx"],"names":["React","View","Text","Button","ScrollView","Image","getCategoryLabel","formatPrice","Input","Textarea"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\nimport { Button, Text, View } from '@tarojs/components';\n\ntype HeaderAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype HeaderCta = {\n label: string;\n onClick: () => void;\n};\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n actions?: HeaderAction[];\n cta?: HeaderCta;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({ title, subtitle, actions, cta }) => {\n return (\n <View className=\"mx-4 mt-6 rounded-3xl bg-white px-5 py-5 shadow-xl\">\n <View className=\"flex items-start justify-between\">\n <View>\n <Text className=\"text-xl font-semibold\">{title}</Text>\n {subtitle && <Text className=\"mt-2 block text-sm text-slate-500\">{subtitle}</Text>}\n </View>\n {actions && actions.length > 0 && (\n <View className=\"flex flex-col items-end gap-2\">\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n {cta && (\n <Button\n className=\"mt-4 h-10 w-32 rounded-full bg-slate-900 text-sm font-semibold text-white\"\n onClick={cta.onClick}\n >\n {cta.label}\n </Button>\n )}\n </View>\n );\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport { ScrollView, Text, View } from '@tarojs/components';\n\nexport type CategoryTabItem<T extends string = string> = {\n value: T;\n label: string;\n};\n\ninterface CategoryTabsProps<T extends string = string> {\n items: CategoryTabItem<T>[];\n activeValue: T;\n onChange: (value: T) => void;\n}\n\nfunction CategoryTabs<T extends string = string>({\n items,\n activeValue,\n onChange\n}: CategoryTabsProps<T>) {\n return (\n <ScrollView scrollX className=\"mt-3\" showScrollbar={false}>\n <View className=\"flex gap-2 pb-2\">\n {items.map(item => (\n <View\n key={item.value}\n className={`rounded-full px-4 py-2 text-xs ${\n activeValue === item.value\n ? 'bg-slate-900 text-white'\n : 'bg-white text-slate-600 shadow-md'\n }`}\n onClick={() => onChange(item.value)}\n >\n <Text>{item.label}</Text>\n </View>\n ))}\n </View>\n </ScrollView>\n );\n}\n\nexport default CategoryTabs;\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { ArtCollection, CollectionCategoryType } from '../../../types';\nimport { formatPrice } from '../../../logic/shared/format';\nimport { getCategoryLabel } from '../../../logic/shared/category';\n\ntype ActionButton = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype CollectionLike = Pick<\n ArtCollection,\n 'id' | 'title' | 'number' | 'coverImage' | 'price'\n> & {\n description?: string;\n category?: CollectionCategoryType;\n};\n\ninterface CollectionCardProps {\n collection: CollectionLike;\n actions?: ActionButton[];\n showCategory?: boolean;\n showDescription?: boolean;\n variant?: 'default' | 'compact';\n}\n\nconst CollectionCard: React.FC<CollectionCardProps> = ({\n collection,\n actions,\n showCategory = true,\n showDescription = true,\n variant = 'default'\n}) => {\n const isCompact = variant === 'compact';\n return (\n <View className=\"overflow-hidden rounded-3xl bg-white shadow-xl\">\n {collection.coverImage ? (\n <Image\n src={collection.coverImage}\n mode=\"aspectFill\"\n className={isCompact ? 'h-24 w-24 rounded-2xl' : 'h-44 w-full'}\n />\n ) : (\n <View\n className={\n isCompact\n ? 'flex h-24 w-24 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500'\n : 'flex h-44 items-center justify-center bg-slate-200 text-sm text-slate-500'\n }\n >\n 暂无图片\n </View>\n )}\n <View className={isCompact ? 'flex-1 px-3 py-1' : 'px-4 py-4'}>\n <View className=\"flex items-center justify-between gap-2\">\n <Text className={isCompact ? 'text-sm font-semibold' : 'text-base font-semibold'}>\n {collection.title}\n </Text>\n {showCategory && !isCompact && (\n <Text className=\"rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-600\">\n {getCategoryLabel(collection.category)}\n </Text>\n )}\n </View>\n {showDescription && collection.description && !isCompact && (\n <Text className=\"mt-2 block text-xs text-slate-500\">{collection.description}</Text>\n )}\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(collection.price)}\n </Text>\n {actions && actions.length > 0 && (\n <View className={isCompact ? 'mt-2 flex gap-2' : 'mt-4 flex gap-2'}>\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n};\n\nexport default CollectionCard;\n","import React from 'react';\nimport { Text, View } from '@tarojs/components';\n\ninterface BookingStepsProps {\n step: 'select' | 'form';\n}\n\nconst BookingSteps: React.FC<BookingStepsProps> = ({ step }) => {\n return (\n <View className=\"mx-4 mt-4 flex items-center gap-3\">\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'select' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>{step === 'select' ? '1' : '✓'}</Text>\n <Text>选择画集</Text>\n </View>\n <View className=\"h-px flex-1 bg-slate-200\" />\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'form' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>2</Text>\n <Text>填写信息</Text>\n </View>\n </View>\n );\n};\n\nexport default BookingSteps;\n","import React from 'react';\nimport { Input, Text, Textarea, View } from '@tarojs/components';\n\ninterface BaseFieldProps {\n label: string;\n value: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n type?: 'text' | 'number';\n}\n\ninterface FormInputProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\ninterface FormTextareaProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\nexport const FormInput: React.FC<FormInputProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n type = 'text',\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Input\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 h-10 w-full rounded-xl border px-3 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n type={type}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n\nexport const FormTextarea: React.FC<FormTextareaProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Textarea\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 min-h-24 w-full rounded-xl border px-3 py-2 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { CartItem } from '../../../types/cart';\nimport { formatPrice } from '../../../logic/shared/format';\n\ninterface CartItemCardProps {\n item: CartItem;\n onIncrease: () => void;\n onDecrease: () => void;\n onRemove: () => void;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({ item, onIncrease, onDecrease, onRemove }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {item.collection.coverImage ? (\n <Image\n src={item.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{item.collection.title}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{item.collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(item.collection.price)}\n </Text>\n <View className=\"mt-3 flex items-center gap-2\">\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onDecrease}\n >\n -\n </Button>\n <Text className=\"text-sm font-semibold\">{item.quantity}</Text>\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onIncrease}\n >\n +\n </Button>\n <Button\n className=\"ml-auto h-8 rounded-full border border-rose-200 bg-rose-50 px-3 text-xs text-rose-600\"\n onClick={onRemove}\n >\n 移除\n </Button>\n </View>\n </View>\n </View>\n );\n};\n\nexport default CartItemCard;\n","import React from 'react';\nimport { Image, Text, View } from '@tarojs/components';\nimport type { Booking } from '../../../types/booking';\nimport { formatPrice } from '../../../logic/shared/format';\n\nconst statusLabelMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\ninterface HistoryRecordCardProps {\n record: Booking;\n}\n\nconst HistoryRecordCard: React.FC<HistoryRecordCardProps> = ({ record }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {record.collection?.coverImage ? (\n <Image\n src={record.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{record.collection?.title || '画集'}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">数量:{record.quantity}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(record.collection?.price)}\n </Text>\n <View className=\"mt-2 flex items-center justify-between\">\n <Text className=\"text-xs text-slate-500\">\n 状态:{statusLabelMap[record.status] || record.status}\n </Text>\n <Text className=\"text-xs text-slate-400\">{record.createdAt?.slice(0, 10)}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default HistoryRecordCard;\n"]}
1
+ {"version":3,"sources":["../../../../src/showmasterpiece/ui/miniapp/components/PageHeader.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CategoryTabs.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CollectionCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/BookingSteps.tsx","../../../../src/showmasterpiece/ui/miniapp/components/FormField.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CartItemCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/HistoryRecordCard.tsx"],"names":["View","React","Text","Button","ScrollView","Image","getCategoryLabel","formatPrice","Input","Textarea"],"mappings":"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","file":"index.js","sourcesContent":["import React from 'react';\nimport { Button, Text, View } from '@tarojs/components';\n\ntype HeaderAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype HeaderCta = {\n label: string;\n onClick: () => void;\n};\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n actions?: HeaderAction[];\n cta?: HeaderCta;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({ title, subtitle, actions, cta }) => {\n return (\n <View className=\"bg-white/95 px-4 py-4 border-b border-prussian-blue-200/30\">\n <View className=\"flex items-start justify-between gap-3\">\n <View className=\"flex-1\">\n <Text className=\"text-lg font-bold text-rich-black\">{title}</Text>\n {subtitle && <Text className=\"mt-1 block text-xs text-prussian-blue-600\">{subtitle}</Text>}\n </View>\n {actions && actions.length > 0 && (\n <View className=\"flex items-center gap-2\">\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-prussian-blue-200 bg-white px-3 text-xs font-semibold text-prussian-blue-700'\n : 'h-8 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-3 text-xs font-semibold text-white shadow-lg'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n {cta && (\n <Button\n className=\"mt-3 h-9 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-4 text-xs font-semibold text-white shadow-lg\"\n onClick={cta.onClick}\n >\n {cta.label}\n </Button>\n )}\n </View>\n );\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport { ScrollView, Text, View } from '@tarojs/components';\n\nexport type CategoryTabItem<T extends string = string> = {\n value: T;\n label: string;\n count?: number;\n};\n\ninterface CategoryTabsProps<T extends string = string> {\n items: CategoryTabItem<T>[];\n activeValue: T;\n onChange: (value: T) => void;\n}\n\nfunction CategoryTabs<T extends string = string>({\n items,\n activeValue,\n onChange\n}: CategoryTabsProps<T>) {\n return (\n <ScrollView scrollX className=\"mt-4\" showScrollbar={false}>\n <View className=\"flex gap-2 rounded-2xl bg-moonstone-900/10 p-1\">\n {items.map(item => {\n const isActive = activeValue === item.value;\n return (\n <View\n key={item.value}\n className={`flex flex-col items-center justify-center rounded-xl px-4 py-2 text-xs font-semibold transition-all ${\n isActive\n ? 'bg-gradient-to-r from-moonstone to-cerulean text-white shadow-lg'\n : 'text-prussian-blue-700'\n }`}\n onClick={() => onChange(item.value)}\n >\n <Text>{item.label}</Text>\n {typeof item.count === 'number' && (\n <Text\n className={`mt-1 rounded-full px-2 py-0.5 text-[10px] ${\n isActive\n ? 'bg-white/20 text-white'\n : 'bg-moonstone-900/10 text-cerulean'\n }`}\n >\n {item.count}\n </Text>\n )}\n </View>\n );\n })}\n </View>\n </ScrollView>\n );\n}\n\nexport default CategoryTabs;\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { ArtCollection, CollectionCategoryType } from '../../../types';\nimport { CollectionCategory } from '../../../types';\nimport { formatPrice } from '../../../logic/shared/format';\nimport { getCategoryLabel } from '../../../logic/shared/category';\n\ntype ActionButton = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype CollectionLike = Pick<\n ArtCollection,\n 'id' | 'title' | 'number' | 'coverImage' | 'price'\n> & {\n description?: string;\n category?: CollectionCategoryType;\n pages?: ArtCollection['pages'];\n};\n\ninterface CollectionCardProps {\n collection: CollectionLike;\n actions?: ActionButton[];\n showCategory?: boolean;\n showDescription?: boolean;\n variant?: 'default' | 'compact';\n}\n\nconst CollectionCard: React.FC<CollectionCardProps> = ({\n collection,\n actions,\n showCategory = true,\n showDescription = true,\n variant = 'default'\n}) => {\n const isCompact = variant === 'compact';\n const pageCount = collection.pages?.length ?? 0;\n const isCollection = collection.category === CollectionCategory.COLLECTION;\n const badgeText = isCollection ? (pageCount > 0 ? `${pageCount} 页` : '画集') : '商品';\n\n return (\n <View\n className={\n isCompact\n ? 'flex gap-3 rounded-2xl border border-prussian-blue-200/30 bg-white/95 p-3 shadow-sm'\n : 'overflow-hidden rounded-2xl border border-prussian-blue-200/30 bg-gradient-to-br from-white to-prussian-blue-900/5 shadow-lg'\n }\n >\n <View\n className={\n isCompact\n ? 'relative h-20 w-16 flex-shrink-0 overflow-hidden rounded-xl bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10'\n : 'relative w-full overflow-hidden bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 aspect-[1/1.414]'\n }\n >\n {collection.coverImage ? (\n <Image\n src={collection.coverImage}\n mode=\"aspectFill\"\n className={isCompact ? 'h-full w-full' : 'h-full w-full'}\n />\n ) : (\n <View className=\"flex h-full w-full items-center justify-center text-xs text-prussian-blue-500\">\n 暂无图片\n </View>\n )}\n {!isCompact && (\n <View className=\"absolute bottom-3 left-3 rounded-full bg-moonstone/90 px-3 py-1 text-[10px] font-semibold text-white shadow-lg\">\n <Text>{badgeText}</Text>\n </View>\n )}\n </View>\n\n <View className={isCompact ? 'flex-1' : 'p-4'}>\n <Text className={isCompact ? 'text-sm font-semibold text-rich-black' : 'text-base font-bold text-rich-black'}>\n {collection.title}\n </Text>\n <Text className=\"mt-1 block text-xs text-prussian-blue-600\">编号:{collection.number}</Text>\n {showCategory && collection.category && (\n <Text className=\"mt-1 block text-xs text-prussian-blue-600\">\n 分类:{getCategoryLabel(collection.category)}\n </Text>\n )}\n <Text className=\"mt-1 block text-xs font-medium text-prussian-blue-700\">\n 价格:{formatPrice(collection.price)}\n </Text>\n {showDescription && collection.description && !isCompact && (\n <Text className=\"mt-2 block text-xs text-prussian-blue-500\">{collection.description}</Text>\n )}\n {actions && actions.length > 0 && (\n <View className={isCompact ? 'mt-3 flex gap-2' : 'mt-4 flex gap-2'}>\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-prussian-blue-200 bg-white px-4 text-xs font-semibold text-prussian-blue-700'\n : 'h-8 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-4 text-xs font-semibold text-white shadow-lg'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n};\n\nexport default CollectionCard;\n","import React from 'react';\nimport { Text, View } from '@tarojs/components';\n\ninterface BookingStepsProps {\n step: 'select' | 'form';\n}\n\nconst BookingSteps: React.FC<BookingStepsProps> = ({ step }) => {\n return (\n <View className=\"mx-4 mt-4 flex items-center justify-center\">\n <View className=\"flex items-center\">\n <View\n className={`h-8 w-8 rounded-full flex items-center justify-center text-xs font-semibold ${\n step === 'select' ? 'bg-blue-600 text-white' : 'bg-green-500 text-white'\n }`}\n >\n <Text>{step === 'select' ? '1' : '✓'}</Text>\n </View>\n <Text className={`ml-2 text-sm ${step === 'select' ? 'text-blue-600' : 'text-green-600'}`}>\n 选择画集\n </Text>\n </View>\n <View className=\"mx-4 h-px w-10 bg-slate-300\" />\n <View className=\"flex items-center\">\n <View\n className={`h-8 w-8 rounded-full flex items-center justify-center text-xs font-semibold ${\n step === 'form' ? 'bg-blue-600 text-white' : 'bg-slate-300 text-slate-600'\n }`}\n >\n <Text>2</Text>\n </View>\n <Text className={`ml-2 text-sm ${step === 'form' ? 'text-blue-600' : 'text-slate-500'}`}>\n 填写信息\n </Text>\n </View>\n </View>\n );\n};\n\nexport default BookingSteps;\n","import React from 'react';\nimport { Input, Text, Textarea, View } from '@tarojs/components';\n\ninterface BaseFieldProps {\n label: string;\n value: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n type?: 'text' | 'number';\n}\n\ninterface FormInputProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\ninterface FormTextareaProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\nexport const FormInput: React.FC<FormInputProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n type = 'text',\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-sm font-medium text-slate-700\">{label}</Text>\n <Input\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 h-11 w-full rounded-lg border bg-white px-3 text-sm ${\n error ? 'border-rose-300' : 'border-slate-300'\n }`}\n disabled={disabled}\n type={type}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-600\">{error}</Text>}\n </View>\n );\n};\n\nexport const FormTextarea: React.FC<FormTextareaProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-sm font-medium text-slate-700\">{label}</Text>\n <Textarea\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 min-h-24 w-full rounded-lg border bg-white px-3 py-2 text-sm ${\n error ? 'border-rose-300' : 'border-slate-300'\n }`}\n disabled={disabled}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-600\">{error}</Text>}\n </View>\n );\n};\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { CartItem } from '../../../types/cart';\nimport { formatPrice } from '../../../logic/shared/format';\n\ninterface CartItemCardProps {\n item: CartItem;\n onIncrease: () => void;\n onDecrease: () => void;\n onRemove: () => void;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({ item, onIncrease, onDecrease, onRemove }) => {\n return (\n <View className=\"flex gap-3 rounded-lg border border-slate-200 bg-white p-3\">\n {item.collection.coverImage ? (\n <Image\n src={item.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-16 w-16 rounded-lg\"\n />\n ) : (\n <View className=\"flex h-16 w-16 items-center justify-center rounded-lg bg-slate-100 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-slate-900\">{item.collection.title}</Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">编号:{item.collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">\n 价格:{formatPrice(item.collection.price)}\n </Text>\n <View className=\"mt-3 flex items-center gap-2\">\n <Button\n className=\"h-9 w-9 rounded-full border border-slate-300 bg-white text-base text-slate-700\"\n onClick={onDecrease}\n >\n -\n </Button>\n <Text className=\"text-sm font-semibold\">{item.quantity}</Text>\n <Button\n className=\"h-9 w-9 rounded-full border border-slate-300 bg-white text-base text-slate-700\"\n onClick={onIncrease}\n >\n +\n </Button>\n <Button\n className=\"ml-auto h-9 rounded-md border border-rose-200 bg-rose-50 px-3 text-xs font-medium text-rose-600\"\n onClick={onRemove}\n >\n 移除\n </Button>\n </View>\n </View>\n </View>\n );\n};\n\nexport default CartItemCard;\n","import React from 'react';\nimport { Image, Text, View } from '@tarojs/components';\nimport type { Booking } from '../../../types/booking';\nimport { formatPrice } from '../../../logic/shared/format';\n\nconst statusLabelMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\nconst statusStyleMap: Record<string, 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\ninterface HistoryRecordCardProps {\n record: Booking;\n}\n\nconst HistoryRecordCard: React.FC<HistoryRecordCardProps> = ({ record }) => {\n const statusText = statusLabelMap[record.status] || record.status;\n const statusStyle = statusStyleMap[record.status] || 'bg-slate-100 text-slate-600';\n\n return (\n <View className=\"flex gap-3 rounded-lg border border-slate-200 bg-white p-4\">\n {record.collection?.coverImage ? (\n <Image\n src={record.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-16 w-16 rounded-lg\"\n />\n ) : (\n <View className=\"flex h-16 w-16 items-center justify-center rounded-lg bg-slate-100 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-slate-900\">\n {record.collection?.title || '画集'}\n </Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">数量:{record.quantity}</Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">\n 价格:{formatPrice(record.collection?.price)}\n </Text>\n <View className=\"mt-2 flex items-center justify-between\">\n <View className={`rounded-full px-2 py-0.5 text-[10px] font-medium ${statusStyle}`}>\n <Text>{statusText}</Text>\n </View>\n <Text className=\"text-xs text-slate-400\">{record.createdAt?.slice(0, 10)}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default HistoryRecordCard;\n"]}
@@ -1,21 +1,22 @@
1
1
  import { getCategoryLabel, formatPrice } from '../../../chunk-ANKVXRPY.mjs';
2
+ import '../../../chunk-MFG2Y6UR.mjs';
2
3
  import '../../../chunk-WMJKH4XE.mjs';
3
4
  import React3 from 'react';
4
5
  import { View, Text, Button, ScrollView, Image, Input, Textarea } from '@tarojs/components';
5
6
 
6
7
  var PageHeader = ({ title, subtitle, actions, cta }) => {
7
- return /* @__PURE__ */ React3.createElement(View, { className: "mx-4 mt-6 rounded-3xl bg-white px-5 py-5 shadow-xl" }, /* @__PURE__ */ React3.createElement(View, { className: "flex items-start justify-between" }, /* @__PURE__ */ React3.createElement(View, null, /* @__PURE__ */ React3.createElement(Text, { className: "text-xl font-semibold" }, title), subtitle && /* @__PURE__ */ React3.createElement(Text, { className: "mt-2 block text-sm text-slate-500" }, subtitle)), actions && actions.length > 0 && /* @__PURE__ */ React3.createElement(View, { className: "flex flex-col items-end gap-2" }, actions.map((action) => /* @__PURE__ */ React3.createElement(
8
+ return /* @__PURE__ */ React3.createElement(View, { className: "bg-white/95 px-4 py-4 border-b border-prussian-blue-200/30" }, /* @__PURE__ */ React3.createElement(View, { className: "flex items-start justify-between gap-3" }, /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-lg font-bold text-rich-black" }, title), subtitle && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-prussian-blue-600" }, subtitle)), actions && actions.length > 0 && /* @__PURE__ */ React3.createElement(View, { className: "flex items-center gap-2" }, actions.map((action) => /* @__PURE__ */ React3.createElement(
8
9
  Button,
9
10
  {
10
11
  key: action.label,
11
- className: action.variant === "ghost" ? "h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700" : "h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white",
12
+ className: action.variant === "ghost" ? "h-8 rounded-full border border-prussian-blue-200 bg-white px-3 text-xs font-semibold text-prussian-blue-700" : "h-8 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-3 text-xs font-semibold text-white shadow-lg",
12
13
  onClick: action.onClick
13
14
  },
14
15
  action.label
15
16
  )))), cta && /* @__PURE__ */ React3.createElement(
16
17
  Button,
17
18
  {
18
- className: "mt-4 h-10 w-32 rounded-full bg-slate-900 text-sm font-semibold text-white",
19
+ className: "mt-3 h-9 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-4 text-xs font-semibold text-white shadow-lg",
19
20
  onClick: cta.onClick
20
21
  },
21
22
  cta.label
@@ -27,15 +28,25 @@ function CategoryTabs({
27
28
  activeValue,
28
29
  onChange
29
30
  }) {
30
- return /* @__PURE__ */ React3.createElement(ScrollView, { scrollX: true, className: "mt-3", showScrollbar: false }, /* @__PURE__ */ React3.createElement(View, { className: "flex gap-2 pb-2" }, items.map((item) => /* @__PURE__ */ React3.createElement(
31
- View,
32
- {
33
- key: item.value,
34
- className: `rounded-full px-4 py-2 text-xs ${activeValue === item.value ? "bg-slate-900 text-white" : "bg-white text-slate-600 shadow-md"}`,
35
- onClick: () => onChange(item.value)
36
- },
37
- /* @__PURE__ */ React3.createElement(Text, null, item.label)
38
- ))));
31
+ return /* @__PURE__ */ React3.createElement(ScrollView, { scrollX: true, className: "mt-4", showScrollbar: false }, /* @__PURE__ */ React3.createElement(View, { className: "flex gap-2 rounded-2xl bg-moonstone-900/10 p-1" }, items.map((item) => {
32
+ const isActive = activeValue === item.value;
33
+ return /* @__PURE__ */ React3.createElement(
34
+ View,
35
+ {
36
+ key: item.value,
37
+ className: `flex flex-col items-center justify-center rounded-xl px-4 py-2 text-xs font-semibold transition-all ${isActive ? "bg-gradient-to-r from-moonstone to-cerulean text-white shadow-lg" : "text-prussian-blue-700"}`,
38
+ onClick: () => onChange(item.value)
39
+ },
40
+ /* @__PURE__ */ React3.createElement(Text, null, item.label),
41
+ typeof item.count === "number" && /* @__PURE__ */ React3.createElement(
42
+ Text,
43
+ {
44
+ className: `mt-1 rounded-full px-2 py-0.5 text-[10px] ${isActive ? "bg-white/20 text-white" : "bg-moonstone-900/10 text-cerulean"}`
45
+ },
46
+ item.count
47
+ )
48
+ );
49
+ })));
39
50
  }
40
51
  var CategoryTabs_default = CategoryTabs;
41
52
  var CollectionCard = ({
@@ -46,46 +57,55 @@ var CollectionCard = ({
46
57
  variant = "default"
47
58
  }) => {
48
59
  const isCompact = variant === "compact";
49
- return /* @__PURE__ */ React3.createElement(View, { className: "overflow-hidden rounded-3xl bg-white shadow-xl" }, collection.coverImage ? /* @__PURE__ */ React3.createElement(
50
- Image,
51
- {
52
- src: collection.coverImage,
53
- mode: "aspectFill",
54
- className: isCompact ? "h-24 w-24 rounded-2xl" : "h-44 w-full"
55
- }
56
- ) : /* @__PURE__ */ React3.createElement(
60
+ const pageCount = collection.pages?.length ?? 0;
61
+ const isCollection = collection.category === "collection" /* COLLECTION */;
62
+ const badgeText = isCollection ? pageCount > 0 ? `${pageCount} \u9875` : "\u753B\u96C6" : "\u5546\u54C1";
63
+ return /* @__PURE__ */ React3.createElement(
57
64
  View,
58
65
  {
59
- className: isCompact ? "flex h-24 w-24 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500" : "flex h-44 items-center justify-center bg-slate-200 text-sm text-slate-500"
66
+ className: isCompact ? "flex gap-3 rounded-2xl border border-prussian-blue-200/30 bg-white/95 p-3 shadow-sm" : "overflow-hidden rounded-2xl border border-prussian-blue-200/30 bg-gradient-to-br from-white to-prussian-blue-900/5 shadow-lg"
60
67
  },
61
- "\u6682\u65E0\u56FE\u7247"
62
- ), /* @__PURE__ */ React3.createElement(View, { className: isCompact ? "flex-1 px-3 py-1" : "px-4 py-4" }, /* @__PURE__ */ React3.createElement(View, { className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React3.createElement(Text, { className: isCompact ? "text-sm font-semibold" : "text-base font-semibold" }, collection.title), showCategory && !isCompact && /* @__PURE__ */ React3.createElement(Text, { className: "rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-600" }, getCategoryLabel(collection.category))), showDescription && collection.description && !isCompact && /* @__PURE__ */ React3.createElement(Text, { className: "mt-2 block text-xs text-slate-500" }, collection.description), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u7F16\u53F7\uFF1A", collection.number), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u4EF7\u683C\uFF1A", formatPrice(collection.price)), actions && actions.length > 0 && /* @__PURE__ */ React3.createElement(View, { className: isCompact ? "mt-2 flex gap-2" : "mt-4 flex gap-2" }, actions.map((action) => /* @__PURE__ */ React3.createElement(
63
- Button,
64
- {
65
- key: action.label,
66
- className: action.variant === "ghost" ? "h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700" : "h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white",
67
- onClick: action.onClick
68
- },
69
- action.label
70
- )))));
68
+ /* @__PURE__ */ React3.createElement(
69
+ View,
70
+ {
71
+ className: isCompact ? "relative h-20 w-16 flex-shrink-0 overflow-hidden rounded-xl bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10" : "relative w-full overflow-hidden bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 aspect-[1/1.414]"
72
+ },
73
+ collection.coverImage ? /* @__PURE__ */ React3.createElement(
74
+ Image,
75
+ {
76
+ src: collection.coverImage,
77
+ mode: "aspectFill",
78
+ className: isCompact ? "h-full w-full" : "h-full w-full"
79
+ }
80
+ ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-full w-full items-center justify-center text-xs text-prussian-blue-500" }, "\u6682\u65E0\u56FE\u7247"),
81
+ !isCompact && /* @__PURE__ */ React3.createElement(View, { className: "absolute bottom-3 left-3 rounded-full bg-moonstone/90 px-3 py-1 text-[10px] font-semibold text-white shadow-lg" }, /* @__PURE__ */ React3.createElement(Text, null, badgeText))
82
+ ),
83
+ /* @__PURE__ */ React3.createElement(View, { className: isCompact ? "flex-1" : "p-4" }, /* @__PURE__ */ React3.createElement(Text, { className: isCompact ? "text-sm font-semibold text-rich-black" : "text-base font-bold text-rich-black" }, collection.title), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-prussian-blue-600" }, "\u7F16\u53F7\uFF1A", collection.number), showCategory && collection.category && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-prussian-blue-600" }, "\u5206\u7C7B\uFF1A", getCategoryLabel(collection.category)), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs font-medium text-prussian-blue-700" }, "\u4EF7\u683C\uFF1A", formatPrice(collection.price)), showDescription && collection.description && !isCompact && /* @__PURE__ */ React3.createElement(Text, { className: "mt-2 block text-xs text-prussian-blue-500" }, collection.description), actions && actions.length > 0 && /* @__PURE__ */ React3.createElement(View, { className: isCompact ? "mt-3 flex gap-2" : "mt-4 flex gap-2" }, actions.map((action) => /* @__PURE__ */ React3.createElement(
84
+ Button,
85
+ {
86
+ key: action.label,
87
+ className: action.variant === "ghost" ? "h-8 rounded-full border border-prussian-blue-200 bg-white px-4 text-xs font-semibold text-prussian-blue-700" : "h-8 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-4 text-xs font-semibold text-white shadow-lg",
88
+ onClick: action.onClick
89
+ },
90
+ action.label
91
+ ))))
92
+ );
71
93
  };
72
94
  var CollectionCard_default = CollectionCard;
73
95
  var BookingSteps = ({ step }) => {
74
- return /* @__PURE__ */ React3.createElement(View, { className: "mx-4 mt-4 flex items-center gap-3" }, /* @__PURE__ */ React3.createElement(
96
+ return /* @__PURE__ */ React3.createElement(View, { className: "mx-4 mt-4 flex items-center justify-center" }, /* @__PURE__ */ React3.createElement(View, { className: "flex items-center" }, /* @__PURE__ */ React3.createElement(
75
97
  View,
76
98
  {
77
- className: `flex items-center gap-2 rounded-full px-4 py-2 text-xs ${step === "select" ? "bg-slate-900 text-white" : "bg-white text-slate-600"}`
99
+ className: `h-8 w-8 rounded-full flex items-center justify-center text-xs font-semibold ${step === "select" ? "bg-blue-600 text-white" : "bg-green-500 text-white"}`
78
100
  },
79
- /* @__PURE__ */ React3.createElement(Text, null, step === "select" ? "1" : "\u2713"),
80
- /* @__PURE__ */ React3.createElement(Text, null, "\u9009\u62E9\u753B\u96C6")
81
- ), /* @__PURE__ */ React3.createElement(View, { className: "h-px flex-1 bg-slate-200" }), /* @__PURE__ */ React3.createElement(
101
+ /* @__PURE__ */ React3.createElement(Text, null, step === "select" ? "1" : "\u2713")
102
+ ), /* @__PURE__ */ React3.createElement(Text, { className: `ml-2 text-sm ${step === "select" ? "text-blue-600" : "text-green-600"}` }, "\u9009\u62E9\u753B\u96C6")), /* @__PURE__ */ React3.createElement(View, { className: "mx-4 h-px w-10 bg-slate-300" }), /* @__PURE__ */ React3.createElement(View, { className: "flex items-center" }, /* @__PURE__ */ React3.createElement(
82
103
  View,
83
104
  {
84
- className: `flex items-center gap-2 rounded-full px-4 py-2 text-xs ${step === "form" ? "bg-slate-900 text-white" : "bg-white text-slate-600"}`
105
+ className: `h-8 w-8 rounded-full flex items-center justify-center text-xs font-semibold ${step === "form" ? "bg-blue-600 text-white" : "bg-slate-300 text-slate-600"}`
85
106
  },
86
- /* @__PURE__ */ React3.createElement(Text, null, "2"),
87
- /* @__PURE__ */ React3.createElement(Text, null, "\u586B\u5199\u4FE1\u606F")
88
- ));
107
+ /* @__PURE__ */ React3.createElement(Text, null, "2")
108
+ ), /* @__PURE__ */ React3.createElement(Text, { className: `ml-2 text-sm ${step === "form" ? "text-blue-600" : "text-slate-500"}` }, "\u586B\u5199\u4FE1\u606F")));
89
109
  };
90
110
  var BookingSteps_default = BookingSteps;
91
111
  var FormInput = ({
@@ -97,17 +117,17 @@ var FormInput = ({
97
117
  type = "text",
98
118
  onChange
99
119
  }) => {
100
- return /* @__PURE__ */ React3.createElement(View, { className: "mt-4" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-600" }, label), /* @__PURE__ */ React3.createElement(
120
+ return /* @__PURE__ */ React3.createElement(View, { className: "mt-4" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-medium text-slate-700" }, label), /* @__PURE__ */ React3.createElement(
101
121
  Input,
102
122
  {
103
123
  value,
104
124
  placeholder,
105
125
  onInput: (event) => onChange(event.detail.value),
106
- className: `mt-2 h-10 w-full rounded-xl border px-3 text-sm ${error ? "border-rose-400" : "border-slate-200"}`,
126
+ className: `mt-2 h-11 w-full rounded-lg border bg-white px-3 text-sm ${error ? "border-rose-300" : "border-slate-300"}`,
107
127
  disabled,
108
128
  type
109
129
  }
110
- ), error && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-rose-500" }, error));
130
+ ), error && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-rose-600" }, error));
111
131
  };
112
132
  var FormTextarea = ({
113
133
  label,
@@ -117,43 +137,43 @@ var FormTextarea = ({
117
137
  error,
118
138
  onChange
119
139
  }) => {
120
- return /* @__PURE__ */ React3.createElement(View, { className: "mt-4" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-600" }, label), /* @__PURE__ */ React3.createElement(
140
+ return /* @__PURE__ */ React3.createElement(View, { className: "mt-4" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-medium text-slate-700" }, label), /* @__PURE__ */ React3.createElement(
121
141
  Textarea,
122
142
  {
123
143
  value,
124
144
  placeholder,
125
145
  onInput: (event) => onChange(event.detail.value),
126
- className: `mt-2 min-h-24 w-full rounded-xl border px-3 py-2 text-sm ${error ? "border-rose-400" : "border-slate-200"}`,
146
+ className: `mt-2 min-h-24 w-full rounded-lg border bg-white px-3 py-2 text-sm ${error ? "border-rose-300" : "border-slate-300"}`,
127
147
  disabled
128
148
  }
129
- ), error && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-rose-500" }, error));
149
+ ), error && /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-rose-600" }, error));
130
150
  };
131
151
  var CartItemCard = ({ item, onIncrease, onDecrease, onRemove }) => {
132
- return /* @__PURE__ */ React3.createElement(View, { className: "flex gap-3 rounded-2xl bg-white p-3 shadow-md" }, item.collection.coverImage ? /* @__PURE__ */ React3.createElement(
152
+ return /* @__PURE__ */ React3.createElement(View, { className: "flex gap-3 rounded-lg border border-slate-200 bg-white p-3" }, item.collection.coverImage ? /* @__PURE__ */ React3.createElement(
133
153
  Image,
134
154
  {
135
155
  src: item.collection.coverImage,
136
156
  mode: "aspectFill",
137
- className: "h-20 w-20 rounded-2xl"
157
+ className: "h-16 w-16 rounded-lg"
138
158
  }
139
- ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold" }, item.collection.title), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u7F16\u53F7\uFF1A", item.collection.number), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u4EF7\u683C\uFF1A", formatPrice(item.collection.price)), /* @__PURE__ */ React3.createElement(View, { className: "mt-3 flex items-center gap-2" }, /* @__PURE__ */ React3.createElement(
159
+ ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-16 w-16 items-center justify-center rounded-lg bg-slate-100 text-xs text-slate-500" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold text-slate-900" }, item.collection.title), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-600" }, "\u7F16\u53F7\uFF1A", item.collection.number), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-600" }, "\u4EF7\u683C\uFF1A", formatPrice(item.collection.price)), /* @__PURE__ */ React3.createElement(View, { className: "mt-3 flex items-center gap-2" }, /* @__PURE__ */ React3.createElement(
140
160
  Button,
141
161
  {
142
- className: "h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700",
162
+ className: "h-9 w-9 rounded-full border border-slate-300 bg-white text-base text-slate-700",
143
163
  onClick: onDecrease
144
164
  },
145
165
  "-"
146
166
  ), /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold" }, item.quantity), /* @__PURE__ */ React3.createElement(
147
167
  Button,
148
168
  {
149
- className: "h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700",
169
+ className: "h-9 w-9 rounded-full border border-slate-300 bg-white text-base text-slate-700",
150
170
  onClick: onIncrease
151
171
  },
152
172
  "+"
153
173
  ), /* @__PURE__ */ React3.createElement(
154
174
  Button,
155
175
  {
156
- className: "ml-auto h-8 rounded-full border border-rose-200 bg-rose-50 px-3 text-xs text-rose-600",
176
+ className: "ml-auto h-9 rounded-md border border-rose-200 bg-rose-50 px-3 text-xs font-medium text-rose-600",
157
177
  onClick: onRemove
158
178
  },
159
179
  "\u79FB\u9664"
@@ -166,15 +186,23 @@ var statusLabelMap = {
166
186
  completed: "\u5DF2\u5B8C\u6210",
167
187
  cancelled: "\u5DF2\u53D6\u6D88"
168
188
  };
189
+ var statusStyleMap = {
190
+ pending: "bg-yellow-100 text-yellow-800",
191
+ confirmed: "bg-blue-100 text-blue-800",
192
+ completed: "bg-green-100 text-green-800",
193
+ cancelled: "bg-red-100 text-red-800"
194
+ };
169
195
  var HistoryRecordCard = ({ record }) => {
170
- return /* @__PURE__ */ React3.createElement(View, { className: "flex gap-3 rounded-2xl bg-white p-3 shadow-md" }, record.collection?.coverImage ? /* @__PURE__ */ React3.createElement(
196
+ const statusText = statusLabelMap[record.status] || record.status;
197
+ const statusStyle = statusStyleMap[record.status] || "bg-slate-100 text-slate-600";
198
+ return /* @__PURE__ */ React3.createElement(View, { className: "flex gap-3 rounded-lg border border-slate-200 bg-white p-4" }, record.collection?.coverImage ? /* @__PURE__ */ React3.createElement(
171
199
  Image,
172
200
  {
173
201
  src: record.collection.coverImage,
174
202
  mode: "aspectFill",
175
- className: "h-20 w-20 rounded-2xl"
203
+ className: "h-16 w-16 rounded-lg"
176
204
  }
177
- ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold" }, record.collection?.title || "\u753B\u96C6"), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u6570\u91CF\uFF1A", record.quantity), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-500" }, "\u4EF7\u683C\uFF1A", formatPrice(record.collection?.price)), /* @__PURE__ */ React3.createElement(View, { className: "mt-2 flex items-center justify-between" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-500" }, "\u72B6\u6001\uFF1A", statusLabelMap[record.status] || record.status), /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-400" }, record.createdAt?.slice(0, 10)))));
205
+ ) : /* @__PURE__ */ React3.createElement(View, { className: "flex h-16 w-16 items-center justify-center rounded-lg bg-slate-100 text-xs text-slate-500" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React3.createElement(View, { className: "flex-1" }, /* @__PURE__ */ React3.createElement(Text, { className: "text-sm font-semibold text-slate-900" }, record.collection?.title || "\u753B\u96C6"), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-600" }, "\u6570\u91CF\uFF1A", record.quantity), /* @__PURE__ */ React3.createElement(Text, { className: "mt-1 block text-xs text-slate-600" }, "\u4EF7\u683C\uFF1A", formatPrice(record.collection?.price)), /* @__PURE__ */ React3.createElement(View, { className: "mt-2 flex items-center justify-between" }, /* @__PURE__ */ React3.createElement(View, { className: `rounded-full px-2 py-0.5 text-[10px] font-medium ${statusStyle}` }, /* @__PURE__ */ React3.createElement(Text, null, statusText)), /* @__PURE__ */ React3.createElement(Text, { className: "text-xs text-slate-400" }, record.createdAt?.slice(0, 10)))));
178
206
  };
179
207
  var HistoryRecordCard_default = HistoryRecordCard;
180
208
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/showmasterpiece/ui/miniapp/components/PageHeader.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CategoryTabs.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CollectionCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/BookingSteps.tsx","../../../../src/showmasterpiece/ui/miniapp/components/FormField.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CartItemCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/HistoryRecordCard.tsx"],"names":["React","View","Text","Button","Image"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react';\nimport { Button, Text, View } from '@tarojs/components';\n\ntype HeaderAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype HeaderCta = {\n label: string;\n onClick: () => void;\n};\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n actions?: HeaderAction[];\n cta?: HeaderCta;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({ title, subtitle, actions, cta }) => {\n return (\n <View className=\"mx-4 mt-6 rounded-3xl bg-white px-5 py-5 shadow-xl\">\n <View className=\"flex items-start justify-between\">\n <View>\n <Text className=\"text-xl font-semibold\">{title}</Text>\n {subtitle && <Text className=\"mt-2 block text-sm text-slate-500\">{subtitle}</Text>}\n </View>\n {actions && actions.length > 0 && (\n <View className=\"flex flex-col items-end gap-2\">\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n {cta && (\n <Button\n className=\"mt-4 h-10 w-32 rounded-full bg-slate-900 text-sm font-semibold text-white\"\n onClick={cta.onClick}\n >\n {cta.label}\n </Button>\n )}\n </View>\n );\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport { ScrollView, Text, View } from '@tarojs/components';\n\nexport type CategoryTabItem<T extends string = string> = {\n value: T;\n label: string;\n};\n\ninterface CategoryTabsProps<T extends string = string> {\n items: CategoryTabItem<T>[];\n activeValue: T;\n onChange: (value: T) => void;\n}\n\nfunction CategoryTabs<T extends string = string>({\n items,\n activeValue,\n onChange\n}: CategoryTabsProps<T>) {\n return (\n <ScrollView scrollX className=\"mt-3\" showScrollbar={false}>\n <View className=\"flex gap-2 pb-2\">\n {items.map(item => (\n <View\n key={item.value}\n className={`rounded-full px-4 py-2 text-xs ${\n activeValue === item.value\n ? 'bg-slate-900 text-white'\n : 'bg-white text-slate-600 shadow-md'\n }`}\n onClick={() => onChange(item.value)}\n >\n <Text>{item.label}</Text>\n </View>\n ))}\n </View>\n </ScrollView>\n );\n}\n\nexport default CategoryTabs;\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { ArtCollection, CollectionCategoryType } from '../../../types';\nimport { formatPrice } from '../../../logic/shared/format';\nimport { getCategoryLabel } from '../../../logic/shared/category';\n\ntype ActionButton = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype CollectionLike = Pick<\n ArtCollection,\n 'id' | 'title' | 'number' | 'coverImage' | 'price'\n> & {\n description?: string;\n category?: CollectionCategoryType;\n};\n\ninterface CollectionCardProps {\n collection: CollectionLike;\n actions?: ActionButton[];\n showCategory?: boolean;\n showDescription?: boolean;\n variant?: 'default' | 'compact';\n}\n\nconst CollectionCard: React.FC<CollectionCardProps> = ({\n collection,\n actions,\n showCategory = true,\n showDescription = true,\n variant = 'default'\n}) => {\n const isCompact = variant === 'compact';\n return (\n <View className=\"overflow-hidden rounded-3xl bg-white shadow-xl\">\n {collection.coverImage ? (\n <Image\n src={collection.coverImage}\n mode=\"aspectFill\"\n className={isCompact ? 'h-24 w-24 rounded-2xl' : 'h-44 w-full'}\n />\n ) : (\n <View\n className={\n isCompact\n ? 'flex h-24 w-24 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500'\n : 'flex h-44 items-center justify-center bg-slate-200 text-sm text-slate-500'\n }\n >\n 暂无图片\n </View>\n )}\n <View className={isCompact ? 'flex-1 px-3 py-1' : 'px-4 py-4'}>\n <View className=\"flex items-center justify-between gap-2\">\n <Text className={isCompact ? 'text-sm font-semibold' : 'text-base font-semibold'}>\n {collection.title}\n </Text>\n {showCategory && !isCompact && (\n <Text className=\"rounded-full bg-slate-100 px-3 py-1 text-xs text-slate-600\">\n {getCategoryLabel(collection.category)}\n </Text>\n )}\n </View>\n {showDescription && collection.description && !isCompact && (\n <Text className=\"mt-2 block text-xs text-slate-500\">{collection.description}</Text>\n )}\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(collection.price)}\n </Text>\n {actions && actions.length > 0 && (\n <View className={isCompact ? 'mt-2 flex gap-2' : 'mt-4 flex gap-2'}>\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-slate-200 bg-white px-4 text-xs font-semibold text-slate-700'\n : 'h-8 rounded-full bg-slate-900 px-4 text-xs font-semibold text-white'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n};\n\nexport default CollectionCard;\n","import React from 'react';\nimport { Text, View } from '@tarojs/components';\n\ninterface BookingStepsProps {\n step: 'select' | 'form';\n}\n\nconst BookingSteps: React.FC<BookingStepsProps> = ({ step }) => {\n return (\n <View className=\"mx-4 mt-4 flex items-center gap-3\">\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'select' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>{step === 'select' ? '1' : '✓'}</Text>\n <Text>选择画集</Text>\n </View>\n <View className=\"h-px flex-1 bg-slate-200\" />\n <View\n className={`flex items-center gap-2 rounded-full px-4 py-2 text-xs ${\n step === 'form' ? 'bg-slate-900 text-white' : 'bg-white text-slate-600'\n }`}\n >\n <Text>2</Text>\n <Text>填写信息</Text>\n </View>\n </View>\n );\n};\n\nexport default BookingSteps;\n","import React from 'react';\nimport { Input, Text, Textarea, View } from '@tarojs/components';\n\ninterface BaseFieldProps {\n label: string;\n value: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n type?: 'text' | 'number';\n}\n\ninterface FormInputProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\ninterface FormTextareaProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\nexport const FormInput: React.FC<FormInputProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n type = 'text',\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Input\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 h-10 w-full rounded-xl border px-3 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n type={type}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n\nexport const FormTextarea: React.FC<FormTextareaProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-xs text-slate-600\">{label}</Text>\n <Textarea\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 min-h-24 w-full rounded-xl border px-3 py-2 text-sm ${\n error ? 'border-rose-400' : 'border-slate-200'\n }`}\n disabled={disabled}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-500\">{error}</Text>}\n </View>\n );\n};\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { CartItem } from '../../../types/cart';\nimport { formatPrice } from '../../../logic/shared/format';\n\ninterface CartItemCardProps {\n item: CartItem;\n onIncrease: () => void;\n onDecrease: () => void;\n onRemove: () => void;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({ item, onIncrease, onDecrease, onRemove }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {item.collection.coverImage ? (\n <Image\n src={item.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{item.collection.title}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">编号:{item.collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(item.collection.price)}\n </Text>\n <View className=\"mt-3 flex items-center gap-2\">\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onDecrease}\n >\n -\n </Button>\n <Text className=\"text-sm font-semibold\">{item.quantity}</Text>\n <Button\n className=\"h-8 w-8 rounded-full border border-slate-200 bg-white text-base text-slate-700\"\n onClick={onIncrease}\n >\n +\n </Button>\n <Button\n className=\"ml-auto h-8 rounded-full border border-rose-200 bg-rose-50 px-3 text-xs text-rose-600\"\n onClick={onRemove}\n >\n 移除\n </Button>\n </View>\n </View>\n </View>\n );\n};\n\nexport default CartItemCard;\n","import React from 'react';\nimport { Image, Text, View } from '@tarojs/components';\nimport type { Booking } from '../../../types/booking';\nimport { formatPrice } from '../../../logic/shared/format';\n\nconst statusLabelMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\ninterface HistoryRecordCardProps {\n record: Booking;\n}\n\nconst HistoryRecordCard: React.FC<HistoryRecordCardProps> = ({ record }) => {\n return (\n <View className=\"flex gap-3 rounded-2xl bg-white p-3 shadow-md\">\n {record.collection?.coverImage ? (\n <Image\n src={record.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-20 w-20 rounded-2xl\"\n />\n ) : (\n <View className=\"flex h-20 w-20 items-center justify-center rounded-2xl bg-slate-200 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold\">{record.collection?.title || '画集'}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">数量:{record.quantity}</Text>\n <Text className=\"mt-1 block text-xs text-slate-500\">\n 价格:{formatPrice(record.collection?.price)}\n </Text>\n <View className=\"mt-2 flex items-center justify-between\">\n <Text className=\"text-xs text-slate-500\">\n 状态:{statusLabelMap[record.status] || record.status}\n </Text>\n <Text className=\"text-xs text-slate-400\">{record.createdAt?.slice(0, 10)}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default HistoryRecordCard;\n"]}
1
+ {"version":3,"sources":["../../../../src/showmasterpiece/ui/miniapp/components/PageHeader.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CategoryTabs.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CollectionCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/BookingSteps.tsx","../../../../src/showmasterpiece/ui/miniapp/components/FormField.tsx","../../../../src/showmasterpiece/ui/miniapp/components/CartItemCard.tsx","../../../../src/showmasterpiece/ui/miniapp/components/HistoryRecordCard.tsx"],"names":["React","View","Text","Button","Image"],"mappings":"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","file":"index.mjs","sourcesContent":["import React from 'react';\nimport { Button, Text, View } from '@tarojs/components';\n\ntype HeaderAction = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype HeaderCta = {\n label: string;\n onClick: () => void;\n};\n\ninterface PageHeaderProps {\n title: string;\n subtitle?: string;\n actions?: HeaderAction[];\n cta?: HeaderCta;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({ title, subtitle, actions, cta }) => {\n return (\n <View className=\"bg-white/95 px-4 py-4 border-b border-prussian-blue-200/30\">\n <View className=\"flex items-start justify-between gap-3\">\n <View className=\"flex-1\">\n <Text className=\"text-lg font-bold text-rich-black\">{title}</Text>\n {subtitle && <Text className=\"mt-1 block text-xs text-prussian-blue-600\">{subtitle}</Text>}\n </View>\n {actions && actions.length > 0 && (\n <View className=\"flex items-center gap-2\">\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-prussian-blue-200 bg-white px-3 text-xs font-semibold text-prussian-blue-700'\n : 'h-8 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-3 text-xs font-semibold text-white shadow-lg'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n {cta && (\n <Button\n className=\"mt-3 h-9 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-4 text-xs font-semibold text-white shadow-lg\"\n onClick={cta.onClick}\n >\n {cta.label}\n </Button>\n )}\n </View>\n );\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport { ScrollView, Text, View } from '@tarojs/components';\n\nexport type CategoryTabItem<T extends string = string> = {\n value: T;\n label: string;\n count?: number;\n};\n\ninterface CategoryTabsProps<T extends string = string> {\n items: CategoryTabItem<T>[];\n activeValue: T;\n onChange: (value: T) => void;\n}\n\nfunction CategoryTabs<T extends string = string>({\n items,\n activeValue,\n onChange\n}: CategoryTabsProps<T>) {\n return (\n <ScrollView scrollX className=\"mt-4\" showScrollbar={false}>\n <View className=\"flex gap-2 rounded-2xl bg-moonstone-900/10 p-1\">\n {items.map(item => {\n const isActive = activeValue === item.value;\n return (\n <View\n key={item.value}\n className={`flex flex-col items-center justify-center rounded-xl px-4 py-2 text-xs font-semibold transition-all ${\n isActive\n ? 'bg-gradient-to-r from-moonstone to-cerulean text-white shadow-lg'\n : 'text-prussian-blue-700'\n }`}\n onClick={() => onChange(item.value)}\n >\n <Text>{item.label}</Text>\n {typeof item.count === 'number' && (\n <Text\n className={`mt-1 rounded-full px-2 py-0.5 text-[10px] ${\n isActive\n ? 'bg-white/20 text-white'\n : 'bg-moonstone-900/10 text-cerulean'\n }`}\n >\n {item.count}\n </Text>\n )}\n </View>\n );\n })}\n </View>\n </ScrollView>\n );\n}\n\nexport default CategoryTabs;\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { ArtCollection, CollectionCategoryType } from '../../../types';\nimport { CollectionCategory } from '../../../types';\nimport { formatPrice } from '../../../logic/shared/format';\nimport { getCategoryLabel } from '../../../logic/shared/category';\n\ntype ActionButton = {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n};\n\ntype CollectionLike = Pick<\n ArtCollection,\n 'id' | 'title' | 'number' | 'coverImage' | 'price'\n> & {\n description?: string;\n category?: CollectionCategoryType;\n pages?: ArtCollection['pages'];\n};\n\ninterface CollectionCardProps {\n collection: CollectionLike;\n actions?: ActionButton[];\n showCategory?: boolean;\n showDescription?: boolean;\n variant?: 'default' | 'compact';\n}\n\nconst CollectionCard: React.FC<CollectionCardProps> = ({\n collection,\n actions,\n showCategory = true,\n showDescription = true,\n variant = 'default'\n}) => {\n const isCompact = variant === 'compact';\n const pageCount = collection.pages?.length ?? 0;\n const isCollection = collection.category === CollectionCategory.COLLECTION;\n const badgeText = isCollection ? (pageCount > 0 ? `${pageCount} 页` : '画集') : '商品';\n\n return (\n <View\n className={\n isCompact\n ? 'flex gap-3 rounded-2xl border border-prussian-blue-200/30 bg-white/95 p-3 shadow-sm'\n : 'overflow-hidden rounded-2xl border border-prussian-blue-200/30 bg-gradient-to-br from-white to-prussian-blue-900/5 shadow-lg'\n }\n >\n <View\n className={\n isCompact\n ? 'relative h-20 w-16 flex-shrink-0 overflow-hidden rounded-xl bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10'\n : 'relative w-full overflow-hidden bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 aspect-[1/1.414]'\n }\n >\n {collection.coverImage ? (\n <Image\n src={collection.coverImage}\n mode=\"aspectFill\"\n className={isCompact ? 'h-full w-full' : 'h-full w-full'}\n />\n ) : (\n <View className=\"flex h-full w-full items-center justify-center text-xs text-prussian-blue-500\">\n 暂无图片\n </View>\n )}\n {!isCompact && (\n <View className=\"absolute bottom-3 left-3 rounded-full bg-moonstone/90 px-3 py-1 text-[10px] font-semibold text-white shadow-lg\">\n <Text>{badgeText}</Text>\n </View>\n )}\n </View>\n\n <View className={isCompact ? 'flex-1' : 'p-4'}>\n <Text className={isCompact ? 'text-sm font-semibold text-rich-black' : 'text-base font-bold text-rich-black'}>\n {collection.title}\n </Text>\n <Text className=\"mt-1 block text-xs text-prussian-blue-600\">编号:{collection.number}</Text>\n {showCategory && collection.category && (\n <Text className=\"mt-1 block text-xs text-prussian-blue-600\">\n 分类:{getCategoryLabel(collection.category)}\n </Text>\n )}\n <Text className=\"mt-1 block text-xs font-medium text-prussian-blue-700\">\n 价格:{formatPrice(collection.price)}\n </Text>\n {showDescription && collection.description && !isCompact && (\n <Text className=\"mt-2 block text-xs text-prussian-blue-500\">{collection.description}</Text>\n )}\n {actions && actions.length > 0 && (\n <View className={isCompact ? 'mt-3 flex gap-2' : 'mt-4 flex gap-2'}>\n {actions.map(action => (\n <Button\n key={action.label}\n className={\n action.variant === 'ghost'\n ? 'h-8 rounded-full border border-prussian-blue-200 bg-white px-4 text-xs font-semibold text-prussian-blue-700'\n : 'h-8 rounded-full bg-gradient-to-r from-moonstone to-cerulean px-4 text-xs font-semibold text-white shadow-lg'\n }\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n ))}\n </View>\n )}\n </View>\n </View>\n );\n};\n\nexport default CollectionCard;\n","import React from 'react';\nimport { Text, View } from '@tarojs/components';\n\ninterface BookingStepsProps {\n step: 'select' | 'form';\n}\n\nconst BookingSteps: React.FC<BookingStepsProps> = ({ step }) => {\n return (\n <View className=\"mx-4 mt-4 flex items-center justify-center\">\n <View className=\"flex items-center\">\n <View\n className={`h-8 w-8 rounded-full flex items-center justify-center text-xs font-semibold ${\n step === 'select' ? 'bg-blue-600 text-white' : 'bg-green-500 text-white'\n }`}\n >\n <Text>{step === 'select' ? '1' : '✓'}</Text>\n </View>\n <Text className={`ml-2 text-sm ${step === 'select' ? 'text-blue-600' : 'text-green-600'}`}>\n 选择画集\n </Text>\n </View>\n <View className=\"mx-4 h-px w-10 bg-slate-300\" />\n <View className=\"flex items-center\">\n <View\n className={`h-8 w-8 rounded-full flex items-center justify-center text-xs font-semibold ${\n step === 'form' ? 'bg-blue-600 text-white' : 'bg-slate-300 text-slate-600'\n }`}\n >\n <Text>2</Text>\n </View>\n <Text className={`ml-2 text-sm ${step === 'form' ? 'text-blue-600' : 'text-slate-500'}`}>\n 填写信息\n </Text>\n </View>\n </View>\n );\n};\n\nexport default BookingSteps;\n","import React from 'react';\nimport { Input, Text, Textarea, View } from '@tarojs/components';\n\ninterface BaseFieldProps {\n label: string;\n value: string;\n placeholder?: string;\n disabled?: boolean;\n error?: string;\n type?: 'text' | 'number';\n}\n\ninterface FormInputProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\ninterface FormTextareaProps extends BaseFieldProps {\n onChange: (value: string) => void;\n}\n\nexport const FormInput: React.FC<FormInputProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n type = 'text',\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-sm font-medium text-slate-700\">{label}</Text>\n <Input\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 h-11 w-full rounded-lg border bg-white px-3 text-sm ${\n error ? 'border-rose-300' : 'border-slate-300'\n }`}\n disabled={disabled}\n type={type}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-600\">{error}</Text>}\n </View>\n );\n};\n\nexport const FormTextarea: React.FC<FormTextareaProps> = ({\n label,\n value,\n placeholder,\n disabled,\n error,\n onChange\n}) => {\n return (\n <View className=\"mt-4\">\n <Text className=\"text-sm font-medium text-slate-700\">{label}</Text>\n <Textarea\n value={value}\n placeholder={placeholder}\n onInput={(event: { detail: { value: string } }) => onChange(event.detail.value)}\n className={`mt-2 min-h-24 w-full rounded-lg border bg-white px-3 py-2 text-sm ${\n error ? 'border-rose-300' : 'border-slate-300'\n }`}\n disabled={disabled}\n />\n {error && <Text className=\"mt-1 block text-xs text-rose-600\">{error}</Text>}\n </View>\n );\n};\n","import React from 'react';\nimport { Button, Image, Text, View } from '@tarojs/components';\nimport type { CartItem } from '../../../types/cart';\nimport { formatPrice } from '../../../logic/shared/format';\n\ninterface CartItemCardProps {\n item: CartItem;\n onIncrease: () => void;\n onDecrease: () => void;\n onRemove: () => void;\n}\n\nconst CartItemCard: React.FC<CartItemCardProps> = ({ item, onIncrease, onDecrease, onRemove }) => {\n return (\n <View className=\"flex gap-3 rounded-lg border border-slate-200 bg-white p-3\">\n {item.collection.coverImage ? (\n <Image\n src={item.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-16 w-16 rounded-lg\"\n />\n ) : (\n <View className=\"flex h-16 w-16 items-center justify-center rounded-lg bg-slate-100 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-slate-900\">{item.collection.title}</Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">编号:{item.collection.number}</Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">\n 价格:{formatPrice(item.collection.price)}\n </Text>\n <View className=\"mt-3 flex items-center gap-2\">\n <Button\n className=\"h-9 w-9 rounded-full border border-slate-300 bg-white text-base text-slate-700\"\n onClick={onDecrease}\n >\n -\n </Button>\n <Text className=\"text-sm font-semibold\">{item.quantity}</Text>\n <Button\n className=\"h-9 w-9 rounded-full border border-slate-300 bg-white text-base text-slate-700\"\n onClick={onIncrease}\n >\n +\n </Button>\n <Button\n className=\"ml-auto h-9 rounded-md border border-rose-200 bg-rose-50 px-3 text-xs font-medium text-rose-600\"\n onClick={onRemove}\n >\n 移除\n </Button>\n </View>\n </View>\n </View>\n );\n};\n\nexport default CartItemCard;\n","import React from 'react';\nimport { Image, Text, View } from '@tarojs/components';\nimport type { Booking } from '../../../types/booking';\nimport { formatPrice } from '../../../logic/shared/format';\n\nconst statusLabelMap: Record<string, string> = {\n pending: '待确认',\n confirmed: '已确认',\n completed: '已完成',\n cancelled: '已取消'\n};\n\nconst statusStyleMap: Record<string, 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\ninterface HistoryRecordCardProps {\n record: Booking;\n}\n\nconst HistoryRecordCard: React.FC<HistoryRecordCardProps> = ({ record }) => {\n const statusText = statusLabelMap[record.status] || record.status;\n const statusStyle = statusStyleMap[record.status] || 'bg-slate-100 text-slate-600';\n\n return (\n <View className=\"flex gap-3 rounded-lg border border-slate-200 bg-white p-4\">\n {record.collection?.coverImage ? (\n <Image\n src={record.collection.coverImage}\n mode=\"aspectFill\"\n className=\"h-16 w-16 rounded-lg\"\n />\n ) : (\n <View className=\"flex h-16 w-16 items-center justify-center rounded-lg bg-slate-100 text-xs text-slate-500\">\n 暂无图片\n </View>\n )}\n <View className=\"flex-1\">\n <Text className=\"text-sm font-semibold text-slate-900\">\n {record.collection?.title || '画集'}\n </Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">数量:{record.quantity}</Text>\n <Text className=\"mt-1 block text-xs text-slate-600\">\n 价格:{formatPrice(record.collection?.price)}\n </Text>\n <View className=\"mt-2 flex items-center justify-between\">\n <View className={`rounded-full px-2 py-0.5 text-[10px] font-medium ${statusStyle}`}>\n <Text>{statusText}</Text>\n </View>\n <Text className=\"text-xs text-slate-400\">{record.createdAt?.slice(0, 10)}</Text>\n </View>\n </View>\n </View>\n );\n};\n\nexport default HistoryRecordCard;\n"]}