fix(home): use configured featured categories only + rename 惊喜 to 精选
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-02-14 01:44:54 +08:00
parent d5ad5faa5f
commit e8bfbbf286
4 changed files with 27 additions and 12 deletions

View File

@ -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() {
</div>
</div>
<div className="space-y-2">
<Label htmlFor="surpriseCategories">惊喜相册分类(逗号分隔)</Label>
<Label htmlFor="surpriseCategories">精选相册分类(逗号分隔)</Label>
<Input
id="surpriseCategories"
value={siteSettings.surpriseCategories.join(", ")}
@ -2702,10 +2702,10 @@ export function AdminSettingsClient() {
const unique = Array.from(new Set(parsed));
setSiteSettings({
...siteSettings,
surpriseCategories: unique.length > 0 ? unique : ["全部", "惊喜"],
surpriseCategories: unique.length > 0 ? unique : ["全部", "精选"],
});
}}
placeholder="全部, 惊喜, 海报, 电商"
placeholder="全部, 精选, 海报, 电商"
/>
<div className="text-xs text-muted-foreground">
新版首页“精选”模块会按这些分类显示筛选标签。

View File

@ -39,7 +39,7 @@ async function NewChatPage() {
? surpriseCategoriesSetting?.value
.map((item: unknown) => String(item || "").trim())
.filter(Boolean)
: ["全部", "惊喜"];
: ["全部", "精选"];
if (!session?.user && homeVariant !== "lovart") {
redirect("/login");

View File

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

View File

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