diff --git a/app/(chat)/canvas/page.tsx b/app/(chat)/canvas/page.tsx index ede75e5..8942020 100644 --- a/app/(chat)/canvas/page.tsx +++ b/app/(chat)/canvas/page.tsx @@ -1,24 +1,58 @@ "use client"; import { useEffect } from "react"; -import { useRouter } from "next/navigation"; +import { useRouter, useSearchParams } from "next/navigation"; import { Loader2 } from "lucide-react"; -// 自动重定向到新画布 +// 默认进入最近画布,避免误触直接新建 export default function CanvasRedirectPage() { const router = useRouter(); + const searchParams = useSearchParams(); useEffect(() => { - // 生成新的画布 ID 并跳转 - const newId = crypto.randomUUID(); - router.replace(`/canvas/${newId}`); - }, [router]); + const shouldCreateNew = searchParams.get("new") === "1"; + + const openCanvas = async () => { + if (shouldCreateNew) { + const newId = crypto.randomUUID(); + router.replace(`/canvas/${newId}`); + return; + } + + try { + const response = await fetch("/api/canvas", { cache: "no-store" }); + if (response.ok) { + const result = await response.json(); + const items = result?.data || []; + if (Array.isArray(items) && items.length > 0) { + const sorted = [...items].sort((a, b) => { + const aTime = new Date(a.updatedAt || a.createdAt || 0).getTime(); + const bTime = new Date(b.updatedAt || b.createdAt || 0).getTime(); + return bTime - aTime; + }); + const latest = sorted[0]; + if (latest?.id) { + router.replace(`/canvas/${latest.id}`); + return; + } + } + } + } catch (_error) { + // ignore and fallback + } + + const newId = crypto.randomUUID(); + router.replace(`/canvas/${newId}`); + }; + + void openCanvas(); + }, [router, searchParams]); return (