sa2kit 1.6.70 → 1.6.73
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/festivalCard/core/index.d.mts +1 -1
- package/dist/festivalCard/core/index.d.ts +1 -1
- package/dist/festivalCard/core/index.js +4 -2
- package/dist/festivalCard/core/index.js.map +1 -1
- package/dist/festivalCard/core/index.mjs +4 -2
- package/dist/festivalCard/core/index.mjs.map +1 -1
- package/dist/festivalCard/index.d.mts +2 -2
- package/dist/festivalCard/index.d.ts +2 -2
- package/dist/festivalCard/index.js +118 -155
- package/dist/festivalCard/index.js.map +1 -1
- package/dist/festivalCard/index.mjs +118 -155
- package/dist/festivalCard/index.mjs.map +1 -1
- package/dist/festivalCard/miniapp/index.d.mts +3 -3
- package/dist/festivalCard/miniapp/index.d.ts +3 -3
- package/dist/festivalCard/miniapp/index.js +21 -15
- package/dist/festivalCard/miniapp/index.js.map +1 -1
- package/dist/festivalCard/miniapp/index.mjs +21 -15
- package/dist/festivalCard/miniapp/index.mjs.map +1 -1
- package/dist/festivalCard/routes/index.d.mts +13 -16
- package/dist/festivalCard/routes/index.d.ts +13 -16
- package/dist/festivalCard/routes/index.js +14 -5
- package/dist/festivalCard/routes/index.js.map +1 -1
- package/dist/festivalCard/routes/index.mjs +14 -5
- package/dist/festivalCard/routes/index.mjs.map +1 -1
- package/dist/festivalCard/server/index.d.mts +1 -1
- package/dist/festivalCard/server/index.d.ts +1 -1
- package/dist/festivalCard/web/index.d.mts +3 -3
- package/dist/festivalCard/web/index.d.ts +3 -3
- package/dist/festivalCard/web/index.js +118 -155
- package/dist/festivalCard/web/index.js.map +1 -1
- package/dist/festivalCard/web/index.mjs +118 -155
- package/dist/festivalCard/web/index.mjs.map +1 -1
- package/dist/{festivalCardService-CgNBOjjO.d.mts → festivalCardService-CqBTVC6x.d.mts} +1 -1
- package/dist/{festivalCardService-ClJiAP6P.d.ts → festivalCardService-iFKu0k9q.d.ts} +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +118 -155
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +118 -155
- package/dist/index.mjs.map +1 -1
- package/dist/{types-COyg0XDw.d.mts → types-D2WetAPc.d.mts} +1 -0
- package/dist/{types-COyg0XDw.d.ts → types-D2WetAPc.d.ts} +1 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -7185,7 +7185,8 @@ var DEFAULT_FESTIVAL_CARD_CONFIG = {
|
|
|
7185
7185
|
src: "https://images.unsplash.com/photo-1512389142860-9c449e58a543?auto=format&fit=crop&w=1200&q=80",
|
|
7186
7186
|
fit: "cover",
|
|
7187
7187
|
borderRadius: 16,
|
|
7188
|
-
alt: "holiday"
|
|
7188
|
+
alt: "holiday",
|
|
7189
|
+
isBackground: false
|
|
7189
7190
|
}
|
|
7190
7191
|
]
|
|
7191
7192
|
},
|
|
@@ -7244,7 +7245,8 @@ var DEFAULT_FESTIVAL_CARD_CONFIG = {
|
|
|
7244
7245
|
src: "https://images.unsplash.com/photo-1456324504439-367cee3b3c32?auto=format&fit=crop&w=1200&q=80",
|
|
7245
7246
|
fit: "cover",
|
|
7246
7247
|
borderRadius: 14,
|
|
7247
|
-
alt: "gift"
|
|
7248
|
+
alt: "gift",
|
|
7249
|
+
isBackground: false
|
|
7248
7250
|
},
|
|
7249
7251
|
{
|
|
7250
7252
|
id: "p3-text-1",
|
|
@@ -7310,9 +7312,10 @@ var useFestivalCardConfig = (options) => {
|
|
|
7310
7312
|
const [loading, setLoading] = useState(Boolean(options?.fetchConfig));
|
|
7311
7313
|
const [saving, setSaving] = useState(false);
|
|
7312
7314
|
useEffect(() => {
|
|
7313
|
-
|
|
7315
|
+
const fetchConfig = options?.fetchConfig;
|
|
7316
|
+
if (!fetchConfig) return;
|
|
7314
7317
|
let active = true;
|
|
7315
|
-
void
|
|
7318
|
+
void fetchConfig().then((value) => {
|
|
7316
7319
|
if (!active) return;
|
|
7317
7320
|
setConfig(normalizeFestivalCardConfig(value));
|
|
7318
7321
|
}).finally(() => {
|
|
@@ -7321,16 +7324,17 @@ var useFestivalCardConfig = (options) => {
|
|
|
7321
7324
|
return () => {
|
|
7322
7325
|
active = false;
|
|
7323
7326
|
};
|
|
7324
|
-
}, [options]);
|
|
7327
|
+
}, [options?.fetchConfig]);
|
|
7325
7328
|
const save = useCallback(async () => {
|
|
7326
|
-
|
|
7329
|
+
const onSave = options?.onSave;
|
|
7330
|
+
if (!onSave) return;
|
|
7327
7331
|
setSaving(true);
|
|
7328
7332
|
try {
|
|
7329
|
-
await
|
|
7333
|
+
await onSave(config);
|
|
7330
7334
|
} finally {
|
|
7331
7335
|
setSaving(false);
|
|
7332
7336
|
}
|
|
7333
|
-
}, [config, options]);
|
|
7337
|
+
}, [config, options?.onSave]);
|
|
7334
7338
|
return useMemo(
|
|
7335
7339
|
() => ({
|
|
7336
7340
|
config,
|
|
@@ -7344,6 +7348,7 @@ var useFestivalCardConfig = (options) => {
|
|
|
7344
7348
|
};
|
|
7345
7349
|
var elementStyle = (element) => ({
|
|
7346
7350
|
position: "absolute",
|
|
7351
|
+
zIndex: 2,
|
|
7347
7352
|
left: `${element.x}%`,
|
|
7348
7353
|
top: `${element.y}%`,
|
|
7349
7354
|
width: `${element.width ?? 70}%`,
|
|
@@ -7386,22 +7391,23 @@ var renderElement = (element) => {
|
|
|
7386
7391
|
);
|
|
7387
7392
|
};
|
|
7388
7393
|
var FestivalCardPageRenderer = ({ page }) => {
|
|
7394
|
+
const backgroundElement = page.elements.find(
|
|
7395
|
+
(element) => element.type === "image" && Boolean(element.isBackground)
|
|
7396
|
+
);
|
|
7397
|
+
const foregroundElements = page.elements.filter((element) => !(element.type === "image" && element.isBackground));
|
|
7389
7398
|
return /* @__PURE__ */ React42__default.createElement(
|
|
7390
7399
|
"div",
|
|
7391
7400
|
{
|
|
7401
|
+
className: "relative h-full w-full overflow-hidden rounded-2xl",
|
|
7392
7402
|
style: {
|
|
7393
|
-
position: "relative",
|
|
7394
|
-
width: "100%",
|
|
7395
|
-
height: "100%",
|
|
7396
|
-
overflow: "hidden",
|
|
7397
|
-
borderRadius: 16,
|
|
7398
7403
|
backgroundColor: page.background?.color || "#0f172a",
|
|
7399
|
-
backgroundImage: page.background?.image ? `url(${page.background.image})` : void 0,
|
|
7404
|
+
backgroundImage: backgroundElement ? `url(${backgroundElement.src})` : page.background?.image ? `url(${page.background.image})` : void 0,
|
|
7400
7405
|
backgroundSize: "cover",
|
|
7401
7406
|
backgroundPosition: "center"
|
|
7402
7407
|
}
|
|
7403
7408
|
},
|
|
7404
|
-
|
|
7409
|
+
/* @__PURE__ */ React42__default.createElement("div", { className: "absolute inset-0 bg-slate-950/20" }),
|
|
7410
|
+
foregroundElements.map(renderElement)
|
|
7405
7411
|
);
|
|
7406
7412
|
};
|
|
7407
7413
|
|
|
@@ -7415,100 +7421,31 @@ var FestivalCardBook3D = ({ config, className }) => {
|
|
|
7415
7421
|
return /* @__PURE__ */ React42__default.createElement("div", { className }, /* @__PURE__ */ React42__default.createElement(
|
|
7416
7422
|
"div",
|
|
7417
7423
|
{
|
|
7424
|
+
className: "w-full min-h-[560px] rounded-3xl p-6 shadow-2xl shadow-slate-900/50",
|
|
7418
7425
|
style: {
|
|
7419
|
-
|
|
7420
|
-
minHeight: 560,
|
|
7421
|
-
borderRadius: 24,
|
|
7422
|
-
padding: 24,
|
|
7423
|
-
background: `linear-gradient(145deg, ${normalized.background?.colorA || "#0c1a34"} 0%, ${normalized.background?.colorB || "#1f4f8a"} 100%)`,
|
|
7424
|
-
boxShadow: "0 26px 70px rgba(2, 6, 23, 0.45)"
|
|
7426
|
+
background: `linear-gradient(145deg, ${normalized.background?.colorA || "#0c1a34"} 0%, ${normalized.background?.colorB || "#1f4f8a"} 100%)`
|
|
7425
7427
|
}
|
|
7426
7428
|
},
|
|
7427
|
-
/* @__PURE__ */ React42__default.createElement(
|
|
7428
|
-
|
|
7429
|
-
{
|
|
7430
|
-
style: {
|
|
7431
|
-
marginBottom: 14,
|
|
7432
|
-
color: "#f8fafc",
|
|
7433
|
-
fontSize: 14,
|
|
7434
|
-
opacity: 0.9,
|
|
7435
|
-
textAlign: "center"
|
|
7436
|
-
}
|
|
7437
|
-
},
|
|
7438
|
-
normalized.coverTitle || "Festival Card",
|
|
7439
|
-
" \xB7 \u7B2C ",
|
|
7440
|
-
currentPage + 1,
|
|
7441
|
-
" / ",
|
|
7442
|
-
pages.length,
|
|
7443
|
-
" \u9875"
|
|
7444
|
-
),
|
|
7445
|
-
/* @__PURE__ */ React42__default.createElement("div", { style: { perspective: 1400, width: "100%", maxWidth: 920, margin: "0 auto" } }, /* @__PURE__ */ React42__default.createElement(
|
|
7429
|
+
/* @__PURE__ */ React42__default.createElement("div", { className: "mx-auto w-full max-w-5xl text-center text-slate-100" }, /* @__PURE__ */ React42__default.createElement("h3", { className: "mb-4 text-lg font-semibold" }, normalized.coverTitle || "Festival Card")),
|
|
7430
|
+
/* @__PURE__ */ React42__default.createElement("div", { className: "mx-auto w-full max-w-5xl" }, /* @__PURE__ */ React42__default.createElement("div", { className: "relative h-[460px]" }, pages.map((page, index) => /* @__PURE__ */ React42__default.createElement(
|
|
7446
7431
|
"div",
|
|
7447
7432
|
{
|
|
7433
|
+
key: page.id,
|
|
7434
|
+
className: "absolute inset-0 transition-opacity duration-500 ease-out",
|
|
7448
7435
|
style: {
|
|
7449
|
-
|
|
7450
|
-
|
|
7451
|
-
transformStyle: "preserve-3d"
|
|
7436
|
+
opacity: index === currentPage ? 1 : 0,
|
|
7437
|
+
pointerEvents: index === currentPage ? "auto" : "none"
|
|
7452
7438
|
}
|
|
7453
7439
|
},
|
|
7454
|
-
|
|
7455
|
-
|
|
7456
|
-
|
|
7457
|
-
return /* @__PURE__ */ React42__default.createElement(
|
|
7458
|
-
"div",
|
|
7459
|
-
{
|
|
7460
|
-
key: page.id,
|
|
7461
|
-
style: {
|
|
7462
|
-
position: "absolute",
|
|
7463
|
-
inset: 0,
|
|
7464
|
-
transformStyle: "preserve-3d",
|
|
7465
|
-
transformOrigin: "left center",
|
|
7466
|
-
transform: `rotateY(${isFlipped ? -170 : 0}deg)`,
|
|
7467
|
-
transition: "transform 600ms cubic-bezier(0.2, 0.8, 0.2, 1)",
|
|
7468
|
-
zIndex
|
|
7469
|
-
}
|
|
7470
|
-
},
|
|
7471
|
-
/* @__PURE__ */ React42__default.createElement(
|
|
7472
|
-
"div",
|
|
7473
|
-
{
|
|
7474
|
-
style: {
|
|
7475
|
-
position: "absolute",
|
|
7476
|
-
inset: 0,
|
|
7477
|
-
backfaceVisibility: "hidden"
|
|
7478
|
-
}
|
|
7479
|
-
},
|
|
7480
|
-
/* @__PURE__ */ React42__default.createElement(FestivalCardPageRenderer, { page })
|
|
7481
|
-
),
|
|
7482
|
-
/* @__PURE__ */ React42__default.createElement(
|
|
7483
|
-
"div",
|
|
7484
|
-
{
|
|
7485
|
-
style: {
|
|
7486
|
-
position: "absolute",
|
|
7487
|
-
inset: 0,
|
|
7488
|
-
transform: "rotateY(180deg)",
|
|
7489
|
-
backfaceVisibility: "hidden",
|
|
7490
|
-
borderRadius: 16,
|
|
7491
|
-
background: "#0f172a"
|
|
7492
|
-
}
|
|
7493
|
-
}
|
|
7494
|
-
)
|
|
7495
|
-
);
|
|
7496
|
-
})
|
|
7497
|
-
)),
|
|
7498
|
-
/* @__PURE__ */ React42__default.createElement("div", { style: { display: "flex", justifyContent: "center", gap: 12, marginTop: 18 } }, /* @__PURE__ */ React42__default.createElement(
|
|
7440
|
+
/* @__PURE__ */ React42__default.createElement(FestivalCardPageRenderer, { page })
|
|
7441
|
+
)))),
|
|
7442
|
+
/* @__PURE__ */ React42__default.createElement("div", { className: "mt-5 flex justify-center gap-3" }, /* @__PURE__ */ React42__default.createElement(
|
|
7499
7443
|
"button",
|
|
7500
7444
|
{
|
|
7501
7445
|
type: "button",
|
|
7502
7446
|
disabled: !canPrev,
|
|
7503
7447
|
onClick: () => setCurrentPage((p) => Math.max(0, p - 1)),
|
|
7504
|
-
|
|
7505
|
-
border: "none",
|
|
7506
|
-
borderRadius: 999,
|
|
7507
|
-
padding: "9px 16px",
|
|
7508
|
-
fontSize: 14,
|
|
7509
|
-
cursor: canPrev ? "pointer" : "not-allowed",
|
|
7510
|
-
opacity: canPrev ? 1 : 0.4
|
|
7511
|
-
}
|
|
7448
|
+
className: "rounded-full bg-white px-5 py-2 text-sm font-medium text-slate-900 disabled:cursor-not-allowed disabled:opacity-45"
|
|
7512
7449
|
},
|
|
7513
7450
|
"\u4E0A\u4E00\u9875"
|
|
7514
7451
|
), /* @__PURE__ */ React42__default.createElement(
|
|
@@ -7517,14 +7454,7 @@ var FestivalCardBook3D = ({ config, className }) => {
|
|
|
7517
7454
|
type: "button",
|
|
7518
7455
|
disabled: !canNext,
|
|
7519
7456
|
onClick: () => setCurrentPage((p) => Math.min(pages.length - 1, p + 1)),
|
|
7520
|
-
|
|
7521
|
-
border: "none",
|
|
7522
|
-
borderRadius: 999,
|
|
7523
|
-
padding: "9px 16px",
|
|
7524
|
-
fontSize: 14,
|
|
7525
|
-
cursor: canNext ? "pointer" : "not-allowed",
|
|
7526
|
-
opacity: canNext ? 1 : 0.4
|
|
7527
|
-
}
|
|
7457
|
+
className: "rounded-full bg-sky-300 px-5 py-2 text-sm font-medium text-slate-900 disabled:cursor-not-allowed disabled:opacity-45"
|
|
7528
7458
|
},
|
|
7529
7459
|
"\u4E0B\u4E00\u9875"
|
|
7530
7460
|
))
|
|
@@ -7535,7 +7465,7 @@ var FestivalCardBook3D = ({ config, className }) => {
|
|
|
7535
7465
|
autoPlay: normalized.backgroundMusic.autoPlay,
|
|
7536
7466
|
loop: normalized.backgroundMusic.loop,
|
|
7537
7467
|
controls: true,
|
|
7538
|
-
|
|
7468
|
+
className: "mt-3 w-full"
|
|
7539
7469
|
}
|
|
7540
7470
|
) : null);
|
|
7541
7471
|
};
|
|
@@ -7577,16 +7507,17 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
|
|
|
7577
7507
|
)
|
|
7578
7508
|
});
|
|
7579
7509
|
};
|
|
7580
|
-
return /* @__PURE__ */ React42__default.createElement("div", {
|
|
7510
|
+
return /* @__PURE__ */ React42__default.createElement("div", { className: "rounded-2xl border border-slate-200 bg-white p-4 text-slate-900 shadow-sm" }, /* @__PURE__ */ React42__default.createElement("div", { className: "grid gap-3" }, /* @__PURE__ */ React42__default.createElement("label", { className: "grid gap-1.5" }, /* @__PURE__ */ React42__default.createElement("span", { className: "text-sm font-medium text-slate-700" }, "\u9875\u9762\u6570\u91CF"), /* @__PURE__ */ React42__default.createElement(
|
|
7581
7511
|
"input",
|
|
7582
7512
|
{
|
|
7583
7513
|
type: "number",
|
|
7584
7514
|
min: 1,
|
|
7585
7515
|
max: 12,
|
|
7586
7516
|
value: value.pages.length,
|
|
7587
|
-
onChange: (event) => onChange(resizeFestivalCardPages(value, Number(event.target.value)))
|
|
7517
|
+
onChange: (event) => onChange(resizeFestivalCardPages(value, Number(event.target.value))),
|
|
7518
|
+
className: "rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100"
|
|
7588
7519
|
}
|
|
7589
|
-
)), /* @__PURE__ */ React42__default.createElement("label", {
|
|
7520
|
+
)), /* @__PURE__ */ React42__default.createElement("label", { className: "grid gap-1.5" }, /* @__PURE__ */ React42__default.createElement("span", { className: "text-sm font-medium text-slate-700" }, "\u80CC\u666F\u97F3\u4E50 URL"), /* @__PURE__ */ React42__default.createElement(
|
|
7590
7521
|
"input",
|
|
7591
7522
|
{
|
|
7592
7523
|
type: "url",
|
|
@@ -7597,9 +7528,18 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
|
|
|
7597
7528
|
...value.backgroundMusic,
|
|
7598
7529
|
src: event.target.value
|
|
7599
7530
|
}
|
|
7600
|
-
})
|
|
7531
|
+
}),
|
|
7532
|
+
className: "rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100"
|
|
7601
7533
|
}
|
|
7602
|
-
)), /* @__PURE__ */ React42__default.createElement("label", {
|
|
7534
|
+
)), /* @__PURE__ */ React42__default.createElement("label", { className: "grid gap-1.5" }, /* @__PURE__ */ React42__default.createElement("span", { className: "text-sm font-medium text-slate-700" }, "\u7F16\u8F91\u9875\u9762"), /* @__PURE__ */ React42__default.createElement(
|
|
7535
|
+
"select",
|
|
7536
|
+
{
|
|
7537
|
+
value: activePageIndex,
|
|
7538
|
+
onChange: (event) => setActivePageIndex(Number(event.target.value)),
|
|
7539
|
+
className: "rounded-lg border border-slate-300 bg-white px-3 py-2 text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100"
|
|
7540
|
+
},
|
|
7541
|
+
pageOptions.map((index) => /* @__PURE__ */ React42__default.createElement("option", { key: index, value: index }, "\u7B2C ", index + 1, " \u9875"))
|
|
7542
|
+
))), canEditPage ? /* @__PURE__ */ React42__default.createElement("div", { className: "mt-4" }, /* @__PURE__ */ React42__default.createElement("div", { className: "mb-3 flex gap-2" }, /* @__PURE__ */ React42__default.createElement(
|
|
7603
7543
|
"button",
|
|
7604
7544
|
{
|
|
7605
7545
|
type: "button",
|
|
@@ -7608,7 +7548,8 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
|
|
|
7608
7548
|
pages: value.pages.map(
|
|
7609
7549
|
(p, index) => index === activePageIndex ? { ...p, elements: [...p.elements, createTextElement(index)] } : p
|
|
7610
7550
|
)
|
|
7611
|
-
})
|
|
7551
|
+
}),
|
|
7552
|
+
className: "rounded-lg bg-slate-900 px-3 py-2 text-sm font-medium text-white"
|
|
7612
7553
|
},
|
|
7613
7554
|
"+ \u6587\u5B57"
|
|
7614
7555
|
), /* @__PURE__ */ React42__default.createElement(
|
|
@@ -7620,26 +7561,35 @@ var FestivalCardConfigEditor = ({ value, onChange }) => {
|
|
|
7620
7561
|
pages: value.pages.map(
|
|
7621
7562
|
(p, index) => index === activePageIndex ? { ...p, elements: [...p.elements, createImageElement(index)] } : p
|
|
7622
7563
|
)
|
|
7623
|
-
})
|
|
7564
|
+
}),
|
|
7565
|
+
className: "rounded-lg bg-sky-600 px-3 py-2 text-sm font-medium text-white"
|
|
7624
7566
|
},
|
|
7625
7567
|
"+ \u56FE\u7247"
|
|
7626
|
-
)), /* @__PURE__ */ React42__default.createElement("div", {
|
|
7568
|
+
)), /* @__PURE__ */ React42__default.createElement("div", { className: "grid max-h-[340px] gap-2.5 overflow-auto pr-1" }, (page?.elements ?? []).map((element) => /* @__PURE__ */ React42__default.createElement("div", { key: element.id, className: "rounded-xl border border-slate-200 bg-slate-50 p-3" }, /* @__PURE__ */ React42__default.createElement("div", { className: "mb-2 text-xs font-semibold tracking-wide text-slate-500" }, element.type.toUpperCase()), element.type === "text" ? /* @__PURE__ */ React42__default.createElement(
|
|
7627
7569
|
"textarea",
|
|
7628
7570
|
{
|
|
7629
7571
|
value: element.content,
|
|
7630
7572
|
onChange: (event) => updateElement(element.id, { content: event.target.value }),
|
|
7631
7573
|
rows: 3,
|
|
7632
|
-
|
|
7574
|
+
className: "w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100"
|
|
7633
7575
|
}
|
|
7634
|
-
) : /* @__PURE__ */ React42__default.createElement(
|
|
7576
|
+
) : /* @__PURE__ */ React42__default.createElement("div", { className: "grid gap-2" }, /* @__PURE__ */ React42__default.createElement(
|
|
7635
7577
|
"input",
|
|
7636
7578
|
{
|
|
7637
7579
|
type: "url",
|
|
7638
7580
|
value: element.src,
|
|
7639
7581
|
onChange: (event) => updateElement(element.id, { src: event.target.value }),
|
|
7640
|
-
|
|
7582
|
+
className: "w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100"
|
|
7641
7583
|
}
|
|
7642
|
-
)
|
|
7584
|
+
), /* @__PURE__ */ React42__default.createElement("label", { className: "inline-flex items-center gap-2 text-sm text-slate-700" }, /* @__PURE__ */ React42__default.createElement(
|
|
7585
|
+
"input",
|
|
7586
|
+
{
|
|
7587
|
+
type: "checkbox",
|
|
7588
|
+
checked: Boolean(element.isBackground),
|
|
7589
|
+
onChange: (event) => updateElement(element.id, { isBackground: event.target.checked }),
|
|
7590
|
+
className: "h-4 w-4 rounded border-slate-300 text-sky-600"
|
|
7591
|
+
}
|
|
7592
|
+
), "\u4F5C\u4E3A\u672C\u9875\u80CC\u666F\u56FE")))))) : null);
|
|
7643
7593
|
};
|
|
7644
7594
|
|
|
7645
7595
|
// src/festivalCard/components/FestivalCardStudio.tsx
|
|
@@ -7650,13 +7600,13 @@ var FestivalCardStudio = ({ initialConfig, fetchConfig, onSave }) => {
|
|
|
7650
7600
|
onSave
|
|
7651
7601
|
});
|
|
7652
7602
|
if (loading) return /* @__PURE__ */ React42__default.createElement("div", null, "\u52A0\u8F7D\u4E2D...");
|
|
7653
|
-
return /* @__PURE__ */ React42__default.createElement("div", {
|
|
7603
|
+
return /* @__PURE__ */ React42__default.createElement("div", { className: "grid gap-4 lg:grid-cols-[1.45fr_1fr]" }, /* @__PURE__ */ React42__default.createElement(FestivalCardBook3D, { config, className: "h-full" }), /* @__PURE__ */ React42__default.createElement("div", null, /* @__PURE__ */ React42__default.createElement(FestivalCardConfigEditor, { value: config, onChange: setConfig }), onSave ? /* @__PURE__ */ React42__default.createElement(
|
|
7654
7604
|
"button",
|
|
7655
7605
|
{
|
|
7656
7606
|
type: "button",
|
|
7657
7607
|
onClick: () => void save(),
|
|
7658
7608
|
disabled: saving,
|
|
7659
|
-
|
|
7609
|
+
className: "mt-3 w-full rounded-lg bg-slate-900 px-4 py-2.5 text-sm font-medium text-white disabled:opacity-60"
|
|
7660
7610
|
},
|
|
7661
7611
|
saving ? "\u4FDD\u5B58\u4E2D..." : "\u4FDD\u5B58\u914D\u7F6E"
|
|
7662
7612
|
) : null));
|
|
@@ -7683,25 +7633,42 @@ var FestivalCardConfigPage = ({
|
|
|
7683
7633
|
return normalizeFestivalCardConfig(payload);
|
|
7684
7634
|
};
|
|
7685
7635
|
const reloadList = useCallback(async () => {
|
|
7686
|
-
|
|
7687
|
-
|
|
7688
|
-
|
|
7636
|
+
try {
|
|
7637
|
+
const response = await fetch(apiBase, { cache: "no-store" });
|
|
7638
|
+
if (!response.ok) throw new Error(`\u52A0\u8F7D\u5361\u7247\u5217\u8868\u5931\u8D25: ${response.status}`);
|
|
7639
|
+
const data = await response.json();
|
|
7640
|
+
setList(parseListResponse2(data));
|
|
7641
|
+
} catch (error) {
|
|
7642
|
+
window.alert(error.message || "\u52A0\u8F7D\u5361\u7247\u5217\u8868\u5931\u8D25");
|
|
7643
|
+
}
|
|
7689
7644
|
}, [apiBase]);
|
|
7690
7645
|
useEffect(() => {
|
|
7691
7646
|
void reloadList();
|
|
7692
7647
|
}, [reloadList]);
|
|
7693
7648
|
const fetchConfig = async () => {
|
|
7694
7649
|
const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, { cache: "no-store" });
|
|
7650
|
+
if (!response.ok) {
|
|
7651
|
+
const message = `\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25: ${response.status}`;
|
|
7652
|
+
window.alert(message);
|
|
7653
|
+
throw new Error(message);
|
|
7654
|
+
}
|
|
7695
7655
|
const data = await response.json();
|
|
7696
7656
|
return parseConfigResponse2(data);
|
|
7697
7657
|
};
|
|
7698
7658
|
const saveConfig = async (config) => {
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7702
|
-
|
|
7703
|
-
|
|
7704
|
-
|
|
7659
|
+
try {
|
|
7660
|
+
const response = await fetch(`${apiBase}/${encodeURIComponent(selectedId)}`, {
|
|
7661
|
+
method: "PUT",
|
|
7662
|
+
headers: { "Content-Type": "application/json" },
|
|
7663
|
+
body: JSON.stringify({ config })
|
|
7664
|
+
});
|
|
7665
|
+
if (!response.ok) throw new Error(`\u4FDD\u5B58\u5931\u8D25: ${response.status}`);
|
|
7666
|
+
await reloadList();
|
|
7667
|
+
window.alert("\u4FDD\u5B58\u6210\u529F");
|
|
7668
|
+
} catch (error) {
|
|
7669
|
+
window.alert(error.message || "\u4FDD\u5B58\u5931\u8D25");
|
|
7670
|
+
throw error;
|
|
7671
|
+
}
|
|
7705
7672
|
};
|
|
7706
7673
|
const createNew = async () => {
|
|
7707
7674
|
const name = window.prompt("\u8BF7\u8F93\u5165\u65B0\u5361\u7247\u540D\u79F0");
|
|
@@ -7711,16 +7678,30 @@ var FestivalCardConfigPage = ({
|
|
|
7711
7678
|
id,
|
|
7712
7679
|
name
|
|
7713
7680
|
});
|
|
7714
|
-
|
|
7715
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
7720
|
-
|
|
7681
|
+
try {
|
|
7682
|
+
const response = await fetch(`${apiBase}/${encodeURIComponent(id)}`, {
|
|
7683
|
+
method: "PUT",
|
|
7684
|
+
headers: { "Content-Type": "application/json" },
|
|
7685
|
+
body: JSON.stringify({ config })
|
|
7686
|
+
});
|
|
7687
|
+
if (!response.ok) throw new Error(`\u521B\u5EFA\u5931\u8D25: ${response.status}`);
|
|
7688
|
+
setSelectedId(id);
|
|
7689
|
+
await reloadList();
|
|
7690
|
+
window.alert("\u65B0\u5361\u7247\u521B\u5EFA\u6210\u529F");
|
|
7691
|
+
} catch (error) {
|
|
7692
|
+
window.alert(error.message || "\u521B\u5EFA\u5931\u8D25");
|
|
7693
|
+
}
|
|
7721
7694
|
};
|
|
7722
7695
|
const mainLink = useMemo(() => `${mainPagePath}?cardId=${encodeURIComponent(selectedId)}`, [mainPagePath, selectedId]);
|
|
7723
|
-
return /* @__PURE__ */ React42__default.createElement("div", {
|
|
7696
|
+
return /* @__PURE__ */ React42__default.createElement("div", { className: "grid gap-3" }, /* @__PURE__ */ React42__default.createElement("div", { className: "flex flex-wrap items-center gap-2" }, /* @__PURE__ */ React42__default.createElement(
|
|
7697
|
+
"select",
|
|
7698
|
+
{
|
|
7699
|
+
value: selectedId,
|
|
7700
|
+
onChange: (event) => setSelectedId(event.target.value),
|
|
7701
|
+
className: "min-w-[200px] rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm text-slate-900 outline-none focus:border-sky-400 focus:ring-2 focus:ring-sky-100"
|
|
7702
|
+
},
|
|
7703
|
+
list.map((item) => /* @__PURE__ */ React42__default.createElement("option", { key: item.id, value: item.id }, item.name || item.id))
|
|
7704
|
+
), /* @__PURE__ */ React42__default.createElement("button", { type: "button", onClick: () => void createNew(), className: "rounded-lg bg-slate-900 px-3 py-2 text-sm font-medium text-white" }, "\u65B0\u5EFA\u5361\u7247"), /* @__PURE__ */ React42__default.createElement("a", { href: mainLink, className: "rounded-lg border border-sky-200 bg-sky-50 px-3 py-2 text-sm text-sky-700" }, "\u6253\u5F00\u4E3B\u9875\u9762")), /* @__PURE__ */ React42__default.createElement(FestivalCardStudio, { fetchConfig, onSave: saveConfig }));
|
|
7724
7705
|
};
|
|
7725
7706
|
var isSummary = (value) => {
|
|
7726
7707
|
if (!value || typeof value !== "object") return false;
|
|
@@ -7744,7 +7725,6 @@ var FestivalCardManagedPage = ({
|
|
|
7744
7725
|
cardId,
|
|
7745
7726
|
configPagePath = "/festivalCard/config"
|
|
7746
7727
|
}) => {
|
|
7747
|
-
const [list, setList] = useState([]);
|
|
7748
7728
|
const [currentCardId, setCurrentCardId] = useState(cardId || "");
|
|
7749
7729
|
const [config, setConfig] = useState(null);
|
|
7750
7730
|
const [loading, setLoading] = useState(true);
|
|
@@ -7753,7 +7733,6 @@ var FestivalCardManagedPage = ({
|
|
|
7753
7733
|
const response = await fetch(apiBase, { cache: "no-store" });
|
|
7754
7734
|
const data = await response.json();
|
|
7755
7735
|
const items = parseListResponse(data);
|
|
7756
|
-
setList(items);
|
|
7757
7736
|
const first = items[0];
|
|
7758
7737
|
if (!currentCardId && first) {
|
|
7759
7738
|
setCurrentCardId(first.id);
|
|
@@ -7770,23 +7749,7 @@ var FestivalCardManagedPage = ({
|
|
|
7770
7749
|
if (!currentCardId) return configPagePath;
|
|
7771
7750
|
return `${configPagePath}?cardId=${encodeURIComponent(currentCardId)}`;
|
|
7772
7751
|
}, [configPagePath, currentCardId]);
|
|
7773
|
-
return /* @__PURE__ */ React42__default.createElement("div", {
|
|
7774
|
-
"button",
|
|
7775
|
-
{
|
|
7776
|
-
key: item.id,
|
|
7777
|
-
type: "button",
|
|
7778
|
-
onClick: () => setCurrentCardId(item.id),
|
|
7779
|
-
style: {
|
|
7780
|
-
borderRadius: 8,
|
|
7781
|
-
border: "1px solid #334155",
|
|
7782
|
-
padding: "8px 10px",
|
|
7783
|
-
textAlign: "left",
|
|
7784
|
-
background: currentCardId === item.id ? "#1e293b" : "#0b1220",
|
|
7785
|
-
color: "#e2e8f0"
|
|
7786
|
-
}
|
|
7787
|
-
},
|
|
7788
|
-
item.name || item.id
|
|
7789
|
-
))), /* @__PURE__ */ React42__default.createElement("a", { href: configLink, style: { display: "inline-block", marginTop: 12, color: "#93c5fd", fontSize: 13 } }, "\u8FDB\u5165\u914D\u7F6E\u9875")), /* @__PURE__ */ React42__default.createElement("div", null, loading || !config ? /* @__PURE__ */ React42__default.createElement("div", null, "\u52A0\u8F7D\u4E2D...") : /* @__PURE__ */ React42__default.createElement(FestivalCardBook3D, { config })));
|
|
7752
|
+
return /* @__PURE__ */ React42__default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React42__default.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ React42__default.createElement("a", { href: configLink, className: "rounded-lg border border-slate-700 bg-slate-900 px-3 py-1.5 text-sm text-sky-300" }, "\u8FDB\u5165\u914D\u7F6E\u9875")), /* @__PURE__ */ React42__default.createElement("div", null, loading || !config ? /* @__PURE__ */ React42__default.createElement("div", { className: "py-12 text-center text-slate-400" }, "\u52A0\u8F7D\u4E2D...") : /* @__PURE__ */ React42__default.createElement(FestivalCardBook3D, { config })));
|
|
7790
7753
|
};
|
|
7791
7754
|
|
|
7792
7755
|
// src/festivalCard/server/db.ts
|