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"