diff --git a/public/icons/receive-time.png b/public/icons/receive-time.png new file mode 100644 index 0000000..8dd2f82 Binary files /dev/null and b/public/icons/receive-time.png differ diff --git a/public/icons/receive.png b/public/icons/receive.png new file mode 100644 index 0000000..7c3d231 Binary files /dev/null and b/public/icons/receive.png differ diff --git a/src/app/MainArea/Antechamber/index.tsx b/src/app/MainArea/Antechamber/index.tsx index 72c5648..36c99db 100644 --- a/src/app/MainArea/Antechamber/index.tsx +++ b/src/app/MainArea/Antechamber/index.tsx @@ -5,45 +5,45 @@ import AntechamberScore from "@/components/AntechamberScore"; import { useContext, useEffect, useState } from "react"; import { RealtimeClientContext } from "@/components/Provider/RealtimeClientProvider"; import { useSearchParams } from "react-router-dom"; -import { fetchUserToken } from "@/apis/user"; +import { fetchUserToken } from "@/apis/user"; import { useToast } from "@/hooks/use-toast"; import { useAbortController } from "@/hooks/useAbortController"; import AntechamberFile from "@/components/AntechamberFile"; import AntechamberReport from "@/components/AntechamberReport"; import AntechamberWishList from "@/components/AntechamberWishList"; import { ReportContext } from "@/components/Provider/ReportResolveProvider"; +import ReceiveTime from "/icons/receive-time.png"; +import { ReceiveDialog } from "@/components/ReceiveDialog"; export default function Antechamber() { - - const { handleConnect} = useContext(RealtimeClientContext); + const { handleConnect } = useContext(RealtimeClientContext); const { hasHandledReport } = useContext(ReportContext); - const [searchParams] = useSearchParams(); - const [disable,setDisable] = useState(true); - const [isLoading,setIsLoading] = useState(false); + const [disable, setDisable] = useState(true); + const [isLoading, setIsLoading] = useState(false); + + const token = searchParams.get("token") || ""; - const token = searchParams.get("token") || ''; - const { toast } = useToast(); const { getSignal } = useAbortController(); const getUserToken = async () => { try { - const { result, message } = await fetchUserToken({ - options: { + const { result, message } = await fetchUserToken({ + options: { signal: getSignal(), headers: { - "Authorization": `Bearer ${encodeURIComponent(token)}` - } - } + Authorization: `Bearer ${encodeURIComponent(token)}`, + }, + }, }); if (message) { console.log(message); } else { - const _result = result as {isExpired:boolean;msg:string}; + const _result = result as { isExpired: boolean; msg: string }; setDisable(!_result.isExpired); - if(!_result.isExpired &&_result.msg){ + if (!_result.isExpired && _result.msg) { toast({ title: _result.msg, description: "请重新登录", @@ -51,42 +51,60 @@ export default function Antechamber() { } } } catch (error: any) { - if (error.name !== 'AbortError') { - console.error('获取用户令牌失败:', error); + if (error.name !== "AbortError") { + console.error("获取用户令牌失败:", error); } } }; - useEffect(() => { getUserToken(); }, [token]); - - const toRoom = (params:{initMessage?:string,fileUrl?:string}) => { - if(!hasHandledReport && (disable || isLoading)){ + const toRoom = (params: { initMessage?: string; fileUrl?: string }) => { + if (!hasHandledReport && (disable || isLoading)) { return; } - setIsLoading(true) + setIsLoading(true); handleConnect(params).then(() => { setIsLoading(false); }); }; - + + const [isReceiveDialogOpen, setIsReceiveDialogOpen] = useState(true); + return (