feat: move canvas banner above chat input
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-03-04 01:22:19 +08:00
parent ca8f211138
commit 6e89c88bd3

View File

@ -2311,6 +2311,10 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
}, []);
const totalGeneratedImages = Number(userImageStats?.totalImages ?? NaN);
const aiDetailGenerationEnabled = siteSettings?.aiDetailGenerationEnabled === true;
const shouldShowCanvasBanner =
!isDetailGenerationMode &&
(siteSettings?.bannerEnabled ?? true) &&
Boolean(siteSettings?.bannerText || "升级会员, Nano Banana Pro 免费365天!");
const canvasSkillTagsEnabled = canvasSkillTagsData?.enabled !== false;
const canvasSkillTagsTitle =
String(canvasSkillTagsData?.title || "").trim() || DEFAULT_CANVAS_SKILL_TAGS_TITLE;
@ -6366,29 +6370,6 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
</p>
</div>
{/* Banner - 从系统设置中获取 */}
{(siteSettings?.bannerEnabled ?? true) && (siteSettings?.bannerText || "升级会员, Nano Banana Pro 免费365天!") && (
<div
className={cn(
"mb-6 bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-300 p-3 rounded-xl text-sm flex items-center justify-between",
siteSettings?.bannerLink && "cursor-pointer hover:bg-blue-100 dark:hover:bg-blue-900/30 transition-colors"
)}
onClick={() => {
if (siteSettings?.bannerLink) {
window.open(siteSettings.bannerLink, '_blank');
}
}}
>
<div className="flex items-center gap-2">
<div className="p-1 bg-blue-100 dark:bg-blue-800 rounded">
<Box className="h-4 w-4" />
</div>
<span>{siteSettings?.bannerText || "升级会员, Nano Banana Pro 免费365天!"}</span>
</div>
<X className="h-4 w-4 cursor-pointer opacity-50 hover:opacity-100" onClick={(e) => e.stopPropagation()} />
</div>
)}
{canvasSkillTags.length > 0 && (
<div className="mb-8 rounded-3xl border border-[#eceef2] bg-white/90 p-4">
<div className="mb-3 text-center">
@ -6957,6 +6938,30 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
</div>,
document.body
)}
{renderableVisibleMessages.length === 0 && shouldShowCanvasBanner ? (
<div className="px-4 pb-2">
<div
className={cn(
"bg-blue-50 dark:bg-blue-900/20 text-blue-600 dark:text-blue-300 p-3 rounded-xl text-sm flex items-center justify-between",
siteSettings?.bannerLink && "cursor-pointer hover:bg-blue-100 dark:hover:bg-blue-900/30 transition-colors"
)}
onClick={() => {
if (siteSettings?.bannerLink) {
window.open(siteSettings.bannerLink, "_blank");
}
}}
>
<div className="flex items-center gap-2">
<div className="p-1 bg-blue-100 dark:bg-blue-800 rounded">
<Box className="h-4 w-4" />
</div>
<span>{siteSettings?.bannerText || "升级会员, Nano Banana Pro 免费365天!"}</span>
</div>
<X className="h-4 w-4 cursor-pointer opacity-50 hover:opacity-100" onClick={(e) => e.stopPropagation()} />
</div>
</div>
) : null}
{/* 底部输入区域 - 混合输入(图片标签+文字可自由混合) */}
<div className="p-4 bg-white dark:bg-zinc-950 border-t">