"use client";
|
|
import { useEffect, useRef } from 'react';
|
|
interface ChatDialogProps {
|
isOpen: boolean;
|
onClose: () => void;
|
chatbotId: string;
|
}
|
|
const ChatDialog = ({ isOpen, onClose, chatbotId }: ChatDialogProps) => {
|
const dialogRef = useRef<HTMLDivElement>(null);
|
const iframeContainerRef = useRef<HTMLDivElement>(null);
|
|
useEffect(() => {
|
// 每次 chatbotId 改变时更新 iframe
|
if (iframeContainerRef.current) {
|
// 清除现有的 iframe
|
iframeContainerRef.current.innerHTML = '';
|
|
// 创建新的 iframe
|
const iframe = document.createElement('iframe');
|
iframe.src = `http://121.43.139.99/chatbot/${chatbotId}`;
|
iframe.style.width = '100%';
|
iframe.style.height = '100%';
|
iframe.style.minHeight = '500px';
|
iframe.style.border = 'none';
|
iframe.allow = "microphone";
|
iframeContainerRef.current.appendChild(iframe);
|
}
|
}, [chatbotId]);
|
|
useEffect(() => {
|
const handleClickOutside = (event: MouseEvent) => {
|
if (dialogRef.current && !dialogRef.current.contains(event.target as Node)) {
|
onClose();
|
}
|
};
|
|
if (isOpen) {
|
document.addEventListener('mousedown', handleClickOutside);
|
}
|
|
return () => {
|
document.removeEventListener('mousedown', handleClickOutside);
|
};
|
}, [isOpen, onClose]);
|
|
// 使用 CSS 来控制显示/隐藏,而不是移除 DOM
|
return (
|
<div className={`fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 transition-opacity duration-300 ${isOpen ? 'opacity-100 visible' : 'opacity-0 invisible'}`}>
|
<div ref={dialogRef} className="bg-white rounded-lg w-[90%] h-[90%] max-w-6xl relative">
|
<button
|
onClick={onClose}
|
className="absolute top-4 right-4 text-gray-500 hover:text-gray-700"
|
>
|
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M6 18L18 6M6 6l12 12" />
|
</svg>
|
</button>
|
<div ref={iframeContainerRef} className="w-full h-full p-4" />
|
</div>
|
</div>
|
);
|
};
|
|
export default ChatDialog;
|