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]);