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.
@@ -687,19 +687,13 @@ var init_useMasterpiecesConfig = __esm({
687
687
  setLoading(true);
688
688
  setError(null);
689
689
  console.log("\u{1F4E1} [Hook] \u5E76\u884C\u8BF7\u6C42\u6240\u6709\u6570\u636E...");
690
- const timestamp = Date.now();
691
690
  const [configData, collectionsResponse, categoriesData, tagsData] = await Promise.all([
692
691
  getConfig(),
693
- fetch(`/api/showmasterpiece/collections?_t=${timestamp}&nocache=true&includeImages=true`, {
694
- headers: {
695
- "Cache-Control": "no-cache",
696
- "Pragma": "no-cache"
697
- }
698
- }).then((r) => r.json()),
692
+ getAllCollections(),
699
693
  getCategories(),
700
694
  getTags()
701
695
  ]);
702
- const collectionsData = collectionsResponse.data || [];
696
+ const collectionsData = Array.isArray(collectionsResponse) ? collectionsResponse : [];
703
697
  console.log("\u2705 [Hook] \u6570\u636E\u52A0\u8F7D\u5B8C\u6210:", {
704
698
  \u914D\u7F6E: configData ? "\u5DF2\u52A0\u8F7D" : "\u672A\u52A0\u8F7D",
705
699
  \u753B\u96C6\u6570\u91CF: collectionsData.length,
@@ -6530,13 +6524,16 @@ var UniversalImageUpload = ({
6530
6524
  throw new Error(errorData.error || `HTTP ${response.status}`);
6531
6525
  }
6532
6526
  const result = await response.json();
6533
- if (!result.success) {
6534
- throw new Error(result.error || "\u4E0A\u4F20\u5931\u8D25");
6527
+ const resultData = result?.data || result?.file || result;
6528
+ const nextFileId = resultData?.fileId || resultData?.id;
6529
+ const nextImageUrl = resultData?.accessUrl || resultData?.url || resultData?.fileUrl;
6530
+ const isSuccess = typeof result?.success === "boolean" ? result.success : Boolean(nextFileId);
6531
+ if (!isSuccess || !nextFileId) {
6532
+ throw new Error(result?.error || result?.message || "\u4E0A\u4F20\u5931\u8D25");
6535
6533
  }
6536
6534
  onChange({
6537
- image: result.data.accessUrl,
6538
- // 使用访问URL
6539
- fileId: result.data.fileId
6535
+ image: nextImageUrl || `/api/universal-file/${nextFileId}`,
6536
+ fileId: nextFileId
6540
6537
  });
6541
6538
  } catch (error) {
6542
6539
  alert(`\u6587\u4EF6\u4E0A\u4F20\u5931\u8D25: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`);
@@ -6555,13 +6552,10 @@ var UniversalImageUpload = ({
6555
6552
  handleFileSelect(file);
6556
6553
  }
6557
6554
  };
6558
- const handleDivClick = (e) => {
6559
- };
6560
6555
  return /* @__PURE__ */ React56__default.createElement(
6561
6556
  "div",
6562
6557
  {
6563
6558
  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",
6564
- onClick: handleDivClick,
6565
6559
  style: { position: "relative", zIndex: 1 }
6566
6560
  },
6567
6561
  /* @__PURE__ */ React56__default.createElement(
@@ -8765,6 +8759,14 @@ var BookingAdminPanel = ({
8765
8759
  }
8766
8760
  ) : /* @__PURE__ */ React56__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__default.createElement("div", { className: "min-w-0 flex-1" }, /* @__PURE__ */ React56__default.createElement("h4", { className: "font-medium text-slate-800 truncate" }, selectedBooking.collection.title), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-600" }, "\u7F16\u53F7\uFF1A", selectedBooking.collection.number), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-600" }, "\u4EF7\u683C\uFF1A\xA5", selectedBooking.collection.price || "\u5F85\u5B9A")))), /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u9884\u8BA2\u4FE1\u606F"), /* @__PURE__ */ React56__default.createElement("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-3 sm:gap-4" }, /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u9884\u8BA2ID"), /* @__PURE__ */ React56__default.createElement("p", { className: "font-medium text-slate-800" }, "#", selectedBooking.id)), /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "QQ\u53F7"), /* @__PURE__ */ React56__default.createElement("p", { className: "font-medium text-slate-800" }, selectedBooking.qqNumber)), selectedBooking.phoneNumber && /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u624B\u673A\u53F7"), /* @__PURE__ */ React56__default.createElement("p", { className: "font-medium text-slate-800" }, selectedBooking.phoneNumber)), /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u9884\u8BA2\u6570\u91CF"), /* @__PURE__ */ React56__default.createElement("p", { className: "font-medium text-slate-800" }, selectedBooking.quantity)), /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u603B\u4EF7\u683C"), /* @__PURE__ */ React56__default.createElement("p", { className: "font-medium text-slate-800" }, "\xA5", selectedBooking.totalPrice)), /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u72B6\u6001"), /* @__PURE__ */ React56__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__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u65F6\u95F4\u4FE1\u606F"), /* @__PURE__ */ React56__default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u9884\u8BA2\u65F6\u95F4"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.createdAt))), /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u66F4\u65B0\u65F6\u95F4"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.updatedAt))), selectedBooking.confirmedAt && /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u786E\u8BA4\u65F6\u95F4"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.confirmedAt))), selectedBooking.completedAt && /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u5B8C\u6210\u65F6\u95F4"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.completedAt))), selectedBooking.cancelledAt && /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-500" }, "\u53D6\u6D88\u65F6\u95F4"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm font-medium text-slate-800" }, formatTime2(selectedBooking.cancelledAt))))), selectedBooking.notes && /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u7528\u6237\u5907\u6CE8"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-800 bg-slate-50 p-4 rounded-lg break-words" }, selectedBooking.notes)), selectedBooking.adminNotes && /* @__PURE__ */ React56__default.createElement("div", null, /* @__PURE__ */ React56__default.createElement("h3", { className: "text-base sm:text-lg font-semibold text-slate-800 mb-3" }, "\u7BA1\u7406\u5458\u5907\u6CE8"), /* @__PURE__ */ React56__default.createElement("p", { className: "text-sm text-slate-800 bg-slate-50 p-4 rounded-lg break-words" }, selectedBooking.adminNotes)))))));
