fix: 重写 AgentWizard 复制逻辑 + 手动复制文本框 fallback
This commit is contained in:
1 parent
3dec5eec2a
commit
cdb978fcfc
1 file changed
+13
-37
@@ -17,12 +17,11 @@ interface AgentWizardProps {
|
|||||||
onOpenChange: (open: boolean) => void;
|
onOpenChange: (open: boolean) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 自动检测服务器地址:使用当前浏览器访问的地址(协议+主机+端口) */
|
/** 自动检测服务器地址:使用当前浏览器访问的主机名,端口固定 8080 */
|
||||||
function detectServerAddress(): string {
|
function detectServerAddress(): string {
|
||||||
if (typeof window !== 'undefined' && window.location) {
|
if (typeof window !== 'undefined' && window.location) {
|
||||||
// 直接用当前浏览器的 origin(如 http://10.10.10.150),
|
const host = window.location.hostname;
|
||||||
// Nginx 会将 /agent/ 请求代理到后端
|
return host ? `http://${host}:8080` : 'http://127.0.0.1:8080';
|
||||||
return window.location.origin;
|
|
||||||
}
|
}
|
||||||
return 'http://127.0.0.1:8080';
|
return 'http://127.0.0.1:8080';
|
||||||
}
|
}
|
||||||
@@ -35,6 +34,7 @@ export function AgentWizard({ open, onOpenChange }: AgentWizardProps) {
|
|||||||
|
|
||||||
const installCommand = `curl -fsSL ${serverUrl.replace(/^http:/, 'http:')}/agent/install.sh | bash -s -- --server ${serverUrl} --token ${token}`;
|
const installCommand = `curl -fsSL ${serverUrl.replace(/^http:/, 'http:')}/agent/install.sh | bash -s -- --server ${serverUrl} --token ${token}`;
|
||||||
|
|
||||||
|
// 剪贴板 fallback:execCommand('copy') 兼容 HTTP 环境 // Logan.Li
|
||||||
const fallbackCopy = (text: string): boolean => {
|
const fallbackCopy = (text: string): boolean => {
|
||||||
const textArea = document.createElement('textarea');
|
const textArea = document.createElement('textarea');
|
||||||
textArea.value = text;
|
textArea.value = text;
|
||||||
@@ -46,29 +46,6 @@ export function AgentWizard({ open, onOpenChange }: AgentWizardProps) {
|
|||||||
textArea.select();
|
textArea.select();
|
||||||
let success = false;
|
let success = false;
|
||||||
try {
|
try {
|
||||||
<<<<<<< HEAD
|
|
||||||
// 优先使用现代 Clipboard API(需要 HTTPS 或 localhost)
|
|
||||||
if (navigator.clipboard && window.isSecureContext) {
|
|
||||||
await navigator.clipboard.writeText(installCommand);
|
|
||||||
} else {
|
|
||||||
// 降级方案:用隐藏 textarea + execCommand('copy'),兼容 HTTP 环境
|
|
||||||
const textarea = document.createElement('textarea');
|
|
||||||
textarea.value = installCommand;
|
|
||||||
textarea.style.position = 'fixed';
|
|
||||||
textarea.style.opacity = '0';
|
|
||||||
textarea.style.pointerEvents = 'none';
|
|
||||||
document.body.appendChild(textarea);
|
|
||||||
textarea.select();
|
|
||||||
const ok = document.execCommand('copy');
|
|
||||||
document.body.removeChild(textarea);
|
|
||||||
if (!ok) throw new Error('execCommand failed');
|
|
||||||
}
|
|
||||||
setCopied(true);
|
|
||||||
toast.success('安装命令已复制');
|
|
||||||
setTimeout(() => setCopied(false), 2000);
|
|
||||||
} catch {
|
|
||||||
toast.error('复制失败,请手动选中复制');
|
|
||||||
=======
|
|
||||||
success = document.execCommand('copy');
|
success = document.execCommand('copy');
|
||||||
} catch {
|
} catch {
|
||||||
// execCommand also failed
|
// execCommand also failed
|
||||||
@@ -78,20 +55,21 @@ export function AgentWizard({ open, onOpenChange }: AgentWizardProps) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleCopy = async () => {
|
const handleCopy = async () => {
|
||||||
const cmd = installCommand;
|
|
||||||
let success = false;
|
let success = false;
|
||||||
|
|
||||||
// 方式1: Clipboard API(HTTPS / localhost)
|
// 方式1: Clipboard API(HTTPS / localhost 可用)
|
||||||
try {
|
try {
|
||||||
await navigator.clipboard.writeText(cmd);
|
if (navigator.clipboard && window.isSecureContext) {
|
||||||
success = true;
|
await navigator.clipboard.writeText(installCommand);
|
||||||
|
success = true;
|
||||||
|
}
|
||||||
} catch {
|
} catch {
|
||||||
// Clipboard API 不可用
|
// Clipboard API 不可用,尝试 fallback
|
||||||
}
|
}
|
||||||
|
|
||||||
// 方式2: execCommand fallback(HTTP 也可用)
|
// 方式2: execCommand fallback(HTTP 环境也可用)
|
||||||
if (!success) {
|
if (!success) {
|
||||||
success = fallbackCopy(cmd);
|
success = fallbackCopy(installCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
@@ -99,10 +77,8 @@ export function AgentWizard({ open, onOpenChange }: AgentWizardProps) {
|
|||||||
toast.success('安装命令已复制到剪贴板,粘贴到目标主机执行');
|
toast.success('安装命令已复制到剪贴板,粘贴到目标主机执行');
|
||||||
setTimeout(() => setCopied(false), 3000);
|
setTimeout(() => setCopied(false), 3000);
|
||||||
} else {
|
} else {
|
||||||
toast.error('自动复制失败,请在下方代码框中手动全选复制 (Ctrl+A → Ctrl+C)');
|
toast.error('自动复制失败,请在下方手动全选复制 (Ctrl+A → Ctrl+C)');
|
||||||
// 切换到手选模式,展示可编辑文本框
|
|
||||||
setShowManualInput(true);
|
setShowManualInput(true);
|
||||||
>>>>>>> ca18ead (feat: run.sh四模式(dev/docker/build/binary) + CLI flags + Redka内嵌Redis + Agent复制修复 + 服务器编辑IP字段 + 安装Agent按钮)
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user