sa2kit 1.6.48 → 1.6.50

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.
@@ -379,7 +379,13 @@ interface MasterpiecesConfig {
379
379
  /** 界面语言:zh(中文)、en(英文) */
380
380
  language: 'zh' | 'en';
381
381
  }
382
+ interface CategoryOption {
383
+ name: string;
384
+ description?: string | null;
385
+ }
382
386
  interface HomeTabConfigItem {
387
+ name?: string;
388
+ description?: string | null;
383
389
  category: CollectionCategoryType;
384
390
  visible: boolean;
385
391
  order: number;
@@ -1039,7 +1045,7 @@ declare class MasterpiecesService {
1039
1045
  * 从后端API获取所有已定义的画集分类列表。
1040
1046
  * 用于构建分类筛选器和下拉菜单。
1041
1047
  *
1042
- * @returns Promise<string[]> 分类名称数组
1048
+ * @returns Promise<Array<{ name: string; description?: string | null }>> 分类名称数组
1043
1049
  * @throws {Error} 当API请求失败时抛出错误
1044
1050
  *
1045
1051
  * @example
@@ -1048,7 +1054,10 @@ declare class MasterpiecesService {
1048
1054
  * console.log('可用分类:', categories);
1049
1055
  * ```
1050
1056
  */
1051
- static getCategories(): Promise<string[]>;
1057
+ static getCategories(): Promise<Array<{
1058
+ name: string;
1059
+ description?: string | null;
1060
+ }>>;
1052
1061
  /**
1053
1062
  * 获取所有可用标签
1054
1063
  *
@@ -1094,7 +1103,10 @@ declare const updateArtworkOrder: (collectionId: number, artworkOrders: {
1094
1103
  declare const moveArtwork: (collectionId: number, artworkId: number, targetOrder: number) => Promise<void>;
1095
1104
  declare const moveArtworkUp: (collectionId: number, artworkId: number) => Promise<void>;
1096
1105
  declare const moveArtworkDown: (collectionId: number, artworkId: number) => Promise<void>;
1097
- declare const getCategories: () => Promise<string[]>;
1106
+ declare const getCategories: () => Promise<Array<{
1107
+ name: string;
1108
+ description?: string | null;
1109
+ }>>;
1098
1110
  declare const createCategory: (name: string, description?: string) => Promise<void>;
1099
1111
  declare const getTags: () => Promise<string[]>;
1100
1112
  declare function getCollectionsOverview(): Promise<Omit<ArtCollection, 'pages'>[]>;
@@ -2136,7 +2148,7 @@ declare const useMasterpieces: () => {
2136
2148
  declare const useMasterpiecesConfig: () => {
2137
2149
  config: MasterpiecesConfig | null;
2138
2150
  collections: ArtCollection[];
2139
- categories: string[];
2151
+ categories: CategoryOption[];
2140
2152
  tags: string[];
2141
2153
  loading: boolean;
2142
2154
  error: string | null;
@@ -2164,7 +2176,10 @@ declare const useMasterpiecesConfig: () => {
2164
2176
  refreshData: () => Promise<{
2165
2177
  config: MasterpiecesConfig;
2166
2178
  collections: any;
2167
- categories: string[];
2179
+ categories: {
2180
+ name: string;
2181
+ description?: string | null;
2182
+ }[];
2168
2183
  tags: string[];
2169
2184
  }>;
2170
2185
  };
@@ -379,7 +379,13 @@ interface MasterpiecesConfig {
379
379
  /** 界面语言:zh(中文)、en(英文) */
380
380
  language: 'zh' | 'en';
381
381
  }
382
+ interface CategoryOption {
383
+ name: string;
384
+ description?: string | null;
385
+ }
382
386
  interface HomeTabConfigItem {
387
+ name?: string;
388
+ description?: string | null;
383
389
  category: CollectionCategoryType;
384
390
  visible: boolean;
385
391
  order: number;
@@ -1039,7 +1045,7 @@ declare class MasterpiecesService {
1039
1045
  * 从后端API获取所有已定义的画集分类列表。
1040
1046
  * 用于构建分类筛选器和下拉菜单。
1041
1047
  *
1042
- * @returns Promise<string[]> 分类名称数组
1048
+ * @returns Promise<Array<{ name: string; description?: string | null }>> 分类名称数组
1043
1049
  * @throws {Error} 当API请求失败时抛出错误
1044
1050
  *
1045
1051
  * @example
@@ -1048,7 +1054,10 @@ declare class MasterpiecesService {
1048
1054
  * console.log('可用分类:', categories);
1049
1055
  * ```
1050
1056
  */
1051
- static getCategories(): Promise<string[]>;
1057
+ static getCategories(): Promise<Array<{
1058
+ name: string;
1059
+ description?: string | null;
1060
+ }>>;
1052
1061
  /**
1053
1062
  * 获取所有可用标签
1054
1063
  *
@@ -1094,7 +1103,10 @@ declare const updateArtworkOrder: (collectionId: number, artworkOrders: {
1094
1103
  declare const moveArtwork: (collectionId: number, artworkId: number, targetOrder: number) => Promise<void>;
1095
1104
  declare const moveArtworkUp: (collectionId: number, artworkId: number) => Promise<void>;
1096
1105
  declare const moveArtworkDown: (collectionId: number, artworkId: number) => Promise<void>;
1097
- declare const getCategories: () => Promise<string[]>;
1106
+ declare const getCategories: () => Promise<Array<{
1107
+ name: string;
1108
+ description?: string | null;
1109
+ }>>;
1098
1110
  declare const createCategory: (name: string, description?: string) => Promise<void>;
1099
1111
  declare const getTags: () => Promise<string[]>;
1100
1112
  declare function getCollectionsOverview(): Promise<Omit<ArtCollection, 'pages'>[]>;
@@ -2136,7 +2148,7 @@ declare const useMasterpieces: () => {
2136
2148
  declare const useMasterpiecesConfig: () => {
2137
2149
  config: MasterpiecesConfig | null;
2138
2150
  collections: ArtCollection[];
2139
- categories: string[];
2151
+ categories: CategoryOption[];
2140
2152
  tags: string[];
2141
2153
  loading: boolean;
2142
2154
  error: string | null;
@@ -2164,7 +2176,10 @@ declare const useMasterpiecesConfig: () => {
2164
2176
  refreshData: () => Promise<{
2165
2177
  config: MasterpiecesConfig;
2166
2178
  collections: any;
2167
- categories: string[];
2179
+ categories: {
2180
+ name: string;
2181
+ description?: string | null;
2182
+ }[];
2168
2183
  tags: string[];
2169
2184
  }>;
2170
2185
  };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkERNZE5CJ_js = require('../chunk-ERNZE5CJ.js');
3
+ var chunkIZOIVYOW_js = require('../chunk-IZOIVYOW.js');
4
4
  var chunkDM2GUVUH_js = require('../chunk-DM2GUVUH.js');
5
5
  require('../chunk-UIYKZ73N.js');
6
6
  var chunk4XXIBWCO_js = require('../chunk-4XXIBWCO.js');
@@ -168,7 +168,7 @@ var init_masterpiecesService = chunkZ6ZWNWWR_js.__esm({
168
168
  * 从后端API获取所有已定义的画集分类列表。
169
169
  * 用于构建分类筛选器和下拉菜单。
170
170
  *
171
- * @returns Promise<string[]> 分类名称数组
171
+ * @returns Promise<Array<{ name: string; description?: string | null }>> 分类名称数组
172
172
  * @throws {Error} 当API请求失败时抛出错误
173
173
  *
174
174
  * @example
@@ -182,7 +182,8 @@ var init_masterpiecesService = chunkZ6ZWNWWR_js.__esm({
182
182
  if (!response.ok) {
183
183
  throw new Error("\u83B7\u53D6\u5206\u7C7B\u5931\u8D25");
184
184
  }
185
- return await response.json();
185
+ const payload = await response.json();
186
+ return Array.isArray(payload) ? payload : payload?.data ?? [];
186
187
  }
187
188
  /**
188
189
  * 获取所有可用标签
@@ -8463,7 +8464,7 @@ function ShowMasterPiecesContent() {
8463
8464
  return () => clearTimeout(timer);
8464
8465
  }, [triggerCheck]);
8465
8466
  const homeTabConfig = React30.useMemo(
8466
- () => chunkERNZE5CJ_js.normalizeHomeTabConfig(config?.homeTabConfig),
8467
+ () => chunkIZOIVYOW_js.normalizeHomeTabConfig(config?.homeTabConfig),
8467
8468
  [config?.homeTabConfig]
8468
8469
  );
8469
8470
  const visibleHomeTabs = React30.useMemo(
@@ -8530,7 +8531,7 @@ function ShowMasterPiecesContent() {
8530
8531
  const userId = user?.id || 1;
8531
8532
  const categoryList = visibleHomeTabs.map((tab) => ({
8532
8533
  category: tab.category,
8533
- displayName: chunkERNZE5CJ_js.getCategoryDisplayName(tab.category)
8534
+ displayName: tab.description || tab.name || chunkIZOIVYOW_js.getCategoryDisplayName(tab.category)
8534
8535
  }));
8535
8536
  return /* @__PURE__ */ React30__default.default.createElement(exports.CartProvider, { userId }, /* @__PURE__ */ React30__default.default.createElement("div", { className: "min-h-screen bg-gradient-to-br from-white to-prussian-blue-900/5 overflow-x-hidden" }, /* @__PURE__ */ React30__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__ */ React30__default.default.createElement("div", { className: "max-w-7xl mx-auto px-3 sm:px-4 py-3 sm:py-4" }, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center justify-between gap-2 sm:gap-4 min-h-[44px]" }, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center gap-4 sm:gap-8 min-w-0 flex-1" }, selectedCollection && /* @__PURE__ */ React30__default.default.createElement(
8536
8537
  chunk4XXIBWCO_js.Button,
@@ -8661,6 +8662,7 @@ function ConfigPageContent() {
8661
8662
  const [showArtworkOrder, setShowArtworkOrder] = React30.useState(false);
8662
8663
  const [showCollectionOrder, setShowCollectionOrder] = React30.useState(false);
8663
8664
  const [newHomeTabCategory, setNewHomeTabCategory] = React30.useState("");
8665
+ const [newHomeTabDescription, setNewHomeTabDescription] = React30.useState("");
8664
8666
  const [categoryOptions, setCategoryOptions] = React30.useState([]);
8665
8667
  const {
8666
8668
  bookings,
@@ -8704,7 +8706,7 @@ function ConfigPageContent() {
8704
8706
  enableSearch: config?.enableSearch || true,
8705
8707
  enableCategories: config?.enableCategories || true,
8706
8708
  defaultCategory: config?.defaultCategory || "all",
8707
- homeTabConfig: chunkERNZE5CJ_js.normalizeHomeTabConfig(config?.homeTabConfig),
8709
+ homeTabConfig: chunkIZOIVYOW_js.normalizeHomeTabConfig(config?.homeTabConfig),
8708
8710
  theme: config?.theme || "light",
8709
8711
  language: config?.language || "zh"
8710
8712
  });
@@ -8738,7 +8740,7 @@ function ConfigPageContent() {
8738
8740
  enableSearch: config.enableSearch,
8739
8741
  enableCategories: config.enableCategories,
8740
8742
  defaultCategory: config.defaultCategory,
8741
- homeTabConfig: chunkERNZE5CJ_js.normalizeHomeTabConfig(config.homeTabConfig),
8743
+ homeTabConfig: chunkIZOIVYOW_js.normalizeHomeTabConfig(config.homeTabConfig),
8742
8744
  theme: config.theme,
8743
8745
  language: config.language
8744
8746
  });
@@ -8762,7 +8764,7 @@ function ConfigPageContent() {
8762
8764
  }
8763
8765
  updated[index] = targetItem;
8764
8766
  updated[targetIndex] = currentItem;
8765
- const normalized = chunkERNZE5CJ_js.normalizeHomeTabConfig(
8767
+ const normalized = chunkIZOIVYOW_js.normalizeHomeTabConfig(
8766
8768
  updated.map((item, newIndex) => ({ ...item, order: newIndex }))
8767
8769
  );
8768
8770
  return { ...prev, homeTabConfig: normalized };
@@ -8773,15 +8775,16 @@ function ConfigPageContent() {
8773
8775
  const updated = prev.homeTabConfig.map(
8774
8776
  (item) => item.category === category ? { ...item, visible: !item.visible } : item
8775
8777
  );
8776
- return { ...prev, homeTabConfig: chunkERNZE5CJ_js.normalizeHomeTabConfig(updated) };
8778
+ return { ...prev, homeTabConfig: chunkIZOIVYOW_js.normalizeHomeTabConfig(updated) };
8777
8779
  });
8778
8780
  };
8779
8781
  const handleResetHomeTabs = () => {
8780
8782
  setConfigForm((prev) => ({
8781
8783
  ...prev,
8782
- homeTabConfig: chunkERNZE5CJ_js.buildDefaultHomeTabConfig()
8784
+ homeTabConfig: chunkIZOIVYOW_js.buildDefaultHomeTabConfig()
8783
8785
  }));
8784
8786
  setNewHomeTabCategory("");
8787
+ setNewHomeTabDescription("");
8785
8788
  };
8786
8789
  const handleSetAllHomeTabsVisible = (visible) => {
8787
8790
  setConfigForm((prev) => {
@@ -8789,11 +8792,12 @@ function ConfigPageContent() {
8789
8792
  ...item,
8790
8793
  visible
8791
8794
  }));
8792
- return { ...prev, homeTabConfig: chunkERNZE5CJ_js.normalizeHomeTabConfig(updated) };
8795
+ return { ...prev, homeTabConfig: chunkIZOIVYOW_js.normalizeHomeTabConfig(updated) };
8793
8796
  });
8794
8797
  };
8795
8798
  const handleAddHomeTab = async () => {
8796
8799
  const trimmed = newHomeTabCategory.trim();
8800
+ const trimmedDescription = newHomeTabDescription.trim();
8797
8801
  if (!trimmed) {
8798
8802
  alert("\u5206\u7C7B\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
8799
8803
  setNewHomeTabCategory("");
@@ -8807,26 +8811,34 @@ function ConfigPageContent() {
8807
8811
  setNewHomeTabCategory("");
8808
8812
  return;
8809
8813
  }
8810
- const hasCategory = categoryOptions.some(
8811
- (category) => category.toLowerCase() === trimmed.toLowerCase()
8814
+ const existingCategory = categoryOptions.find(
8815
+ (category) => category.name.toLowerCase() === trimmed.toLowerCase()
8812
8816
  );
8817
+ const description = trimmedDescription || existingCategory?.description || "";
8818
+ if (!description) {
8819
+ alert("\u5C55\u793A\u6587\u6848\u4E0D\u80FD\u4E3A\u7A7A");
8820
+ return;
8821
+ }
8813
8822
  try {
8814
- if (!hasCategory) {
8815
- await exports.createCategory(trimmed);
8816
- setCategoryOptions((prev) => [...prev, trimmed]);
8823
+ if (!existingCategory) {
8824
+ await exports.createCategory(trimmed, description);
8825
+ setCategoryOptions((prev) => [...prev, { name: trimmed, description }]);
8817
8826
  }
8818
8827
  setConfigForm((prev) => {
8819
8828
  const updated = [
8820
8829
  ...prev.homeTabConfig,
8821
8830
  {
8831
+ name: trimmed,
8832
+ description,
8822
8833
  category: trimmed,
8823
8834
  visible: true,
8824
8835
  order: prev.homeTabConfig.length
8825
8836
  }
8826
8837
  ];
8827
- return { ...prev, homeTabConfig: chunkERNZE5CJ_js.normalizeHomeTabConfig(updated) };
8838
+ return { ...prev, homeTabConfig: chunkIZOIVYOW_js.normalizeHomeTabConfig(updated) };
8828
8839
  });
8829
8840
  setNewHomeTabCategory("");
8841
+ setNewHomeTabDescription("");
8830
8842
  } catch (error2) {
8831
8843
  console.error("\u65B0\u589E\u5206\u7C7B\u5931\u8D25:", error2);
8832
8844
  alert(error2 instanceof Error ? error2.message : "\u65B0\u589E\u5206\u7C7B\u5931\u8D25");
@@ -8838,7 +8850,7 @@ function ConfigPageContent() {
8838
8850
  return prev;
8839
8851
  }
8840
8852
  const updated = prev.homeTabConfig.filter((item) => item.category !== category);
8841
- return { ...prev, homeTabConfig: chunkERNZE5CJ_js.normalizeHomeTabConfig(updated) };
8853
+ return { ...prev, homeTabConfig: chunkIZOIVYOW_js.normalizeHomeTabConfig(updated) };
8842
8854
  });
8843
8855
  };
8844
8856
  React30__default.default.useEffect(() => {
@@ -9131,12 +9143,19 @@ function ConfigPageContent() {
9131
9143
  onChange: (e) => setConfigForm((prev) => ({ ...prev, enableCategories: e.target.checked })),
9132
9144
  className: "h-4 w-4 rounded border-gray-300"
9133
9145
  }
9134
- ), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Label, { htmlFor: "enableCategories", className: "text-sm font-medium" }, "\u542F\u7528\u5206\u7C7B\u529F\u80FD")))))), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.TabsContent, { value: "homeTabs", className: "space-y-6" }, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Card, null, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardHeader, null, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React30__default.default.createElement("div", null, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardTitle, null, "\u9996\u9875\u5206\u7C7BTab\u914D\u7F6E"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardDescription, null, "\u7BA1\u7406\u9996\u9875\u5206\u7C7BTab\u7684\u663E\u793A\u987A\u5E8F\u4E0E\u663E\u793A/\u9690\u85CF")), /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { variant: "outline", onClick: () => handleSetAllHomeTabsVisible(true) }, "\u5168\u90E8\u663E\u793A"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { variant: "outline", onClick: () => handleSetAllHomeTabsVisible(false) }, "\u5168\u90E8\u9690\u85CF"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { variant: "outline", onClick: handleResetHomeTabs, className: "gap-2" }, /* @__PURE__ */ React30__default.default.createElement(lucideReact.RotateCcw, { size: 16 }), "\u91CD\u7F6E\u987A\u5E8F"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { onClick: handleSaveConfig, className: "gap-2" }, /* @__PURE__ */ React30__default.default.createElement(lucideReact.Save, { size: 16 }), "\u4FDD\u5B58\u914D\u7F6E")))), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardContent, null, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex flex-col lg:flex-row lg:items-end gap-3 mb-4" }, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex-1 space-y-2" }, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Label, null, "\u65B0\u589E\u5206\u7C7BTab"), /* @__PURE__ */ React30__default.default.createElement(
9146
+ ), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Label, { htmlFor: "enableCategories", className: "text-sm font-medium" }, "\u542F\u7528\u5206\u7C7B\u529F\u80FD")))))), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.TabsContent, { value: "homeTabs", className: "space-y-6" }, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Card, null, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardHeader, null, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ React30__default.default.createElement("div", null, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardTitle, null, "\u9996\u9875\u5206\u7C7BTab\u914D\u7F6E"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardDescription, null, "\u7BA1\u7406\u9996\u9875\u5206\u7C7BTab\u7684\u663E\u793A\u987A\u5E8F\u4E0E\u663E\u793A/\u9690\u85CF")), /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex gap-3" }, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { variant: "outline", onClick: () => handleSetAllHomeTabsVisible(true) }, "\u5168\u90E8\u663E\u793A"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { variant: "outline", onClick: () => handleSetAllHomeTabsVisible(false) }, "\u5168\u90E8\u9690\u85CF"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { variant: "outline", onClick: handleResetHomeTabs, className: "gap-2" }, /* @__PURE__ */ React30__default.default.createElement(lucideReact.RotateCcw, { size: 16 }), "\u91CD\u7F6E\u987A\u5E8F"), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { onClick: handleSaveConfig, className: "gap-2" }, /* @__PURE__ */ React30__default.default.createElement(lucideReact.Save, { size: 16 }), "\u4FDD\u5B58\u914D\u7F6E")))), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.CardContent, null, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex flex-col lg:flex-row lg:items-end gap-3 mb-4" }, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex-1 space-y-2" }, /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Label, null, "\u5206\u7C7B\u540D\u79F0"), /* @__PURE__ */ React30__default.default.createElement(
9135
9147
  chunk4XXIBWCO_js.Input,
9136
9148
  {
9137
9149
  value: newHomeTabCategory,
9138
9150
  onChange: (e) => setNewHomeTabCategory(e.target.value),
9139
- placeholder: "\u8F93\u5165\u65B0\u5206\u7C7B\u540D\u79F0"
9151
+ placeholder: "\u8F93\u5165\u5206\u7C7B\u540D\u79F0"
9152
+ }
9153
+ ), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Label, null, "\u5C55\u793A\u6587\u6848"), /* @__PURE__ */ React30__default.default.createElement(
9154
+ chunk4XXIBWCO_js.Input,
9155
+ {
9156
+ value: newHomeTabDescription,
9157
+ onChange: (e) => setNewHomeTabDescription(e.target.value),
9158
+ placeholder: "\u8F93\u5165\u5C55\u793A\u6587\u6848"
9140
9159
  }
9141
9160
  )), /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Button, { onClick: handleAddHomeTab, className: "gap-2" }, /* @__PURE__ */ React30__default.default.createElement(lucideReact.Plus, { size: 16 }), "\u65B0\u589ETab")), /* @__PURE__ */ React30__default.default.createElement("div", { className: "space-y-2" }, configForm.homeTabConfig.map((item, index) => /* @__PURE__ */ React30__default.default.createElement(
9142
9161
  "div",
@@ -9144,7 +9163,7 @@ function ConfigPageContent() {
9144
9163
  key: item.category,
9145
9164
  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"
9146
9165
  },
9147
- /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React30__default.default.createElement("span", { className: "text-sm font-semibold text-slate-800" }, chunkERNZE5CJ_js.getCategoryDisplayName(item.category)), !item.visible && /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Badge, { variant: "secondary", className: "text-xs" }, "\u5DF2\u9690\u85CF")),
9166
+ /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center gap-3" }, /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React30__default.default.createElement("span", { className: "text-sm font-semibold text-slate-800" }, item.description || item.name || chunkIZOIVYOW_js.getCategoryDisplayName(item.category)), item.description ? /* @__PURE__ */ React30__default.default.createElement("span", { className: "text-xs text-slate-500" }, item.name || item.category) : null), !item.visible && /* @__PURE__ */ React30__default.default.createElement(chunk4XXIBWCO_js.Badge, { variant: "secondary", className: "text-xs" }, "\u5DF2\u9690\u85CF")),
9148
9167
  /* @__PURE__ */ React30__default.default.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ React30__default.default.createElement(
9149
9168
  chunk4XXIBWCO_js.Button,
9150
9169
  {
@@ -9401,7 +9420,7 @@ function ConfigPageContent() {
9401
9420
  onChange: (e) => setCollectionForm((prev) => ({ ...prev, category: e.target.value })),
9402
9421
  className: "w-full px-3 py-2 border border-slate-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
9403
9422
  },
9404
- categoryOptions.map((category) => /* @__PURE__ */ React30__default.default.createElement("option", { key: category, value: category }, chunkERNZE5CJ_js.getCategoryDisplayName(category)))
9423
+ categoryOptions.map((category) => /* @__PURE__ */ React30__default.default.createElement("option", { key: category.name, value: category.name }, category.description || chunkIZOIVYOW_js.getCategoryDisplayName(category.name)))
9405
9424
  )), /* @__PURE__ */ React30__default.default.createElement("div", null, /* @__PURE__ */ React30__default.default.createElement("label", { className: "block text-sm font-medium text-slate-700 mb-2" }, "\u4EF7\u683C\uFF08\u5143\uFF09"), /* @__PURE__ */ React30__default.default.createElement(
9406
9425
  "input",
9407
9426
  {