import { App, Button, Card, Result, Space, Spin, Typography } from "antd"; import { CheckCircleOutlined, QrcodeOutlined } from "@ant-design/icons"; import { useEffect, useState } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { createPublicDeviceMeetingBySession } from "@/api/business/meeting"; import "./PublicDeviceMeetingCreate.css"; const { Title, Text } = Typography; export default function PublicDeviceMeetingCreate() { const { message } = App.useApp(); const navigate = useNavigate(); const { sessionId } = useParams<{ sessionId: string }>(); const [ready, setReady] = useState(false); const [submitting, setSubmitting] = useState(false); const [confirmed, setConfirmed] = useState(false); useEffect(() => { const token = localStorage.getItem("accessToken"); if (!token) { const redirect = encodeURIComponent(window.location.pathname + window.location.search); navigate(`/login?redirect=${redirect}`, { replace: true }); return; } setReady(true); }, [navigate]); const handleConfirm = async () => { if (!sessionId) { message.error("扫码会话不存在"); return; } setSubmitting(true); try { await createPublicDeviceMeetingBySession(sessionId); setConfirmed(true); message.success("登录确认已发送到设备"); } catch { message.error("登录确认失败"); } finally { setSubmitting(false); } }; return (
{!ready ? (
) : !sessionId ? ( navigate("/meetings")}> 返回会议列表 } /> ) : confirmed ? ( navigate("/meetings")}> 返回会议列表 } /> ) : (
公有设备扫码登录确认 当前页面只做登录确认,不在 H5 端创建会议。确认后会通过消息通知安卓设备。
设备端收到确认消息后,才允许后续离线发会创建会议。 如果这个二维码已经被确认过,再次访问会直接提示二维码失效。
)}
); }