diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx index a9a9faeb2..de6404abd 100644 --- a/components/canvas/CanvasChatPanel.tsx +++ b/components/canvas/CanvasChatPanel.tsx @@ -3,6 +3,7 @@ import { useChat } from "@ai-sdk/react"; import { DefaultChatTransport } from "ai"; import { useEffect, useRef, useState, useCallback, useMemo } from "react"; +import { useSession } from "next-auth/react"; import { createPortal } from "react-dom"; import useSWR, { useSWRConfig } from "swr"; import { Send, Loader2, ImagePlus, Paperclip, X, Plus, History, LayoutGrid, Maximize2, RefreshCw, Globe, Box, ArrowUp, Video, Sparkles, Check, ChevronDown, ChevronUp, AlertCircle, CheckCircle2, Brain, ThumbsUp, ThumbsDown, Eye, Trash2, Download, MessageCircle } from "lucide-react"; @@ -1383,6 +1384,7 @@ function buildDetailReviewAppendMarkdown(params: { } export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenFileList }: CanvasChatPanelProps) { + const { data: session } = useSession(); const [input, setInput] = useState(""); const [attachments, setAttachments] = useState([]); const [selectedModelId, setSelectedModelId] = useState(""); @@ -2251,12 +2253,29 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF }; summary?: { currentCredits?: number; + totalImages?: number; }; } | null>("/api/user/membership-summary", async (url: string) => { const response = await fetch(url, { cache: "no-store" }); if (!response.ok) return null; return response.json(); }); + const greetingUserName = useMemo(() => { + const userName = String(session?.user?.name || "").trim(); + if (userName) return userName; + const email = String(session?.user?.email || "").trim(); + if (email.includes("@")) { + return email.split("@")[0]; + } + return ""; + }, [session?.user?.email, session?.user?.name]); + const greetingTitle = greetingUserName + ? `Hi, ${greetingUserName},我是你的AI设计师` + : "Hi, 我是你的AI设计师"; + const totalGeneratedImages = Number(membershipSummary?.summary?.totalImages ?? NaN); + const subtitleSuffix = Number.isFinite(totalGeneratedImages) + ? ` 累计为你生成了 ${totalGeneratedImages.toLocaleString()} 张图。` + : ""; const aiDetailGenerationEnabled = siteSettings?.aiDetailGenerationEnabled === true; const VIDEO_PROVIDER_TYPES = new Set(["volcano-video", "doubao-video", "qianwen-video", "fal-video"]); @@ -6247,8 +6266,10 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
{/* Greeting */}
-

Hi, 我是你的AI设计师

-

让我们开始今天的创作吧!

+

{greetingTitle}

+

+ 让我们开始今天的创作吧!{subtitleSuffix} +

{/* Suggestions - Removed */}