'use client'; import { Suspense, useEffect, useState } from 'react'; import Link from 'next/link'; import { useSearchParams } from 'next/navigation'; import { Skeleton } from '@/components/ui/skeleton'; const API_BASE = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3000/api/v1'; interface SharedMessage { role: string; content: string; } interface SharedSession { id: number; model: string; title: string; createdAt: string; messages: SharedMessage[]; } function SharedSessionInner() { const searchParams = useSearchParams(); const token = searchParams.get('token'); const [session, setSession] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); useEffect(() => { if (!token) { setError('缺少分享参数'); setLoading(false); return; } fetch(`${API_BASE}/sandbox/shared/${encodeURIComponent(token)}`) .then(r => { if (!r.ok) throw new Error('分享链接无效'); return r.json(); }) .then(data => setSession(data)) .catch(e => setError(e.message)) .finally(() => setLoading(false)); }, [token]); if (loading) return (
); if (error || !session) return (
🔗

分享内容不可用

{error || '该分享链接可能已过期或不存在'}

前往 AI 沙盒
); return (
← AI 沙盒

{session.title}

模型: {session.model} · {new Date(session.createdAt).toLocaleDateString()}

{session.messages.map((msg, i) => (
{msg.role === 'assistant' && (
Y
)}
{msg.content}
{msg.role === 'user' && (
)}
))}
); } export default function SharedSessionPage() { return ( }> ); }