sa2kit 1.6.83 → 1.6.85

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.
@@ -711,19 +711,13 @@ var init_useMasterpiecesConfig = __esm({
711
711
  setLoading(true);
712
712
  setError(null);
713
713
  console.log("\u{1F4E1} [Hook] \u5E76\u884C\u8BF7\u6C42\u6240\u6709\u6570\u636E...");
714
- const timestamp = Date.now();
715
714
  const [configData, collectionsResponse, categoriesData, tagsData] = await Promise.all([
716
715
  getConfig(),
717
- fetch(`/api/showmasterpiece/collections?_t=${timestamp}&nocache=true&includeImages=true`, {
718
- headers: {
719
- "Cache-Control": "no-cache",
720
- "Pragma": "no-cache"
721
- }
722
- }).then((r) => r.json()),
716
+ getAllCollections(),
723
717
  getCategories(),
724
718
  getTags()
725
719
  ]);
726
- const collectionsData = collectionsResponse.data || [];
720
+ const collectionsData = Array.isArray(collectionsResponse) ? collectionsResponse : [];
727
721
  console.log("\u2705 [Hook] \u6570\u636E\u52A0\u8F7D\u5B8C\u6210:", {
728
722
  \u914D\u7F6E: configData ? "\u5DF2\u52A0\u8F7D" : "\u672A\u52A0\u8F7D",
729
723
  \u753B\u96C6\u6570\u91CF: collectionsData.length,
@@ -6554,13 +6548,16 @@ var UniversalImageUpload = ({
6554
6548
  throw new Error(errorData.error || `HTTP ${response.status}`);
6555
6549
  }
6556
6550
  const result = await response.json();
6557
- if (!result.success) {
6558
- throw new Error(result.error || "\u4E0A\u4F20\u5931\u8D25");
6551
+ const resultData = result?.data || result?.file || result;
6552
+ const nextFileId = resultData?.fileId || resultData?.id;
6553
+ const nextImageUrl = resultData?.accessUrl || resultData?.url || resultData?.fileUrl;
6554
+ const isSuccess = typeof result?.success === "boolean" ? result.success : Boolean(nextFileId);
6555
+ if (!isSuccess || !nextFileId) {
6556
+ throw new Error(result?.error || result?.message || "\u4E0A\u4F20\u5931\u8D25");
6559
6557
  }
6560
6558
  onChange({
6561
- image: result.data.accessUrl,
6562
- // 使用访问URL
6563
- fileId: result.data.fileId
6559
+ image: nextImageUrl || `/api/universal-file/${nextFileId}`,
6560
+ fileId: nextFileId
6564
6561
  });
6565
6562
  } catch (error) {
6566
6563
  alert(`\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`);
@@ -6579,13 +6576,10 @@ var UniversalImageUpload = ({
6579
6576
  handleFileSelect(file);
6580
6577
  }
6581
6578
  };
6582
- const handleDivClick = (e) => {
6583
- };
6584
6579
  return /* @__PURE__ */ React56__namespace.default.createElement(
6585
6580
  "div",
6586
6581
  {
6587
6582
  className: "border-2 border-dashed border-slate-300 rounded-xl p-8 text-center hover:border-blue-400 hover:bg-slate-50 transition-all duration-200 cursor-pointer",
6588
- onClick: handleDivClick,
6589
6583
  style: { position: "relative", zIndex: 1 }
6590
6584
  },
6591
6585
  /* @__PURE__ */ React56__namespace.default.createElement(
@@ -8789,6 +8783,14 @@ var BookingAdminPanel = ({
8789
8783
  }
8790
8784
  ) : /* @__PURE__ */ React56__namespace.default.createElement("div", { className: "w-16 h-16 sm:w-20 sm:h-20 bg-slate-100 rounded-lg flex-shrink-0 flex items-center justify-center text-slate-400 text-xs" }, "\u6682\u65E0\u56FE\u7247"), /* @__PURE__ */ React56__namespace.default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React56__namespace.default.createElement("h4", { className: "font-medium text-slate-800 truncate" }, selectedBooking.collection.title), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-600" }, "\u7F16\u53F7\uFF1A", selectedBooking.collection.number), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-600" }, "\u4EF7\u683C\uFF1A\xA5", selectedBooking.collection.price || "\u5F85\u5B9A")))), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u9884\u8BA2\u4FE1\u606F"), /* @__PURE__ */ React56__namespace.default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4" }, /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u9884\u8BA2ID"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "font-medium text-slate-800" }, "#", selectedBooking.id)), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "QQ\u53F7"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "font-medium text-slate-800" }, selectedBooking.qqNumber)), selectedBooking.phoneNumber && /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u624B\u673A\u53F7"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "font-medium text-slate-800" }, selectedBooking.phoneNumber)), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u9884\u8BA2\u6570\u91CF"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "font-medium text-slate-800" }, selectedBooking.quantity)), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u603B\u4EF7\u683C"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "font-medium text-slate-800" }, "\xA5", selectedBooking.totalPrice)), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u72B6\u6001"), /* @__PURE__ */ React56__namespace.default.createElement("span", { className: `inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium ${getStatusInfo(selectedBooking.status).color}` }, getStatusInfo(selectedBooking.status).label)))), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u65F6\u95F4\u4FE1\u606F"), /* @__PURE__ */ React56__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u9884\u8BA2\u65F6\u95F4"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.createdAt))), /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u66F4\u65B0\u65F6\u95F4"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.updatedAt))), selectedBooking.confirmedAt && /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u786E\u8BA4\u65F6\u95F4"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.confirmedAt))), selectedBooking.completedAt && /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u5B8C\u6210\u65F6\u95F4"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.completedAt))), selectedBooking.cancelledAt && /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-500" }, "\u53D6\u6D88\u65F6\u95F4"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.cancelledAt))))), selectedBooking.notes && /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u7528\u6237\u5907\u6CE8"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-800 bg-slate-50 p-4 rounded-lg break-words" }, selectedBooking.notes)), selectedBooking.adminNotes && /* @__PURE__ */ React56__namespace.default.createElement("div", null, /* @__PURE__ */ React56__namespace.default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u7BA1\u7406\u5458\u5907\u6CE8"), /* @__PURE__ */ React56__namespace.default.createElement("p", { className: "text-sm text-slate-800 bg-slate-50 p-4 rounded-lg break-words" }, selectedBooking.adminNotes)))))));
8791
8785
  };
8786
+ var isSuccessResponse = (result, fallback) => typeof result?.success === "boolean" ? result.success : fallback;
8787
+ var extractPopupConfigs = (result) => {
8788
+ if (Array.isArray(result?.data)) return result.data;
8789
+ if (Array.isArray(result?.configs)) return result.configs;
8790
+ if (Array.isArray(result?.data?.configs)) return result.data.configs;
8791
+ if (Array.isArray(result)) return result;
8792
+ return [];
8793
+ };
8792
8794
  var PopupConfigManagement = () => {
8793
8795
  const [configs, setConfigs] = React56.useState([]);
8794
8796
  const [loading, setLoading] = React56.useState(true);
@@ -8835,12 +8837,13 @@ var PopupConfigManagement = () => {
8835
8837
  console.log("\u{1F4E1} [PopupConfigManagement] API\u54CD\u5E94\u72B6\u6001:", response.status, response.statusText);
8836
8838
  const result = await response.json();
8837
8839
  console.log("\u{1F4CA} [PopupConfigManagement] API\u54CD\u5E94\u6570\u636E:", result);
8838
- if (result.success) {
8839
- console.log("\u2705 [PopupConfigManagement] \u914D\u7F6E\u52A0\u8F7D\u6210\u529F\uFF0C\u6570\u91CF:", result.data.length);
8840
- setConfigs(result.data);
8840
+ if (isSuccessResponse(result, response.ok)) {
8841
+ const nextConfigs = extractPopupConfigs(result);
8842
+ console.log("\u2705 [PopupConfigManagement] \u914D\u7F6E\u52A0\u8F7D\u6210\u529F\uFF0C\u6570\u91CF:", nextConfigs.length);
8843
+ setConfigs(nextConfigs);
8841
8844
  } else {
8842
8845
  console.error("\u274C [PopupConfigManagement] API\u8FD4\u56DE\u5931\u8D25:", result.error);
8843
- setError(result.error || "\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25");
8846
+ setError(result?.error || result?.message || "\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25");
8844
8847
  }
8845
8848
  } catch (err) {
8846
8849
  console.error("\u274C [PopupConfigManagement] \u52A0\u8F7D\u5F39\u7A97\u914D\u7F6E\u5931\u8D25:", err);
@@ -8941,13 +8944,13 @@ var PopupConfigManagement = () => {
8941
8944
  body: JSON.stringify(requestData)
8942
8945
  });
8943
8946
  const result = await response.json();
8944
- if (result.success) {
8947
+ if (isSuccessResponse(result, response.ok)) {
8945
8948
  await loadConfigs();
8946
8949
  setShowCreateModal(false);
8947
8950
  resetForm();
8948
8951
  setEditingConfig(null);
8949
8952
  } else {
8950
- alert(result.error || "\u4FDD\u5B58\u5931\u8D25");
8953
+ alert(result?.error || result?.message || "\u4FDD\u5B58\u5931\u8D25");
8951
8954
  }
8952
8955
  } catch (err) {
8953
8956
  console.error("\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25:", err);
@@ -8963,10 +8966,10 @@ var PopupConfigManagement = () => {
8963
8966
  method: "DELETE"
8964
8967
  });
8965
8968
  const result = await response.json();
8966
- if (result.success) {
8969
+ if (isSuccessResponse(result, response.ok)) {
8967
8970
  await loadConfigs();
8968
8971
  } else {
8969
- alert(result.error || "\u5220\u9664\u5931\u8D25");
8972
+ alert(result?.error || result?.message || "\u5220\u9664\u5931\u8D25");
8970
8973
  }
8971
8974
  } catch (err) {
8972
8975
  console.error("\u5220\u9664\u914D\u7F6E\u5931\u8D25:", err);
@@ -8993,10 +8996,10 @@ var PopupConfigManagement = () => {
8993
8996
  body: JSON.stringify(requestBody)
8994
8997
  });
8995
8998
  const result = await response.json();
8996
- if (result.success) {
8999
+ if (isSuccessResponse(result, response.ok)) {
8997
9000
  await loadConfigs();
8998
9001
  } else {
8999
- alert(result.error || "\u64CD\u4F5C\u5931\u8D25");
9002
+ alert(result?.error || result?.message || "\u64CD\u4F5C\u5931\u8D25");
9000
9003
  }
9001
9004
  } catch (err) {
9002
9005
  console.error("\u5207\u6362\u72B6\u6001\u5931\u8D25:", err);
@@ -10049,6 +10052,14 @@ function clearConfigCache() {
10049
10052
  }
10050
10053
 
10051
10054
  // src/showmasterpiece/ui/web/components/SystemConfigManager.tsx
10055
+ var isSuccessResponse2 = (result, fallback) => typeof result?.success === "boolean" ? result.success : fallback;
10056
+ var extractConfigItems = (result) => {
10057
+ if (Array.isArray(result?.items)) return result.items;
10058
+ if (Array.isArray(result?.data?.items)) return result.data.items;
10059
+ if (Array.isArray(result?.data)) return result.data;
10060
+ if (Array.isArray(result)) return result;
10061
+ return [];
10062
+ };
10052
10063
  var SystemConfigManager = () => {
10053
10064
  const [configItems, setConfigItems] = React56.useState([]);
10054
10065
  const [loading, setLoading] = React56.useState(true);
@@ -10073,8 +10084,16 @@ var SystemConfigManager = () => {
10073
10084
  try {
10074
10085
  const response = await fetch(`/api/showmasterpiece/config/items?environment=${env}`);
10075
10086
  const data = await response.json();
10076
- if (data.items && Array.isArray(data.items)) {
10077
- setConfigItems(data.items);
10087
+ if (!response.ok) {
10088
+ setMessage({
10089
+ type: "error",
10090
+ text: data?.error || data?.message || "\u52A0\u8F7D\u914D\u7F6E\u9879\u5931\u8D25"
10091
+ });
10092
+ return;
10093
+ }
10094
+ const items = extractConfigItems(data);
10095
+ if (Array.isArray(items)) {
10096
+ setConfigItems(items);
10078
10097
  } else {
10079
10098
  console.error("API\u54CD\u5E94\u683C\u5F0F\u9519\u8BEF:", data);
10080
10099
  setMessage({
@@ -10133,7 +10152,7 @@ var SystemConfigManager = () => {
10133
10152
  })
10134
10153
  });
10135
10154
  const result = await response.json();
10136
- if (result.success) {
10155
+ if (isSuccessResponse2(result, response.ok)) {
10137
10156
  setMessage({
10138
10157
  type: "success",
10139
10158
  text: "\u914D\u7F6E\u9879\u66F4\u65B0\u6210\u529F"
@@ -10175,7 +10194,7 @@ var SystemConfigManager = () => {
10175
10194
  method: "DELETE"
10176
10195
  });
10177
10196
  const result = await response.json();
10178
- if (result.success) {
10197
+ if (isSuccessResponse2(result, response.ok)) {
10179
10198
  setMessage({
10180
10199
  type: "success",
10181
10200
  text: "\u914D\u7F6E\u9879\u5220\u9664\u6210\u529F"
@@ -10361,7 +10380,7 @@ var SystemConfigManager = () => {
10361
10380
  body: JSON.stringify(data)
10362
10381
  });
10363
10382
  const result = await response.json();
10364
- if (result.success) {
10383
+ if (isSuccessResponse2(result, response.ok)) {
10365
10384
  setMessage({
10366
10385
  type: "success",
10367
10386
  text: "\u914D\u7F6E\u9879\u521B\u5EFA\u6210\u529F"