sa2kit 1.6.57 → 1.6.58
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.
- package/dist/AliyunOSSProvider-KSYW2IOG.js +15 -0
- package/dist/{AliyunOSSProvider-2FARPAQD.js.map → AliyunOSSProvider-KSYW2IOG.js.map} +1 -1
- package/dist/AliyunOSSProvider-TBK3G7YK.mjs +6 -0
- package/dist/{AliyunOSSProvider-UMVGVBDJ.mjs.map → AliyunOSSProvider-TBK3G7YK.mjs.map} +1 -1
- package/dist/LocalStorageProvider-2DGYRQAB.mjs +6 -0
- package/dist/{LocalStorageProvider-PYOHETJV.mjs.map → LocalStorageProvider-2DGYRQAB.mjs.map} +1 -1
- package/dist/LocalStorageProvider-SSRW3ZJW.js +15 -0
- package/dist/{LocalStorageProvider-JQF5WK5H.js.map → LocalStorageProvider-SSRW3ZJW.js.map} +1 -1
- package/dist/UniversalFileService-336GFY6N.mjs +6 -0
- package/dist/{UniversalFileService-TNYKO6JN.mjs.map → UniversalFileService-336GFY6N.mjs.map} +1 -1
- package/dist/UniversalFileService-J6ET6KZK.js +15 -0
- package/dist/{UniversalFileService-RBV6EN5J.js.map → UniversalFileService-J6ET6KZK.js.map} +1 -1
- package/dist/calendar/index.js +11 -11
- package/dist/calendar/index.mjs +4 -4
- package/dist/chunk-25OFOKNF.js +171 -0
- package/dist/chunk-25OFOKNF.js.map +1 -0
- package/dist/chunk-3DXPQ4YV.mjs +165 -0
- package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
- package/dist/{chunk-4VJQZSPU.mjs → chunk-3NHAT7D4.mjs} +3 -4
- package/dist/chunk-3NHAT7D4.mjs.map +1 -0
- package/dist/{chunk-3JW4X3AC.mjs → chunk-622Y6LTH.mjs} +3 -3
- package/dist/{chunk-3JW4X3AC.mjs.map → chunk-622Y6LTH.mjs.map} +1 -1
- package/dist/chunk-CIVO4R6N.mjs +37 -0
- package/dist/chunk-CIVO4R6N.mjs.map +1 -0
- package/dist/{chunk-6BJ76BYC.mjs → chunk-EGJPS7OL.mjs} +3 -3
- package/dist/{chunk-6BJ76BYC.mjs.map → chunk-EGJPS7OL.mjs.map} +1 -1
- package/dist/{chunk-U7AQC2Z7.js → chunk-EKIOJEJK.js} +1179 -2002
- package/dist/chunk-EKIOJEJK.js.map +1 -0
- package/dist/{chunk-53WLQ22S.js → chunk-EOWTOG7Y.js} +6 -6
- package/dist/{chunk-53WLQ22S.js.map → chunk-EOWTOG7Y.js.map} +1 -1
- package/dist/chunk-HDMIOOZY.mjs +546 -0
- package/dist/chunk-HDMIOOZY.mjs.map +1 -0
- package/dist/{chunk-MZKATHB7.js → chunk-HHVDOIPV.js} +4 -4
- package/dist/{chunk-MZKATHB7.js.map → chunk-HHVDOIPV.js.map} +1 -1
- package/dist/chunk-HJ6MH7J7.js +552 -0
- package/dist/chunk-HJ6MH7J7.js.map +1 -0
- package/dist/chunk-KH6RQ4J5.js +28 -0
- package/dist/chunk-KH6RQ4J5.js.map +1 -0
- package/dist/{chunk-35CXIK5Y.js → chunk-NCOXT7SK.js} +11 -11
- package/dist/{chunk-35CXIK5Y.js.map → chunk-NCOXT7SK.js.map} +1 -1
- package/dist/chunk-NZZZUMMX.mjs +784 -0
- package/dist/chunk-NZZZUMMX.mjs.map +1 -0
- package/dist/{chunk-OBIPI4GU.mjs → chunk-OFYBMMWT.mjs} +4 -4
- package/dist/{chunk-OBIPI4GU.mjs.map → chunk-OFYBMMWT.mjs.map} +1 -1
- package/dist/{chunk-W2NCOORK.js → chunk-PVLLRDUT.js} +951 -145
- package/dist/chunk-PVLLRDUT.js.map +1 -0
- package/dist/chunk-Q5EDCKQA.js +336 -0
- package/dist/chunk-Q5EDCKQA.js.map +1 -0
- package/dist/{chunk-6NMIKAE7.mjs → chunk-SNBILYSH.mjs} +5 -5
- package/dist/{chunk-6NMIKAE7.mjs.map → chunk-SNBILYSH.mjs.map} +1 -1
- package/dist/{chunk-IPY26RQH.js → chunk-UVHPCLP6.js} +5 -5
- package/dist/{chunk-IPY26RQH.js.map → chunk-UVHPCLP6.js.map} +1 -1
- package/dist/{chunk-V6BXO6ZS.mjs → chunk-WGD2NBVR.mjs} +835 -38
- package/dist/chunk-WGD2NBVR.mjs.map +1 -0
- package/dist/{chunk-HYZ5C6FY.mjs → chunk-WS3QZYBI.mjs} +1175 -1996
- package/dist/chunk-WS3QZYBI.mjs.map +1 -0
- package/dist/{chunk-UR5TU4MW.mjs → chunk-XLR6QUDR.mjs} +3 -3
- package/dist/{chunk-UR5TU4MW.mjs.map → chunk-XLR6QUDR.mjs.map} +1 -1
- package/dist/chunk-YMS6BPXS.js +807 -0
- package/dist/chunk-YMS6BPXS.js.map +1 -0
- package/dist/chunk-YOTQG4NP.mjs +314 -0
- package/dist/chunk-YOTQG4NP.mjs.map +1 -0
- package/dist/chunk-ZGVB35L2.mjs +25 -0
- package/dist/chunk-ZGVB35L2.mjs.map +1 -0
- package/dist/chunk-ZRAW3HXA.js +43 -0
- package/dist/chunk-ZRAW3HXA.js.map +1 -0
- package/dist/{chunk-4XXIBWCO.js → chunk-ZRWED7Q6.js} +66 -66
- package/dist/{chunk-4XXIBWCO.js.map → chunk-ZRWED7Q6.js.map} +1 -1
- package/dist/{chunk-DVENFCQY.js → chunk-ZWQJSZEY.js} +4 -5
- package/dist/chunk-ZWQJSZEY.js.map +1 -0
- package/dist/components/index.js +104 -104
- package/dist/components/index.mjs +4 -4
- package/dist/index.js +146 -148
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +8 -11
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +7 -7
- package/dist/logger/index.mjs +1 -4
- package/dist/mikuFusionGame/index.js +4 -4
- package/dist/mikuFusionGame/index.mjs +3 -3
- package/dist/portfolio/index.js +10 -10
- package/dist/portfolio/index.mjs +5 -5
- package/dist/showmasterpiece/db/index.js +42 -42
- package/dist/showmasterpiece/db/index.mjs +1 -1
- package/dist/showmasterpiece/index.js +143 -144
- package/dist/showmasterpiece/index.js.map +1 -1
- package/dist/showmasterpiece/index.mjs +7 -9
- package/dist/showmasterpiece/index.mjs.map +1 -1
- package/dist/showmasterpiece/logic/index.js +19 -19
- package/dist/showmasterpiece/logic/index.mjs +2 -2
- package/dist/showmasterpiece/server/index.js +42 -42
- package/dist/showmasterpiece/server/index.mjs +1 -1
- package/dist/showmasterpiece/ui/web/index.js +34 -34
- package/dist/showmasterpiece/ui/web/index.mjs +6 -6
- package/dist/universalExport/server/index.js +2 -4
- package/dist/universalExport/server/index.js.map +1 -1
- package/dist/universalExport/server/index.mjs +1 -3
- package/dist/universalExport/server/index.mjs.map +1 -1
- package/dist/universalFile/index.js +6 -9
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +1 -5
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/universalFile/server/index.js +31 -64
- package/dist/universalFile/server/index.js.map +1 -1
- package/dist/universalFile/server/index.mjs +7 -42
- package/dist/universalFile/server/index.mjs.map +1 -1
- package/dist/utils/index.js +11 -11
- package/dist/utils/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/AliyunOSSProvider-2FARPAQD.js +0 -15
- package/dist/AliyunOSSProvider-UMVGVBDJ.mjs +0 -9
- package/dist/LocalStorageProvider-JQF5WK5H.js +0 -15
- package/dist/LocalStorageProvider-PYOHETJV.mjs +0 -9
- package/dist/UniversalFileService-RBV6EN5J.js +0 -15
- package/dist/UniversalFileService-TNYKO6JN.mjs +0 -9
- package/dist/chunk-4NFOSCM6.js +0 -34
- package/dist/chunk-4NFOSCM6.js.map +0 -1
- package/dist/chunk-4VJQZSPU.mjs.map +0 -1
- package/dist/chunk-6AHYPPUP.js +0 -344
- package/dist/chunk-6AHYPPUP.js.map +0 -1
- package/dist/chunk-76V7EKBX.mjs +0 -796
- package/dist/chunk-76V7EKBX.mjs.map +0 -1
- package/dist/chunk-ACLOJXXE.js +0 -195
- package/dist/chunk-ACLOJXXE.js.map +0 -1
- package/dist/chunk-AEXPAH7Z.mjs +0 -32
- package/dist/chunk-AEXPAH7Z.mjs.map +0 -1
- package/dist/chunk-CFGX3EKK.js +0 -560
- package/dist/chunk-CFGX3EKK.js.map +0 -1
- package/dist/chunk-D2HXMGXS.js +0 -46
- package/dist/chunk-D2HXMGXS.js.map +0 -1
- package/dist/chunk-DVENFCQY.js.map +0 -1
- package/dist/chunk-HYZ5C6FY.mjs.map +0 -1
- package/dist/chunk-K7WNCB4V.mjs +0 -554
- package/dist/chunk-K7WNCB4V.mjs.map +0 -1
- package/dist/chunk-L4ZYBFB2.mjs +0 -44
- package/dist/chunk-L4ZYBFB2.mjs.map +0 -1
- package/dist/chunk-M4HGHTIC.js +0 -820
- package/dist/chunk-M4HGHTIC.js.map +0 -1
- package/dist/chunk-PXWDQFWV.mjs +0 -192
- package/dist/chunk-PXWDQFWV.mjs.map +0 -1
- package/dist/chunk-U7AQC2Z7.js.map +0 -1
- package/dist/chunk-V6BXO6ZS.mjs.map +0 -1
- package/dist/chunk-VTGPHE4Z.mjs +0 -322
- package/dist/chunk-VTGPHE4Z.mjs.map +0 -1
- package/dist/chunk-W2NCOORK.js.map +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkEKIOJEJK_js = require('./chunk-EKIOJEJK.js');
|
|
4
4
|
var chunkDENROXAE_js = require('./chunk-DENROXAE.js');
|
|
5
5
|
var chunkDM2GUVUH_js = require('./chunk-DM2GUVUH.js');
|
|
6
|
-
var
|
|
6
|
+
var chunkZRWED7Q6_js = require('./chunk-ZRWED7Q6.js');
|
|
7
|
+
var chunkZ6ZWNWWR_js = require('./chunk-Z6ZWNWWR.js');
|
|
7
8
|
var React29 = require('react');
|
|
8
9
|
var lucideReact = require('lucide-react');
|
|
9
10
|
var Link = require('next/link');
|
|
@@ -15,7 +16,7 @@ var React29__default = /*#__PURE__*/_interopDefault(React29);
|
|
|
15
16
|
var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
16
17
|
|
|
17
18
|
// src/showmasterpiece/ui/web/components/AddToCartButton.tsx
|
|
18
|
-
|
|
19
|
+
chunkEKIOJEJK_js.init_hooks();
|
|
19
20
|
var AddToCartButton = ({
|
|
20
21
|
collection,
|
|
21
22
|
userId,
|
|
@@ -23,7 +24,7 @@ var AddToCartButton = ({
|
|
|
23
24
|
size = "md",
|
|
24
25
|
showQuantitySelector = false
|
|
25
26
|
}) => {
|
|
26
|
-
const { cart, addToCart: addToCartContext, updateCartItem: updateCartItemContext, removeFromCart: removeFromCartContext, loading } =
|
|
27
|
+
const { cart, addToCart: addToCartContext, updateCartItem: updateCartItemContext, removeFromCart: removeFromCartContext, loading } = chunkEKIOJEJK_js.useCartContext();
|
|
27
28
|
const [quantity, setQuantity] = React29.useState(1);
|
|
28
29
|
const [isAdded, setIsAdded] = React29.useState(false);
|
|
29
30
|
const cartItem = cart.items.find((item) => item.collectionId === collection.id);
|
|
@@ -238,22 +239,22 @@ var CollectionCard = ({
|
|
|
238
239
|
};
|
|
239
240
|
const isProduct = collection.category !== "collection" /* COLLECTION */;
|
|
240
241
|
return /* @__PURE__ */ React29__default.default.createElement(
|
|
241
|
-
|
|
242
|
+
chunkZRWED7Q6_js.Card,
|
|
242
243
|
{
|
|
243
244
|
ref: cardRef,
|
|
244
245
|
className: `overflow-hidden transition-all duration-300 transform w-full max-w-sm mx-auto group border-prussian-blue-200/30 shadow-lg hover:shadow-xl bg-gradient-to-br from-white to-prussian-blue-900/5 ${!(collection.pages && collection.pages.length > 0) ? "cursor-default" : "cursor-pointer hover:-translate-y-1 hover:shadow-moonstone/20 hover:border-moonstone/40"}`,
|
|
245
246
|
onClick: collection.pages && collection.pages.length > 0 ? () => onSelect(collection) : void 0
|
|
246
247
|
},
|
|
247
248
|
/* @__PURE__ */ React29__default.default.createElement("div", { className: "relative w-full bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 flex items-center justify-center overflow-hidden aspect-[1/1.414]" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute inset-0 bg-gradient-to-t from-rich-black/60 via-oxford-blue/20 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300" }), /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute bottom-4 left-4 z-10" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
248
|
-
|
|
249
|
+
chunkZRWED7Q6_js.Badge,
|
|
249
250
|
{
|
|
250
251
|
variant: "secondary",
|
|
251
252
|
className: "bg-moonstone/90 text-white backdrop-blur-sm border-none hover:bg-cerulean/90 transition-colors shadow-lg"
|
|
252
253
|
},
|
|
253
254
|
isProduct ? /* @__PURE__ */ React29__default.default.createElement(React29__default.default.Fragment, null, /* @__PURE__ */ React29__default.default.createElement(lucideReact.ShoppingBag, { size: 16, className: "mr-1" }), "\u5546\u54C1") : /* @__PURE__ */ React29__default.default.createElement(React29__default.default.Fragment, null, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Book, { size: 16, className: "mr-1" }), collection.pages.length, " \u9875")
|
|
254
255
|
)), renderCoverImage()),
|
|
255
|
-
/* @__PURE__ */ React29__default.default.createElement(
|
|
256
|
-
|
|
256
|
+
/* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardContent, { className: "p-6" }, /* @__PURE__ */ React29__default.default.createElement("h3", { className: "text-xl font-bold text-rich-black mb-2 line-clamp-2 group-hover:text-moonstone transition-colors" }, collection.title), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-prussian-blue-600 text-sm mb-1" }, "\u7F16\u53F7\uFF1A", collection.number), collection.category && /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-prussian-blue-600 text-sm mb-1" }, "\u5206\u7C7B\uFF1A", collection.category.displayName), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-prussian-blue-700 text-sm mb-2 font-medium" }, "\u4EF7\u683C\uFF1A", formatPrice(collection.price)), collection.description && /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-prussian-blue-500 text-sm mb-4 line-clamp-2" }, collection.description), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex gap-2" }, collection.pages && collection.pages.length > 0 && /* @__PURE__ */ React29__default.default.createElement(
|
|
257
|
+
chunkZRWED7Q6_js.Button,
|
|
257
258
|
{
|
|
258
259
|
className: "flex-1 bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white gap-2 shadow-lg transition-all duration-300 hover:shadow-moonstone/30",
|
|
259
260
|
onClick: (e) => {
|
|
@@ -330,8 +331,8 @@ var ArtworkViewer = ({
|
|
|
330
331
|
}
|
|
331
332
|
}, 100);
|
|
332
333
|
};
|
|
333
|
-
return /* @__PURE__ */ React29__default.default.createElement(
|
|
334
|
-
|
|
334
|
+
return /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Card, { className: "w-full max-w-full box-border mx-auto shadow-lg border-prussian-blue-200/30 bg-gradient-to-br from-white to-prussian-blue-900/5" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardContent, { className: "p-6 lg:p-5 md:p-4 sm:p-3" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "relative min-h-[600px] flex items-center justify-center bg-gradient-to-br from-prussian-blue-900/5 to-oxford-blue-100/10 rounded-lg overflow-hidden lg:min-h-[500px] md:min-h-[450px] sm:min-h-[350px] sm:rounded-md" }, imageLoading && /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center justify-center gap-4 text-prussian-blue-600 text-center p-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "w-10 h-10 border-[3px] border-prussian-blue-300 border-t-moonstone rounded-full animate-spin" }), /* @__PURE__ */ React29__default.default.createElement("p", null, "\u52A0\u8F7D\u4E2D...")), imageError && /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 flex flex-col items-center justify-center gap-4 text-prussian-blue-600 text-center p-4" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.ImageIcon, { size: 48, className: "text-prussian-blue-500" }), /* @__PURE__ */ React29__default.default.createElement("p", null, "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25"), /* @__PURE__ */ React29__default.default.createElement(
|
|
335
|
+
chunkZRWED7Q6_js.Button,
|
|
335
336
|
{
|
|
336
337
|
onClick: retryImageLoad,
|
|
337
338
|
className: "bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300"
|
|
@@ -348,7 +349,7 @@ var ArtworkViewer = ({
|
|
|
348
349
|
onError: handleImageError
|
|
349
350
|
}
|
|
350
351
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
351
|
-
|
|
352
|
+
chunkZRWED7Q6_js.Button,
|
|
352
353
|
{
|
|
353
354
|
onClick: onPrev,
|
|
354
355
|
disabled: !canGoPrev,
|
|
@@ -359,7 +360,7 @@ var ArtworkViewer = ({
|
|
|
359
360
|
},
|
|
360
361
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.ChevronLeft, { size: 24 })
|
|
361
362
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
362
|
-
|
|
363
|
+
chunkZRWED7Q6_js.Button,
|
|
363
364
|
{
|
|
364
365
|
onClick: onNext,
|
|
365
366
|
disabled: !canGoNext,
|
|
@@ -369,7 +370,7 @@ var ArtworkViewer = ({
|
|
|
369
370
|
"aria-label": "\u4E0B\u4E00\u5F20"
|
|
370
371
|
},
|
|
371
372
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.ChevronRight, { size: 24 })
|
|
372
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "mt-6 w-full max-w-full box-border lg:mt-5 md:mt-5 sm:mt-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-2xl font-bold text-rich-black leading-tight lg:text-xl md:text-xl sm:text-lg sm:leading-5" }, artwork.title), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
373
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "mt-6 w-full max-w-full box-border lg:mt-5 md:mt-5 sm:mt-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-2xl font-bold text-rich-black leading-tight lg:text-xl md:text-xl sm:text-lg sm:leading-5" }, artwork.title), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-wrap gap-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "outline", className: "border-moonstone/30 text-cerulean bg-moonstone-900/5" }, "\u7F16\u53F7\uFF1A", artwork.number), artwork.createdTime && /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "outline", className: "border-moonstone/30 text-cerulean bg-moonstone-900/5" }, "\u521B\u4F5C\u65F6\u95F4\uFF1A", artwork.createdTime), artwork.theme && /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "outline", className: "border-moonstone/30 text-cerulean bg-moonstone-900/5" }, "\u4E3B\u9898\uFF1A", artwork.theme)), artwork.description && /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-base text-prussian-blue-700 leading-relaxed sm:text-sm sm:leading-6" }, artwork.description)))));
|
|
373
374
|
};
|
|
374
375
|
var MobileAlbumViewer = ({
|
|
375
376
|
artworks,
|
|
@@ -539,7 +540,7 @@ var MobileAlbumViewer = ({
|
|
|
539
540
|
},
|
|
540
541
|
imageLoading && /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-rich-black/50" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center gap-4 text-white" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "w-10 h-10 border-[3px] border-prussian-blue-300 border-t-moonstone rounded-full animate-spin" }), /* @__PURE__ */ React29__default.default.createElement("p", null, "\u52A0\u8F7D\u4E2D..."))),
|
|
541
542
|
imageError && /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute inset-0 flex items-center justify-center bg-rich-black/50" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center gap-4 text-white text-center p-4" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.ImageIcon, { size: 48, className: "text-moonstone" }), /* @__PURE__ */ React29__default.default.createElement("p", null, "\u56FE\u7247\u52A0\u8F7D\u5931\u8D25"), /* @__PURE__ */ React29__default.default.createElement(
|
|
542
|
-
|
|
543
|
+
chunkZRWED7Q6_js.Button,
|
|
543
544
|
{
|
|
544
545
|
onClick: retryImageLoad,
|
|
545
546
|
className: "bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300"
|
|
@@ -562,7 +563,7 @@ var MobileAlbumViewer = ({
|
|
|
562
563
|
}
|
|
563
564
|
),
|
|
564
565
|
/* @__PURE__ */ React29__default.default.createElement(
|
|
565
|
-
|
|
566
|
+
chunkZRWED7Q6_js.Button,
|
|
566
567
|
{
|
|
567
568
|
onClick: onPrev,
|
|
568
569
|
disabled: !canGoPrev,
|
|
@@ -574,7 +575,7 @@ var MobileAlbumViewer = ({
|
|
|
574
575
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.ChevronLeft, { size: 24 })
|
|
575
576
|
),
|
|
576
577
|
/* @__PURE__ */ React29__default.default.createElement(
|
|
577
|
-
|
|
578
|
+
chunkZRWED7Q6_js.Button,
|
|
578
579
|
{
|
|
579
580
|
onClick: onNext,
|
|
580
581
|
disabled: !canGoNext,
|
|
@@ -585,8 +586,8 @@ var MobileAlbumViewer = ({
|
|
|
585
586
|
},
|
|
586
587
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.ChevronRight, { size: 24 })
|
|
587
588
|
),
|
|
588
|
-
/* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute top-0 left-0 right-0 bg-gradient-to-b from-rich-black/80 via-oxford-blue/40 to-transparent p-4 z-20" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between text-white" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
589
|
-
|
|
589
|
+
/* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute top-0 left-0 right-0 bg-gradient-to-b from-rich-black/80 via-oxford-blue/40 to-transparent p-4 z-20" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between text-white" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "secondary", className: "bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm" }, currentIndex + 1, " / ", artworks.length)), /* @__PURE__ */ React29__default.default.createElement(
|
|
590
|
+
chunkZRWED7Q6_js.Button,
|
|
590
591
|
{
|
|
591
592
|
onClick: toggleThumbnails,
|
|
592
593
|
size: "icon",
|
|
@@ -596,9 +597,9 @@ var MobileAlbumViewer = ({
|
|
|
596
597
|
},
|
|
597
598
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.Grid3x3, { size: 20 })
|
|
598
599
|
))),
|
|
599
|
-
/* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-rich-black/80 via-oxford-blue/40 to-transparent p-4 z-20" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "text-white" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-xl font-bold mb-2" }, currentArtwork.title), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-wrap gap-2 mb-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
600
|
+
/* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute bottom-0 left-0 right-0 bg-gradient-to-t from-rich-black/80 via-oxford-blue/40 to-transparent p-4 z-20" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "text-white" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-xl font-bold mb-2" }, currentArtwork.title), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-wrap gap-2 mb-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "secondary", className: "bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm" }, "\u7F16\u53F7\uFF1A", currentArtwork.number), currentArtwork.createdTime && /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "secondary", className: "bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm" }, "\u521B\u4F5C\u65F6\u95F4\uFF1A", currentArtwork.createdTime), currentArtwork.theme && /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "secondary", className: "bg-moonstone/30 text-white border-moonstone/50 backdrop-blur-sm" }, "\u4E3B\u9898\uFF1A", currentArtwork.theme)), currentArtwork.description && /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-sm text-white/90 leading-relaxed" }, currentArtwork.description)))
|
|
600
601
|
), showThumbnails && /* @__PURE__ */ React29__default.default.createElement("div", { className: "absolute inset-0 bg-gradient-to-br from-rich-black/95 to-oxford-blue/90 backdrop-blur-sm z-30 flex flex-col" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between p-4 border-b border-moonstone/30" }, /* @__PURE__ */ React29__default.default.createElement("h3", { className: "text-white text-lg font-semibold" }, "\u9009\u62E9\u56FE\u7247"), /* @__PURE__ */ React29__default.default.createElement(
|
|
601
|
-
|
|
602
|
+
chunkZRWED7Q6_js.Button,
|
|
602
603
|
{
|
|
603
604
|
onClick: () => setShowThumbnails(false),
|
|
604
605
|
size: "icon",
|
|
@@ -732,8 +733,804 @@ var ThumbnailSidebar = ({
|
|
|
732
733
|
))));
|
|
733
734
|
};
|
|
734
735
|
|
|
735
|
-
// src/showmasterpiece/
|
|
736
|
-
|
|
736
|
+
// src/showmasterpiece/services/index.ts
|
|
737
|
+
chunkEKIOJEJK_js.init_masterpiecesService();
|
|
738
|
+
chunkEKIOJEJK_js.init_masterpiecesConfigService();
|
|
739
|
+
chunkEKIOJEJK_js.init_cartService();
|
|
740
|
+
chunkEKIOJEJK_js.init_bookingService();
|
|
741
|
+
chunkEKIOJEJK_js.init_bookingAdminService();
|
|
742
|
+
chunkEKIOJEJK_js.init_cartHistoryService();
|
|
743
|
+
|
|
744
|
+
// src/services/universalFile/config/index.ts
|
|
745
|
+
if (typeof window === "undefined") {
|
|
746
|
+
try {
|
|
747
|
+
chunkZ6ZWNWWR_js.__require("dotenv").config({ path: chunkZ6ZWNWWR_js.__require("path").join(process.cwd(), ".env.local") });
|
|
748
|
+
} catch (error) {
|
|
749
|
+
console.warn("\u26A0\uFE0F [ConfigManager] \u65E0\u6CD5\u52A0\u8F7D.env.local\u6587\u4EF6:", error);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
var DEFAULT_CONFIG = {
|
|
753
|
+
defaultStorage: "aliyun-oss",
|
|
754
|
+
// 修改默认存储为OSS
|
|
755
|
+
storageProviders: {
|
|
756
|
+
"local": {
|
|
757
|
+
type: "local",
|
|
758
|
+
enabled: false,
|
|
759
|
+
// 默认禁用本地存储
|
|
760
|
+
rootPath: process.env.FILE_STORAGE_PATH || "uploads",
|
|
761
|
+
baseUrl: process.env.FILE_BASE_URL || "/uploads"
|
|
762
|
+
},
|
|
763
|
+
"aliyun-oss": {
|
|
764
|
+
type: "aliyun-oss",
|
|
765
|
+
enabled: true,
|
|
766
|
+
// 默认启用OSS
|
|
767
|
+
region: "",
|
|
768
|
+
bucket: "",
|
|
769
|
+
accessKeyId: "",
|
|
770
|
+
accessKeySecret: ""
|
|
771
|
+
},
|
|
772
|
+
"aws-s3": {
|
|
773
|
+
type: "aws-s3",
|
|
774
|
+
enabled: false
|
|
775
|
+
},
|
|
776
|
+
"qcloud-cos": {
|
|
777
|
+
type: "qcloud-cos",
|
|
778
|
+
enabled: false
|
|
779
|
+
}
|
|
780
|
+
},
|
|
781
|
+
defaultCDN: "none",
|
|
782
|
+
cdnProviders: {
|
|
783
|
+
"none": {
|
|
784
|
+
type: "none",
|
|
785
|
+
enabled: false
|
|
786
|
+
},
|
|
787
|
+
"aliyun-cdn": {
|
|
788
|
+
type: "aliyun-cdn",
|
|
789
|
+
enabled: false,
|
|
790
|
+
domain: "",
|
|
791
|
+
accessKeyId: "",
|
|
792
|
+
accessKeySecret: ""
|
|
793
|
+
},
|
|
794
|
+
"aws-cloudfront": {
|
|
795
|
+
type: "aws-cloudfront",
|
|
796
|
+
enabled: false
|
|
797
|
+
},
|
|
798
|
+
"qcloud-cdn": {
|
|
799
|
+
type: "qcloud-cdn",
|
|
800
|
+
enabled: false
|
|
801
|
+
}
|
|
802
|
+
},
|
|
803
|
+
maxFileSize: parseInt(process.env.MAX_FILE_SIZE || "104857600"),
|
|
804
|
+
// 100MB
|
|
805
|
+
allowedMimeTypes: [
|
|
806
|
+
// 图片类型
|
|
807
|
+
"image/jpeg",
|
|
808
|
+
"image/png",
|
|
809
|
+
"image/gif",
|
|
810
|
+
"image/webp",
|
|
811
|
+
"image/svg+xml",
|
|
812
|
+
// 音频类型
|
|
813
|
+
"audio/mpeg",
|
|
814
|
+
"audio/wav",
|
|
815
|
+
"audio/ogg",
|
|
816
|
+
"audio/mp4",
|
|
817
|
+
"audio/aac",
|
|
818
|
+
// 视频类型
|
|
819
|
+
"video/mp4",
|
|
820
|
+
"video/avi",
|
|
821
|
+
"video/mov",
|
|
822
|
+
"video/webm",
|
|
823
|
+
"video/mkv",
|
|
824
|
+
// 文档类型
|
|
825
|
+
"application/pdf",
|
|
826
|
+
"text/plain",
|
|
827
|
+
"application/json",
|
|
828
|
+
"application/javascript",
|
|
829
|
+
"text/css",
|
|
830
|
+
"text/html",
|
|
831
|
+
"text/markdown",
|
|
832
|
+
// 压缩文件
|
|
833
|
+
"application/zip",
|
|
834
|
+
"application/x-zip-compressed",
|
|
835
|
+
"application/x-rar-compressed",
|
|
836
|
+
"application/x-7z-compressed",
|
|
837
|
+
// 3D模型文件
|
|
838
|
+
"application/octet-stream",
|
|
839
|
+
// PMD/PMX文件
|
|
840
|
+
"model/gltf+json",
|
|
841
|
+
"model/gltf-binary"
|
|
842
|
+
],
|
|
843
|
+
enableProcessing: process.env.ENABLE_FILE_PROCESSING === "true",
|
|
844
|
+
processingQueueSize: parseInt(process.env.PROCESSING_QUEUE_SIZE || "10"),
|
|
845
|
+
cache: {
|
|
846
|
+
metadataTTL: parseInt(process.env.METADATA_CACHE_TTL || "3600"),
|
|
847
|
+
// 1小时
|
|
848
|
+
urlTTL: parseInt(process.env.URL_CACHE_TTL || "1800")
|
|
849
|
+
// 30分钟
|
|
850
|
+
}
|
|
851
|
+
};
|
|
852
|
+
var FileServiceConfigManager = class {
|
|
853
|
+
constructor(customConfig) {
|
|
854
|
+
this.config = this.mergeConfig(DEFAULT_CONFIG, customConfig);
|
|
855
|
+
this.validateConfig();
|
|
856
|
+
}
|
|
857
|
+
/**
|
|
858
|
+
* 获取完整配置
|
|
859
|
+
*/
|
|
860
|
+
getConfig() {
|
|
861
|
+
return { ...this.config };
|
|
862
|
+
}
|
|
863
|
+
/**
|
|
864
|
+
* 获取存储提供者配置
|
|
865
|
+
*/
|
|
866
|
+
getStorageConfig(type) {
|
|
867
|
+
return this.config.storageProviders[type];
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* 获取CDN提供者配置
|
|
871
|
+
*/
|
|
872
|
+
getCDNConfig(type) {
|
|
873
|
+
return this.config.cdnProviders[type];
|
|
874
|
+
}
|
|
875
|
+
/**
|
|
876
|
+
* 更新配置
|
|
877
|
+
*/
|
|
878
|
+
updateConfig(updates) {
|
|
879
|
+
this.config = this.mergeConfig(this.config, updates);
|
|
880
|
+
this.validateConfig();
|
|
881
|
+
}
|
|
882
|
+
/**
|
|
883
|
+
* 启用存储提供者
|
|
884
|
+
*/
|
|
885
|
+
enableStorageProvider(type, config) {
|
|
886
|
+
if (this.config.storageProviders[type]) {
|
|
887
|
+
this.config.storageProviders[type] = {
|
|
888
|
+
...this.config.storageProviders[type],
|
|
889
|
+
...config,
|
|
890
|
+
enabled: true
|
|
891
|
+
};
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
/**
|
|
895
|
+
* 禁用存储提供者
|
|
896
|
+
*/
|
|
897
|
+
disableStorageProvider(type) {
|
|
898
|
+
if (this.config.storageProviders[type]) {
|
|
899
|
+
this.config.storageProviders[type].enabled = false;
|
|
900
|
+
}
|
|
901
|
+
}
|
|
902
|
+
/**
|
|
903
|
+
* 启用CDN提供者
|
|
904
|
+
*/
|
|
905
|
+
enableCDNProvider(type, config) {
|
|
906
|
+
if (this.config.cdnProviders[type]) {
|
|
907
|
+
this.config.cdnProviders[type] = {
|
|
908
|
+
...this.config.cdnProviders[type],
|
|
909
|
+
...config,
|
|
910
|
+
enabled: true
|
|
911
|
+
};
|
|
912
|
+
this.config.defaultCDN = type;
|
|
913
|
+
}
|
|
914
|
+
}
|
|
915
|
+
/**
|
|
916
|
+
* 禁用CDN提供者
|
|
917
|
+
*/
|
|
918
|
+
disableCDNProvider(type) {
|
|
919
|
+
if (this.config.cdnProviders[type]) {
|
|
920
|
+
this.config.cdnProviders[type].enabled = false;
|
|
921
|
+
if (this.config.defaultCDN === type) {
|
|
922
|
+
this.config.defaultCDN = "none";
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
/**
|
|
927
|
+
* 从环境变量加载阿里云OSS配置
|
|
928
|
+
*/
|
|
929
|
+
loadAliyunOSSFromEnv() {
|
|
930
|
+
const config = {
|
|
931
|
+
region: process.env.ALIYUN_OSS_REGION,
|
|
932
|
+
bucket: process.env.ALIYUN_OSS_BUCKET,
|
|
933
|
+
accessKeyId: process.env.ALIYUN_OSS_ACCESS_KEY_ID,
|
|
934
|
+
accessKeySecret: process.env.ALIYUN_OSS_ACCESS_KEY_SECRET,
|
|
935
|
+
customDomain: process.env.ALIYUN_OSS_CUSTOM_DOMAIN,
|
|
936
|
+
secure: process.env.ALIYUN_OSS_SECURE === "true",
|
|
937
|
+
internal: process.env.ALIYUN_OSS_INTERNAL === "true"
|
|
938
|
+
};
|
|
939
|
+
console.log("\u{1F50D} [ConfigManager] \u963F\u91CC\u4E91OSS\u914D\u7F6E:", {
|
|
940
|
+
region: config.region,
|
|
941
|
+
bucket: config.bucket,
|
|
942
|
+
accessKeyId: config.accessKeyId ? "***" : "\u672A\u8BBE\u7F6E",
|
|
943
|
+
accessKeySecret: config.accessKeySecret ? "***" : "\u672A\u8BBE\u7F6E",
|
|
944
|
+
customDomain: config.customDomain || "\u672A\u8BBE\u7F6E"
|
|
945
|
+
});
|
|
946
|
+
if (config.region && config.bucket && config.accessKeyId && config.accessKeySecret) {
|
|
947
|
+
this.enableStorageProvider("aliyun-oss", config);
|
|
948
|
+
this.config.defaultStorage = "aliyun-oss";
|
|
949
|
+
console.log("\u2705 [ConfigManager] \u4ECE\u73AF\u5883\u53D8\u91CF\u52A0\u8F7D\u963F\u91CC\u4E91OSS\u914D\u7F6E\u6210\u529F");
|
|
950
|
+
} else {
|
|
951
|
+
console.warn("\u26A0\uFE0F [ConfigManager] \u963F\u91CC\u4E91OSS\u73AF\u5883\u53D8\u91CF\u914D\u7F6E\u4E0D\u5B8C\u6574");
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
/**
|
|
955
|
+
* 从配置管理模块加载阿里云OSS配置
|
|
956
|
+
*/
|
|
957
|
+
async loadAliyunOSSFromConfigManager() {
|
|
958
|
+
return;
|
|
959
|
+
}
|
|
960
|
+
/**
|
|
961
|
+
* 从环境变量加载阿里云CDN配置
|
|
962
|
+
*/
|
|
963
|
+
loadAliyunCDNFromEnv() {
|
|
964
|
+
const config = {
|
|
965
|
+
domain: process.env.ALIYUN_CDN_DOMAIN,
|
|
966
|
+
accessKeyId: process.env.ALIYUN_CDN_ACCESS_KEY_ID,
|
|
967
|
+
accessKeySecret: process.env.ALIYUN_CDN_ACCESS_KEY_SECRET,
|
|
968
|
+
region: process.env.ALIYUN_CDN_REGION
|
|
969
|
+
};
|
|
970
|
+
if (config.domain && config.accessKeyId && config.accessKeySecret) {
|
|
971
|
+
this.enableCDNProvider("aliyun-cdn", config);
|
|
972
|
+
console.log("\u2705 [ConfigManager] \u4ECE\u73AF\u5883\u53D8\u91CF\u52A0\u8F7D\u963F\u91CC\u4E91CDN\u914D\u7F6E\u6210\u529F");
|
|
973
|
+
} else {
|
|
974
|
+
console.log("\u2139\uFE0F [ConfigManager] \u963F\u91CC\u4E91CDN\u672A\u914D\u7F6E\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u5B58\u50A8\u65B9\u5F0F");
|
|
975
|
+
}
|
|
976
|
+
}
|
|
977
|
+
/**
|
|
978
|
+
* 验证配置有效性
|
|
979
|
+
*/
|
|
980
|
+
validateConfig() {
|
|
981
|
+
const defaultStorageConfig = this.config.storageProviders[this.config.defaultStorage];
|
|
982
|
+
if (!defaultStorageConfig || !defaultStorageConfig.enabled) {
|
|
983
|
+
console.warn(`\u26A0\uFE0F [ConfigManager] \u9ED8\u8BA4\u5B58\u50A8\u63D0\u4F9B\u8005 ${this.config.defaultStorage} \u672A\u542F\u7528`);
|
|
984
|
+
}
|
|
985
|
+
if (this.config.maxFileSize <= 0) {
|
|
986
|
+
throw new Error("\u6587\u4EF6\u5927\u5C0F\u9650\u5236\u5FC5\u987B\u5927\u4E8E0");
|
|
987
|
+
}
|
|
988
|
+
if (this.config.processingQueueSize <= 0) {
|
|
989
|
+
throw new Error("\u5904\u7406\u961F\u5217\u5927\u5C0F\u5FC5\u987B\u5927\u4E8E0");
|
|
990
|
+
}
|
|
991
|
+
if (this.config.cache.metadataTTL <= 0 || this.config.cache.urlTTL <= 0) {
|
|
992
|
+
throw new Error("\u7F13\u5B58TTL\u5FC5\u987B\u5927\u4E8E0");
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
/**
|
|
996
|
+
* 合并配置
|
|
997
|
+
*/
|
|
998
|
+
mergeConfig(base, override) {
|
|
999
|
+
if (!override) return { ...base };
|
|
1000
|
+
return {
|
|
1001
|
+
...base,
|
|
1002
|
+
...override,
|
|
1003
|
+
storageProviders: {
|
|
1004
|
+
...base.storageProviders,
|
|
1005
|
+
...override.storageProviders || {}
|
|
1006
|
+
},
|
|
1007
|
+
cdnProviders: {
|
|
1008
|
+
...base.cdnProviders,
|
|
1009
|
+
...override.cdnProviders || {}
|
|
1010
|
+
},
|
|
1011
|
+
cache: {
|
|
1012
|
+
...base.cache,
|
|
1013
|
+
...override.cache || {}
|
|
1014
|
+
}
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
1017
|
+
};
|
|
1018
|
+
async function createFileServiceConfig(customConfig) {
|
|
1019
|
+
const configManager = new FileServiceConfigManager(customConfig);
|
|
1020
|
+
await configManager.loadAliyunOSSFromEnv();
|
|
1021
|
+
await configManager.loadAliyunCDNFromEnv();
|
|
1022
|
+
await configManager.loadAliyunOSSFromConfigManager();
|
|
1023
|
+
return configManager;
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
// src/showmasterpiece/services/fileService.ts
|
|
1027
|
+
var cachedConfigManager = null;
|
|
1028
|
+
async function getShowmasterpieceOSSConfig() {
|
|
1029
|
+
try {
|
|
1030
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u5C1D\u8BD5\u4ECE\u72EC\u7ACB\u914D\u7F6E\u8BFB\u53D6OSS\u914D\u7F6E...");
|
|
1031
|
+
const environment = process.env.NODE_ENV === "production" ? "production" : "development";
|
|
1032
|
+
console.log(`\u{1F3A8} [ShowMasterpiece] \u5F53\u524D\u73AF\u5883: ${environment}`);
|
|
1033
|
+
if (typeof window !== "undefined") {
|
|
1034
|
+
console.log("\u{1F310} [ShowMasterpiece] \u5BA2\u6237\u7AEF\u73AF\u5883\uFF0C\u901A\u8FC7API\u8BFB\u53D6\u914D\u7F6E");
|
|
1035
|
+
const configKeys = "ALIYUN_OSS_REGION,ALIYUN_OSS_BUCKET,ALIYUN_OSS_ACCESS_KEY_ID,ALIYUN_OSS_ACCESS_KEY_SECRET,ALIYUN_OSS_CUSTOM_DOMAIN,ALIYUN_OSS_SECURE,ALIYUN_OSS_INTERNAL";
|
|
1036
|
+
const response = await fetch(`/api/showmasterpiece/config/items?environment=${environment}&keys=${configKeys}`);
|
|
1037
|
+
if (!response.ok) {
|
|
1038
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u8BFB\u53D6\u72EC\u7ACB\u914D\u7F6EAPI\u5931\u8D25:", response.status);
|
|
1039
|
+
return null;
|
|
1040
|
+
}
|
|
1041
|
+
const data = await response.json();
|
|
1042
|
+
if (!data.success || !data.items) {
|
|
1043
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6EAPI\u54CD\u5E94\u5F02\u5E38:", data);
|
|
1044
|
+
return null;
|
|
1045
|
+
}
|
|
1046
|
+
const configMap = {};
|
|
1047
|
+
data.items.forEach((item) => {
|
|
1048
|
+
if (item.value) {
|
|
1049
|
+
configMap[item.key] = item.value;
|
|
1050
|
+
}
|
|
1051
|
+
});
|
|
1052
|
+
const ossConfig = {
|
|
1053
|
+
region: configMap["ALIYUN_OSS_REGION"],
|
|
1054
|
+
bucket: configMap["ALIYUN_OSS_BUCKET"],
|
|
1055
|
+
accessKeyId: configMap["ALIYUN_OSS_ACCESS_KEY_ID"],
|
|
1056
|
+
accessKeySecret: configMap["ALIYUN_OSS_ACCESS_KEY_SECRET"],
|
|
1057
|
+
customDomain: configMap["ALIYUN_OSS_CUSTOM_DOMAIN"],
|
|
1058
|
+
secure: configMap["ALIYUN_OSS_SECURE"] === "true",
|
|
1059
|
+
internal: configMap["ALIYUN_OSS_INTERNAL"] === "true"
|
|
1060
|
+
};
|
|
1061
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u8BFB\u53D6\u7ED3\u679C:", {
|
|
1062
|
+
region: ossConfig.region || "\u672A\u914D\u7F6E",
|
|
1063
|
+
bucket: ossConfig.bucket || "\u672A\u914D\u7F6E",
|
|
1064
|
+
accessKeyId: ossConfig.accessKeyId ? "***" : "\u672A\u914D\u7F6E",
|
|
1065
|
+
accessKeySecret: ossConfig.accessKeySecret ? "***" : "\u672A\u914D\u7F6E",
|
|
1066
|
+
customDomain: ossConfig.customDomain || "\u672A\u914D\u7F6E",
|
|
1067
|
+
secure: ossConfig.secure,
|
|
1068
|
+
internal: ossConfig.internal
|
|
1069
|
+
});
|
|
1070
|
+
if (ossConfig.region && ossConfig.bucket && ossConfig.accessKeyId && ossConfig.accessKeySecret) {
|
|
1071
|
+
console.log("\u2705 [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u5B8C\u6574\uFF0C\u5C06\u4F7F\u7528\u72EC\u7ACBOSS\u914D\u7F6E");
|
|
1072
|
+
return ossConfig;
|
|
1073
|
+
} else {
|
|
1074
|
+
console.log("\u26A0\uFE0F [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF0C\u5C06\u56DE\u9000\u5230\u516C\u5171\u914D\u7F6E");
|
|
1075
|
+
console.log("\u{1F50D} [ShowMasterpiece] \u7F3A\u5931\u914D\u7F6E\u9879:", {
|
|
1076
|
+
region: !ossConfig.region,
|
|
1077
|
+
bucket: !ossConfig.bucket,
|
|
1078
|
+
accessKeyId: !ossConfig.accessKeyId,
|
|
1079
|
+
accessKeySecret: !ossConfig.accessKeySecret
|
|
1080
|
+
});
|
|
1081
|
+
return null;
|
|
1082
|
+
}
|
|
1083
|
+
} else {
|
|
1084
|
+
console.log("\u{1F5A5}\uFE0F [ShowMasterpiece] \u670D\u52A1\u5668\u7AEF\u73AF\u5883\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E\u56DE\u9000");
|
|
1085
|
+
return null;
|
|
1086
|
+
}
|
|
1087
|
+
} catch (error) {
|
|
1088
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u8BFB\u53D6\u72EC\u7ACB\u914D\u7F6E\u5931\u8D25:", error);
|
|
1089
|
+
return null;
|
|
1090
|
+
}
|
|
1091
|
+
}
|
|
1092
|
+
async function getCachedConfigManager() {
|
|
1093
|
+
if (!cachedConfigManager) {
|
|
1094
|
+
const showmasterpieceOSSConfig = await getShowmasterpieceOSSConfig();
|
|
1095
|
+
if (showmasterpieceOSSConfig) {
|
|
1096
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u4F7F\u7528\u72EC\u7ACBOSS\u914D\u7F6E\u521B\u5EFA\u914D\u7F6E\u7BA1\u7406\u5668");
|
|
1097
|
+
cachedConfigManager = await createFileServiceConfig({
|
|
1098
|
+
defaultStorage: "aliyun-oss",
|
|
1099
|
+
storageProviders: {
|
|
1100
|
+
"local": {
|
|
1101
|
+
type: "local",
|
|
1102
|
+
enabled: false,
|
|
1103
|
+
rootPath: "uploads",
|
|
1104
|
+
baseUrl: "/uploads"
|
|
1105
|
+
},
|
|
1106
|
+
"aliyun-oss": {
|
|
1107
|
+
type: "aliyun-oss",
|
|
1108
|
+
enabled: true,
|
|
1109
|
+
...showmasterpieceOSSConfig
|
|
1110
|
+
},
|
|
1111
|
+
"aws-s3": {
|
|
1112
|
+
type: "aws-s3",
|
|
1113
|
+
enabled: false
|
|
1114
|
+
},
|
|
1115
|
+
"qcloud-cos": {
|
|
1116
|
+
type: "qcloud-cos",
|
|
1117
|
+
enabled: false
|
|
1118
|
+
}
|
|
1119
|
+
}
|
|
1120
|
+
});
|
|
1121
|
+
} else {
|
|
1122
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u72EC\u7ACB\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E");
|
|
1123
|
+
cachedConfigManager = await createFileServiceConfig({
|
|
1124
|
+
defaultStorage: "local",
|
|
1125
|
+
// 默认使用本地存储
|
|
1126
|
+
storageProviders: {
|
|
1127
|
+
"local": {
|
|
1128
|
+
type: "local",
|
|
1129
|
+
enabled: true,
|
|
1130
|
+
rootPath: "uploads",
|
|
1131
|
+
baseUrl: "/uploads"
|
|
1132
|
+
},
|
|
1133
|
+
"aliyun-oss": {
|
|
1134
|
+
type: "aliyun-oss",
|
|
1135
|
+
enabled: false
|
|
1136
|
+
// 如果独立配置失败,禁用OSS
|
|
1137
|
+
},
|
|
1138
|
+
"aws-s3": {
|
|
1139
|
+
type: "aws-s3",
|
|
1140
|
+
enabled: false
|
|
1141
|
+
},
|
|
1142
|
+
"qcloud-cos": {
|
|
1143
|
+
type: "qcloud-cos",
|
|
1144
|
+
enabled: false
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
return cachedConfigManager;
|
|
1151
|
+
}
|
|
1152
|
+
async function getShowMasterpieceFileConfig() {
|
|
1153
|
+
const configManager = await getCachedConfigManager();
|
|
1154
|
+
const config = configManager.getConfig();
|
|
1155
|
+
const ossConfig = config.storageProviders["aliyun-oss"];
|
|
1156
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1157
|
+
console.log("\u2705 [ShowMasterpiece] \u4F7F\u7528\u963F\u91CC\u4E91OSS\u5B58\u50A8");
|
|
1158
|
+
return configManager;
|
|
1159
|
+
} else {
|
|
1160
|
+
console.log("\u2139\uFE0F [ShowMasterpiece] OSS\u672A\u914D\u7F6E\uFF0C\u4F7F\u7528\u672C\u5730\u5B58\u50A8");
|
|
1161
|
+
return configManager;
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
async function uploadArtworkImage(file, collectionId) {
|
|
1165
|
+
console.log("\u{1F3A8} [ShowMasterpiece] \u5F00\u59CB\u4E0A\u4F20\u4F5C\u54C1\u56FE\u7247:", file.name);
|
|
1166
|
+
const formData = new FormData();
|
|
1167
|
+
formData.append("file", file);
|
|
1168
|
+
formData.append("moduleId", "showmasterpiece");
|
|
1169
|
+
formData.append("businessId", collectionId ? `collection-${collectionId}` : "artwork");
|
|
1170
|
+
const timestamp = Date.now();
|
|
1171
|
+
const randomId = Math.random().toString(36).substr(2, 9);
|
|
1172
|
+
const extension = file.name.split(".").pop()?.toLowerCase() || "jpg";
|
|
1173
|
+
const basePath = collectionId ? `showmasterpiece/collection-${collectionId}` : "showmasterpiece/artwork";
|
|
1174
|
+
formData.append("folderPath", `${basePath}/${timestamp}_${randomId}.${extension}`);
|
|
1175
|
+
formData.append("needsProcessing", "true");
|
|
1176
|
+
const response = await fetch("/api/universal-file/upload", {
|
|
1177
|
+
method: "POST",
|
|
1178
|
+
body: formData
|
|
1179
|
+
});
|
|
1180
|
+
if (!response.ok) {
|
|
1181
|
+
const errorData = await response.json();
|
|
1182
|
+
throw new Error(errorData.error || `HTTP ${response.status}: ${response.statusText}`);
|
|
1183
|
+
}
|
|
1184
|
+
const result = await response.json();
|
|
1185
|
+
if (!result.success) {
|
|
1186
|
+
throw new Error(result.error || "\u4E0A\u4F20\u5931\u8D25");
|
|
1187
|
+
}
|
|
1188
|
+
console.log("\u2705 [ShowMasterpiece] \u4F5C\u54C1\u56FE\u7247\u4E0A\u4F20\u6210\u529F:", {
|
|
1189
|
+
fileId: result.data.fileId,
|
|
1190
|
+
accessUrl: result.data.accessUrl
|
|
1191
|
+
});
|
|
1192
|
+
return {
|
|
1193
|
+
fileId: result.data.fileId,
|
|
1194
|
+
accessUrl: result.data.accessUrl
|
|
1195
|
+
};
|
|
1196
|
+
}
|
|
1197
|
+
async function getArtworkImageUrl(fileId) {
|
|
1198
|
+
console.log("\u{1F517} [ShowMasterpiece] \u83B7\u53D6\u4F5C\u54C1\u56FE\u7247URL:", fileId);
|
|
1199
|
+
const response = await fetch(`/api/universal-file/${fileId}`);
|
|
1200
|
+
if (!response.ok) {
|
|
1201
|
+
throw new Error(`\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25: HTTP ${response.status}`);
|
|
1202
|
+
}
|
|
1203
|
+
const result = await response.json();
|
|
1204
|
+
if (!result.success) {
|
|
1205
|
+
throw new Error(result.error || "\u83B7\u53D6\u6587\u4EF6URL\u5931\u8D25");
|
|
1206
|
+
}
|
|
1207
|
+
return result.data.accessUrl;
|
|
1208
|
+
}
|
|
1209
|
+
async function shouldUseUniversalFileService() {
|
|
1210
|
+
try {
|
|
1211
|
+
const configManager = await getCachedConfigManager();
|
|
1212
|
+
const config = configManager.getConfig();
|
|
1213
|
+
const ossConfig = config.storageProviders["aliyun-oss"];
|
|
1214
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1215
|
+
return true;
|
|
1216
|
+
}
|
|
1217
|
+
return true;
|
|
1218
|
+
} catch (error) {
|
|
1219
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u68C0\u67E5\u6587\u4EF6\u670D\u52A1\u914D\u7F6E\u5931\u8D25:", error);
|
|
1220
|
+
return false;
|
|
1221
|
+
}
|
|
1222
|
+
}
|
|
1223
|
+
async function getStorageModeDisplayName() {
|
|
1224
|
+
const shouldUse = await shouldUseUniversalFileService();
|
|
1225
|
+
if (shouldUse) {
|
|
1226
|
+
const configManager = await getCachedConfigManager();
|
|
1227
|
+
const config = configManager.getConfig();
|
|
1228
|
+
const ossConfig = config.storageProviders["aliyun-oss"];
|
|
1229
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1230
|
+
return "\u963F\u91CC\u4E91OSS + CDN (\u72EC\u7ACB\u914D\u7F6E)";
|
|
1231
|
+
} else {
|
|
1232
|
+
return "\u672C\u5730\u5B58\u50A8 + \u6587\u4EF6\u670D\u52A1";
|
|
1233
|
+
}
|
|
1234
|
+
} else {
|
|
1235
|
+
return "Base64\u6570\u636E\u5E93\u5B58\u50A8";
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
function clearConfigCache() {
|
|
1239
|
+
console.log("\u{1F9F9} [ShowMasterpiece] \u6E05\u9664\u914D\u7F6E\u7F13\u5B58");
|
|
1240
|
+
cachedConfigManager = null;
|
|
1241
|
+
}
|
|
1242
|
+
async function refreshFileServiceConfig() {
|
|
1243
|
+
console.log("\u{1F504} [ShowMasterpiece] \u5F3A\u5236\u5237\u65B0\u6587\u4EF6\u670D\u52A1\u914D\u7F6E");
|
|
1244
|
+
clearConfigCache();
|
|
1245
|
+
const configManager = await getCachedConfigManager();
|
|
1246
|
+
if (typeof window === "undefined") {
|
|
1247
|
+
try {
|
|
1248
|
+
const config = configManager.getConfig();
|
|
1249
|
+
const ossConfig = config?.storageProviders?.["aliyun-oss"];
|
|
1250
|
+
if (ossConfig && ossConfig.enabled) {
|
|
1251
|
+
console.log("\u{1F504} [ShowMasterpiece] \u91CD\u65B0\u521D\u59CB\u5316OSS Provider\u4EE5\u5E94\u7528\u65B0\u914D\u7F6E");
|
|
1252
|
+
const { UniversalFileService } = await import('./UniversalFileService-J6ET6KZK.js');
|
|
1253
|
+
const fileService = new UniversalFileService(config);
|
|
1254
|
+
await fileService.initialize();
|
|
1255
|
+
await fileService.reinitializeStorageProviders?.();
|
|
1256
|
+
}
|
|
1257
|
+
} catch (error) {
|
|
1258
|
+
console.warn("\u26A0\uFE0F [ShowMasterpiece] \u91CD\u65B0\u521D\u59CB\u5316Provider\u5931\u8D25:", error);
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
return configManager;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
// src/showmasterpiece/services/exportConfig.ts
|
|
1265
|
+
var BOOKING_EXPORT_FIELDS = [
|
|
1266
|
+
{
|
|
1267
|
+
key: "id",
|
|
1268
|
+
label: "\u9884\u8BA2ID",
|
|
1269
|
+
type: "number",
|
|
1270
|
+
enabled: true,
|
|
1271
|
+
required: true,
|
|
1272
|
+
description: "\u9884\u8BA2\u8BB0\u5F55\u7684\u552F\u4E00\u6807\u8BC6",
|
|
1273
|
+
alignment: "center"
|
|
1274
|
+
},
|
|
1275
|
+
{
|
|
1276
|
+
key: "collectionId",
|
|
1277
|
+
label: "\u753B\u96C6ID",
|
|
1278
|
+
type: "number",
|
|
1279
|
+
enabled: true,
|
|
1280
|
+
required: true,
|
|
1281
|
+
description: "\u753B\u96C6\u7684\u552F\u4E00\u6807\u8BC6",
|
|
1282
|
+
alignment: "center"
|
|
1283
|
+
},
|
|
1284
|
+
{
|
|
1285
|
+
key: "qqNumber",
|
|
1286
|
+
label: "QQ\u53F7",
|
|
1287
|
+
type: "string",
|
|
1288
|
+
enabled: true,
|
|
1289
|
+
required: false,
|
|
1290
|
+
description: "\u7528\u6237\u7684QQ\u53F7\u7801",
|
|
1291
|
+
alignment: "left"
|
|
1292
|
+
},
|
|
1293
|
+
{
|
|
1294
|
+
key: "phoneNumber",
|
|
1295
|
+
label: "\u624B\u673A\u53F7",
|
|
1296
|
+
type: "string",
|
|
1297
|
+
enabled: true,
|
|
1298
|
+
required: false,
|
|
1299
|
+
description: "\u7528\u6237\u7684\u624B\u673A\u53F7\u7801",
|
|
1300
|
+
alignment: "left"
|
|
1301
|
+
},
|
|
1302
|
+
{
|
|
1303
|
+
key: "collectionTitle",
|
|
1304
|
+
label: "\u753B\u96C6\u6807\u9898",
|
|
1305
|
+
type: "string",
|
|
1306
|
+
enabled: true,
|
|
1307
|
+
required: true,
|
|
1308
|
+
description: "\u9884\u8BA2\u7684\u753B\u96C6\u6807\u9898",
|
|
1309
|
+
alignment: "left"
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
key: "collectionNumber",
|
|
1313
|
+
label: "\u753B\u96C6\u7F16\u53F7",
|
|
1314
|
+
type: "string",
|
|
1315
|
+
enabled: true,
|
|
1316
|
+
required: true,
|
|
1317
|
+
description: "\u753B\u96C6\u7684\u7F16\u53F7",
|
|
1318
|
+
alignment: "left"
|
|
1319
|
+
},
|
|
1320
|
+
{
|
|
1321
|
+
key: "collectionPrice",
|
|
1322
|
+
label: "\u753B\u96C6\u4EF7\u683C",
|
|
1323
|
+
type: "number",
|
|
1324
|
+
enabled: true,
|
|
1325
|
+
required: true,
|
|
1326
|
+
description: "\u753B\u96C6\u7684\u4EF7\u683C",
|
|
1327
|
+
alignment: "right",
|
|
1328
|
+
formatter: (value) => `\xA5${Number(value).toFixed(2)}`
|
|
1329
|
+
},
|
|
1330
|
+
{
|
|
1331
|
+
key: "status",
|
|
1332
|
+
label: "\u9884\u8BA2\u72B6\u6001",
|
|
1333
|
+
type: "string",
|
|
1334
|
+
enabled: true,
|
|
1335
|
+
required: true,
|
|
1336
|
+
description: "\u9884\u8BA2\u7684\u5F53\u524D\u72B6\u6001",
|
|
1337
|
+
alignment: "center",
|
|
1338
|
+
formatter: (value) => {
|
|
1339
|
+
const statusMap = {
|
|
1340
|
+
pending: "\u5F85\u786E\u8BA4",
|
|
1341
|
+
confirmed: "\u5DF2\u786E\u8BA4",
|
|
1342
|
+
completed: "\u5DF2\u5B8C\u6210",
|
|
1343
|
+
cancelled: "\u5DF2\u53D6\u6D88"
|
|
1344
|
+
};
|
|
1345
|
+
return statusMap[value] || value;
|
|
1346
|
+
}
|
|
1347
|
+
},
|
|
1348
|
+
{
|
|
1349
|
+
key: "quantity",
|
|
1350
|
+
label: "\u9884\u8BA2\u6570\u91CF",
|
|
1351
|
+
type: "number",
|
|
1352
|
+
enabled: true,
|
|
1353
|
+
required: true,
|
|
1354
|
+
description: "\u9884\u8BA2\u7684\u6570\u91CF",
|
|
1355
|
+
alignment: "center"
|
|
1356
|
+
},
|
|
1357
|
+
{
|
|
1358
|
+
key: "price",
|
|
1359
|
+
label: "\u5355\u4EF7",
|
|
1360
|
+
type: "number",
|
|
1361
|
+
enabled: true,
|
|
1362
|
+
required: true,
|
|
1363
|
+
description: "\u5355\u4E2A\u753B\u96C6\u7684\u4EF7\u683C",
|
|
1364
|
+
alignment: "right",
|
|
1365
|
+
formatter: (value) => `\xA5${Number(value).toFixed(2)}`
|
|
1366
|
+
},
|
|
1367
|
+
{
|
|
1368
|
+
key: "totalPrice",
|
|
1369
|
+
label: "\u603B\u4EF7\u683C",
|
|
1370
|
+
type: "number",
|
|
1371
|
+
enabled: true,
|
|
1372
|
+
required: true,
|
|
1373
|
+
description: "\u603B\u4EF7\u683C\uFF08\u5355\u4EF7 \xD7 \u6570\u91CF\uFF09",
|
|
1374
|
+
alignment: "right",
|
|
1375
|
+
formatter: (value) => `\xA5${Number(value).toFixed(2)}`
|
|
1376
|
+
},
|
|
1377
|
+
{
|
|
1378
|
+
key: "notes",
|
|
1379
|
+
label: "\u7528\u6237\u5907\u6CE8",
|
|
1380
|
+
type: "string",
|
|
1381
|
+
enabled: true,
|
|
1382
|
+
required: false,
|
|
1383
|
+
description: "\u7528\u6237\u63D0\u4EA4\u7684\u5907\u6CE8\u4FE1\u606F",
|
|
1384
|
+
alignment: "left"
|
|
1385
|
+
},
|
|
1386
|
+
{
|
|
1387
|
+
key: "pickupMethod",
|
|
1388
|
+
label: "\u9886\u53D6\u65B9\u5F0F",
|
|
1389
|
+
type: "string",
|
|
1390
|
+
enabled: true,
|
|
1391
|
+
required: false,
|
|
1392
|
+
description: "\u7528\u6237\u9009\u62E9\u7684\u9886\u53D6\u65B9\u5F0F",
|
|
1393
|
+
alignment: "left"
|
|
1394
|
+
},
|
|
1395
|
+
{
|
|
1396
|
+
key: "adminNotes",
|
|
1397
|
+
label: "\u7BA1\u7406\u5458\u5907\u6CE8",
|
|
1398
|
+
type: "string",
|
|
1399
|
+
enabled: true,
|
|
1400
|
+
required: false,
|
|
1401
|
+
description: "\u7BA1\u7406\u5458\u6DFB\u52A0\u7684\u5907\u6CE8\u4FE1\u606F",
|
|
1402
|
+
alignment: "left"
|
|
1403
|
+
},
|
|
1404
|
+
{
|
|
1405
|
+
key: "createdAt",
|
|
1406
|
+
label: "\u521B\u5EFA\u65F6\u95F4",
|
|
1407
|
+
type: "date",
|
|
1408
|
+
enabled: true,
|
|
1409
|
+
required: true,
|
|
1410
|
+
description: "\u9884\u8BA2\u521B\u5EFA\u7684\u65F6\u95F4",
|
|
1411
|
+
alignment: "center",
|
|
1412
|
+
formatter: (value) => {
|
|
1413
|
+
if (!value) return "";
|
|
1414
|
+
const date = new Date(value);
|
|
1415
|
+
return date.toLocaleString("zh-CN");
|
|
1416
|
+
}
|
|
1417
|
+
},
|
|
1418
|
+
{
|
|
1419
|
+
key: "updatedAt",
|
|
1420
|
+
label: "\u66F4\u65B0\u65F6\u95F4",
|
|
1421
|
+
type: "date",
|
|
1422
|
+
enabled: true,
|
|
1423
|
+
required: true,
|
|
1424
|
+
description: "\u9884\u8BA2\u6700\u540E\u66F4\u65B0\u7684\u65F6\u95F4",
|
|
1425
|
+
alignment: "center",
|
|
1426
|
+
formatter: (value) => {
|
|
1427
|
+
if (!value) return "";
|
|
1428
|
+
const date = new Date(value);
|
|
1429
|
+
return date.toLocaleString("zh-CN");
|
|
1430
|
+
}
|
|
1431
|
+
},
|
|
1432
|
+
{
|
|
1433
|
+
key: "confirmedAt",
|
|
1434
|
+
label: "\u786E\u8BA4\u65F6\u95F4",
|
|
1435
|
+
type: "date",
|
|
1436
|
+
enabled: true,
|
|
1437
|
+
required: false,
|
|
1438
|
+
description: "\u9884\u8BA2\u786E\u8BA4\u7684\u65F6\u95F4",
|
|
1439
|
+
alignment: "center",
|
|
1440
|
+
formatter: (value) => {
|
|
1441
|
+
if (!value) return "";
|
|
1442
|
+
const date = new Date(value);
|
|
1443
|
+
return date.toLocaleString("zh-CN");
|
|
1444
|
+
}
|
|
1445
|
+
},
|
|
1446
|
+
{
|
|
1447
|
+
key: "completedAt",
|
|
1448
|
+
label: "\u5B8C\u6210\u65F6\u95F4",
|
|
1449
|
+
type: "date",
|
|
1450
|
+
enabled: true,
|
|
1451
|
+
required: false,
|
|
1452
|
+
description: "\u9884\u8BA2\u5B8C\u6210\u7684\u65F6\u95F4",
|
|
1453
|
+
alignment: "center",
|
|
1454
|
+
formatter: (value) => {
|
|
1455
|
+
if (!value) return "";
|
|
1456
|
+
const date = new Date(value);
|
|
1457
|
+
return date.toLocaleString("zh-CN");
|
|
1458
|
+
}
|
|
1459
|
+
},
|
|
1460
|
+
{
|
|
1461
|
+
key: "cancelledAt",
|
|
1462
|
+
label: "\u53D6\u6D88\u65F6\u95F4",
|
|
1463
|
+
type: "date",
|
|
1464
|
+
enabled: true,
|
|
1465
|
+
required: false,
|
|
1466
|
+
description: "\u9884\u8BA2\u53D6\u6D88\u7684\u65F6\u95F4",
|
|
1467
|
+
alignment: "center",
|
|
1468
|
+
formatter: (value) => {
|
|
1469
|
+
if (!value) return "";
|
|
1470
|
+
const date = new Date(value);
|
|
1471
|
+
return date.toLocaleString("zh-CN");
|
|
1472
|
+
}
|
|
1473
|
+
},
|
|
1474
|
+
{
|
|
1475
|
+
key: "userTotalPrice",
|
|
1476
|
+
label: "\u7528\u6237\u603B\u4EF7",
|
|
1477
|
+
type: "number",
|
|
1478
|
+
enabled: false,
|
|
1479
|
+
// 默认不启用,需要勾选才启用
|
|
1480
|
+
required: false,
|
|
1481
|
+
description: "\u6839\u636EQQ\u53F7\u548C\u624B\u673A\u53F7\u7EDF\u4E00\u5339\u914D\u7684\u8BE5\u7528\u6237\u6240\u6709\u9884\u8BA2\u5546\u54C1\u7684\u603B\u4EF7\u683C",
|
|
1482
|
+
alignment: "right",
|
|
1483
|
+
formatter: (value) => `\xA5${Number(value || 0).toFixed(2)}`
|
|
1484
|
+
}
|
|
1485
|
+
];
|
|
1486
|
+
var DEFAULT_BOOKING_EXPORT_CONFIG = {
|
|
1487
|
+
id: "default_booking_export",
|
|
1488
|
+
name: "\u9884\u8BA2\u4FE1\u606F\u5BFC\u51FA",
|
|
1489
|
+
description: "\u5BFC\u51FA\u6240\u6709\u9884\u8BA2\u4FE1\u606F\u4E3AExcel\u683C\u5F0F\uFF0C\u652F\u6301QQ\u53F7\u548C\u624B\u673A\u53F7\u5408\u5E76\u5355\u5143\u683C",
|
|
1490
|
+
format: "excel",
|
|
1491
|
+
fields: BOOKING_EXPORT_FIELDS,
|
|
1492
|
+
grouping: {
|
|
1493
|
+
enabled: true,
|
|
1494
|
+
fields: [
|
|
1495
|
+
{
|
|
1496
|
+
key: "phoneNumber",
|
|
1497
|
+
label: "\u624B\u673A\u53F7",
|
|
1498
|
+
mode: "merge",
|
|
1499
|
+
valueProcessing: "first",
|
|
1500
|
+
showGroupHeader: false,
|
|
1501
|
+
mergeCells: true
|
|
1502
|
+
},
|
|
1503
|
+
{
|
|
1504
|
+
key: "qqNumber",
|
|
1505
|
+
label: "QQ\u53F7",
|
|
1506
|
+
mode: "merge",
|
|
1507
|
+
valueProcessing: "first",
|
|
1508
|
+
showGroupHeader: false,
|
|
1509
|
+
mergeCells: true
|
|
1510
|
+
},
|
|
1511
|
+
{
|
|
1512
|
+
key: "userTotalPrice",
|
|
1513
|
+
label: "\u7528\u6237\u603B\u4EF7",
|
|
1514
|
+
mode: "merge",
|
|
1515
|
+
valueProcessing: "first",
|
|
1516
|
+
showGroupHeader: false,
|
|
1517
|
+
mergeCells: true
|
|
1518
|
+
}
|
|
1519
|
+
],
|
|
1520
|
+
preserveOrder: true,
|
|
1521
|
+
nullValueHandling: "separate"
|
|
1522
|
+
},
|
|
1523
|
+
fileNameTemplate: "\u9884\u8BA2\u4FE1\u606F_{date}",
|
|
1524
|
+
includeHeader: true,
|
|
1525
|
+
delimiter: ",",
|
|
1526
|
+
encoding: "utf-8",
|
|
1527
|
+
addBOM: true,
|
|
1528
|
+
maxRows: void 0,
|
|
1529
|
+
createdAt: /* @__PURE__ */ new Date(),
|
|
1530
|
+
updatedAt: /* @__PURE__ */ new Date(),
|
|
1531
|
+
moduleId: "showmasterpiece",
|
|
1532
|
+
businessId: "bookings"
|
|
1533
|
+
};
|
|
737
1534
|
|
|
738
1535
|
// src/showmasterpiece/ui/web/components/CollectionOrderManagerV2.tsx
|
|
739
1536
|
function CollectionOrderManagerV2({
|
|
@@ -745,7 +1542,7 @@ function CollectionOrderManagerV2({
|
|
|
745
1542
|
const operations = {
|
|
746
1543
|
loadItems: async () => {
|
|
747
1544
|
console.log("\u{1F4DA} [\u753B\u96C6\u6392\u5E8FV2] \u5F00\u59CB\u52A0\u8F7D\u753B\u96C6\u6570\u636E...");
|
|
748
|
-
const data = await
|
|
1545
|
+
const data = await chunkEKIOJEJK_js.getAllCollections();
|
|
749
1546
|
console.log("\u{1F4DA} [\u753B\u96C6\u6392\u5E8FV2] \u753B\u96C6\u6570\u636E\u52A0\u8F7D\u5B8C\u6210:", {
|
|
750
1547
|
collectionsCount: data.length,
|
|
751
1548
|
collections: data.map((c) => ({ id: c.id, title: c.title }))
|
|
@@ -757,7 +1554,7 @@ function CollectionOrderManagerV2({
|
|
|
757
1554
|
if (propMoveCollectionUp) {
|
|
758
1555
|
await propMoveCollectionUp(id);
|
|
759
1556
|
} else {
|
|
760
|
-
await
|
|
1557
|
+
await chunkEKIOJEJK_js.moveCollectionUp(id);
|
|
761
1558
|
}
|
|
762
1559
|
},
|
|
763
1560
|
moveItemDown: async (id) => {
|
|
@@ -765,7 +1562,7 @@ function CollectionOrderManagerV2({
|
|
|
765
1562
|
if (propMoveCollectionDown) {
|
|
766
1563
|
await propMoveCollectionDown(id);
|
|
767
1564
|
} else {
|
|
768
|
-
await
|
|
1565
|
+
await chunkEKIOJEJK_js.moveCollectionDown(id);
|
|
769
1566
|
}
|
|
770
1567
|
},
|
|
771
1568
|
updateItemOrder: async (orders) => {
|
|
@@ -778,7 +1575,7 @@ function CollectionOrderManagerV2({
|
|
|
778
1575
|
if (propUpdateCollectionOrder) {
|
|
779
1576
|
await propUpdateCollectionOrder(collectionOrders);
|
|
780
1577
|
} else {
|
|
781
|
-
await
|
|
1578
|
+
await chunkEKIOJEJK_js.updateCollectionOrder(collectionOrders);
|
|
782
1579
|
}
|
|
783
1580
|
}
|
|
784
1581
|
};
|
|
@@ -822,7 +1619,7 @@ function CollectionOrderManagerV2({
|
|
|
822
1619
|
} }, collection.category)));
|
|
823
1620
|
};
|
|
824
1621
|
return /* @__PURE__ */ React29__default.default.createElement(
|
|
825
|
-
|
|
1622
|
+
chunkZRWED7Q6_js.GenericOrderManager,
|
|
826
1623
|
{
|
|
827
1624
|
operations,
|
|
828
1625
|
renderItem: renderCollection,
|
|
@@ -844,7 +1641,7 @@ function ArtworkOrderManagerV2({
|
|
|
844
1641
|
const operations = {
|
|
845
1642
|
loadItems: async () => {
|
|
846
1643
|
console.log("\u{1F4CB} [\u4F5C\u54C1\u6392\u5E8FV2] \u5F00\u59CB\u52A0\u8F7D\u4F5C\u54C1\u6570\u636E...", { collectionId });
|
|
847
|
-
const data = await
|
|
1644
|
+
const data = await chunkEKIOJEJK_js.getArtworksByCollection(collectionId);
|
|
848
1645
|
console.log("\u{1F4CB} [\u4F5C\u54C1\u6392\u5E8FV2] \u52A0\u8F7D\u4F5C\u54C1\u6570\u636E\u5B8C\u6210:", {
|
|
849
1646
|
collectionId,
|
|
850
1647
|
artworksCount: data.length,
|
|
@@ -857,7 +1654,7 @@ function ArtworkOrderManagerV2({
|
|
|
857
1654
|
if (propMoveArtworkUp) {
|
|
858
1655
|
await propMoveArtworkUp(collectionId, id);
|
|
859
1656
|
} else {
|
|
860
|
-
await
|
|
1657
|
+
await chunkEKIOJEJK_js.moveArtworkUp(collectionId, id);
|
|
861
1658
|
}
|
|
862
1659
|
},
|
|
863
1660
|
moveItemDown: async (id) => {
|
|
@@ -865,7 +1662,7 @@ function ArtworkOrderManagerV2({
|
|
|
865
1662
|
if (propMoveArtworkDown) {
|
|
866
1663
|
await propMoveArtworkDown(collectionId, id);
|
|
867
1664
|
} else {
|
|
868
|
-
await
|
|
1665
|
+
await chunkEKIOJEJK_js.moveArtworkDown(collectionId, id);
|
|
869
1666
|
}
|
|
870
1667
|
},
|
|
871
1668
|
updateItemOrder: async (orders) => {
|
|
@@ -885,7 +1682,7 @@ function ArtworkOrderManagerV2({
|
|
|
885
1682
|
if (propUpdateArtworkOrder) {
|
|
886
1683
|
await propUpdateArtworkOrder(collectionId, artworkOrders);
|
|
887
1684
|
} else {
|
|
888
|
-
await
|
|
1685
|
+
await chunkEKIOJEJK_js.updateArtworkOrder(collectionId, artworkOrders);
|
|
889
1686
|
}
|
|
890
1687
|
}
|
|
891
1688
|
};
|
|
@@ -970,7 +1767,7 @@ function ArtworkOrderManagerV2({
|
|
|
970
1767
|
} }, artwork.theme)));
|
|
971
1768
|
};
|
|
972
1769
|
return /* @__PURE__ */ React29__default.default.createElement(
|
|
973
|
-
|
|
1770
|
+
chunkZRWED7Q6_js.GenericOrderManager,
|
|
974
1771
|
{
|
|
975
1772
|
operations,
|
|
976
1773
|
renderItem: renderArtwork,
|
|
@@ -1108,18 +1905,18 @@ var UniversalImageUpload = ({
|
|
|
1108
1905
|
};
|
|
1109
1906
|
|
|
1110
1907
|
// src/showmasterpiece/ui/web/components/CartPage.tsx
|
|
1111
|
-
|
|
1908
|
+
chunkEKIOJEJK_js.init_hooks();
|
|
1112
1909
|
var CartPage = ({ userId, onClose }) => {
|
|
1113
1910
|
const {
|
|
1114
1911
|
cart,
|
|
1115
1912
|
loading,
|
|
1116
1913
|
error,
|
|
1117
|
-
updateCartItem,
|
|
1118
|
-
removeFromCart,
|
|
1119
|
-
batchBooking,
|
|
1914
|
+
updateCartItem: updateCartItem2,
|
|
1915
|
+
removeFromCart: removeFromCart2,
|
|
1916
|
+
batchBooking: batchBooking2,
|
|
1120
1917
|
refreshCart,
|
|
1121
|
-
clearCart
|
|
1122
|
-
} =
|
|
1918
|
+
clearCart: clearCart2
|
|
1919
|
+
} = chunkEKIOJEJK_js.useCartContext();
|
|
1123
1920
|
const {
|
|
1124
1921
|
configs: popupConfigs,
|
|
1125
1922
|
hasPopup,
|
|
@@ -1129,7 +1926,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1129
1926
|
cancelPopup,
|
|
1130
1927
|
temporaryClosePopup,
|
|
1131
1928
|
triggerCheck
|
|
1132
|
-
} =
|
|
1929
|
+
} = chunkEKIOJEJK_js.useDeadlinePopup("showmasterpiece", "cart_checkout");
|
|
1133
1930
|
const [isCheckingOut, setIsCheckingOut] = React29.useState(false);
|
|
1134
1931
|
const [checkoutSuccess, setCheckoutSuccess] = React29.useState(false);
|
|
1135
1932
|
const [formData, setFormData] = React29.useState({
|
|
@@ -1202,7 +1999,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1202
1999
|
const performCheckout = async () => {
|
|
1203
2000
|
setIsCheckingOut(true);
|
|
1204
2001
|
try {
|
|
1205
|
-
const result = await
|
|
2002
|
+
const result = await batchBooking2({
|
|
1206
2003
|
qqNumber: formData.qqNumber,
|
|
1207
2004
|
phoneNumber: formData.phoneNumber,
|
|
1208
2005
|
items: cart.items,
|
|
@@ -1276,7 +2073,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1276
2073
|
) : /* @__PURE__ */ React29__default.default.createElement("div", { className: "w-16 h-16 sm:w-16 sm:h-16 bg-gray-100 rounded-md flex-shrink-0 flex items-center justify-center text-gray-400 text-xs" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React29__default.default.createElement("h3", { className: "font-semibold text-gray-900 text-sm sm:text-base line-clamp-2" }, item.collection.title), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-xs sm:text-sm text-gray-600" }, "\u7F16\u53F7\uFF1A", item.collection.number), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-xs sm:text-sm text-gray-600" }, "\u4EF7\u683C\uFF1A", item.collection.price ? `\xA5${item.collection.price}` : "\u4EF7\u683C\u5F85\u5B9A")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col sm:flex-row items-center gap-2 sm:gap-4 w-full sm:w-auto" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
1277
2074
|
"button",
|
|
1278
2075
|
{
|
|
1279
|
-
onClick: () =>
|
|
2076
|
+
onClick: () => updateCartItem2({ collectionId: item.collectionId, quantity: item.quantity - 1 }),
|
|
1280
2077
|
disabled: loading,
|
|
1281
2078
|
className: "w-10 h-10 sm:w-8 sm:h-8 rounded-full border border-gray-300 flex items-center justify-center hover:bg-gray-50 disabled:opacity-50"
|
|
1282
2079
|
},
|
|
@@ -1284,7 +2081,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1284
2081
|
), /* @__PURE__ */ React29__default.default.createElement("span", { className: "w-16 sm:w-12 text-center font-medium text-sm sm:text-base" }, item.quantity), /* @__PURE__ */ React29__default.default.createElement(
|
|
1285
2082
|
"button",
|
|
1286
2083
|
{
|
|
1287
|
-
onClick: () =>
|
|
2084
|
+
onClick: () => updateCartItem2({ collectionId: item.collectionId, quantity: item.quantity + 1 }),
|
|
1288
2085
|
disabled: loading,
|
|
1289
2086
|
className: "w-10 h-10 sm:w-8 sm:h-8 rounded-full border border-gray-300 flex items-center justify-center hover:bg-gray-50 disabled:opacity-50"
|
|
1290
2087
|
},
|
|
@@ -1292,7 +2089,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1292
2089
|
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "text-center sm:text-right" }, /* @__PURE__ */ React29__default.default.createElement("p", { className: "font-semibold text-gray-900 text-sm sm:text-base" }, "\xA5", (item.collection.price || 0) * item.quantity))), /* @__PURE__ */ React29__default.default.createElement(
|
|
1293
2090
|
"button",
|
|
1294
2091
|
{
|
|
1295
|
-
onClick: () =>
|
|
2092
|
+
onClick: () => removeFromCart2({ collectionId: item.collectionId }),
|
|
1296
2093
|
disabled: loading,
|
|
1297
2094
|
className: "text-red-500 hover:text-red-700 disabled:opacity-50 p-2 sm:p-1"
|
|
1298
2095
|
},
|
|
@@ -1362,7 +2159,7 @@ var CartPage = ({ userId, onClose }) => {
|
|
|
1362
2159
|
"button",
|
|
1363
2160
|
{
|
|
1364
2161
|
type: "button",
|
|
1365
|
-
onClick:
|
|
2162
|
+
onClick: clearCart2,
|
|
1366
2163
|
disabled: loading || isCheckingOut,
|
|
1367
2164
|
className: "flex-1 bg-gray-200 text-gray-800 py-3 sm:py-2 px-4 rounded-lg hover:bg-gray-300 transition-colors disabled:opacity-50 text-base"
|
|
1368
2165
|
},
|
|
@@ -1474,14 +2271,14 @@ var CartModal = ({
|
|
|
1474
2271
|
};
|
|
1475
2272
|
|
|
1476
2273
|
// src/showmasterpiece/ui/web/components/CartButton.tsx
|
|
1477
|
-
|
|
2274
|
+
chunkEKIOJEJK_js.init_hooks();
|
|
1478
2275
|
var CartButton = ({
|
|
1479
2276
|
userId,
|
|
1480
2277
|
onClick,
|
|
1481
2278
|
className = "",
|
|
1482
2279
|
showBadge = true
|
|
1483
2280
|
}) => {
|
|
1484
|
-
const { cart } =
|
|
2281
|
+
const { cart } = chunkEKIOJEJK_js.useCartContext();
|
|
1485
2282
|
return /* @__PURE__ */ React29__default.default.createElement(
|
|
1486
2283
|
"button",
|
|
1487
2284
|
{
|
|
@@ -2009,22 +2806,22 @@ var BookingAdminPanel = ({
|
|
|
2009
2806
|
exportService,
|
|
2010
2807
|
moduleId: "showmasterpiece",
|
|
2011
2808
|
businessId: "bookings",
|
|
2012
|
-
availableFields:
|
|
2809
|
+
availableFields: BOOKING_EXPORT_FIELDS.map((field) => ({
|
|
2013
2810
|
...field,
|
|
2014
2811
|
enabled: field.key === "userTotalPrice" ? enableUserPriceCalculation : field.enabled
|
|
2015
2812
|
})),
|
|
2016
2813
|
dataSource,
|
|
2017
2814
|
defaultConfig: (() => {
|
|
2018
2815
|
const config = {
|
|
2019
|
-
...
|
|
2020
|
-
fields:
|
|
2816
|
+
...DEFAULT_BOOKING_EXPORT_CONFIG,
|
|
2817
|
+
fields: DEFAULT_BOOKING_EXPORT_CONFIG.fields.map((field) => ({
|
|
2021
2818
|
...field,
|
|
2022
2819
|
enabled: field.key === "userTotalPrice" ? enableUserPriceCalculation : field.enabled
|
|
2023
2820
|
})),
|
|
2024
2821
|
grouping: enableUserPriceCalculation ? {
|
|
2025
|
-
...
|
|
2822
|
+
...DEFAULT_BOOKING_EXPORT_CONFIG.grouping,
|
|
2026
2823
|
fields: [
|
|
2027
|
-
...
|
|
2824
|
+
...DEFAULT_BOOKING_EXPORT_CONFIG.grouping.fields,
|
|
2028
2825
|
{
|
|
2029
2826
|
key: "userTotalPrice",
|
|
2030
2827
|
label: "\u7528\u6237\u603B\u4EF7",
|
|
@@ -2034,7 +2831,7 @@ var BookingAdminPanel = ({
|
|
|
2034
2831
|
mergeCells: true
|
|
2035
2832
|
}
|
|
2036
2833
|
]
|
|
2037
|
-
} :
|
|
2834
|
+
} : DEFAULT_BOOKING_EXPORT_CONFIG.grouping
|
|
2038
2835
|
};
|
|
2039
2836
|
console.log("\u{1F50D} [BookingAdminPanel] \u4F20\u9012\u7684\u9ED8\u8BA4\u914D\u7F6E:", {
|
|
2040
2837
|
id: config.id,
|
|
@@ -2062,7 +2859,7 @@ var BookingAdminPanel = ({
|
|
|
2062
2859
|
{
|
|
2063
2860
|
onClick: async () => {
|
|
2064
2861
|
try {
|
|
2065
|
-
await handleCustomExport(
|
|
2862
|
+
await handleCustomExport(DEFAULT_BOOKING_EXPORT_CONFIG);
|
|
2066
2863
|
console.log("\u2705 [BookingAdminPanel] \u81EA\u5B9A\u4E49\u5BFC\u51FA\u6210\u529F");
|
|
2067
2864
|
} catch (error2) {
|
|
2068
2865
|
console.error("\u274C [BookingAdminPanel] \u81EA\u5B9A\u4E49\u5BFC\u51FA\u5931\u8D25:", error2);
|
|
@@ -2249,7 +3046,7 @@ var BookingModal = ({
|
|
|
2249
3046
|
height = "90vh"
|
|
2250
3047
|
}) => {
|
|
2251
3048
|
return /* @__PURE__ */ React29__default.default.createElement(
|
|
2252
|
-
|
|
3049
|
+
chunkZRWED7Q6_js.Modal,
|
|
2253
3050
|
{
|
|
2254
3051
|
isOpen,
|
|
2255
3052
|
onClose,
|
|
@@ -2261,7 +3058,7 @@ var BookingModal = ({
|
|
|
2261
3058
|
/* @__PURE__ */ React29__default.default.createElement(BookingPage, { onClose })
|
|
2262
3059
|
);
|
|
2263
3060
|
};
|
|
2264
|
-
|
|
3061
|
+
chunkEKIOJEJK_js.init_hooks();
|
|
2265
3062
|
var BookingPage = ({ onClose }) => {
|
|
2266
3063
|
const {
|
|
2267
3064
|
collections,
|
|
@@ -2272,14 +3069,14 @@ var BookingPage = ({ onClose }) => {
|
|
|
2272
3069
|
submitBooking,
|
|
2273
3070
|
resetSubmission,
|
|
2274
3071
|
clearError
|
|
2275
|
-
} =
|
|
3072
|
+
} = chunkEKIOJEJK_js.useBooking();
|
|
2276
3073
|
const {
|
|
2277
3074
|
formData,
|
|
2278
3075
|
errors,
|
|
2279
3076
|
updateField,
|
|
2280
3077
|
validateForm,
|
|
2281
3078
|
resetForm
|
|
2282
|
-
} =
|
|
3079
|
+
} = chunkEKIOJEJK_js.useBookingForm();
|
|
2283
3080
|
const [step, setStep] = React29.useState("select");
|
|
2284
3081
|
const handleCollectionSelect = (collectionId) => {
|
|
2285
3082
|
updateField("collectionId", collectionId);
|
|
@@ -2415,7 +3212,7 @@ var CartHistoryPage = ({
|
|
|
2415
3212
|
setLoading(true);
|
|
2416
3213
|
setError(void 0);
|
|
2417
3214
|
console.log("\u{1F504} \u5F00\u59CB\u67E5\u8BE2\u7528\u6237\u9884\u8BA2\u4FE1\u606F:", { qqNumber, phoneNumber });
|
|
2418
|
-
const response = await
|
|
3215
|
+
const response = await chunkEKIOJEJK_js.BookingService.getBookings({
|
|
2419
3216
|
qqNumber,
|
|
2420
3217
|
phoneNumber
|
|
2421
3218
|
});
|
|
@@ -2436,7 +3233,7 @@ var CartHistoryPage = ({
|
|
|
2436
3233
|
const handleDeleteBooking = async (bookingId) => {
|
|
2437
3234
|
if (confirm("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u6761\u9884\u8BA2\u8BB0\u5F55\u5417\uFF1F\u6B64\u64CD\u4F5C\u4E0D\u53EF\u64A4\u9500\u3002")) {
|
|
2438
3235
|
try {
|
|
2439
|
-
await
|
|
3236
|
+
await chunkEKIOJEJK_js.BookingService.deleteBooking(bookingId);
|
|
2440
3237
|
console.log("\u9884\u8BA2\u8BB0\u5F55\u5220\u9664\u6210\u529F");
|
|
2441
3238
|
await loadBookings();
|
|
2442
3239
|
} catch (error2) {
|
|
@@ -2608,7 +3405,7 @@ var DeadlinePopup = ({
|
|
|
2608
3405
|
const theme = contentConfig.theme || "warning";
|
|
2609
3406
|
const styles = getThemeStyles(theme);
|
|
2610
3407
|
return /* @__PURE__ */ React29__default.default.createElement(
|
|
2611
|
-
|
|
3408
|
+
chunkZRWED7Q6_js.Modal,
|
|
2612
3409
|
{
|
|
2613
3410
|
isOpen,
|
|
2614
3411
|
onClose,
|
|
@@ -2961,7 +3758,7 @@ var PopupConfigManagement = () => {
|
|
|
2961
3758
|
},
|
|
2962
3759
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.Trash2, { size: 16 })
|
|
2963
3760
|
))))))))), showCreateModal && /* @__PURE__ */ React29__default.default.createElement(
|
|
2964
|
-
|
|
3761
|
+
chunkZRWED7Q6_js.Modal,
|
|
2965
3762
|
{
|
|
2966
3763
|
isOpen: showCreateModal,
|
|
2967
3764
|
onClose: () => {
|
|
@@ -3324,7 +4121,7 @@ var SystemConfigManager = () => {
|
|
|
3324
4121
|
));
|
|
3325
4122
|
if (item.key.includes("ALIYUN_OSS")) {
|
|
3326
4123
|
console.log("\u{1F9F9} [SystemConfigManager] OSS\u914D\u7F6E\u5DF2\u66F4\u65B0\uFF0C\u6E05\u9664\u6587\u4EF6\u670D\u52A1\u7F13\u5B58");
|
|
3327
|
-
|
|
4124
|
+
clearConfigCache();
|
|
3328
4125
|
}
|
|
3329
4126
|
setEditingItem(null);
|
|
3330
4127
|
setEditValues({});
|
|
@@ -3830,8 +4627,8 @@ var DeleteConfirmDialog = ({
|
|
|
3830
4627
|
};
|
|
3831
4628
|
|
|
3832
4629
|
// src/showmasterpiece/ui/web/pages/ShowMasterPiecesPage.tsx
|
|
3833
|
-
|
|
3834
|
-
|
|
4630
|
+
chunkEKIOJEJK_js.init_hooks();
|
|
4631
|
+
chunkEKIOJEJK_js.init_CartContext();
|
|
3835
4632
|
var AuthContext = React29.createContext(void 0);
|
|
3836
4633
|
function AuthProvider({ children }) {
|
|
3837
4634
|
const [user, setUser] = React29.useState(null);
|
|
@@ -4896,7 +5693,7 @@ function ShowMasterPiecesContent() {
|
|
|
4896
5693
|
// 跳转到指定页面的方法
|
|
4897
5694
|
backToGallery
|
|
4898
5695
|
// 返回画集列表的方法
|
|
4899
|
-
} =
|
|
5696
|
+
} = chunkEKIOJEJK_js.useMasterpieces();
|
|
4900
5697
|
const { isAuthenticated, user } = useAuth();
|
|
4901
5698
|
const [config, setConfig] = React29.useState(null);
|
|
4902
5699
|
const [cartModalOpen, setCartModalOpen] = React29.useState(false);
|
|
@@ -4912,11 +5709,11 @@ function ShowMasterPiecesContent() {
|
|
|
4912
5709
|
closePopup,
|
|
4913
5710
|
confirmPopup,
|
|
4914
5711
|
cancelPopup
|
|
4915
|
-
} =
|
|
5712
|
+
} = chunkEKIOJEJK_js.useDeadlinePopup("showmasterpiece", "homepage_visit");
|
|
4916
5713
|
React29.useEffect(() => {
|
|
4917
5714
|
const loadConfig = async () => {
|
|
4918
5715
|
try {
|
|
4919
|
-
const configData = await
|
|
5716
|
+
const configData = await chunkEKIOJEJK_js.getConfig();
|
|
4920
5717
|
setConfig(configData);
|
|
4921
5718
|
} catch (err) {
|
|
4922
5719
|
console.error("Failed to load config:", err);
|
|
@@ -4977,7 +5774,7 @@ function ShowMasterPiecesContent() {
|
|
|
4977
5774
|
};
|
|
4978
5775
|
const renderLoading = () => /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "w-10 h-10 border-4 border-prussian-blue-300 border-t-moonstone rounded-full animate-spin" }), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-prussian-blue-600" }, "\u52A0\u8F7D\u4E2D...")));
|
|
4979
5776
|
const renderError = () => /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4 text-center" }, /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-destructive text-lg" }, "\u52A0\u8F7D\u5931\u8D25\uFF1A", error), /* @__PURE__ */ React29__default.default.createElement(
|
|
4980
|
-
|
|
5777
|
+
chunkZRWED7Q6_js.Button,
|
|
4981
5778
|
{
|
|
4982
5779
|
onClick: () => window.location.reload(),
|
|
4983
5780
|
className: "bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300"
|
|
@@ -4985,7 +5782,7 @@ function ShowMasterPiecesContent() {
|
|
|
4985
5782
|
"\u91CD\u8BD5"
|
|
4986
5783
|
)));
|
|
4987
5784
|
const renderEmptyState = () => /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4 text-center" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "text-moonstone text-6xl mb-4" }, "\u{1F3A8}"), /* @__PURE__ */ React29__default.default.createElement("h3", { className: "text-xl font-semibold mb-2 text-rich-black" }, "\u6682\u65E0\u53EF\u7528\u753B\u96C6"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-prussian-blue-600 mb-6" }, "\u5F53\u524D\u6CA1\u6709\u53EF\u9884\u8BA2\u7684\u753B\u96C6\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5"), hasAdminAccess && /* @__PURE__ */ React29__default.default.createElement(
|
|
4988
|
-
|
|
5785
|
+
chunkZRWED7Q6_js.Button,
|
|
4989
5786
|
{
|
|
4990
5787
|
asChild: true,
|
|
4991
5788
|
className: "bg-gradient-to-r from-moonstone to-cerulean hover:from-cerulean hover:to-moonstone text-white shadow-lg transition-all duration-300"
|
|
@@ -5006,8 +5803,8 @@ function ShowMasterPiecesContent() {
|
|
|
5006
5803
|
category: tab.category,
|
|
5007
5804
|
displayName: tab.description || tab.name || chunkDENROXAE_js.getCategoryDisplayName(tab.category)
|
|
5008
5805
|
}));
|
|
5009
|
-
return /* @__PURE__ */ React29__default.default.createElement(
|
|
5010
|
-
|
|
5806
|
+
return /* @__PURE__ */ React29__default.default.createElement(chunkEKIOJEJK_js.CartProvider, { userId }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "bg-white/95 backdrop-blur supports-[backdrop-filter]:bg-white/80 border-b border-prussian-blue-200/30 sticky top-0 z-50" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "max-w-7xl mx-auto px-3 sm:px-4 py-3 sm:py-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between gap-2 sm:gap-4 min-h-[44px]" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-4 sm:gap-8 min-w-0 flex-1" }, selectedCollection && /* @__PURE__ */ React29__default.default.createElement(
|
|
5807
|
+
chunkZRWED7Q6_js.Button,
|
|
5011
5808
|
{
|
|
5012
5809
|
variant: "ghost",
|
|
5013
5810
|
size: "sm",
|
|
@@ -5060,15 +5857,15 @@ function ShowMasterPiecesContent() {
|
|
|
5060
5857
|
canGoPrev
|
|
5061
5858
|
}
|
|
5062
5859
|
))
|
|
5063
|
-
) : /* @__PURE__ */ React29__default.default.createElement("div", { className: "max-w-7xl mx-auto p-3 sm:p-4 lg:p-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5064
|
-
|
|
5860
|
+
) : /* @__PURE__ */ React29__default.default.createElement("div", { className: "max-w-7xl mx-auto p-3 sm:p-4 lg:p-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Card, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardHeader, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardTitle, null, "\u5546\u54C1\u5206\u7C7B"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardDescription, null, "\u9009\u62E9\u60A8\u611F\u5174\u8DA3\u7684\u5546\u54C1\u7C7B\u578B")), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardContent, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Tabs, { value: selectedCategory, onValueChange: (value) => setSelectedCategory(value) }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsList, { className: "grid grid-cols-3 lg:grid-cols-9 h-auto p-1 bg-moonstone-900/10" }, categoryList.map(({ category, displayName }) => /* @__PURE__ */ React29__default.default.createElement(
|
|
5861
|
+
chunkZRWED7Q6_js.TabsTrigger,
|
|
5065
5862
|
{
|
|
5066
5863
|
key: category,
|
|
5067
5864
|
value: category,
|
|
5068
5865
|
className: "flex flex-col h-auto py-3 px-2 data-[state=active]:bg-gradient-to-r data-[state=active]:from-moonstone data-[state=active]:to-cerulean data-[state=active]:text-white data-[state=active]:shadow-lg transition-all duration-300"
|
|
5069
5866
|
},
|
|
5070
5867
|
/* @__PURE__ */ React29__default.default.createElement("span", { className: "font-semibold text-xs" }, displayName),
|
|
5071
|
-
/* @__PURE__ */ React29__default.default.createElement(
|
|
5868
|
+
/* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "outline", className: "mt-1 text-xs border-moonstone/30 text-cerulean bg-moonstone-900/5" }, collections.filter((c) => c.category === category).length)
|
|
5072
5869
|
)))))), /* @__PURE__ */ React29__default.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-4 sm:gap-6" }, filteredCollections.map((collection) => /* @__PURE__ */ React29__default.default.createElement(
|
|
5073
5870
|
CollectionCard,
|
|
5074
5871
|
{
|
|
@@ -5100,7 +5897,7 @@ function ShowMasterPieces(props = {}) {
|
|
|
5100
5897
|
}
|
|
5101
5898
|
|
|
5102
5899
|
// src/showmasterpiece/ui/web/pages/config/page.tsx
|
|
5103
|
-
|
|
5900
|
+
chunkEKIOJEJK_js.init_hooks();
|
|
5104
5901
|
function ConfigPageContent() {
|
|
5105
5902
|
const {
|
|
5106
5903
|
config,
|
|
@@ -5109,14 +5906,14 @@ function ConfigPageContent() {
|
|
|
5109
5906
|
tags,
|
|
5110
5907
|
loading,
|
|
5111
5908
|
error,
|
|
5112
|
-
updateConfig,
|
|
5113
|
-
resetConfig,
|
|
5114
|
-
createCollection,
|
|
5115
|
-
updateCollection,
|
|
5116
|
-
deleteCollection,
|
|
5117
|
-
addArtworkToCollection,
|
|
5118
|
-
updateArtwork,
|
|
5119
|
-
deleteArtwork,
|
|
5909
|
+
updateConfig: updateConfig2,
|
|
5910
|
+
resetConfig: resetConfig2,
|
|
5911
|
+
createCollection: createCollection2,
|
|
5912
|
+
updateCollection: updateCollection2,
|
|
5913
|
+
deleteCollection: deleteCollection2,
|
|
5914
|
+
addArtworkToCollection: addArtworkToCollection2,
|
|
5915
|
+
updateArtwork: updateArtwork2,
|
|
5916
|
+
deleteArtwork: deleteArtwork2,
|
|
5120
5917
|
moveArtworkUp: moveArtworkUp2,
|
|
5121
5918
|
moveArtworkDown: moveArtworkDown2,
|
|
5122
5919
|
updateArtworkOrder: updateArtworkOrder2,
|
|
@@ -5124,7 +5921,7 @@ function ConfigPageContent() {
|
|
|
5124
5921
|
moveCollectionDown: moveCollectionDown2,
|
|
5125
5922
|
updateCollectionOrder: updateCollectionOrder2,
|
|
5126
5923
|
refreshData
|
|
5127
|
-
} =
|
|
5924
|
+
} = chunkEKIOJEJK_js.useMasterpiecesConfig();
|
|
5128
5925
|
const [activeTab, setActiveTab] = React29.useState("general");
|
|
5129
5926
|
const [selectedCollection, setSelectedCollection] = React29.useState(null);
|
|
5130
5927
|
const [showCollectionForm, setShowCollectionForm] = React29.useState(false);
|
|
@@ -5145,17 +5942,17 @@ function ConfigPageContent() {
|
|
|
5145
5942
|
refreshData: refreshBookingData,
|
|
5146
5943
|
searchBookings,
|
|
5147
5944
|
clearSearch,
|
|
5148
|
-
updateBookingStatus,
|
|
5149
|
-
deleteBooking,
|
|
5150
|
-
exportBookings
|
|
5151
|
-
} =
|
|
5945
|
+
updateBookingStatus: updateBookingStatus3,
|
|
5946
|
+
deleteBooking: deleteBooking3,
|
|
5947
|
+
exportBookings: exportBookings2
|
|
5948
|
+
} = chunkEKIOJEJK_js.useBookingAdmin();
|
|
5152
5949
|
const [useUniversalService, setUseUniversalService] = React29.useState(false);
|
|
5153
5950
|
const [storageModeDisplay, setStorageModeDisplay] = React29.useState("\u68C0\u67E5\u4E2D...");
|
|
5154
5951
|
React29.useEffect(() => {
|
|
5155
5952
|
const loadFileServiceConfig = async () => {
|
|
5156
5953
|
try {
|
|
5157
|
-
const shouldUse = await
|
|
5158
|
-
const displayName = await
|
|
5954
|
+
const shouldUse = await shouldUseUniversalFileService();
|
|
5955
|
+
const displayName = await getStorageModeDisplayName();
|
|
5159
5956
|
setUseUniversalService(shouldUse);
|
|
5160
5957
|
setStorageModeDisplay(displayName);
|
|
5161
5958
|
} catch (error2) {
|
|
@@ -5293,7 +6090,7 @@ function ConfigPageContent() {
|
|
|
5293
6090
|
}
|
|
5294
6091
|
try {
|
|
5295
6092
|
if (!existingCategory) {
|
|
5296
|
-
await
|
|
6093
|
+
await chunkEKIOJEJK_js.createCategory(trimmed, description);
|
|
5297
6094
|
setCategoryOptions((prev) => [...prev, { name: trimmed, description }]);
|
|
5298
6095
|
}
|
|
5299
6096
|
setConfigForm((prev) => {
|
|
@@ -5363,7 +6160,7 @@ function ConfigPageContent() {
|
|
|
5363
6160
|
}, [activeTab, showArtworkOrder, showArtworkForm, editingArtwork]);
|
|
5364
6161
|
const handleSaveConfig = async () => {
|
|
5365
6162
|
try {
|
|
5366
|
-
await
|
|
6163
|
+
await updateConfig2(configForm);
|
|
5367
6164
|
alert("\u914D\u7F6E\u4FDD\u5B58\u6210\u529F\uFF01");
|
|
5368
6165
|
} catch (err) {
|
|
5369
6166
|
alert("\u914D\u7F6E\u4FDD\u5B58\u5931\u8D25\uFF01");
|
|
@@ -5372,7 +6169,7 @@ function ConfigPageContent() {
|
|
|
5372
6169
|
const handleResetConfig = async () => {
|
|
5373
6170
|
if (confirm("\u786E\u5B9A\u8981\u91CD\u7F6E\u4E3A\u9ED8\u8BA4\u914D\u7F6E\u5417\uFF1F")) {
|
|
5374
6171
|
try {
|
|
5375
|
-
await
|
|
6172
|
+
await resetConfig2();
|
|
5376
6173
|
alert("\u914D\u7F6E\u91CD\u7F6E\u6210\u529F\uFF01");
|
|
5377
6174
|
} catch (err) {
|
|
5378
6175
|
alert("\u914D\u7F6E\u91CD\u7F6E\u5931\u8D25\uFF01");
|
|
@@ -5382,10 +6179,10 @@ function ConfigPageContent() {
|
|
|
5382
6179
|
const handleSaveCollection = async () => {
|
|
5383
6180
|
try {
|
|
5384
6181
|
if (editingCollection) {
|
|
5385
|
-
await
|
|
6182
|
+
await updateCollection2(editingCollection, collectionForm);
|
|
5386
6183
|
setEditingCollection(null);
|
|
5387
6184
|
} else {
|
|
5388
|
-
await
|
|
6185
|
+
await createCollection2(collectionForm);
|
|
5389
6186
|
}
|
|
5390
6187
|
setShowCollectionForm(false);
|
|
5391
6188
|
setCollectionForm({
|
|
@@ -5420,14 +6217,14 @@ function ConfigPageContent() {
|
|
|
5420
6217
|
collectionId: editingArtwork.collectionId,
|
|
5421
6218
|
artworkId: editingArtwork.artworkId
|
|
5422
6219
|
});
|
|
5423
|
-
await
|
|
6220
|
+
await updateArtwork2(editingArtwork.collectionId, editingArtwork.artworkId, artworkForm);
|
|
5424
6221
|
setEditingArtwork(null);
|
|
5425
6222
|
console.log("\u2705 [\u914D\u7F6E\u9875\u9762] \u5546\u54C1\u8BE6\u60C5\u56FE\u66F4\u65B0\u5B8C\u6210");
|
|
5426
6223
|
} else {
|
|
5427
6224
|
console.log("\u2795 [\u914D\u7F6E\u9875\u9762] \u6267\u884C\u5546\u54C1\u8BE6\u60C5\u56FE\u521B\u5EFA...", {
|
|
5428
6225
|
collectionId: selectedCollection
|
|
5429
6226
|
});
|
|
5430
|
-
await
|
|
6227
|
+
await addArtworkToCollection2(selectedCollection, artworkForm);
|
|
5431
6228
|
console.log("\u2705 [\u914D\u7F6E\u9875\u9762] \u5546\u54C1\u8BE6\u60C5\u56FE\u521B\u5EFA\u5B8C\u6210");
|
|
5432
6229
|
}
|
|
5433
6230
|
console.log("\u{1F9F9} [\u914D\u7F6E\u9875\u9762] \u6E05\u7406\u8868\u5355\u72B6\u6001...");
|
|
@@ -5506,10 +6303,10 @@ function ConfigPageContent() {
|
|
|
5506
6303
|
return /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-br from-slate-50 to-slate-200" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center justify-center min-h-[50vh] gap-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "w-10 h-10 border-4 border-slate-200 border-t-blue-500 rounded-full animate-spin" }), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-slate-600" }, "\u52A0\u8F7D\u4E2D...")));
|
|
5507
6304
|
}
|
|
5508
6305
|
if (error) {
|
|
5509
|
-
return /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-background" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4" }, /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-destructive text-lg" }, "\u52A0\u8F7D\u5931\u8D25\uFF1A", error), /* @__PURE__ */ React29__default.default.createElement(
|
|
6306
|
+
return /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-background" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col items-center justify-center min-h-[50vh] gap-4 p-4" }, /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-destructive text-lg" }, "\u52A0\u8F7D\u5931\u8D25\uFF1A", error), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Button, { onClick: refreshData }, "\u91CD\u8BD5")));
|
|
5510
6307
|
}
|
|
5511
6308
|
return /* @__PURE__ */ React29__default.default.createElement("div", { className: "min-h-screen bg-background" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "max-w-7xl mx-auto px-6 py-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-8" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5512
|
-
|
|
6309
|
+
chunkZRWED7Q6_js.Button,
|
|
5513
6310
|
{
|
|
5514
6311
|
variant: "ghost",
|
|
5515
6312
|
size: "sm",
|
|
@@ -5518,8 +6315,8 @@ function ConfigPageContent() {
|
|
|
5518
6315
|
},
|
|
5519
6316
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.ArrowLeft, { size: 20 }),
|
|
5520
6317
|
"\u8FD4\u56DE"
|
|
5521
|
-
), /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement("h1", { className: "text-2xl font-bold" }, "\u5546\u54C1\u5C55\u89C8\u914D\u7F6E\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-sm text-muted-foreground" }, "\u7BA1\u7406\u5C55\u89C8\u7684\u6240\u6709\u914D\u7F6E\u3001\u5546\u54C1\u548C\u5546\u54C1\u8BE6\u60C5\u56FE"))))), /* @__PURE__ */ React29__default.default.createElement("div", { className: "max-w-7xl mx-auto p-6" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5522
|
-
|
|
6318
|
+
), /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement("h1", { className: "text-2xl font-bold" }, "\u5546\u54C1\u5C55\u89C8\u914D\u7F6E\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-sm text-muted-foreground" }, "\u7BA1\u7406\u5C55\u89C8\u7684\u6240\u6709\u914D\u7F6E\u3001\u5546\u54C1\u548C\u5546\u54C1\u8BE6\u60C5\u56FE"))))), /* @__PURE__ */ React29__default.default.createElement("div", { className: "max-w-7xl mx-auto p-6" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Tabs, { value: activeTab, onValueChange: (value) => setActiveTab(value), className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsList, { className: "grid w-full grid-cols-8" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "general", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Settings, { size: 16 }), "\u57FA\u7840\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "homeTabs", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Settings, { size: 16 }), "\u9996\u9875Tab\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "collections", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Database, { size: 16 }), "\u5546\u54C1\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "artworks", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Image, { size: 16 }), "\u5546\u54C1\u8BE6\u60C5\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "bookings", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Calendar, { size: 16 }), "\u9884\u8BA2\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "popup", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Bell, { size: 16 }), "\u5F39\u7A97\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsTrigger, { value: "system", className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Cog, { size: 16 }), "\u7CFB\u7EDF\u914D\u7F6E")), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "general", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Card, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardHeader, null, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardTitle, null, "\u57FA\u7840\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardDescription, null, "\u914D\u7F6E\u7F51\u7AD9\u7684\u57FA\u672C\u4FE1\u606F\u548C\u663E\u793A\u9009\u9879")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
6319
|
+
chunkZRWED7Q6_js.Button,
|
|
5523
6320
|
{
|
|
5524
6321
|
variant: "outline",
|
|
5525
6322
|
onClick: handleResetConfig,
|
|
@@ -5528,15 +6325,15 @@ function ConfigPageContent() {
|
|
|
5528
6325
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.RotateCcw, { size: 16 }),
|
|
5529
6326
|
"\u91CD\u7F6E\u9ED8\u8BA4"
|
|
5530
6327
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5531
|
-
|
|
6328
|
+
chunkZRWED7Q6_js.Button,
|
|
5532
6329
|
{
|
|
5533
6330
|
onClick: handleSaveConfig,
|
|
5534
6331
|
className: "gap-2"
|
|
5535
6332
|
},
|
|
5536
6333
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.Save, { size: 16 }),
|
|
5537
6334
|
"\u4FDD\u5B58\u914D\u7F6E"
|
|
5538
|
-
)))), /* @__PURE__ */ React29__default.default.createElement(
|
|
5539
|
-
|
|
6335
|
+
)))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardContent, null, /* @__PURE__ */ React29__default.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "siteName" }, "\u7F51\u7AD9\u540D\u79F0"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6336
|
+
chunkZRWED7Q6_js.Input,
|
|
5540
6337
|
{
|
|
5541
6338
|
id: "siteName",
|
|
5542
6339
|
type: "text",
|
|
@@ -5544,8 +6341,8 @@ function ConfigPageContent() {
|
|
|
5544
6341
|
onChange: (e) => setConfigForm((prev) => ({ ...prev, siteName: e.target.value })),
|
|
5545
6342
|
placeholder: "\u8F93\u5165\u7F51\u7AD9\u540D\u79F0"
|
|
5546
6343
|
}
|
|
5547
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5548
|
-
|
|
6344
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "siteDescription" }, "\u7F51\u7AD9\u63CF\u8FF0"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6345
|
+
chunkZRWED7Q6_js.Textarea,
|
|
5549
6346
|
{
|
|
5550
6347
|
id: "siteDescription",
|
|
5551
6348
|
value: configForm.siteDescription,
|
|
@@ -5553,8 +6350,8 @@ function ConfigPageContent() {
|
|
|
5553
6350
|
placeholder: "\u8F93\u5165\u7F51\u7AD9\u63CF\u8FF0",
|
|
5554
6351
|
rows: 2
|
|
5555
6352
|
}
|
|
5556
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5557
|
-
|
|
6353
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "heroTitle" }, "\u4E3B\u6807\u9898"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6354
|
+
chunkZRWED7Q6_js.Input,
|
|
5558
6355
|
{
|
|
5559
6356
|
id: "heroTitle",
|
|
5560
6357
|
type: "text",
|
|
@@ -5562,8 +6359,8 @@ function ConfigPageContent() {
|
|
|
5562
6359
|
onChange: (e) => setConfigForm((prev) => ({ ...prev, heroTitle: e.target.value })),
|
|
5563
6360
|
placeholder: "\u8F93\u5165\u4E3B\u6807\u9898"
|
|
5564
6361
|
}
|
|
5565
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5566
|
-
|
|
6362
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "heroSubtitle" }, "\u526F\u6807\u9898"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6363
|
+
chunkZRWED7Q6_js.Textarea,
|
|
5567
6364
|
{
|
|
5568
6365
|
id: "heroSubtitle",
|
|
5569
6366
|
value: configForm.heroSubtitle,
|
|
@@ -5571,8 +6368,8 @@ function ConfigPageContent() {
|
|
|
5571
6368
|
placeholder: "\u8F93\u5165\u526F\u6807\u9898",
|
|
5572
6369
|
rows: 2
|
|
5573
6370
|
}
|
|
5574
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5575
|
-
|
|
6371
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "maxCollections" }, "\u6BCF\u9875\u663E\u793A\u5546\u54C1\u6570\u91CF"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6372
|
+
chunkZRWED7Q6_js.Input,
|
|
5576
6373
|
{
|
|
5577
6374
|
id: "maxCollections",
|
|
5578
6375
|
type: "number",
|
|
@@ -5581,22 +6378,22 @@ function ConfigPageContent() {
|
|
|
5581
6378
|
min: "1",
|
|
5582
6379
|
max: "50"
|
|
5583
6380
|
}
|
|
5584
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5585
|
-
|
|
6381
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "theme" }, "\u4E3B\u9898"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6382
|
+
chunkZRWED7Q6_js.Select,
|
|
5586
6383
|
{
|
|
5587
6384
|
value: configForm.theme,
|
|
5588
6385
|
onValueChange: (value) => setConfigForm((prev) => ({ ...prev, theme: value }))
|
|
5589
6386
|
},
|
|
5590
|
-
/* @__PURE__ */ React29__default.default.createElement(
|
|
5591
|
-
/* @__PURE__ */ React29__default.default.createElement(
|
|
5592
|
-
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5593
|
-
|
|
6387
|
+
/* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectTrigger, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectValue, { placeholder: "\u9009\u62E9\u4E3B\u9898" })),
|
|
6388
|
+
/* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectContent, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectItem, { value: "light" }, "\u6D45\u8272"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectItem, { value: "dark" }, "\u6DF1\u8272"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectItem, { value: "auto" }, "\u81EA\u52A8"))
|
|
6389
|
+
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "language" }, "\u8BED\u8A00"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6390
|
+
chunkZRWED7Q6_js.Select,
|
|
5594
6391
|
{
|
|
5595
6392
|
value: configForm.language,
|
|
5596
6393
|
onValueChange: (value) => setConfigForm((prev) => ({ ...prev, language: value }))
|
|
5597
6394
|
},
|
|
5598
|
-
/* @__PURE__ */ React29__default.default.createElement(
|
|
5599
|
-
/* @__PURE__ */ React29__default.default.createElement(
|
|
6395
|
+
/* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectTrigger, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectValue, { placeholder: "\u9009\u62E9\u8BED\u8A00" })),
|
|
6396
|
+
/* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectContent, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectItem, { value: "zh" }, "\u4E2D\u6587"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.SelectItem, { value: "en" }, "English"))
|
|
5600
6397
|
)), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5601
6398
|
"input",
|
|
5602
6399
|
{
|
|
@@ -5606,7 +6403,7 @@ function ConfigPageContent() {
|
|
|
5606
6403
|
onChange: (e) => setConfigForm((prev) => ({ ...prev, enableSearch: e.target.checked })),
|
|
5607
6404
|
className: "h-4 w-4 rounded border-gray-300"
|
|
5608
6405
|
}
|
|
5609
|
-
), /* @__PURE__ */ React29__default.default.createElement(
|
|
6406
|
+
), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "enableSearch", className: "text-sm font-medium" }, "\u542F\u7528\u641C\u7D22\u529F\u80FD")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center space-x-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5610
6407
|
"input",
|
|
5611
6408
|
{
|
|
5612
6409
|
id: "enableCategories",
|
|
@@ -5615,29 +6412,29 @@ function ConfigPageContent() {
|
|
|
5615
6412
|
onChange: (e) => setConfigForm((prev) => ({ ...prev, enableCategories: e.target.checked })),
|
|
5616
6413
|
className: "h-4 w-4 rounded border-gray-300"
|
|
5617
6414
|
}
|
|
5618
|
-
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5619
|
-
|
|
6415
|
+
), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, { htmlFor: "enableCategories", className: "text-sm font-medium" }, "\u542F\u7528\u5206\u7C7B\u529F\u80FD")))))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "homeTabs", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Card, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardHeader, null, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardTitle, null, "\u9996\u9875\u5206\u7C7BTab\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardDescription, null, "\u7BA1\u7406\u9996\u9875\u5206\u7C7BTab\u7684\u663E\u793A\u987A\u5E8F\u4E0E\u663E\u793A/\u9690\u85CF")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Button, { variant: "outline", onClick: () => handleSetAllHomeTabsVisible(true) }, "\u5168\u90E8\u663E\u793A"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Button, { variant: "outline", onClick: () => handleSetAllHomeTabsVisible(false) }, "\u5168\u90E8\u9690\u85CF"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Button, { variant: "outline", onClick: handleResetHomeTabs, className: "gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.RotateCcw, { size: 16 }), "\u91CD\u7F6E\u987A\u5E8F"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Button, { onClick: handleSaveConfig, className: "gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Save, { size: 16 }), "\u4FDD\u5B58\u914D\u7F6E")))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardContent, null, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col lg:flex-row lg:items-end gap-3 mb-4" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex-1 space-y-2" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, null, "\u5206\u7C7B\u540D\u79F0"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6416
|
+
chunkZRWED7Q6_js.Input,
|
|
5620
6417
|
{
|
|
5621
6418
|
value: newHomeTabCategory,
|
|
5622
6419
|
onChange: (e) => setNewHomeTabCategory(e.target.value),
|
|
5623
6420
|
placeholder: "\u8F93\u5165\u5206\u7C7B\u540D\u79F0"
|
|
5624
6421
|
}
|
|
5625
|
-
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5626
|
-
|
|
6422
|
+
), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Label, null, "\u5C55\u793A\u6587\u6848"), /* @__PURE__ */ React29__default.default.createElement(
|
|
6423
|
+
chunkZRWED7Q6_js.Input,
|
|
5627
6424
|
{
|
|
5628
6425
|
value: newHomeTabDescription,
|
|
5629
6426
|
onChange: (e) => setNewHomeTabDescription(e.target.value),
|
|
5630
6427
|
placeholder: "\u8F93\u5165\u5C55\u793A\u6587\u6848"
|
|
5631
6428
|
}
|
|
5632
|
-
)), /* @__PURE__ */ React29__default.default.createElement(
|
|
6429
|
+
)), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Button, { onClick: handleAddHomeTab, className: "gap-2" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Plus, { size: 16 }), "\u65B0\u589ETab")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "space-y-2" }, configForm.homeTabConfig.map((item, index) => /* @__PURE__ */ React29__default.default.createElement(
|
|
5633
6430
|
"div",
|
|
5634
6431
|
{
|
|
5635
6432
|
key: item.category,
|
|
5636
6433
|
className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 p-3 border border-slate-200 rounded-lg bg-white"
|
|
5637
6434
|
},
|
|
5638
|
-
/* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React29__default.default.createElement("span", { className: "text-sm font-semibold text-slate-800" }, item.description || item.name || chunkDENROXAE_js.getCategoryDisplayName(item.category)), item.description ? /* @__PURE__ */ React29__default.default.createElement("span", { className: "text-xs text-slate-500" }, item.name || item.category) : null), !item.visible && /* @__PURE__ */ React29__default.default.createElement(
|
|
6435
|
+
/* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React29__default.default.createElement("span", { className: "text-sm font-semibold text-slate-800" }, item.description || item.name || chunkDENROXAE_js.getCategoryDisplayName(item.category)), item.description ? /* @__PURE__ */ React29__default.default.createElement("span", { className: "text-xs text-slate-500" }, item.name || item.category) : null), !item.visible && /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Badge, { variant: "secondary", className: "text-xs" }, "\u5DF2\u9690\u85CF")),
|
|
5639
6436
|
/* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5640
|
-
|
|
6437
|
+
chunkZRWED7Q6_js.Button,
|
|
5641
6438
|
{
|
|
5642
6439
|
variant: "outline",
|
|
5643
6440
|
size: "sm",
|
|
@@ -5646,7 +6443,7 @@ function ConfigPageContent() {
|
|
|
5646
6443
|
},
|
|
5647
6444
|
"\u4E0A\u79FB"
|
|
5648
6445
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5649
|
-
|
|
6446
|
+
chunkZRWED7Q6_js.Button,
|
|
5650
6447
|
{
|
|
5651
6448
|
variant: "outline",
|
|
5652
6449
|
size: "sm",
|
|
@@ -5655,7 +6452,7 @@ function ConfigPageContent() {
|
|
|
5655
6452
|
},
|
|
5656
6453
|
"\u4E0B\u79FB"
|
|
5657
6454
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5658
|
-
|
|
6455
|
+
chunkZRWED7Q6_js.Button,
|
|
5659
6456
|
{
|
|
5660
6457
|
variant: item.visible ? "secondary" : "default",
|
|
5661
6458
|
size: "sm",
|
|
@@ -5663,7 +6460,7 @@ function ConfigPageContent() {
|
|
|
5663
6460
|
},
|
|
5664
6461
|
item.visible ? "\u9690\u85CF" : "\u663E\u793A"
|
|
5665
6462
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5666
|
-
|
|
6463
|
+
chunkZRWED7Q6_js.Button,
|
|
5667
6464
|
{
|
|
5668
6465
|
variant: "outline",
|
|
5669
6466
|
size: "sm",
|
|
@@ -5672,8 +6469,8 @@ function ConfigPageContent() {
|
|
|
5672
6469
|
},
|
|
5673
6470
|
"\u5220\u9664"
|
|
5674
6471
|
))
|
|
5675
|
-
)))))), /* @__PURE__ */ React29__default.default.createElement(
|
|
5676
|
-
|
|
6472
|
+
)))))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "collections", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.Card, null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardHeader, null, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardTitle, null, "\u5546\u54C1\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardDescription, null, "\u7BA1\u7406\u5546\u54C1")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
6473
|
+
chunkZRWED7Q6_js.Button,
|
|
5677
6474
|
{
|
|
5678
6475
|
onClick: () => {
|
|
5679
6476
|
setCollectionForm({
|
|
@@ -5694,7 +6491,7 @@ function ConfigPageContent() {
|
|
|
5694
6491
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.Plus, { size: 16 }),
|
|
5695
6492
|
"\u6DFB\u52A0\u5546\u54C1"
|
|
5696
6493
|
), /* @__PURE__ */ React29__default.default.createElement(
|
|
5697
|
-
|
|
6494
|
+
chunkZRWED7Q6_js.Button,
|
|
5698
6495
|
{
|
|
5699
6496
|
variant: "outline",
|
|
5700
6497
|
onClick: () => handleToggleCollectionOrder(),
|
|
@@ -5702,7 +6499,7 @@ function ConfigPageContent() {
|
|
|
5702
6499
|
},
|
|
5703
6500
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.ArrowUpDown, { size: 16 }),
|
|
5704
6501
|
showCollectionOrder ? "\u5173\u95ED\u6392\u5E8F" : "\u5546\u54C1\u6392\u5E8F"
|
|
5705
|
-
)))), /* @__PURE__ */ React29__default.default.createElement(
|
|
6502
|
+
)))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.CardContent, null, showCollectionOrder && /* @__PURE__ */ React29__default.default.createElement("div", { className: "mb-6 p-6 bg-white rounded-lg shadow-sm border border-slate-200" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "mb-4" }, /* @__PURE__ */ React29__default.default.createElement("h3", { className: "text-xl font-semibold text-slate-800 mb-2" }, "\u5546\u54C1\u6392\u5E8F\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-slate-600" }, "\u62D6\u62FD\u6216\u4F7F\u7528\u6309\u94AE\u8C03\u6574\u5546\u54C1\u5728\u524D\u53F0\u7684\u663E\u793A\u987A\u5E8F")), /* @__PURE__ */ React29__default.default.createElement(
|
|
5706
6503
|
CollectionOrderManagerV2,
|
|
5707
6504
|
{
|
|
5708
6505
|
moveCollectionUp: moveCollectionUp2,
|
|
@@ -5732,14 +6529,14 @@ function ConfigPageContent() {
|
|
|
5732
6529
|
{
|
|
5733
6530
|
onClick: async () => {
|
|
5734
6531
|
if (confirm("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u5546\u54C1\u5417\uFF1F")) {
|
|
5735
|
-
await
|
|
6532
|
+
await deleteCollection2(collection.id);
|
|
5736
6533
|
}
|
|
5737
6534
|
},
|
|
5738
6535
|
className: "flex items-center gap-1 px-3 py-1 bg-red-100 text-red-700 border border-red-200 rounded text-sm hover:bg-red-200 transition-colors"
|
|
5739
6536
|
},
|
|
5740
6537
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.Trash2, { size: 14 }),
|
|
5741
6538
|
"\u5220\u9664"
|
|
5742
|
-
)))))))))), /* @__PURE__ */ React29__default.default.createElement(
|
|
6539
|
+
)))))))))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "artworks", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-800" }, "\u5546\u54C1\u8BE6\u60C5\u56FE\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5743
6540
|
"select",
|
|
5744
6541
|
{
|
|
5745
6542
|
value: selectedCollection || "",
|
|
@@ -5806,14 +6603,14 @@ function ConfigPageContent() {
|
|
|
5806
6603
|
{
|
|
5807
6604
|
onClick: () => {
|
|
5808
6605
|
if (confirm("\u786E\u5B9A\u8981\u5220\u9664\u8FD9\u4E2A\u5546\u54C1\u8BE6\u60C5\u56FE\u5417\uFF1F")) {
|
|
5809
|
-
|
|
6606
|
+
deleteArtwork2(selectedCollection, artwork.id);
|
|
5810
6607
|
}
|
|
5811
6608
|
},
|
|
5812
6609
|
className: "flex items-center gap-1 px-3 py-1 bg-red-100 text-red-700 border border-red-200 rounded text-sm hover:bg-red-200 transition-colors"
|
|
5813
6610
|
},
|
|
5814
6611
|
/* @__PURE__ */ React29__default.default.createElement(lucideReact.Trash2, { size: 14 }),
|
|
5815
6612
|
"\u5220\u9664"
|
|
5816
|
-
))))))), /* @__PURE__ */ React29__default.default.createElement(
|
|
6613
|
+
))))))), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "bookings", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between mb-6" }, /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-800" }, "\u9884\u8BA2\u7BA1\u7406"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-slate-600" }, "\u67E5\u770B\u6240\u6709\u7528\u6237\u7684\u9884\u8BA2\u4FE1\u606F")), /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React29__default.default.createElement(
|
|
5817
6614
|
"button",
|
|
5818
6615
|
{
|
|
5819
6616
|
onClick: refreshBookingData,
|
|
@@ -5833,11 +6630,11 @@ function ConfigPageContent() {
|
|
|
5833
6630
|
onRefresh: handleBookingRefresh,
|
|
5834
6631
|
onSearch: handleBookingSearch,
|
|
5835
6632
|
onClearSearch: handleBookingClearSearch,
|
|
5836
|
-
onUpdateStatus:
|
|
5837
|
-
onDeleteBooking:
|
|
5838
|
-
onExportBookings:
|
|
6633
|
+
onUpdateStatus: updateBookingStatus3,
|
|
6634
|
+
onDeleteBooking: deleteBooking3,
|
|
6635
|
+
onExportBookings: exportBookings2
|
|
5839
6636
|
}
|
|
5840
|
-
)), /* @__PURE__ */ React29__default.default.createElement(
|
|
6637
|
+
)), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "popup", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-800 mb-2" }, "\u5F39\u7A97\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-slate-600" }, "\u7BA1\u7406\u8D2D\u7269\u8F66\u63D0\u4EA4\u65F6\u7684\u9650\u65F6\u63D0\u9192\u5F39\u7A97\u8BBE\u7F6E")), /* @__PURE__ */ React29__default.default.createElement(PopupConfigManagement, null)), /* @__PURE__ */ React29__default.default.createElement(chunkZRWED7Q6_js.TabsContent, { value: "system", className: "space-y-6" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "mb-6" }, /* @__PURE__ */ React29__default.default.createElement("h2", { className: "text-2xl font-bold text-slate-800 mb-2" }, "\u7CFB\u7EDF\u914D\u7F6E"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-slate-600" }, "\u7BA1\u7406ShowMasterPieces\u6A21\u5757\u7684\u7CFB\u7EDF\u7EA7\u914D\u7F6E\u9879\uFF0C\u4E3A\u6A21\u5757\u72EC\u7ACB\u5316\u505A\u51C6\u5907"), /* @__PURE__ */ React29__default.default.createElement("div", { className: "mt-4 p-4 bg-blue-50 border border-blue-200 rounded-lg" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-start gap-3" }, /* @__PURE__ */ React29__default.default.createElement(lucideReact.Cog, { className: "text-blue-600 mt-0.5", size: 20 }), /* @__PURE__ */ React29__default.default.createElement("div", null, /* @__PURE__ */ React29__default.default.createElement("h3", { className: "font-semibold text-blue-900" }, "\u914D\u7F6E\u8BF4\u660E"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-blue-800 text-sm mt-1" }, "\u8FD9\u91CC\u7684\u914D\u7F6E\u9879\u5C06\u7528\u4E8EShowMasterPieces\u6A21\u5757\u7684\u72EC\u7ACB\u8FD0\u884C\u3002 \u65B0\u521B\u5EFA\u7684\u914D\u7F6E\u9879\u4F1A\u81EA\u52A8\u6DFB\u52A0", /* @__PURE__ */ React29__default.default.createElement("code", { className: "bg-blue-100 px-1 rounded" }, "SHOWMASTER_"), "\u524D\u7F00\u3002"), /* @__PURE__ */ React29__default.default.createElement("p", { className: "text-blue-700 text-xs mt-2" }, "\u{1F4A1} \u63D0\u793A\uFF1A\u8FD9\u4E9B\u914D\u7F6E\u72EC\u7ACB\u4E8E\u5168\u5C40\u914D\u7F6E\uFF0C\u4FBF\u4E8E\u6A21\u5757\u6253\u5305\u548C\u90E8\u7F72\u3002"))))), /* @__PURE__ */ React29__default.default.createElement(SystemConfigManager, null)))), showCollectionForm && /* @__PURE__ */ React29__default.default.createElement("div", { className: "fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center p-4 z-50" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "bg-white rounded-lg shadow-xl max-w-2xl w-full max-h-[90vh] overflow-hidden" }, /* @__PURE__ */ React29__default.default.createElement("div", { className: "flex items-center justify-between p-6 border-b border-slate-200" }, /* @__PURE__ */ React29__default.default.createElement("h3", { className: "text-xl font-semibold text-slate-800" }, editingCollection ? "\u7F16\u8F91\u5546\u54C1" : "\u6DFB\u52A0\u5546\u54C1"), /* @__PURE__ */ React29__default.default.createElement(
|
|
5841
6638
|
"button",
|
|
5842
6639
|
{
|
|
5843
6640
|
onClick: () => setShowCollectionForm(false),
|
|
@@ -6113,6 +6910,7 @@ exports.AddConfigItemDialog = AddConfigItemDialog;
|
|
|
6113
6910
|
exports.AddToCartButton = AddToCartButton;
|
|
6114
6911
|
exports.ArtworkOrderManagerV2 = ArtworkOrderManagerV2;
|
|
6115
6912
|
exports.ArtworkViewer = ArtworkViewer;
|
|
6913
|
+
exports.BOOKING_EXPORT_FIELDS = BOOKING_EXPORT_FIELDS;
|
|
6116
6914
|
exports.BookingAdminPanel = BookingAdminPanel;
|
|
6117
6915
|
exports.BookingModal = BookingModal;
|
|
6118
6916
|
exports.BookingPage = BookingPage;
|
|
@@ -6124,6 +6922,7 @@ exports.CollectionCard = CollectionCard;
|
|
|
6124
6922
|
exports.CollectionList = CollectionList;
|
|
6125
6923
|
exports.CollectionOrderManagerV2 = CollectionOrderManagerV2;
|
|
6126
6924
|
exports.ConfigPage = ConfigPage;
|
|
6925
|
+
exports.DEFAULT_BOOKING_EXPORT_CONFIG = DEFAULT_BOOKING_EXPORT_CONFIG;
|
|
6127
6926
|
exports.DeadlinePopup = DeadlinePopup;
|
|
6128
6927
|
exports.DeadlinePopupManager = DeadlinePopupManager;
|
|
6129
6928
|
exports.DeleteConfirmDialog = DeleteConfirmDialog;
|
|
@@ -6134,5 +6933,12 @@ exports.SystemConfigManager = SystemConfigManager;
|
|
|
6134
6933
|
exports.ThumbnailSidebar = ThumbnailSidebar;
|
|
6135
6934
|
exports.UniversalImageUpload = UniversalImageUpload;
|
|
6136
6935
|
exports.UserHistoryPage = UserHistoryPage;
|
|
6137
|
-
|
|
6138
|
-
|
|
6936
|
+
exports.clearConfigCache = clearConfigCache;
|
|
6937
|
+
exports.getArtworkImageUrl = getArtworkImageUrl;
|
|
6938
|
+
exports.getShowMasterpieceFileConfig = getShowMasterpieceFileConfig;
|
|
6939
|
+
exports.getStorageModeDisplayName = getStorageModeDisplayName;
|
|
6940
|
+
exports.refreshFileServiceConfig = refreshFileServiceConfig;
|
|
6941
|
+
exports.shouldUseUniversalFileService = shouldUseUniversalFileService;
|
|
6942
|
+
exports.uploadArtworkImage = uploadArtworkImage;
|
|
6943
|
+
//# sourceMappingURL=chunk-PVLLRDUT.js.map
|
|
6944
|
+
//# sourceMappingURL=chunk-PVLLRDUT.js.map
|