// 加入房间弹窗 'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { X, Lock } from 'lucide-react'; import { useWatchRoomContext } from '@/components/WatchRoomProvider'; interface JoinRoomModalProps { onClose: () => void; roomId?: string; // 可选的预填房间号 } export default function JoinRoomModal({ onClose, roomId: initialRoomId }: JoinRoomModalProps) { const router = useRouter(); const { joinRoom } = useWatchRoomContext(); const [roomId, setRoomId] = useState(initialRoomId || ''); const [password, setPassword] = useState(''); const [userName, setUserName] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!roomId.trim()) { setError('请输入房间号'); return; } if (!userName.trim()) { setError('请输入您的昵称'); return; } setLoading(true); try { const { room, members } = await joinRoom({ roomId: roomId.trim().toUpperCase(), password: password.trim() || undefined, userName: userName.trim(), }); console.log('[WatchRoom] Joined room:', room, 'Members:', members); onClose(); // 加入成功后跳转到对应页面 // 如果房主已经在播放,跳转到播放页面 // 否则等待房主开始播放 } catch (err: any) { setError(err.message || '加入房间失败'); } finally { setLoading(false); } }; return (
{/* 关闭按钮 */} {/* 标题 */}

加入观影室

{/* 表单 */}
{/* 昵称 */}
setUserName(e.target.value)} placeholder="输入您的昵称" className="w-full rounded-lg bg-gray-700 px-4 py-3 text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-green-500" maxLength={20} />
{/* 房间号 */}
setRoomId(e.target.value.toUpperCase())} placeholder="输入6位房间号" className="w-full rounded-lg bg-gray-700 px-4 py-3 font-mono text-lg tracking-wider text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-green-500" maxLength={6} />
{/* 密码 */}
setPassword(e.target.value)} placeholder="如果房间有密码请输入" className="w-full rounded-lg bg-gray-700 px-4 py-3 text-white placeholder-gray-400 focus:outline-none focus:ring-2 focus:ring-green-500" maxLength={20} />
{/* 错误提示 */} {error && (
{error}
)} {/* 按钮 */}
{/* 提示 */}

加入后将跟随房主的播放内容

); }