diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx
index 82f516abf..889404b51 100644
--- a/app/(admin)/settings/admin-settings-client.tsx
+++ b/app/(admin)/settings/admin-settings-client.tsx
@@ -418,7 +418,7 @@ export function AdminSettingsClient() {
lovartHeroTitle: "由壹点AI 让设计更简单",
lovartHeroSubtitle: "懂你的设计代理,帮你搞定一切",
homeVariant: "classic",
- surpriseCategories: ["全部", "惊喜"],
+ surpriseCategories: ["全部", "精选"],
membershipConfig: defaultMembershipConfig,
membershipUserOverrides: defaultMembershipUserOverrides,
});
@@ -2690,7 +2690,7 @@ export function AdminSettingsClient() {
-
+
0 ? unique : ["全部", "惊喜"],
+ surpriseCategories: unique.length > 0 ? unique : ["全部", "精选"],
});
}}
- placeholder="全部, 惊喜, 海报, 电商"
+ placeholder="全部, 精选, 海报, 电商"
/>
新版首页“精选”模块会按这些分类显示筛选标签。
diff --git a/app/(chat)/page.tsx b/app/(chat)/page.tsx
index e1635d2c6..85a2405a2 100644
--- a/app/(chat)/page.tsx
+++ b/app/(chat)/page.tsx
@@ -39,7 +39,7 @@ async function NewChatPage() {
? surpriseCategoriesSetting?.value
.map((item: unknown) => String(item || "").trim())
.filter(Boolean)
- : ["全部", "惊喜"];
+ : ["全部", "精选"];
if (!session?.user && homeVariant !== "lovart") {
redirect("/login");
diff --git a/app/api/site-settings/route.ts b/app/api/site-settings/route.ts
index 766551141..048314328 100644
--- a/app/api/site-settings/route.ts
+++ b/app/api/site-settings/route.ts
@@ -12,6 +12,7 @@ import {
} from "@/lib/membership/config";
const HOME_VARIANT_KEY = "home_variant";
+// Historically stored as "home_surprise_categories" but used for the featured gallery categories.
const HOME_SURPRISE_CATEGORIES_KEY = "home_surprise_categories";
const LOVART_COMPOSER_PREVIEW_TEXTS_KEY = "lovart_composer_preview_texts";
const MEMBERSHIP_CONFIG_KEY = "membership_config";
@@ -23,16 +24,18 @@ function normalizeHomeVariant(value: unknown): "classic" | "lovart" {
function normalizeSurpriseCategories(value: unknown): string[] {
if (!Array.isArray(value)) {
- return ["全部", "惊喜"];
+ return ["全部", "精选"];
}
const normalized = value
.map((item) => String(item || "").trim())
.filter(Boolean)
+ // legacy typo compatibility: treat "惊喜" as "精选"
+ .map((item) => (item === "惊喜" ? "精选" : item))
.slice(0, 12);
if (normalized.length === 0) {
- return ["全部", "惊喜"];
+ return ["全部", "精选"];
}
const unique = Array.from(new Set(normalized));
diff --git a/components/home/lovart-home.tsx b/components/home/lovart-home.tsx
index 0ba257d4c..1694badab 100644
--- a/components/home/lovart-home.tsx
+++ b/components/home/lovart-home.tsx
@@ -328,11 +328,23 @@ export function LovartHome({
);
const discoveryTabs = useMemo(() => {
- const merged = [
- "全部",
- ...surpriseCategories.filter((item) => item && item !== "全部"),
- ...DISCOVERY_DEFAULT_TABS,
- ];
+ const configured = (surpriseCategories || [])
+ .map((item) => String(item || "").trim())
+ .filter(Boolean)
+ // legacy typo compatibility: treat "惊喜" as "精选"
+ .map((item) => (item === "惊喜" ? "精选" : item));
+
+ const uniqueConfigured = Array.from(new Set(configured));
+ const hasRealConfig =
+ uniqueConfigured.length > 0 &&
+ !(uniqueConfigured.length === 1 && uniqueConfigured[0] === "全部");
+
+ const fallback = ["全部", "精选", ...DISCOVERY_DEFAULT_TABS];
+ const base = hasRealConfig ? uniqueConfigured : fallback;
+
+ const withoutAll = base.filter((item) => item !== "全部");
+ const merged = ["全部", ...withoutAll];
+
return Array.from(new Set(merged)).slice(0, 12);
}, [surpriseCategories]);