修复新首页Agent显示并按会员开关隐藏升级入口
This commit is contained in:
parent
9a3b28fa8e
commit
2607c6c7a7
@ -374,6 +374,9 @@ export function LovartHome({
|
||||
canvasDefaultModelId?: string | null;
|
||||
lovartComposerPrefix?: string | null;
|
||||
lovartComposerPreviewTexts?: string[];
|
||||
membershipConfig?: {
|
||||
enabled?: boolean;
|
||||
};
|
||||
toolbox1Name?: string | null;
|
||||
toolbox1Enabled?: boolean;
|
||||
toolbox2Name?: string | null;
|
||||
@ -424,10 +427,20 @@ export function LovartHome({
|
||||
[imageModels]
|
||||
);
|
||||
|
||||
const currentComposerModel = useMemo(
|
||||
() => allComposerModels.find((model) => model.id === selectedModelId),
|
||||
[allComposerModels, selectedModelId]
|
||||
const composerModelValue = useMemo(() => {
|
||||
if (!selectedModelId) return "auto";
|
||||
if (allComposerModels.some((model) => model.id === selectedModelId)) {
|
||||
return selectedModelId;
|
||||
}
|
||||
return "auto";
|
||||
}, [allComposerModels, selectedModelId]);
|
||||
const triggerComposerModel = useMemo(
|
||||
() =>
|
||||
allComposerModels.find((model) => model.id === composerModelValue) ||
|
||||
allComposerModels.find((model) => model.id === "auto"),
|
||||
[allComposerModels, composerModelValue]
|
||||
);
|
||||
const isMembershipEnabled = siteSettingsData?.membershipConfig?.enabled !== false;
|
||||
|
||||
const discoveryTabs = useMemo(() => {
|
||||
const configured = (surpriseCategories || [])
|
||||
@ -557,11 +570,10 @@ export function LovartHome({
|
||||
|
||||
useEffect(() => {
|
||||
if (!selectedModelId) return;
|
||||
if (!modelsData) return;
|
||||
if (allComposerModels.length === 0) return;
|
||||
if (allComposerModels.some((model) => model.id === selectedModelId)) return;
|
||||
setSelectedModelId("auto");
|
||||
}, [allComposerModels, selectedModelId, modelsData]);
|
||||
}, [allComposerModels, selectedModelId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (!isAuthenticated) return;
|
||||
@ -862,7 +874,7 @@ export function LovartHome({
|
||||
attachments: uploadedAttachments,
|
||||
autoSend: true,
|
||||
createdAt: Date.now(),
|
||||
selectedModelId: selectedModelId || "auto",
|
||||
selectedModelId: composerModelValue,
|
||||
imageParams,
|
||||
})
|
||||
);
|
||||
@ -964,67 +976,69 @@ export function LovartHome({
|
||||
<Bell className="h-3.5 w-3.5" />
|
||||
</button>
|
||||
|
||||
<HoverCard openDelay={100} closeDelay={120}>
|
||||
<HoverCardTrigger asChild>
|
||||
<Button
|
||||
variant="ghost"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
className="h-8 rounded-[14px] bg-[#1c1c1e] px-2.5 text-[14px] text-white hover:bg-black hover:text-white"
|
||||
>
|
||||
<span className="mr-1.5">升级</span>
|
||||
<div className="inline-flex items-center gap-1 rounded-[9px] bg-white/10 px-1.5 py-0.5 text-xs text-white">
|
||||
<Zap className="h-3 w-3 text-amber-300" />
|
||||
{membershipData?.summary?.currentCredits ?? 0}
|
||||
</div>
|
||||
</Button>
|
||||
</HoverCardTrigger>
|
||||
<HoverCardContent
|
||||
align="end"
|
||||
sideOffset={10}
|
||||
className="w-[300px] rounded-3xl border border-black/10 bg-white p-0 shadow-xl"
|
||||
>
|
||||
<div className="p-4">
|
||||
<div className="mb-4 flex items-start justify-between">
|
||||
<div>
|
||||
<div className="text-[22px] font-semibold leading-none text-black">
|
||||
{currentPlan?.name || "Free"}
|
||||
</div>
|
||||
</div>
|
||||
{isMembershipEnabled ? (
|
||||
<HoverCard openDelay={100} closeDelay={120}>
|
||||
<HoverCardTrigger asChild>
|
||||
<Button
|
||||
size="sm"
|
||||
className="h-8 rounded-2xl bg-[#2f3542] px-4 text-[13px] text-white hover:bg-[#242a36]"
|
||||
variant="ghost"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
className="h-8 rounded-[14px] bg-[#1c1c1e] px-2.5 text-[14px] text-white hover:bg-black hover:text-white"
|
||||
>
|
||||
升级
|
||||
<span className="mr-1.5">升级</span>
|
||||
<div className="inline-flex items-center gap-1 rounded-[9px] bg-white/10 px-1.5 py-0.5 text-xs text-white">
|
||||
<Zap className="h-3 w-3 text-amber-300" />
|
||||
{membershipData?.summary?.currentCredits ?? 0}
|
||||
</div>
|
||||
</Button>
|
||||
</div>
|
||||
<div className="space-y-2.5 border-t border-black/10 pt-3 text-[14px]">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="inline-flex items-center gap-2 text-black/80">
|
||||
<Sparkles className="h-3.5 w-3.5" />
|
||||
积分
|
||||
</span>
|
||||
<span>{membershipData?.summary?.currentCredits ?? 0}</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="inline-flex items-center gap-2 text-black/80">
|
||||
<Upload className="h-3.5 w-3.5" />
|
||||
每日免费积分
|
||||
</span>
|
||||
<span>{membershipData?.summary?.dailyFreeCredits ?? 0}</span>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
className="mt-4 inline-flex items-center gap-1 text-[12px] font-medium text-black/80 hover:text-black"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
</HoverCardTrigger>
|
||||
<HoverCardContent
|
||||
align="end"
|
||||
sideOffset={10}
|
||||
className="w-[300px] rounded-3xl border border-black/10 bg-white p-0 shadow-xl"
|
||||
>
|
||||
使用详情
|
||||
<ChevronDown className="h-4 w-4 -rotate-90" />
|
||||
</button>
|
||||
</div>
|
||||
</HoverCardContent>
|
||||
</HoverCard>
|
||||
<div className="p-4">
|
||||
<div className="mb-4 flex items-start justify-between">
|
||||
<div>
|
||||
<div className="text-[22px] font-semibold leading-none text-black">
|
||||
{currentPlan?.name || "Free"}
|
||||
</div>
|
||||
</div>
|
||||
<Button
|
||||
size="sm"
|
||||
className="h-8 rounded-2xl bg-[#2f3542] px-4 text-[13px] text-white hover:bg-[#242a36]"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
>
|
||||
升级
|
||||
</Button>
|
||||
</div>
|
||||
<div className="space-y-2.5 border-t border-black/10 pt-3 text-[14px]">
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="inline-flex items-center gap-2 text-black/80">
|
||||
<Sparkles className="h-3.5 w-3.5" />
|
||||
积分
|
||||
</span>
|
||||
<span>{membershipData?.summary?.currentCredits ?? 0}</span>
|
||||
</div>
|
||||
<div className="flex items-center justify-between">
|
||||
<span className="inline-flex items-center gap-2 text-black/80">
|
||||
<Upload className="h-3.5 w-3.5" />
|
||||
每日免费积分
|
||||
</span>
|
||||
<span>{membershipData?.summary?.dailyFreeCredits ?? 0}</span>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
className="mt-4 inline-flex items-center gap-1 text-[12px] font-medium text-black/80 hover:text-black"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
>
|
||||
使用详情
|
||||
<ChevronDown className="h-4 w-4 -rotate-90" />
|
||||
</button>
|
||||
</div>
|
||||
</HoverCardContent>
|
||||
</HoverCard>
|
||||
) : null}
|
||||
|
||||
{isAuthenticated ? (
|
||||
<HoverCard openDelay={80} closeDelay={120}>
|
||||
@ -1248,15 +1262,17 @@ export function LovartHome({
|
||||
|
||||
<main className="mx-auto max-w-[1240px] px-6 pb-20 pt-[84px]">
|
||||
<section className="mt-8 text-center">
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
className="inline-flex items-center gap-2 rounded-full bg-[#fde8bf] px-4 py-2 text-sm text-black/80"
|
||||
>
|
||||
<span className="rounded-full bg-[#ff9d3d] px-2 py-0.5 text-[10px] font-semibold text-white">NEW</span>
|
||||
{heroPromoText || "现在升级,立享 Kling 3.0 与 Nano Banana Pro,最高 5 折优惠"}
|
||||
<span className="text-[#ff7a00]">{heroPromoActionText || "立即升级"}</span>
|
||||
</button>
|
||||
{isMembershipEnabled ? (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setUpgradeDialogOpen(true)}
|
||||
className="inline-flex items-center gap-2 rounded-full bg-[#fde8bf] px-4 py-2 text-sm text-black/80"
|
||||
>
|
||||
<span className="rounded-full bg-[#ff9d3d] px-2 py-0.5 text-[10px] font-semibold text-white">NEW</span>
|
||||
{heroPromoText || "现在升级,立享 Kling 3.0 与 Nano Banana Pro,最高 5 折优惠"}
|
||||
<span className="text-[#ff7a00]">{heroPromoActionText || "立即升级"}</span>
|
||||
</button>
|
||||
) : null}
|
||||
|
||||
<div className="mt-8 flex items-center justify-center gap-2">
|
||||
{siteLogo ? (
|
||||
@ -1315,26 +1331,26 @@ export function LovartHome({
|
||||
/>
|
||||
</label>
|
||||
|
||||
<Select value={selectedModelId || "auto"} onValueChange={setSelectedModelId}>
|
||||
<Select value={composerModelValue} onValueChange={setSelectedModelId}>
|
||||
<SelectTrigger className="h-8 w-auto min-w-[130px] rounded-full border border-blue-100 bg-blue-50 px-2 text-xs text-blue-600">
|
||||
<span className="flex min-w-0 items-center gap-1.5">
|
||||
<div className="flex min-w-0 items-center gap-1.5">
|
||||
<span className="h-5 w-5 overflow-hidden rounded-full border border-blue-200 bg-white">
|
||||
{currentComposerModel?.avatarUrl ? (
|
||||
{triggerComposerModel?.avatarUrl ? (
|
||||
<img
|
||||
src={currentComposerModel.avatarUrl}
|
||||
alt={currentComposerModel.displayName || "模型头像"}
|
||||
src={triggerComposerModel.avatarUrl}
|
||||
alt={triggerComposerModel.displayName || "模型头像"}
|
||||
className="h-full w-full object-cover"
|
||||
/>
|
||||
) : (
|
||||
<span className="flex h-full w-full items-center justify-center text-[10px] font-medium text-blue-500">
|
||||
{(currentComposerModel?.displayName || "A").slice(0, 1)}
|
||||
{(triggerComposerModel?.displayName || "A").slice(0, 1)}
|
||||
</span>
|
||||
)}
|
||||
</span>
|
||||
<span className="max-w-[95px] truncate">
|
||||
{currentComposerModel?.displayName || "Agent模式"}
|
||||
{triggerComposerModel?.displayName || "Agent模式"}
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
</SelectTrigger>
|
||||
<SelectContent className="w-[238px] max-h-[340px] overflow-hidden rounded-[18px] border border-[#cfd4dc] bg-[#f3f4f6] p-1.5 shadow-[0_8px_20px_rgba(15,23,42,0.13)]">
|
||||
<div className="max-h-[312px] space-y-0.5 overflow-y-auto pr-1">
|
||||
@ -1357,7 +1373,7 @@ export function LovartHome({
|
||||
</span>
|
||||
<span className="truncate text-[12px] font-medium leading-none">{model.displayName}</span>
|
||||
</span>
|
||||
{(selectedModelId || "auto") === model.id ? (
|
||||
{composerModelValue === model.id ? (
|
||||
<span className="text-sm font-semibold text-[#1f2937]">✓</span>
|
||||
) : null}
|
||||
</span>
|
||||
@ -1369,11 +1385,11 @@ export function LovartHome({
|
||||
|
||||
<div className="min-w-0 flex-1 overflow-hidden">
|
||||
<ImageParamsBar
|
||||
modelName={currentComposerModel?.displayName}
|
||||
modelName={triggerComposerModel?.displayName}
|
||||
initialParams={imageParams}
|
||||
onParamsChange={handleImageParamsChange}
|
||||
inline
|
||||
providerType={currentComposerModel?.providerType}
|
||||
providerType={triggerComposerModel?.providerType}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user