修复ws连接问题

This commit is contained in:
qaq
2025-07-03 12:11:51 +08:00
parent 2db8e834a8
commit 1e9720a027
+78 -3
View File
@@ -66,6 +66,11 @@ export default function NodePage() {
});
const [errors, setErrors] = useState<Record<string, string>>({});
// 安装命令相关状态
const [installCommandModal, setInstallCommandModal] = useState(false);
const [installCommand, setInstallCommand] = useState('');
const [currentNodeName, setCurrentNodeName] = useState('');
const websocketRef = useRef<WebSocket | null>(null);
const reconnectTimerRef = useRef<NodeJS.Timeout | null>(null);
const reconnectAttemptsRef = useRef(0);
@@ -409,13 +414,20 @@ export default function NodePage() {
try {
const res = await getNodeInstallCommand(node.id);
if (res.code === 0 && res.data) {
await navigator.clipboard.writeText(res.data);
toast.success('安装命令已复制到剪贴板');
try {
await navigator.clipboard.writeText(res.data);
toast.success('安装命令已复制到剪贴板');
} catch (copyError) {
// 复制失败,显示安装命令模态框
setInstallCommand(res.data);
setCurrentNodeName(node.name);
setInstallCommandModal(true);
}
} else {
toast.error(res.msg || '获取安装命令失败');
}
} catch (error) {
toast.error('复制失败,请手动复制');
toast.error('获取安装命令失败');
} finally {
setNodeList(prev => prev.map(n =>
n.id === node.id ? { ...n, copyLoading: false } : n
@@ -423,6 +435,17 @@ export default function NodePage() {
}
};
// 手动复制安装命令
const handleManualCopy = async () => {
try {
await navigator.clipboard.writeText(installCommand);
toast.success('安装命令已复制到剪贴板');
setInstallCommandModal(false);
} catch (error) {
toast.error('复制失败,请手动选择文本复制');
}
};
// 提交表单
const handleSubmit = async () => {
if (!validateForm()) return;
@@ -785,6 +808,58 @@ export default function NodePage() {
</ModalFooter>
</ModalContent>
</Modal>
{/* 安装命令模态框 */}
<Modal
isOpen={installCommandModal}
onClose={() => setInstallCommandModal(false)}
size="2xl"
scrollBehavior="inside"
>
<ModalContent>
<ModalHeader>安装命令 - {currentNodeName}</ModalHeader>
<ModalBody>
<div className="space-y-4">
<p className="text-sm text-default-600">
请复制以下安装命令到服务器上执行:
</p>
<div className="relative">
<Textarea
value={installCommand}
readOnly
variant="bordered"
minRows={6}
maxRows={10}
className="font-mono text-sm"
classNames={{
input: "font-mono text-sm"
}}
/>
<Button
size="sm"
color="primary"
variant="flat"
className="absolute top-2 right-2"
onPress={handleManualCopy}
>
复制
</Button>
</div>
<div className="text-xs text-default-500">
💡 提示:如果复制按钮失效,请手动选择上方文本进行复制
</div>
</div>
</ModalBody>
<ModalFooter>
<Button
variant="flat"
onPress={() => setInstallCommandModal(false)}
>
关闭
</Button>
</ModalFooter>
</ModalContent>
</Modal>
</div>
</AdminLayout>
);