From d69e3cedaeaf39ee2622521bc0d09c520df1f7ba Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:22:44 +0800 Subject: [PATCH 1/8] fix(copy): Mobile compatibility issues --- src/@core/utils/navigator.ts | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/@core/utils/navigator.ts b/src/@core/utils/navigator.ts index f60a0841..fc0c0891 100644 --- a/src/@core/utils/navigator.ts +++ b/src/@core/utils/navigator.ts @@ -1,3 +1,5 @@ +import copy from 'copy-to-clipboard' + // 请求和获取剪贴板内容 export async function getClipboardContent() { if (navigator.clipboard && window.isSecureContext) { @@ -13,20 +15,10 @@ export async function getClipboardContent() { } } -// 将内容复制到剪贴板,兼容非安全域场景 +// 将内容复制到剪贴板 export async function copyToClipboard(content: string) { - if (navigator.clipboard && window.isSecureContext) { - await navigator.clipboard.writeText(content) - } else { - const input = document.createElement('textarea') - input.value = content - document.body.appendChild(input) - // 阻止事件冒泡到其他元素,确保 focusin 事件只在 textarea 元素上处理,不会影响其他元素 - input.addEventListener('focusin', e => e.stopPropagation()) - input.select() - document.execCommand('copy') - document.body.removeChild(input) - } + const success = copy(content) + return success } // VAPID公钥转Uint8Array From 52d62dda81fd6bffaa05ecb00ed36a1856c18d4d Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:26:43 +0800 Subject: [PATCH 2/8] fix(copy): Mobile compatibility issues. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 增加 `type` 细分来源 - 适配新的复制方法 --- src/views/setting/AccountSettingRule.vue | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/views/setting/AccountSettingRule.vue b/src/views/setting/AccountSettingRule.vue index 63fd8330..f0229b25 100644 --- a/src/views/setting/AccountSettingRule.vue +++ b/src/views/setting/AccountSettingRule.vue @@ -147,7 +147,7 @@ function addFilterRuleGroup() { } // 分享规则 -function shareRules(rules: CustomRule[] | FilterRuleGroup[]) { +async function shareRules(rules: CustomRule[] | FilterRuleGroup[], type: string) { if (!rules || rules.length === 0) return // 将卡片规则接装为字符串 @@ -155,10 +155,13 @@ function shareRules(rules: CustomRule[] | FilterRuleGroup[]) { // 复制到剪贴板 try { - copyToClipboard(value) - $toast.success('优先级规则已复制到剪贴板') - } catch (error) { - $toast.error('优先级规则复制失败!') + let success + success = copyToClipboard(value) + if (await success) $toast.success(`${type === 'custom' ? '自定义规则' : '优先级规则组'}已复制到剪贴板!`) + else $toast.error(`${type === 'custom' ? '自定义规则' : '优先级规则组'}复制失败:可能是浏览器不支持或被用户阻止!`) + } catch (e) { + $toast.error(`${type === 'custom' ? '自定义规则' : '优先级规则组'}复制失败!`) + console.error(e) } } @@ -382,7 +385,7 @@ onMounted(() => { - + @@ -433,7 +436,7 @@ onMounted(() => { - + From 1bdd08c59a6b7c8215bf7ba31fbda7d52ba46702 Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:28:41 +0800 Subject: [PATCH 3/8] fix(copy): Mobile compatibility issues. --- src/views/setting/AccountSettingSystem.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue index e3382e18..7cebf743 100644 --- a/src/views/setting/AccountSettingSystem.vue +++ b/src/views/setting/AccountSettingSystem.vue @@ -200,10 +200,12 @@ async function saveAdvancedSettings() { } // 快捷复制到剪贴板 -function copyValue(value: string) { +async function copyValue(value: string) { try { - copyToClipboard(value) - $toast.success('已复制到剪贴板') + let success + success = copyToClipboard(value) + if (await success) $toast.success('已复制到剪贴板') + else $toast.error(`复制失败:可能是浏览器不支持或被用户阻止!`) } catch (error) { $toast.error('复制失败!') console.log(error) From ce9399b894e9d910a0b0039511a339b42e711001 Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:31:19 +0800 Subject: [PATCH 4/8] Update AccountSettingRule.vue --- src/views/setting/AccountSettingRule.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/setting/AccountSettingRule.vue b/src/views/setting/AccountSettingRule.vue index f0229b25..0898bf02 100644 --- a/src/views/setting/AccountSettingRule.vue +++ b/src/views/setting/AccountSettingRule.vue @@ -158,7 +158,7 @@ async function shareRules(rules: CustomRule[] | FilterRuleGroup[], type: string) let success success = copyToClipboard(value) if (await success) $toast.success(`${type === 'custom' ? '自定义规则' : '优先级规则组'}已复制到剪贴板!`) - else $toast.error(`${type === 'custom' ? '自定义规则' : '优先级规则组'}复制失败:可能是浏览器不支持或被用户阻止!`) + else $toast.error(`${type === 'custom' ? '自定义规则' : '优先级规则组'}复制失败:可能是浏览器不支持或被用户阻止!`) } catch (e) { $toast.error(`${type === 'custom' ? '自定义规则' : '优先级规则组'}复制失败!`) console.error(e) From 420827c389838a8e47d936f302d1450299e72550 Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:31:45 +0800 Subject: [PATCH 5/8] Update AccountSettingSystem.vue --- src/views/setting/AccountSettingSystem.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/setting/AccountSettingSystem.vue b/src/views/setting/AccountSettingSystem.vue index 7cebf743..a425c2b4 100644 --- a/src/views/setting/AccountSettingSystem.vue +++ b/src/views/setting/AccountSettingSystem.vue @@ -204,8 +204,8 @@ async function copyValue(value: string) { try { let success success = copyToClipboard(value) - if (await success) $toast.success('已复制到剪贴板') - else $toast.error(`复制失败:可能是浏览器不支持或被用户阻止!`) + if (await success) $toast.success('已复制到剪贴板!') + else $toast.error(`复制失败:可能是浏览器不支持或被用户阻止!`) } catch (error) { $toast.error('复制失败!') console.log(error) From 621da7e4efb5d26cfe8786b3b8dba1977814f3c2 Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:33:12 +0800 Subject: [PATCH 6/8] fix(copy): Mobile compatibility issues. --- src/components/cards/FilterRuleGroupCard.vue | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/cards/FilterRuleGroupCard.vue b/src/components/cards/FilterRuleGroupCard.vue index 949a6a99..9bec8a4d 100644 --- a/src/components/cards/FilterRuleGroupCard.vue +++ b/src/components/cards/FilterRuleGroupCard.vue @@ -101,7 +101,7 @@ function filterCardClose(pri: string) { } // 分享规则 -function shareRules() { +async function shareRules() { if (filterRuleCards.value.length === 0) return const value = filterRuleCards.value @@ -110,8 +110,10 @@ function shareRules() { .join('>') try { - copyToClipboard(value) - $toast.success('优先级规则已复制到剪贴板') + let success + success = copyToClipboard(value) + if (await success) $toast.success('优先级规则已复制到剪贴板!') + else $toast.error('优先级规则复制失败:可能是浏览器不支持或被用户阻止!') } catch (error) { $toast.error('优先级规则复制失败!') console.error(error) From ddd2982971860ec651e7f49bbc6d700c11bb4ad7 Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:34:53 +0800 Subject: [PATCH 7/8] fix(copy): add `copy-to-clipboard` --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 607b3cdf..f1736c9e 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "apexcharts-clevision": "^3.28.5", "axios": "1.6.8", "colorthief": "^2.4.0", + "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.10", "express": "^4.18.2", "express-http-proxy": "^2.0.0", From e09e57879b85291db9fa95aa40e350ed1de8630a Mon Sep 17 00:00:00 2001 From: Aqr-K <95741669+Aqr-K@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:36:10 +0800 Subject: [PATCH 8/8] Update yarn.lock --- yarn.lock | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/yarn.lock b/yarn.lock index 6241d273..39c58231 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3101,6 +3101,13 @@ cookie@0.6.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +copy-to-clipboard@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz#55ac43a1db8ae639a4bd99511c148cdd1b83a1b0" + integrity sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA== + dependencies: + toggle-selection "^1.0.6" + core-js-compat@^3.31.0, core-js-compat@^3.36.1: version "3.37.1" resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee"