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.
- package/dist/{chunk-J6KKMP7V.js → chunk-7JN25DJB.js} +19 -13
- package/dist/chunk-7JN25DJB.js.map +1 -0
- package/dist/{chunk-6ZREZAGB.mjs → chunk-GFVAIT6Y.mjs} +20 -7
- package/dist/chunk-GFVAIT6Y.mjs.map +1 -0
- package/dist/{chunk-ERNZE5CJ.js → chunk-IZOIVYOW.js} +20 -7
- package/dist/chunk-IZOIVYOW.js.map +1 -0
- package/dist/{chunk-RZCEWMOR.mjs → chunk-SHY424RZ.mjs} +11 -5
- package/dist/chunk-SHY424RZ.mjs.map +1 -0
- package/dist/showmasterpiece/index.d.mts +20 -5
- package/dist/showmasterpiece/index.d.ts +20 -5
- package/dist/showmasterpiece/index.js +41 -22
- package/dist/showmasterpiece/index.js.map +1 -1
- package/dist/showmasterpiece/index.mjs +32 -13
- package/dist/showmasterpiece/index.mjs.map +1 -1
- package/dist/showmasterpiece/migration/index.js +29 -29
- package/dist/showmasterpiece/migration/index.mjs +2 -2
- package/dist/showmasterpiece/server/index.d.mts +8 -2
- package/dist/showmasterpiece/server/index.d.ts +8 -2
- package/dist/showmasterpiece/server/index.js +43 -43
- package/dist/showmasterpiece/server/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-6ZREZAGB.mjs.map +0 -1
- package/dist/chunk-ERNZE5CJ.js.map +0 -1
- package/dist/chunk-J6KKMP7V.js.map +0 -1
- package/dist/chunk-RZCEWMOR.mjs.map +0 -1
|
@@ -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<
|
|
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<
|
|
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:
|
|
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:
|
|
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<
|
|
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<
|
|
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:
|
|
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:
|
|
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
|
|
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
|
-
|
|
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
|
-
() =>
|
|
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:
|
|
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:
|
|
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:
|
|
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 =
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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 (!
|
|
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:
|
|
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:
|
|
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, "\
|
|
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\
|
|
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" },
|
|
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 },
|
|
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
|
{
|