diff --git a/frontend/src/pages/api-docs/CodeBlock.tsx b/frontend/src/pages/api-docs/CodeBlock.tsx index 35c56f3a..805d1378 100644 --- a/frontend/src/pages/api-docs/CodeBlock.tsx +++ b/frontend/src/pages/api-docs/CodeBlock.tsx @@ -1,6 +1,7 @@ import { useMemo, useState } from 'react'; import { message } from 'antd'; import { CheckOutlined, CopyOutlined } from '@ant-design/icons'; +import { ClipboardManager } from '@/utils'; import './CodeBlock.css'; interface CodeBlockProps { @@ -37,12 +38,12 @@ export default function CodeBlock({ code = '', lang = 'json' }: CodeBlockProps) ); async function copyCode() { - try { - await navigator.clipboard.writeText(code); + const ok = await ClipboardManager.copyText(code); + if (ok) { setCopied(true); messageApi.success('Copied'); window.setTimeout(() => setCopied(false), 2000); - } catch { + } else { messageApi.error('Copy failed'); } } diff --git a/frontend/src/pages/settings/SecurityTab.tsx b/frontend/src/pages/settings/SecurityTab.tsx index 00d88928..d3e73d68 100644 --- a/frontend/src/pages/settings/SecurityTab.tsx +++ b/frontend/src/pages/settings/SecurityTab.tsx @@ -12,7 +12,7 @@ import { Switch, message, } from 'antd'; -import { HttpUtil, RandomUtil } from '@/utils'; +import { ClipboardManager, HttpUtil, RandomUtil } from '@/utils'; import type { AllSetting } from '@/models/setting'; import SettingListItem from '@/components/SettingListItem'; import TwoFactorModal from './TwoFactorModal'; @@ -143,18 +143,9 @@ export default function SecurityTab({ allSetting, updateSetting }: SecurityTabPr async function copyToken(token: string) { if (!token) return; - try { - await navigator.clipboard.writeText(token); - messageApi.success(t('copySuccess')); - } catch { - const ta = document.createElement('textarea'); - ta.value = token; - document.body.appendChild(ta); - ta.select(); - document.execCommand('copy'); - document.body.removeChild(ta); - messageApi.success(t('copySuccess')); - } + const ok = await ClipboardManager.copyText(token); + if (ok) messageApi.success(t('copySuccess')); + else messageApi.error(t('copyFail') ?? 'Copy failed'); } function openCreateModal() {