sa2kit 1.6.80 → 1.6.84

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"}`);
@@ -6580,6 +6577,12 @@ var UniversalImageUpload = ({
6580
6577
  }
6581
6578
  };
6582
6579
  const handleDivClick = (e) => {
6580
+ e.preventDefault();
6581
+ e.stopPropagation();
6582
+ const input = document.getElementById(inputId);
6583
+ if (input && !disabled && !uploading) {
6584
+ input.click();
6585
+ }
6583
6586
  };
6584
6587
  return /* @__PURE__ */ React56__namespace.default.createElement(
6585
6588
  "div",
@@ -8789,6 +8792,14 @@ var BookingAdminPanel = ({
8789
8792
  }
8790
8793
  ) : /* @__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
8794
  };
8795
+ var isSuccessResponse = (result, fallback) => typeof result?.success === "boolean" ? result.success : fallback;
8796
+ var extractPopupConfigs = (result) => {
8797
+ if (Array.isArray(result?.data)) return result.data;
8798
+ if (Array.isArray(result?.configs)) return result.configs;
8799
+ if (Array.isArray(result?.data?.configs)) return result.data.configs;
8800
+ if (Array.isArray(result)) return result;
8801
+ return [];
8802
+ };
8792
8803
  var PopupConfigManagement = () => {
8793
8804
  const [configs, setConfigs] = React56.useState([]);
8794
8805
  const [loading, setLoading] = React56.useState(true);
@@ -8835,12 +8846,13 @@ var PopupConfigManagement = () => {
8835
8846
  console.log("\u{1F4E1} [PopupConfigManagement] API\u54CD\u5E94\u72B6\u6001:", response.status, response.statusText);
8836
8847
  const result = await response.json();
8837
8848
  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);
8849
+ if (isSuccessResponse(result, response.ok)) {
8850
+ const nextConfigs = extractPopupConfigs(result);
8851
+ console.log("\u2705 [PopupConfigManagement] \u914D\u7F6E\u52A0\u8F7D\u6210\u529F\uFF0C\u6570\u91CF:", nextConfigs.length);
8852
+ setConfigs(nextConfigs);
8841
8853
  } else {
8842
8854
  console.error("\u274C [PopupConfigManagement] API\u8FD4\u56DE\u5931\u8D25:", result.error);
8843
- setError(result.error || "\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25");
8855
+ setError(result?.error || result?.message || "\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25");
8844
8856
  }
8845
8857
  } catch (err) {
8846
8858
  console.error("\u274C [PopupConfigManagement] \u52A0\u8F7D\u5F39\u7A97\u914D\u7F6E\u5931\u8D25:", err);
@@ -8941,13 +8953,13 @@ var PopupConfigManagement = () => {
8941
8953
  body: JSON.stringify(requestData)
8942
8954
  });
8943
8955
  const result = await response.json();
8944
- if (result.success) {
8956
+ if (isSuccessResponse(result, response.ok)) {
8945
8957
  await loadConfigs();
8946
8958
  setShowCreateModal(false);
8947
8959
  resetForm();
8948
8960
  setEditingConfig(null);
8949
8961
  } else {
8950
- alert(result.error || "\u4FDD\u5B58\u5931\u8D25");
8962
+ alert(result?.error || result?.message || "\u4FDD\u5B58\u5931\u8D25");
8951
8963
  }
8952
8964
  } catch (err) {
8953
8965
  console.error("\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25:", err);
@@ -8963,10 +8975,10 @@ var PopupConfigManagement = () => {
8963
8975
  method: "DELETE"
8964
8976
  });
8965
8977
  const result = await response.json();
8966
- if (result.success) {
8978
+ if (isSuccessResponse(result, response.ok)) {
8967
8979
  await loadConfigs();
8968
8980
  } else {
8969
- alert(result.error || "\u5220\u9664\u5931\u8D25");
8981
+ alert(result?.error || result?.message || "\u5220\u9664\u5931\u8D25");
8970
8982
  }
8971
8983
  } catch (err) {
8972
8984
  console.error("\u5220\u9664\u914D\u7F6E\u5931\u8D25:", err);
@@ -8993,10 +9005,10 @@ var PopupConfigManagement = () => {
8993
9005
  body: JSON.stringify(requestBody)
8994
9006
  });
8995
9007
  const result = await response.json();
8996
- if (result.success) {
9008
+ if (isSuccessResponse(result, response.ok)) {
8997
9009
  await loadConfigs();
8998
9010
  } else {
8999
- alert(result.error || "\u64CD\u4F5C\u5931\u8D25");
9011
+ alert(result?.error || result?.message || "\u64CD\u4F5C\u5931\u8D25");
9000
9012
  }
9001
9013
  } catch (err) {
9002
9014
  console.error("\u5207\u6362\u72B6\u6001\u5931\u8D25:", err);
@@ -10049,6 +10061,14 @@ function clearConfigCache() {
10049
10061
  }
10050
10062
 
10051
10063
  // src/showmasterpiece/ui/web/components/SystemConfigManager.tsx
10064
+ var isSuccessResponse2 = (result, fallback) => typeof result?.success === "boolean" ? result.success : fallback;
10065
+ var extractConfigItems = (result) => {
10066
+ if (Array.isArray(result?.items)) return result.items;
10067
+ if (Array.isArray(result?.data?.items)) return result.data.items;
10068
+ if (Array.isArray(result?.data)) return result.data;
10069
+ if (Array.isArray(result)) return result;
10070
+ return [];
10071
+ };
10052
10072
  var SystemConfigManager = () => {
10053
10073
  const [configItems, setConfigItems] = React56.useState([]);
10054
10074
  const [loading, setLoading] = React56.useState(true);
@@ -10073,8 +10093,16 @@ var SystemConfigManager = () => {
10073
10093
  try {
10074
10094
  const response = await fetch(`/api/showmasterpiece/config/items?environment=${env}`);
10075
10095
  const data = await response.json();
10076
- if (data.items && Array.isArray(data.items)) {
10077
- setConfigItems(data.items);
10096
+ if (!response.ok) {
10097
+ setMessage({
10098
+ type: "error",
10099
+ text: data?.error || data?.message || "\u52A0\u8F7D\u914D\u7F6E\u9879\u5931\u8D25"
10100
+ });
10101
+ return;
10102
+ }
10103
+ const items = extractConfigItems(data);
10104
+ if (Array.isArray(items)) {
10105
+ setConfigItems(items);
10078
10106
  } else {
10079
10107
  console.error("API\u54CD\u5E94\u683C\u5F0F\u9519\u8BEF:", data);
10080
10108
  setMessage({
@@ -10133,7 +10161,7 @@ var SystemConfigManager = () => {
10133
10161
  })
10134
10162
  });
10135
10163
  const result = await response.json();
10136
- if (result.success) {
10164
+ if (isSuccessResponse2(result, response.ok)) {
10137
10165
  setMessage({
10138
10166
  type: "success",
10139
10167
  text: "\u914D\u7F6E\u9879\u66F4\u65B0\u6210\u529F"
@@ -10175,7 +10203,7 @@ var SystemConfigManager = () => {
10175
10203
  method: "DELETE"
10176
10204
  });
10177
10205
  const result = await response.json();
10178
- if (result.success) {
10206
+ if (isSuccessResponse2(result, response.ok)) {
10179
10207
  setMessage({
10180
10208
  type: "success",
10181
10209
  text: "\u914D\u7F6E\u9879\u5220\u9664\u6210\u529F"
@@ -10361,7 +10389,7 @@ var SystemConfigManager = () => {
10361
10389
  body: JSON.stringify(data)
10362
10390
  });
10363
10391
  const result = await response.json();
10364
- if (result.success) {
10392
+ if (isSuccessResponse2(result, response.ok)) {
10365
10393
  setMessage({
10366
10394
  type: "success",
10367
10395
  text: "\u914D\u7F6E\u9879\u521B\u5EFA\u6210\u529F"