import React, { useState, useEffect } from 'react'; import { useParams, Link } from 'react-router-dom'; import { Layout, Card, Typography, Space, Button, Result, Spin, App, Tag, Divider, Empty, Input } from 'antd'; import { LockOutlined, EyeOutlined, EyeInvisibleOutlined, CopyOutlined, CheckCircleOutlined, ShareAltOutlined, PlayCircleFilled, PauseCircleFilled, HomeOutlined, CalendarOutlined, LoginOutlined } from '@ant-design/icons'; import apiClient from '../utils/apiClient'; import { buildApiUrl, API_ENDPOINTS } from '../config/api'; import MarkdownRenderer from '../components/MarkdownRenderer'; import BrandLogo from '../components/BrandLogo'; import tools from '../utils/tools'; const { Header, Content } = Layout; const { Title, Text, Paragraph } = Typography; const MeetingPreview = () => { const { meeting_id } = useParams(); const { message } = App.useApp(); const [meeting, setMeeting] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [password, setPassword] = useState(''); const [passwordError, setPasswordError] = useState(''); const [passwordRequired, setPasswordRequired] = useState(false); const [isAuthorized, setIsAuthorized] = useState(false); useEffect(() => { setMeeting(null); setError(null); setPassword(''); setPasswordError(''); setPasswordRequired(false); setIsAuthorized(false); fetchPreview(); }, [meeting_id]); const fetchPreview = async (pwd = '') => { setLoading(true); try { const endpoint = API_ENDPOINTS.MEETINGS.PREVIEW_DATA(meeting_id); const url = buildApiUrl(`${endpoint}${pwd ? `?password=${encodeURIComponent(pwd)}` : ''}`); const res = await apiClient.get(url); setMeeting(res.data); setIsAuthorized(true); setPasswordRequired(false); setPasswordError(''); setError(null); } catch (err) { const responseCode = String(err?.response?.data?.code || ''); if (responseCode === '401') { setMeeting(null); setIsAuthorized(false); setPasswordRequired(true); setPasswordError(err?.response?.data?.message || ''); setError(null); } else { setMeeting(null); setIsAuthorized(false); setPasswordRequired(false); setPasswordError(''); setError(err?.response?.data?.message || '无法加载会议预览'); } } finally { setLoading(false); } }; const handleVerify = () => { if (!password) { message.warning('请输入访问密码'); return; } fetchPreview(password); }; if (loading && !meeting) return