8767
8761
  };
8762
+ var isSuccessResponse = (result, fallback) => typeof result?.success === "boolean" ? result.success : fallback;
8763
+ var extractPopupConfigs = (result) => {
8764
+ if (Array.isArray(result?.data)) return result.data;
8765
+ if (Array.isArray(result?.configs)) return result.configs;
8766
+ if (Array.isArray(result?.data?.configs)) return result.data.configs;
8767
+ if (Array.isArray(result)) return result;
8768
+ return [];
8769
+ };
8768
8770
  var PopupConfigManagement = () => {
8769
8771
  const [configs, setConfigs] = useState([]);
8770
8772
  const [loading, setLoading] = useState(true);
@@ -8811,12 +8813,13 @@ var PopupConfigManagement = () => {
8811
8813
  console.log("\u{1F4E1} [PopupConfigManagement] API\u54CD\u5E94\u72B6\u6001:", response.status, response.statusText);
8812
8814
  const result = await response.json();
8813
8815
  console.log("\u{1F4CA} [PopupConfigManagement] API\u54CD\u5E94\u6570\u636E:", result);
8814
- if (result.success) {
8815
- console.log("\u2705 [PopupConfigManagement] \u914D\u7F6E\u52A0\u8F7D\u6210\u529F\uFF0C\u6570\u91CF:", result.data.length);
8816
- setConfigs(result.data);
8816
+ if (isSuccessResponse(result, response.ok)) {
8817
+ const nextConfigs = extractPopupConfigs(result);
8818
+ console.log("\u2705 [PopupConfigManagement] \u914D\u7F6E\u52A0\u8F7D\u6210\u529F\uFF0C\u6570\u91CF:", nextConfigs.length);
8819
+ setConfigs(nextConfigs);
8817
8820
  } else {
8818
8821
  console.error("\u274C [PopupConfigManagement] API\u8FD4\u56DE\u5931\u8D25:", result.error);
8819
- setError(result.error || "\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25");
8822
+ setError(result?.error || result?.message || "\u52A0\u8F7D\u914D\u7F6E\u5931\u8D25");
8820
8823
  }
8821
8824
  } catch (err) {
8822
8825
  console.error("\u274C [PopupConfigManagement] \u52A0\u8F7D\u5F39\u7A97\u914D\u7F6E\u5931\u8D25:", err);
@@ -8917,13 +8920,13 @@ var PopupConfigManagement = () => {
8917
8920
  body: JSON.stringify(requestData)
8918
8921
  });
8919
8922
  const result = await response.json();
8920
- if (result.success) {
8923
+ if (isSuccessResponse(result, response.ok)) {
8921
8924
  await loadConfigs();
8922
8925
  setShowCreateModal(false);
8923
8926
  resetForm();
8924
8927
  setEditingConfig(null);
8925
8928
  } else {
8926
- alert(result.error || "\u4FDD\u5B58\u5931\u8D25");
8929
+ alert(result?.error || result?.message || "\u4FDD\u5B58\u5931\u8D25");
8927
8930
  }
8928
8931
  } catch (err) {
8929
8932
  console.error("\u4FDD\u5B58\u914D\u7F6E\u5931\u8D25:", err);
@@ -8939,10 +8942,10 @@ var PopupConfigManagement = () => {
8939
8942
  method: "DELETE"
8940
8943
  });
8941
8944
  const result = await response.json();
8942
- if (result.success) {
8945
+ if (isSuccessResponse(result, response.ok)) {
8943
8946
  await loadConfigs();
8944
8947
  } else {
8945
- alert(result.error || "\u5220\u9664\u5931\u8D25");
8948
+ alert(result?.error || result?.message || "\u5220\u9664\u5931\u8D25");
8946
8949
  }
8947
8950
  } catch (err) {
8948
8951
  console.error("\u5220\u9664\u914D\u7F6E\u5931\u8D25:", err);
@@ -8969,10 +8972,10 @@ var PopupConfigManagement = () => {
8969
8972
  body: JSON.stringify(requestBody)
8970
8973
  });
8971
8974
  const result = await response.json();
8972
- if (result.success) {
8975
+ if (isSuccessResponse(result, response.ok)) {
8973
8976
  await loadConfigs();
8974
8977
  } else {
8975
- alert(result.error || "\u64CD\u4F5C\u5931\u8D25");
8978
+ alert(result?.error || result?.message || "\u64CD\u4F5C\u5931\u8D25");
8976
8979
  }
8977
8980
  } catch (err) {
8978
8981
  console.error("\u5207\u6362\u72B6\u6001\u5931\u8D25:", err);
@@ -10025,6 +10028,14 @@ function clearConfigCache() {
10025
10028
  }
10026
10029
 
10027
10030
  // src/showmasterpiece/ui/web/components/SystemConfigManager.tsx
10031
+ var isSuccessResponse2 = (result, fallback) => typeof result?.success === "boolean" ? result.success : fallback;
10032
+ var extractConfigItems = (result) => {
10033
+ if (Array.isArray(result?.items)) return result.items;
10034
+ if (Array.isArray(result?.data?.items)) return result.data.items;
10035
+ if (Array.isArray(result?.data)) return result.data;
10036
+ if (Array.isArray(result)) return result;
10037
+ return [];
10038
+ };
10028
10039
  var SystemConfigManager = () => {
10029
10040
  const [configItems, setConfigItems] = useState([]);
10030
10041
  const [loading, setLoading] = useState(true);
@@ -10049,8 +10060,16 @@ var SystemConfigManager = () => {
10049
10060
  try {
10050
10061
  const response = await fetch(`/api/showmasterpiece/config/items?environment=${env}`);
10051
10062
  const data = await response.json();
10052
- if (data.items && Array.isArray(data.items)) {
10053
- setConfigItems(data.items);
10063
+ if (!response.ok) {
10064
+ setMessage({
10065
+ type: "error",
10066
+ text: data?.error || data?.message || "\u52A0\u8F7D\u914D\u7F6E\u9879\u5931\u8D25"
10067
+ });
10068
+ return;
10069
+ }
10070
+ const items = extractConfigItems(data);
10071
+ if (Array.isArray(items)) {
10072
+ setConfigItems(items);
10054
10073
  } else {
10055
10074
  console.error("API\u54CD\u5E94\u683C\u5F0F\u9519\u8BEF:", data);
10056
10075
  setMessage({
@@ -10109,7 +10128,7 @@ var SystemConfigManager = () => {
10109
10128
  })
10110
10129
  });
10111
10130
  const result = await response.json();
10112
- if (result.success) {
10131
+ if (isSuccessResponse2(result, response.ok)) {
10113
10132
  setMessage({
10114
10133
  type: "success",
10115
10134
  text: "\u914D\u7F6E\u9879\u66F4\u65B0\u6210\u529F"
@@ -10151,7 +10170,7 @@ var SystemConfigManager = () => {
10151
10170
  method: "DELETE"
10152
10171
  });
10153
10172
  const result = await response.json();
10154
- if (result.success) {
10173
+ if (isSuccessResponse2(result, response.ok)) {
10155
10174
  setMessage({
10156
10175
  type: "success",
10157
10176
  text: "\u914D\u7F6E\u9879\u5220\u9664\u6210\u529F"
@@ -10337,7 +10356,7 @@ var SystemConfigManager = () => {
10337
10356
  body: JSON.stringify(data)
10338
10357
  });
10339
10358
  const result = await response.json();
10340
- if (result.success) {
10359
+ if (isSuccessResponse2(result, response.ok)) {
10341
10360
  setMessage({
10342
10361
  type: "success",
10343
10362
  text: "\u914D\u7F6E\u9879\u521B\u5EFA\u6210\u529F"